From 617acdbb132f77a9e98633b6765b54ce1e947316 Mon Sep 17 00:00:00 2001 From: morethanwords Date: Sat, 22 Aug 2020 19:53:59 +0300 Subject: [PATCH] SW: Downloads; Audio & video streaming; Download controller --- package-lock.json | 9 - package.json | 1 - src/components/animationIntersector.ts | 6 +- src/components/appAudio.ts | 18 +- src/components/audio.ts | 103 +++-- src/components/preloader_new.ts | 123 ++++++ src/components/wrappers.ts | 41 +- src/lib/MP4Source.ts | 326 --------------- src/lib/appManagers/appDialogsManager.ts | 4 +- src/lib/appManagers/appDocsManager.ts | 114 ++++-- src/lib/appManagers/appDownloadManager.ts | 115 ++++++ src/lib/appManagers/appImManager.ts | 9 +- src/lib/appManagers/appMediaViewer.ts | 63 +-- src/lib/appManagers/appPhotosManager.ts | 86 +--- src/lib/filemanager.ts | 128 +----- src/lib/libwebp.js | 34 -- src/lib/lottieLoader copy.ts | 461 ---------------------- src/lib/mediaPlayer.ts | 33 +- src/lib/mtproto/apiFileManager.ts | 183 +++++---- src/lib/mtproto/mtproto.service.ts | 202 +++++++++- src/lib/mtproto/mtprotoworker.ts | 40 +- src/lib/polyfill.ts | 12 +- src/lib/utils.ts | 24 +- src/lib/webp_bad.js | 24 -- src/scss/partials/_ckin.scss | 13 +- src/types.d.ts | 11 + webpack.prod.js | 3 +- 27 files changed, 845 insertions(+), 1341 deletions(-) create mode 100644 src/components/preloader_new.ts delete mode 100644 src/lib/MP4Source.ts create mode 100644 src/lib/appManagers/appDownloadManager.ts delete mode 100644 src/lib/libwebp.js delete mode 100644 src/lib/lottieLoader copy.ts delete mode 100644 src/lib/webp_bad.js diff --git a/package-lock.json b/package-lock.json index e880da60..3f548364 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9688,15 +9688,6 @@ } } }, - "mp4box": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/mp4box/-/mp4box-0.3.20.tgz", - "integrity": "sha512-9I1wOBql0c9BsIPDGHY97dcH5kT7hG0Tx6SAaJvXf+A6Z0zBfGy7L1vEfjMKgjXSjtdXWL7gO+8a5euikaFTEA==", - "dev": true, - "requires": { - "npm": "^6.9.0" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", diff --git a/package.json b/package.json index 50dda03d..e26a40f4 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,6 @@ "lottie-web": "^5.6.10", "media-query-plugin": "^1.3.1", "mini-css-extract-plugin": "^0.9.0", - "mp4box": "^0.3.20", "node-sass": "^4.14.1", "npm": "^6.14.5", "on-build-webpack": "^0.1.0", diff --git a/src/components/animationIntersector.ts b/src/components/animationIntersector.ts index 9f653a7c..8ef1192e 100644 --- a/src/components/animationIntersector.ts +++ b/src/components/animationIntersector.ts @@ -1,4 +1,4 @@ -import { isInDOM } from "../lib/utils"; +import { isInDOM, $rootScope } from "../lib/utils"; import { RLottiePlayer } from "../lib/lottieLoader"; export interface AnimationItem { @@ -18,6 +18,8 @@ export class AnimationIntersector { constructor() { this.observer = new IntersectionObserver((entries) => { + if($rootScope.idle.isIDLE) return; + for(const entry of entries) { const target = entry.target; @@ -72,6 +74,8 @@ export class AnimationIntersector { } public checkAnimations(blurred?: boolean, group?: string, destroy = false) { + if($rootScope.idle.isIDLE) return; + const groups = group /* && false */ ? [group] : Object.keys(this.byGroups); if(group && !this.byGroups[group]) { diff --git a/src/components/appAudio.ts b/src/components/appAudio.ts index 221ed240..4acef3b7 100644 --- a/src/components/appAudio.ts +++ b/src/components/appAudio.ts @@ -48,11 +48,8 @@ class AppAudio { audio.addEventListener('pause', this.onPause); audio.addEventListener('ended', this.onEnded); - - appDocsManager.downloadDoc(doc.id).then(() => { - this.container.append(audio); - source.src = doc.url; - }, () => { + + const onError = (e: Event) => { if(this.nextMid == mid) { this.loadSiblingsAudio(doc.type as 'voice' | 'audio', mid).then(() => { if(this.nextMid && this.audios[this.nextMid]) { @@ -60,7 +57,16 @@ class AppAudio { } }) } - }); + }; + + audio.addEventListener('error', onError); + + const downloadPromise: Promise = !doc.supportsStreaming ? appDocsManager.downloadDocNew(doc.id).promise : Promise.resolve(); + + downloadPromise.then(() => { + this.container.append(audio); + source.src = doc.url; + }, onError); return this.audios[mid] = audio; } diff --git a/src/components/audio.ts b/src/components/audio.ts index 74b2b2b3..d7e087ca 100644 --- a/src/components/audio.ts +++ b/src/components/audio.ts @@ -1,12 +1,12 @@ import appDocsManager from "../lib/appManagers/appDocsManager"; import { RichTextProcessor } from "../lib/richtextprocessor"; import { formatDate } from "./wrappers"; -import ProgressivePreloader from "./preloader"; -import { CancellablePromise } from "../lib/polyfill"; +import ProgressivePreloader from "./preloader_new"; import { MediaProgressLine } from "../lib/mediaPlayer"; import appAudio from "./appAudio"; import { MTDocument } from "../types"; import { mediaSizes } from "../lib/config"; +import { Download } from "../lib/appManagers/appDownloadManager"; // https://github.com/LonamiWebs/Telethon/blob/4393ec0b83d511b6a20d8a20334138730f084375/telethon/utils.py#L1285 export function decodeWaveform(waveform: Uint8Array | number[]) { @@ -233,7 +233,7 @@ function wrapAudio(doc: MTDocument, audioEl: AudioElement) { const subtitleDiv = audioEl.querySelector('.audio-subtitle') as HTMLDivElement; let launched = false; - let progressLine = new MediaProgressLine(audioEl.audio); + let progressLine = new MediaProgressLine(audioEl.audio, doc.supportsStreaming); audioEl.addAudioListener('ended', () => { audioEl.classList.remove('audio-show-progress'); @@ -295,19 +295,23 @@ export default class AudioElement extends HTMLElement { const durationStr = String(doc.duration | 0).toHHMMSS(true); - this.innerHTML = ` -
-
${uploading ? '' : '
'}
`; + this.innerHTML = `
`; - const onTypeLoad = doc.type == 'voice' ? wrapVoiceMessage(doc, this) : wrapAudio(doc, this); + const downloadDiv = document.createElement('div'); + downloadDiv.classList.add('audio-download'); + if(!uploading && doc.type != 'audio') { + downloadDiv.innerHTML = '
'; + } - const downloadDiv = this.querySelector('.audio-download') as HTMLDivElement; + if(doc.type != 'audio' && !uploading) { + this.append(downloadDiv); + } + + const onTypeLoad = doc.type == 'voice' ? wrapVoiceMessage(doc, this) : wrapAudio(doc, this); + const audioTimeDiv = this.querySelector('.audio-time') as HTMLDivElement; audioTimeDiv.innerHTML = durationStr; - let preloader: ProgressivePreloader = this.preloader; - let promise: CancellablePromise; - const onLoad = () => { const audio = this.audio = appAudio.addAudio(doc, mid); @@ -351,35 +355,64 @@ export default class AudioElement extends HTMLElement { }; if(!uploading) { - const onClick = () => { - if(!promise) { + let preloader: ProgressivePreloader = this.preloader; + + if(doc.type == 'voice') { + let download: Download; + + const onClick = () => { + if(!download) { + if(!preloader) { + preloader = new ProgressivePreloader(null, true); + } + + download = appDocsManager.downloadDocNew(doc.id); + preloader.attach(downloadDiv, true, appDocsManager.getInputFileName(doc)); + + download.promise.then(() => { + downloadDiv.remove(); + this.removeEventListener('click', onClick); + onLoad(); + }).catch(err => { + if(err.name === 'AbortError') { + download = null; + } + }).finally(() => { + downloadDiv.classList.remove('downloading'); + }); + + downloadDiv.classList.add('downloading'); + } else { + download.controller.abort(); + } + }; + + this.addEventListener('click', onClick); + this.click(); + } else { + const r = () => { + onLoad(); + if(!preloader) { - preloader = new ProgressivePreloader(null, true); + preloader = new ProgressivePreloader(null, false); } - - promise = appDocsManager.downloadDoc(doc.id); - preloader.attach(downloadDiv, true, promise); - - promise.then(() => { - preloader = null; - downloadDiv.classList.remove('downloading'); + + preloader.attach(downloadDiv); + this.append(downloadDiv); + + new Promise((resolve) => { + if(this.audio.readyState >= 2) resolve(); + else this.addAudioListener('canplay', resolve); + }).then(() => { downloadDiv.remove(); - this.removeEventListener('click', onClick); - onLoad(); + this.audio.play(); }); - - downloadDiv.classList.add('downloading'); - } else { - downloadDiv.classList.remove('downloading'); - promise.cancel(); - promise = null; - } - }; - - this.addEventListener('click', onClick); - this.click(); + }; + + this.addEventListener('click', r, {once: true}); + } } else { - this.preloader.attach(this.querySelector('.audio-download'), false); + this.preloader.attach(downloadDiv, false); //onLoad(); } } diff --git a/src/components/preloader_new.ts b/src/components/preloader_new.ts new file mode 100644 index 00000000..81c4d1f6 --- /dev/null +++ b/src/components/preloader_new.ts @@ -0,0 +1,123 @@ +import { isInDOM, $rootScope, cancelEvent } from "../lib/utils"; +import appDownloadManager, { Progress } from "../lib/appManagers/appDownloadManager"; + +export default class ProgressivePreloader { + public preloader: HTMLDivElement; + private circle: SVGCircleElement; + + //private tempID = 0; + private detached = true; + + private fileName: string; + public controller: AbortController; + + constructor(elem?: Element, private cancelable = true) { + this.preloader = document.createElement('div'); + this.preloader.classList.add('preloader-container'); + + this.preloader.innerHTML = ` +
+ + + +
`; + + if(cancelable) { + this.preloader.innerHTML += ` + + + + `; + } else { + this.preloader.classList.add('preloader-swing'); + } + + this.circle = this.preloader.firstElementChild.firstElementChild.firstElementChild as SVGCircleElement; + + if(elem) { + this.attach(elem); + } + + if(this.cancelable) { + this.preloader.addEventListener('click', (e) => { + cancelEvent(e); + this.detach(); + + if(!this.fileName) { + return; + } + + const download = appDownloadManager.getDownload(this.fileName); + if(download && download.controller && !download.controller.signal.aborted) { + download.controller.abort(); + } + }); + } + } + + downloadProgressHandler = (details: Progress) => { + if(details.done >= details.total) { + this.detach(); + } + + //console.log('preloader download', promise, details); + let percents = details.done / details.total * 100; + this.setProgress(percents); + }; + + public attach(elem: Element, reset = true, fileName?: string, append = true) { + this.fileName = fileName; + if(this.fileName) { + const download = appDownloadManager.getDownload(fileName); + download.promise.catch(() => { + this.detach(); + }); + + appDownloadManager.addProgressCallback(this.fileName, this.downloadProgressHandler); + } + + this.detached = false; + window.requestAnimationFrame(() => { + if(this.detached) return; + this.detached = false; + + elem[append ? 'append' : 'prepend'](this.preloader); + + if(this.cancelable && reset) { + this.setProgress(0); + } + }); + } + + public detach() { + this.detached = true; + + if(this.preloader.parentElement) { + window.requestAnimationFrame(() => { + if(!this.detached) return; + this.detached = true; + + if(this.preloader.parentElement) { + this.preloader.parentElement.removeChild(this.preloader); + } + }); + } + } + + public setProgress(percents: number) { + if(!isInDOM(this.circle)) { + return; + } + + if(percents == 0) { + this.circle.style.strokeDasharray = ''; + return; + } + + try { + let totalLength = this.circle.getTotalLength(); + //console.log('setProgress', (percents / 100 * totalLength)); + this.circle.style.strokeDasharray = '' + Math.max(5, percents / 100 * totalLength) + ', 200'; + } catch(err) {} + } +} diff --git a/src/components/wrappers.ts b/src/components/wrappers.ts index 4b007465..b1df6780 100644 --- a/src/components/wrappers.ts +++ b/src/components/wrappers.ts @@ -5,6 +5,7 @@ import LottieLoader from '../lib/lottieLoader'; import appDocsManager from "../lib/appManagers/appDocsManager"; import { formatBytes, getEmojiToneIndex } from "../lib/utils"; import ProgressivePreloader from './preloader'; +import ProgressivePreloaderNew from './preloader_new'; import LazyLoadQueue from './lazyLoadQueue'; import VideoPlayer from '../lib/mediaPlayer'; import { RichTextProcessor } from '../lib/richtextprocessor'; @@ -18,6 +19,7 @@ import { mediaSizes } from '../lib/config'; import { MTDocument, MTPhotoSize } from '../types'; import animationIntersector from './animationIntersector'; import AudioElement from './audio'; +import { Download } from '../lib/appManagers/appDownloadManager'; export function wrapVideo({doc, container, message, boxWidth, boxHeight, withTail, isOut, middleware, lazyLoadQueue}: { doc: MTDocument, @@ -93,14 +95,14 @@ export function wrapVideo({doc, container, message, boxWidth, boxHeight, withTai if(message.media.preloader) { // means upload (message.media.preloader as ProgressivePreloader).attach(container, undefined, undefined, false); } else if(!doc.downloaded) { - const promise = appDocsManager.downloadDoc(doc.id); + /* const promise = appDocsManager.downloadDoc(doc.id); //if(!doc.supportsStreaming) { const preloader = new ProgressivePreloader(container, true); preloader.attach(container, true, promise, false); //} - await promise; + await promise; */ } if(middleware && !middleware()) { @@ -215,34 +217,35 @@ export function wrapDocument(doc: MTDocument, withTime = false, uploading = fals if(!uploading) { let downloadDiv = docDiv.querySelector('.document-download') as HTMLDivElement; - let preloader: ProgressivePreloader; - let promise: CancellablePromise; + let preloader: ProgressivePreloaderNew; + let download: Download; docDiv.addEventListener('click', () => { - if(!promise) { + if(!download) { if(downloadDiv.classList.contains('downloading')) { return; // means not ready yet } if(!preloader) { - preloader = new ProgressivePreloader(null, true); + preloader = new ProgressivePreloaderNew(null, true); } + + download = appDocsManager.saveDocFile(doc); + preloader.attach(downloadDiv, true, appDocsManager.getInputFileName(doc)); - appDocsManager.saveDocFile(doc.id).then(res => { - promise = res.promise; - - preloader.attach(downloadDiv, true, promise); - - promise.then(() => { - downloadDiv.classList.remove('downloading'); - downloadDiv.remove(); - }); - }) + download.promise.then(() => { + downloadDiv.remove(); + }).catch(err => { + if(err.name === 'AbortError') { + download = null; + } + }).finally(() => { + downloadDiv.classList.remove('downloading'); + }); downloadDiv.classList.add('downloading'); } else { - downloadDiv.classList.remove('downloading'); - promise = null; + download.controller.abort(); } }); } @@ -480,7 +483,7 @@ export function wrapSticker({doc, div, middleware, lazyLoadQueue, group, play, o } let downloaded = doc.downloaded; - let load = () => appDocsManager.downloadDoc(doc.id).then(blob => { + let load = () => appDocsManager.downloadDocNew(doc.id).promise.then(blob => { //console.log('loaded sticker:', doc, div); if(middleware && !middleware()) return; diff --git a/src/lib/MP4Source.ts b/src/lib/MP4Source.ts deleted file mode 100644 index d188760e..00000000 --- a/src/lib/MP4Source.ts +++ /dev/null @@ -1,326 +0,0 @@ -/* -* Copyright (c) 2018-present, Evgeny Nadymov -* -* This source code is licensed under the GPL v.3.0 license found in the -* LICENSE file in the root directory of this source tree. -*/ - -// @ts-ignore -//import MP4Box from 'mp4box/dist/mp4box.all.min'; -import { logger, LogLevels } from './logger'; - -export default class MP4Source { - private mp4file: any; - private nextBufferStart = 0; - private mediaSource: MediaSource = null; - private ready = false; - private bufferedTime = 40; - - private beforeMoovBufferSize = 32 * 1024; - private moovBufferSize = 512 * 1024; - private bufferSize = 512 * 1024; - private seekBufferSize = 256 * 1024; - - private currentBufferSize = this.beforeMoovBufferSize; - private nbSamples = 10; - private expectedSize: number; - - private seeking = false; - private loading = false; - private url: string; - - private log = logger('MP4'/* , LogLevels.error */); - - //public onLoadBuffer: (offset: number) - - constructor(private video: {duration: number, video: {expected_size: number}}, private getBufferAsync: (start: number, end: number) => Promise) { - this.expectedSize = this.video.video.expected_size; - - this.init(video.duration); - } - - init(videoDuration: number) { - const mediaSource = new MediaSource(); - mediaSource.addEventListener('sourceopen', () => { - this.log('[MediaSource] sourceopen start', this.mediaSource, this); - - if(this.mediaSource.sourceBuffers.length > 0) return; - - //const mp4File = MP4Box.createFile(); - const mp4File = (window as any).MP4Box.createFile(); - mp4File.onMoovStart = () => { - this.log('[MP4Box] onMoovStart'); - this.currentBufferSize = this.moovBufferSize; - }; - - mp4File.onError = (error: Error) => { - this.log('[MP4Box] onError', error); - }; - - mp4File.onReady = (info: any) => { - this.log('[MP4Box] onReady', info); - this.ready = true; - this.currentBufferSize = this.bufferSize; - const { isFragmented, timescale, fragment_duration, duration } = info; - - if(!fragment_duration && !duration) { - this.mediaSource.duration = videoDuration; - this.bufferedTime = videoDuration; - } else { - this.mediaSource.duration = isFragmented - ? fragment_duration / timescale - : duration / timescale; - } - - this.initializeAllSourceBuffers(info); - }; - - mp4File.onSegment = (id: number, sb: any, buffer: ArrayBuffer, sampleNum: number, is_last: boolean) => { - const isLast = (sampleNum + this.nbSamples) > sb.nb_samples; - - this.log('[MP4Box] onSegment', id, buffer, `${sampleNum}/${sb.nb_samples}`, isLast, sb.timestampOffset, mediaSource, is_last); - - sb.segmentIndex++; - sb.pendingAppends.push({ id, buffer, sampleNum, is_last: isLast }); - - this.onUpdateEnd(sb, true, false); - }; - - this.mp4file = mp4File; - this.log('[MediaSource] sourceopen end', this, this.mp4file); - - this.loadNextBuffer(); - }); - - mediaSource.addEventListener('sourceended', () => { - this.log('[MediaSource] sourceended', mediaSource.readyState); - //this.getBufferAsync = null; - }); - - mediaSource.addEventListener('sourceclose', () => { - this.log('[MediaSource] sourceclose', mediaSource.readyState); - //this.getBufferAsync = null; - }); - - this.mediaSource = mediaSource; - } - - private onInitAppended(sb: any) { - sb.sampleNum = 0; - sb.addEventListener('updateend', () => this.onUpdateEnd(sb, true, true)); - /* In case there are already pending buffers we call onUpdateEnd to start appending them*/ - this.onUpdateEnd(sb, false, true); - - // @ts-ignore - this.mediaSource.pendingInits--; - // @ts-ignore - if(this.mediaSource.pendingInits === 0) { - this.log('onInitAppended start!'); - this.mp4file.start(); - - if(this.expectedSize > this.bufferSize) { - this.nextBufferStart = this.bufferSize; - } else { - return; - } - - /* setInterval(() => { - this.loadNextBuffer(); - }, 1e3); */ - this.loadNextBuffer(); - } - }; - - private onUpdateEnd(sb: any, isNotInit: boolean, isEndOfAppend: boolean) { - //console.this.log('onUpdateEnd', sb, isNotInit, isEndOfAppend, sb.sampleNum, sb.is_last); - if(isEndOfAppend === true) { - if(sb.sampleNum) { - this.mp4file.releaseUsedSamples(sb.id, sb.sampleNum); - delete sb.sampleNum; - } - - if(sb.is_last) { - this.log('onUpdateEnd', sb, isNotInit, isEndOfAppend, sb.sampleNum, sb.is_last); - this.mediaSource.endOfStream(); - } - } - - if(this.mediaSource.readyState === "open" && sb.updating === false && sb.pendingAppends.length > 0) { - const obj = sb.pendingAppends.shift(); - this.log("MSE - SourceBuffer #"+sb.id, "Appending new buffer, pending: "+sb.pendingAppends.length); - sb.sampleNum = obj.sampleNum; - sb.is_last = obj.is_last; - sb.appendBuffer(obj.buffer); - } - } - - private initializeAllSourceBuffers(info: any) { - for(let i = 0; i < info.tracks.length; i++) { - this.addSourceBuffer(info.tracks[i]); - } - - this.initializeSourceBuffers(); - } - - private initializeSourceBuffers() { - const initSegs = this.mp4file.initializeSegmentation(); - this.log('[MP4Box] initializeSegmentation', initSegs); - - for(let i = 0; i < initSegs.length; i++) { - const sb: any = initSegs[i].user; - if(i === 0) { - // @ts-ignore - this.mediaSource.pendingInits = 0; - } - - let onInitAppended = () => { - if(this.mediaSource.readyState === "open") { - sb.removeEventListener('updateend', onInitAppended); - this.onInitAppended(sb); - } - }; - - sb.addEventListener('updateend', onInitAppended); - sb.appendBuffer(initSegs[i].buffer); - sb.segmentIndex = 0; - - // @ts-ignore - this.mediaSource.pendingInits++; - } - } - - private addSourceBuffer(track: {id: number, codec: string, type: 'video', nb_samples: number}) { - const file = this.mp4file; - const ms = this.mediaSource; - if(!track) return; - - const { id, codec, type: trackType, nb_samples } = track; - const mime = `video/mp4; codecs="${codec}"`; - this.log('mimetype:', mime); - if(!MediaSource.isTypeSupported(mime)) { - this.log('[addSourceBuffer] not supported', mime); - return; - } - - const sb: any = ms.addSourceBuffer(mime); - sb.id = id; - sb.pendingAppends = []; - sb.nb_samples = nb_samples; - file.setSegmentOptions(id, sb, { nbSamples: this.nbSamples }); - - this.log('[addSourceBuffer] add', id, codec, trackType, sb); - sb.addEventListener("error", (e: Event) => { - this.log("MSE SourceBuffer #" + id, e); - }); - } - - stop() { - this.mp4file.stop(); - this.mp4file = null; - this.getBufferAsync = null; - } - - getURL() { - return this.url ?? (this.url = URL.createObjectURL(this.mediaSource)); - } - - seek(currentTime: number/* , buffered: any */) { - const seekInfo: {offset: number, time: number} = this.mp4file.seek(currentTime, true); - this.nextBufferStart = seekInfo.offset; - - const loadNextBuffer = true; - /* let loadNextBuffer = buffered.length === 0; - for(let i = 0; i < buffered.length; i++) { - const start = buffered.start(i); - const end = buffered.end(i); - - if(start <= currentTime && currentTime + this.bufferedTime > end) { - loadNextBuffer = true; - break; - } - } */ - - this.log('[player] onSeeked', loadNextBuffer, currentTime, seekInfo, this.nextBufferStart); - if(loadNextBuffer) { - this.loadNextBuffer(true); - } - - return seekInfo.offset; - } - - timeUpdate(currentTime: number, duration: number, buffered: any) { - //return; - - const ranges = []; - for(let i = 0; i < buffered.length; i++) { - ranges.push({ start: buffered.start(i), end: buffered.end(i)}) - } - - let loadNextBuffer = buffered.length === 0; - let hasRange = false; - for(let i = 0; i < buffered.length; i++) { - const start = buffered.start(i); - const end = buffered.end(i); - - if (start <= currentTime && currentTime <= end) { - hasRange = true; - if (end < duration && currentTime + this.bufferedTime > end) { - loadNextBuffer = true; - break; - } - } - } - - if(!hasRange) { - loadNextBuffer = true; - } - - this.log('[player] timeUpdate', loadNextBuffer, currentTime, duration, JSON.stringify(ranges)); - if(loadNextBuffer) { - this.loadNextBuffer(); - } - } - - async loadNextBuffer(seek = false) { - const { nextBufferStart, loading, currentBufferSize, mp4file } = this; - this.log('[player] loadNextBuffer', nextBufferStart === undefined, loading, !mp4file); - if(!mp4file) return; - if(nextBufferStart === undefined) return; - if(loading) return; - - //return; - - this.loading = true; - let bufferSize = seek ? this.seekBufferSize : this.bufferSize; - if(nextBufferStart + bufferSize > this.expectedSize) { - bufferSize = this.expectedSize - nextBufferStart; - } - const nextBuffer = await this.getBufferAsync(nextBufferStart, nextBufferStart + bufferSize); - // @ts-ignore - nextBuffer.fileStart = nextBufferStart; - - const end = (nextBuffer.byteLength !== bufferSize)/* || (nextBuffer.byteLength === this.expectedSize) */; - - this.log('[player] loadNextBuffer start', nextBuffer.byteLength, nextBufferStart, end); - if(nextBuffer.byteLength) { - this.nextBufferStart = mp4file.appendBuffer(nextBuffer/* , end */); - } else { - this.nextBufferStart = undefined; - } - - if(end) { - this.log('[player] loadNextBuffer flush'); - this.mp4file.flush(); - } - - this.log('[player] loadNextBuffer stop', nextBuffer.byteLength, nextBufferStart, this.nextBufferStart); - - this.loading = false; - if(!this.ready || !end) { - this.log('[player] loadNextBuffer next'); - this.loadNextBuffer(); - } - } -} - -(window as any).MP4Source = MP4Source; \ No newline at end of file diff --git a/src/lib/appManagers/appDialogsManager.ts b/src/lib/appManagers/appDialogsManager.ts index daf072d0..b5d52989 100644 --- a/src/lib/appManagers/appDialogsManager.ts +++ b/src/lib/appManagers/appDialogsManager.ts @@ -924,7 +924,7 @@ export class AppDialogsManager { dom = this.getDialogDom(dialog.peerID); if(!dom) { - this.log.error('no dom for dialog:', dialog, lastMessage, dom, highlightWord); + //this.log.error('no dom for dialog:', dialog, lastMessage, dom, highlightWord); return; } } @@ -1034,7 +1034,7 @@ export class AppDialogsManager { } if(!dom) { - this.log.error('setUnreadMessages no dom!', dialog); + //this.log.error('setUnreadMessages no dom!', dialog); return; } diff --git a/src/lib/appManagers/appDocsManager.ts b/src/lib/appManagers/appDocsManager.ts index 4761c3c9..cccbdb12 100644 --- a/src/lib/appManagers/appDocsManager.ts +++ b/src/lib/appManagers/appDocsManager.ts @@ -1,15 +1,16 @@ -import FileManager from '../filemanager'; import {RichTextProcessor} from '../richtextprocessor'; import { CancellablePromise, deferredPromise } from '../polyfill'; import { isObject, getFileURL } from '../utils'; import opusDecodeController from '../opusDecodeController'; import { MTDocument, inputDocumentFileLocation } from '../../types'; +import { getFileNameByLocation } from '../bin_utils'; +import appDownloadManager, { Download } from './appDownloadManager'; class AppDocsManager { private docs: {[docID: string]: MTDocument} = {}; private thumbs: {[docIDAndSize: string]: Promise} = {}; private downloadPromises: {[docID: string]: CancellablePromise} = {}; - + public saveDoc(apiDoc: MTDocument, context?: any) { //console.log('saveDoc', apiDoc, this.docs[apiDoc.id]); if(this.docs[apiDoc.id]) { @@ -47,13 +48,17 @@ class AppDocsManager { apiDoc.audioTitle = attribute.title; apiDoc.audioPerformer = attribute.performer; apiDoc.type = attribute.pFlags.voice && apiDoc.mime_type == "audio/ogg" ? 'voice' : 'audio'; + + if(apiDoc.type == 'audio') { + apiDoc.supportsStreaming = true; + } break; case 'documentAttributeVideo': apiDoc.duration = attribute.duration; apiDoc.w = attribute.w; apiDoc.h = attribute.h; - apiDoc.supportsStreaming = attribute.pFlags?.supports_streaming && apiDoc.size > 524288 && typeof(MediaSource) !== 'undefined'; + apiDoc.supportsStreaming = attribute.pFlags?.supports_streaming/* && apiDoc.size > 524288 */; if(apiDoc.thumbs && attribute.pFlags.round_message) { apiDoc.type = 'round'; } else /* if(apiDoc.thumbs) */ { @@ -134,6 +139,10 @@ class AppDocsManager { apiDoc.size = 0; } + if(!apiDoc.url) { + apiDoc.url = this.getFileURLByDoc(apiDoc); + } + return apiDoc; } @@ -181,9 +190,21 @@ class AppDocsManager { return 't_' + (doc.type || 'file') + doc.id + fileExt; } - public getFileURLByDoc(doc: MTDocument) { + public getFileURLByDoc(doc: MTDocument, download = false) { const inputFileLocation = this.getInputByID(doc); - return getFileURL('document', {dcID: doc.dc_id, location: inputFileLocation, size: doc.size, mimeType: doc.mime_type || 'application/octet-stream'}); + const type = download ? 'download' : (doc.supportsStreaming ? 'stream' : 'document'); + + return getFileURL(type, { + dcID: doc.dc_id, + location: inputFileLocation, + size: doc.size, + mimeType: doc.mime_type || 'application/octet-stream', + fileName: doc.file_name + }); + } + + public getInputFileName(doc: MTDocument) { + return getFileNameByLocation(this.getInputByID(doc)); } public downloadDoc(docID: string | MTDocument, toFileEntry?: any): CancellablePromise { @@ -252,6 +273,56 @@ class AppDocsManager { return this.downloadPromises[doc.id] = deferred; } + public downloadDocNew(docID: string | MTDocument, toFileEntry?: any): Download { + const doc = this.getDoc(docID); + + if(doc._ == 'documentEmpty') { + throw new Error('Document empty!'); + } + + const fileName = this.getInputFileName(doc); + + let download = appDownloadManager.getDownload(fileName); + if(download) { + return download; + } + + download = appDownloadManager.download(fileName, doc.url); + //const _download: Download = {...download}; + + //_download.promise = _download.promise.then(async(blob) => { + download.promise = download.promise.then(async(blob) => { + if(blob) { + doc.downloaded = true; + + if(doc.type == 'voice' && !opusDecodeController.isPlaySupported()) { + let reader = new FileReader(); + + await new Promise((resolve, reject) => { + reader.onloadend = (e) => { + let uint8 = new Uint8Array(e.target.result as ArrayBuffer); + //console.log('sending uint8 to decoder:', uint8); + opusDecodeController.decode(uint8).then(result => { + doc.url = result.url; + resolve(); + }, (err) => { + delete doc.downloaded; + reject(err); + }); + }; + + reader.readAsArrayBuffer(blob); + }); + } + } + + return blob; + }); + + //return this.downloadPromisesNew[doc.id] = _download; + return download; + } + public downloadDocThumb(docID: any, thumbSize: string) { let doc = this.getDoc(docID); @@ -273,33 +344,12 @@ class AppDocsManager { public hasDownloadedThumb(docID: string, thumbSize: string) { return !!this.thumbs[docID + '-' + thumbSize]; } - - public async saveDocFile(docID: string) { - var doc = this.docs[docID]; - var fileName = this.getFileName(doc); - var ext = (fileName.split('.', 2) || [])[1] || ''; - - try { - let writer = FileManager.chooseSaveFile(fileName, ext, doc.mime_type, doc.size); - await writer.ready; - - let promise = this.downloadDoc(docID, writer); - promise.then(() => { - writer.close(); - console.log('saved doc', doc); - }); - - //console.log('got promise from downloadDoc', promise); - - return {promise}; - } catch(err) { - let promise = this.downloadDoc(docID); - promise.then((blob) => { - FileManager.download(blob, doc.mime_type, fileName) - }); - - return {promise}; - } + + public saveDocFile(doc: MTDocument) { + const url = this.getFileURLByDoc(doc, true); + const fileName = this.getInputFileName(doc); + + return appDownloadManager.downloadToDisc(fileName, url); } } diff --git a/src/lib/appManagers/appDownloadManager.ts b/src/lib/appManagers/appDownloadManager.ts new file mode 100644 index 00000000..4ce91696 --- /dev/null +++ b/src/lib/appManagers/appDownloadManager.ts @@ -0,0 +1,115 @@ +import { $rootScope } from "../utils"; +import apiManager from "../mtproto/mtprotoworker"; + +export type Download = {promise: Promise, controller: AbortController}; +export type Progress = {done: number, fileName: string, total: number, offset: number}; +export type ProgressCallback = (details: Progress) => void; + +export class AppDownloadManager { + private downloads: {[fileName: string]: Download} = {}; + private progress: {[fileName: string]: Progress} = {}; + private progressCallbacks: {[fileName: string]: Array} = {}; + + constructor() { + $rootScope.$on('download_progress', (e) => { + const details = e.detail as {done: number, fileName: string, total: number, offset: number}; + this.progress[details.fileName] = details; + + const callbacks = this.progressCallbacks[details.fileName]; + if(callbacks) { + callbacks.forEach(callback => callback(details)); + } + }); + } + + public download(fileName: string, url: string) { + if(this.downloads.hasOwnProperty(fileName)) return this.downloads[fileName]; + + const controller = new AbortController(); + const promise = fetch(url, {signal: controller.signal}) + .then(res => res.blob()) + .catch(err => { // Только потому что event.request.signal не работает в SW, либо я кривой? + if(err.name === 'AbortError') { + //console.log('Fetch aborted'); + apiManager.cancelDownload(fileName); + delete this.downloads[fileName]; + delete this.progress[fileName]; + delete this.progressCallbacks[fileName]; + } else { + //console.error('Uh oh, an error!', err); + } + + throw err; + }); + + //console.log('Will download file:', fileName, url); + + promise.finally(() => { + delete this.progressCallbacks[fileName]; + }); + + return this.downloads[fileName] = {promise, controller}; + } + + public getDownload(fileName: string) { + return this.downloads[fileName]; + } + + public addProgressCallback(fileName: string, callback: ProgressCallback) { + const progress = this.progress[fileName]; + (this.progressCallbacks[fileName] ?? (this.progressCallbacks[fileName] = [])).push(callback); + + if(progress) { + callback(progress); + } + } + + private createDownloadAnchor(url: string, onRemove?: () => void) { + const a = document.createElement('a'); + a.href = url; + + a.style.position = 'absolute'; + a.style.top = '1px'; + a.style.left = '1px'; + + document.body.append(a); + + try { + var clickEvent = document.createEvent('MouseEvents'); + clickEvent.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); + a.dispatchEvent(clickEvent); + } catch (e) { + console.error('Download click error', e); + try { + a.click(); + } catch (e) { + window.open(url as string, '_blank'); + } + } + + setTimeout(() => { + a.remove(); + onRemove && onRemove(); + }, 100); + } + + /* public downloadToDisc(fileName: string, url: string) { + this.createDownloadAnchor(url); + + return this.download(fileName, url); + } */ + + public downloadToDisc(fileName: string, url: string) { + const download = this.download(fileName, url); + download.promise.then(blob => { + const objectURL = URL.createObjectURL(blob); + this.createDownloadAnchor(objectURL, () => { + URL.revokeObjectURL(objectURL); + }); + }); + + return download; + } +} + +export default new AppDownloadManager(); \ No newline at end of file diff --git a/src/lib/appManagers/appImManager.ts b/src/lib/appManagers/appImManager.ts index 195f60c5..4130672b 100644 --- a/src/lib/appManagers/appImManager.ts +++ b/src/lib/appManagers/appImManager.ts @@ -768,16 +768,17 @@ export class AppImManager { window.addEventListener('blur', () => { animationIntersector.checkAnimations(true); - this.offline = true; + this.offline = $rootScope.idle.isIDLE = true; this.updateStatus(); clearInterval(this.updateStatusInterval); window.addEventListener('focus', () => { - animationIntersector.checkAnimations(false); - - this.offline = false; + this.offline = $rootScope.idle.isIDLE = false; this.updateStatus(); this.updateStatusInterval = window.setInterval(() => this.updateStatus(), 50e3); + + // в обратном порядке + animationIntersector.checkAnimations(false); }, {once: true}); }); diff --git a/src/lib/appManagers/appMediaViewer.ts b/src/lib/appManagers/appMediaViewer.ts index 7d15a056..61b7cce0 100644 --- a/src/lib/appManagers/appMediaViewer.ts +++ b/src/lib/appManagers/appMediaViewer.ts @@ -12,7 +12,6 @@ import AvatarElement from "../../components/avatar"; import LazyLoadQueue from "../../components/lazyLoadQueue"; import appForward from "../../components/appForward"; import { isSafari, mediaSizes } from "../config"; -import MP4Source from "../MP4Source"; export class AppMediaViewer { public wholeDiv = document.querySelector('.media-viewer-whole') as HTMLDivElement; @@ -806,7 +805,7 @@ export class AppMediaViewer { video.append(source); } - const createPlayer = (streamable = false) => { + const createPlayer = () => { if(media.type != 'gif') { video.dataset.ckin = 'default'; video.dataset.overlay = '1'; @@ -815,7 +814,7 @@ export class AppMediaViewer { div.append(video); } - const player = new VideoPlayer(video, true, streamable); + const player = new VideoPlayer(video, true, media.supportsStreaming); return player; /* player.wrapper.parentElement.append(video); mover.append(player.wrapper); */ @@ -827,61 +826,20 @@ export class AppMediaViewer { if(!source.src || (media.url && media.url != source.src)) { const load = () => { const promise = appDocsManager.downloadDoc(media.id); - - const streamable = media.supportsStreaming && !media.url; + //if(!streamable) { this.preloader.attach(mover, true, promise); //} let player: VideoPlayer; - - let offset = 0; - let loadedParts: {[offset: number]: true} = {}; - - let preloaderNotify = promise.notify; - let promiseNotify = (details: {offset: number, total: number, done: number}) => { - if(player) { - //player.progress.setLoadProgress(details.done / details.total); - setLoadProgress(); - } - loadedParts[details.offset] = true; - preloaderNotify(details); - }; - if(streamable) { - promise.notify = promiseNotify; - } - - let setLoadProgress = () => { - let rounded = offset - (offset % 524288); - - let downloadedAfter = 0; - for(let i in loadedParts) { - let o = +i; - if(o >= rounded) { - downloadedAfter += 524288; - } - } - - if(offset > rounded) { - downloadedAfter -= offset % 524288; - } - - player.progress.setLoadProgress(Math.min(1, downloadedAfter / media.size + rounded / media.size)); - }; - - promise.then(async(mp4Source: any) => { + promise.then(async() => { if(this.currentMessageID != message.mid) { this.log.warn('media viewer changed video'); return; } - const isStream = mp4Source instanceof MP4Source; - if(isStream) { - promise.notify = promiseNotify; - } - - const url = isStream ? mp4Source.getURL() : media.url; + const url = media.url; if(target instanceof SVGSVGElement && (video.parentElement || !isSafari)) { // if video exists if(!video.parentElement) { div.firstElementChild.lastElementChild.append(video); @@ -914,16 +872,7 @@ export class AppMediaViewer { }); }); - player = createPlayer(streamable); - if(player && mp4Source instanceof MP4Source) { - player.progress.onSeek = (time) => { - //this.log('seek', time); - offset = mp4Source.seek(time); - setLoadProgress(); - }; - - this.log('lol'); - } + player = createPlayer(); }); return promise; diff --git a/src/lib/appManagers/appPhotosManager.ts b/src/lib/appManagers/appPhotosManager.ts index 67f7f6bb..da545958 100644 --- a/src/lib/appManagers/appPhotosManager.ts +++ b/src/lib/appManagers/appPhotosManager.ts @@ -1,10 +1,10 @@ import appUsersManager from "./appUsersManager"; import { calcImageInBox, isObject, getFileURL } from "../utils"; -import fileManager from '../filemanager'; -import { bytesFromHex } from "../bin_utils"; +import { bytesFromHex, getFileNameByLocation } from "../bin_utils"; //import apiManager from '../mtproto/apiManager'; import apiManager from '../mtproto/mtprotoworker'; -import { MTPhotoSize, inputPhotoFileLocation, inputDocumentFileLocation, InputFileLocation, FileLocation } from "../../types"; +import { MTPhotoSize, inputPhotoFileLocation, inputDocumentFileLocation, FileLocation } from "../../types"; +import appDownloadManager from "./appDownloadManager"; export type MTPhoto = { _: 'photo' | 'photoEmpty' | string, @@ -58,38 +58,6 @@ export class AppPhotosManager { if(!photo.id) { console.warn('no apiPhoto.id', photo); } else this.photos[photo.id] = photo as any; - - /* if(!('sizes' in photo)) return; - - photo.sizes.forEach((photoSize: any) => { - if(photoSize._ == 'photoCachedSize') { - apiFileManager.saveSmallFile(photoSize.location, photoSize.bytes); - - console.log('clearing photo cached size', photo); - - // Memory - photoSize.size = photoSize.bytes.length; - delete photoSize.bytes; - photoSize._ = 'photoSize'; - } - }); */ - - /* if(!photo.downloaded) { - photo.downloaded = apiFileManager.isFileExists({ - _: 'inputPhotoFileLocation', - id: photo.id, - access_hash: photo.access_hash, - file_reference: photo.file_reference - }); - // apiFileManager.isFileExists({ - // _: 'inputPhotoFileLocation', - // id: photo.id, - // access_hash: photo.access_hash, - // file_reference: photo.file_reference - // }).then(downloaded => { - // photo.downloaded = downloaded; - // }); - } */ return photo; } @@ -326,52 +294,22 @@ export class AppPhotosManager { } public downloadPhoto(photoID: string) { - var photo = this.photos[photoID]; - var ext = 'jpg'; - var mimeType = 'image/jpeg'; - var fileName = 'photo' + photoID + '.' + ext; - var fullWidth = this.windowW; - var fullHeight = this.windowH; - var fullPhotoSize = this.choosePhotoSize(photo, fullWidth, fullHeight); - var inputFileLocation: inputDocumentFileLocation | inputPhotoFileLocation = { - // @ts-ignore + const photo = this.photos[photoID]; + const fullWidth = this.windowW; + const fullHeight = this.windowH; + const fullPhotoSize = this.choosePhotoSize(photo, fullWidth, fullHeight); + const location: inputDocumentFileLocation | inputPhotoFileLocation = { _: photo._ == 'document' ? 'inputDocumentFileLocation' : 'inputPhotoFileLocation', id: photo.id, access_hash: photo.access_hash, file_reference: photo.file_reference, thumb_size: fullPhotoSize.type }; + + const url = getFileURL('download', {dcID: photo.dc_id, location, size: fullPhotoSize.size, fileName: 'photo' + photo.id + '.jpg'}); + const fileName = getFileNameByLocation(location); - try { // photo.dc_id, location, photoSize.size - let writer = fileManager.chooseSaveFile(fileName, ext, mimeType, fullPhotoSize.size); - writer.ready.then(() => { - console.log('ready'); - apiManager.downloadFile(photo.dc_id, inputFileLocation, fullPhotoSize.size, { - mimeType: mimeType, - toFileEntry: writer - }).then(() => { - writer.close(); - //writer.abort(); - console.log('file save done', fileName, ext, mimeType, writer); - }, (e: any) => { - console.log('photo download failed', e); - }); - }); - } catch(err) { - console.error('err', err); - - /* var cachedBlob = apiFileManager.getCachedFile(inputFileLocation) - if (cachedBlob) { - return fileManager.download(cachedBlob, mimeType, fileName); - } */ - - apiManager.downloadFile(photo.dc_id, inputFileLocation, fullPhotoSize.size, {mimeType: mimeType}) - .then((blob: Blob) => { - fileManager.download(blob, mimeType, fileName); - }, (e: any) => { - console.log('photo download failed', e); - }); - } + appDownloadManager.downloadToDisc(fileName, url); } } diff --git a/src/lib/filemanager.ts b/src/lib/filemanager.ts index 374f9a6a..c2101480 100644 --- a/src/lib/filemanager.ts +++ b/src/lib/filemanager.ts @@ -1,12 +1,5 @@ import {blobConstruct} from './bin_utils'; -/* import 'web-streams-polyfill/ponyfill'; -// @ts-ignore -import streamSaver from 'streamsaver'; -if(window.location.href.indexOf('localhost') === -1) { - streamSaver.mitm = 'mitm.html'; -} */ - class FileManager { public blobSupported = true; @@ -21,21 +14,7 @@ class FileManager { public isAvailable() { return this.blobSupported; } - - /* public copy(fromFileEntry: any, toFileEntry: any) { - return this.getFileWriter(toFileEntry).then((fileWriter) => { - return this.write(fileWriter, fromFileEntry).then(() => { - return fileWriter; - }, (error: any) => { - try { - // @ts-ignore - fileWriter.truncate(0); - } catch (e) {} - - return Promise.reject(error); - }); - }); - } */ + public copy(fromFileEntry: any, toFileEntry: any) { return this.write(toFileEntry, fromFileEntry).then(() => { console.log('copy success'); @@ -52,32 +31,6 @@ class FileManager { }); } - /* public write(fileWriter: any, bytes: any) { - return new Promise((resolve, reject) => { - fileWriter.onwriteend = function(e: any) { - resolve(); - }; - fileWriter.onerror = function(e: any) { - reject(e); - }; - - if(bytes.file) { - bytes.file((file: any) => { - fileWriter.write(file); - }, reject); - } else if(bytes instanceof Blob) { // is file bytes - fileWriter.write(bytes); - } else { - try { - var blob = blobConstruct([bytesToArrayBuffer(bytes)]); - fileWriter.write(blob); - } catch(e) { - reject(e); - } - } - }); - } */ - public write(fileWriter: ReturnType, bytes: Uint8Array | Blob | {file: any}): Promise { if('file' in bytes) { return bytes.file((file: any) => { @@ -97,23 +50,10 @@ class FileManager { fileReader.readAsArrayBuffer(bytes); }); } else { - //var blob = blobConstruct([bytesToArrayBuffer(bytes)]); - //return fileWriter.write(blob); return fileWriter.write(bytes); } } - - public chooseSaveFile(fileName: string, ext: string, mimeType: string, size?: number): any { - throw new Error('no writer'); - /* let fileStream = streamSaver.createWriteStream(fileName, { - size: size, - writableStrategy: undefined, - readableStrategy: undefined - }); - let writer = fileStream.getWriter(); - return writer; */ - } - + public getFakeFileWriter(mimeType: string, saveFileCallback: (blob: Blob) => Promise) { let blobParts: Array = []; const fakeFileWriter = { @@ -139,70 +79,6 @@ class FileManager { return fakeFileWriter; } - - public download(blob: Blob, mimeType: string, fileName: string) { - if(window.navigator && navigator.msSaveBlob !== undefined) { - window.navigator.msSaveBlob(blob, fileName); - return false; - } - - if(window.navigator && 'getDeviceStorage' in navigator) { - var storageName = 'sdcard'; - var subdir = 'telegram/'; - switch(mimeType.split('/')[0]) { - case 'video': - storageName = 'videos'; - break; - case 'audio': - storageName = 'music'; - break; - case 'image': - storageName = 'pictures'; - break; - } - - // @ts-ignore - var deviceStorage = navigator.getDeviceStorage(storageName); - var request = deviceStorage.addNamed(blob, subdir + fileName); - - request.onsuccess = function () { - console.log('Device storage save result', this.result); - }; - request.onerror = () => {}; - return; - } - - let url = URL.createObjectURL(blob); - var anchor = document.createElementNS('http://www.w3.org/1999/xhtml', 'a') as HTMLAnchorElement; - anchor.href = url as string; - anchor.download = fileName; - if(anchor.dataset) { - anchor.dataset.downloadurl = ['video/quicktime', fileName, url].join(':'); - } - - anchor.style.position = 'absolute'; - anchor.style.top = '1px'; - anchor.style.left = '1px'; - - document.body.append(anchor); - - try { - var clickEvent = document.createEvent('MouseEvents'); - clickEvent.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); - anchor.dispatchEvent(clickEvent); - } catch (e) { - console.error('Download click error', e); - try { - anchor.click(); - } catch (e) { - window.open(url as string, '_blank'); - } - } - - setTimeout(() => { - anchor.remove(); - }, 100); - } } export default new FileManager(); diff --git a/src/lib/libwebp.js b/src/lib/libwebp.js deleted file mode 100644 index 70ae281e..00000000 --- a/src/lib/libwebp.js +++ /dev/null @@ -1,34 +0,0 @@ -if(typeof(document) === 'undefined') { - var document = { - addEventListener: function() {} - }; -} - -function Webp() { - var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=true;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{var success=_emscripten_resize_heap(end);if(!success)return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var jsCallStartIndex=1;var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var getTempRet0=function(){return tempRet0};var GLOBAL_BASE=8;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}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>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NONE=3;var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(u8Array[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.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,outU8Array,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;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;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}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STACK_BASE=11056,DYNAMIC_BASE=5253936,DYNAMICTOP_PTR=10800;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||67108864;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}if(!Math.imul||Math.imul(4294967295,5)!==-5)Math.imul=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};if(!Math.clz32)Math.clz32=function(x){var n=32;var y=x>>16;if(y){n-=16;x=y}y=x>>8;if(y){n-=8;x=y}y=x>>4;if(y){n-=4;x=y}y=x>>2;if(y){n-=2;x=y}y=x>>1;if(y)return n-2;return n-x};if(!Math.trunc)Math.trunc=function(x){return x<0?Math.ceil(x):Math.floor(x)};var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;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"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}memoryInitializer="data:application/octet-stream;base64,AAAAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f38AAAAAAAAAAPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDx8vP09fb3+Pn6+/z9/v8AAQIDBAUGBwgJCgsMDQ4PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAP/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AGAcXGSgGJykWGiYqOAU3ORUbNjolK0gER0kUHDU7RkokLFhFSzQ8A1dZEx1WWiMtRExVWzM9aAJnaRIeZmoiLlRcQ01lazI+eAF3eVNdER9kbEJOdnohL3V7MT9jbVJeAHR8QU8QIGJuMHN9UV9Acn5hb1Bxf2BwAAAAAAAAAAAAAAAAAQAAAAMAAAAHAAAADwAAAB8AAAA/AAAAfwAAAP8AAAD/AQAA/wMAAP8HAAD/DwAA/x8AAP8/AAD/fwAA//8AAP//AQD//wMA//8HAP//DwD//x8A//8/AP//fwD///8AAAAAAAAAAAAAAAAAiguMC44LkguaC6oLygsKDIwMjA2MD4wTAAAAAAAAAAAREgABAgMEBRAGBwgJCgsMDQ4PAAAAAAAAAAAAAAAAADBS4Q2GGLMDy6xfd2piiBxVXDhoKLizFPj+hUpLuN1Jl/P8ZIkCVVwAAClK2sF+Dau3QFl9V5JUcsoZTmmM0zhl7gEMX3WhMlL2N1QyLLtasVeqD+cz9XPa7l9o4sxjdYMOmW7tpzBHxtnATzwVa0n6AxRPDPsaVDILmXMcy9cmBjfMb9h3uywqL3Z13cwlZGFUsyQVh30KqBQEIme/HhSDFbRW4wLlc2+xykRCTSYo+666c+3rUAr7tmodC9Q6DWg72zWDHggrlWvOd/DlgVG8O4V4lJSfADzt5ScAAAAAAAAEAAgADACAAIQAiACMAAABBAEIAQwBgAGEAYgBjAHneDBZc3F4mHCYs0B+qnYuRl+vRY9QVVJIm2c4Ogqr2r0RDZhyGhGjLMMVCq15GFDDGj4sQFWQRwomq9WQIhqqLjcTiKAhzkc/FAhyctAMCeJRKAtgtlQdECSGt1mJYmVqpZRIu2SCnW8gS1BCZqdjSj4o6oApNQmy8Y0aCGtKKxqSSaYxF51BJmmgMzQfc4BoTwwb2f9XEQdXREcscjMPuhcvKQ5utrcVEcJCLRlmxb0XEhZYWJOWKi4txM0rYbd1VSYjsz0nNchXGhUr6Ks4IjNocmYdXU0nHFWrOqVaYkAiFnTOFyIrpklrNiAaMwFRKx9EGWoWQKsk4XIiExVmhLwQTHw+Ek5fVTkyMDPBZSOf129ZLm88lB+s2+QVEm9wcU1Vs/8meHIoKgHE9dEKGW1YKx2MptUlK5o9Px6bQy1EAdFkUAgrmgEzGkeOTk4Q/4AixaspKAVm07cEAd0zMhGo0cAXGVKKHySrG6YmLOVDVzqpUnMaO7M/O1q0O6ZdSZooKBV0j9EiJ68vDxC3It8xLbcuESG3BmIPILc5LhYYgAE2ESVBIElzHIAXgM0oAwlzM8ASBt9XJQlzO01AFS9oNyzaCTY1guJAWkbNKCkXGjk2OXC4BSkmptUeIhqFmHQKIIYnEzXdGnIgSf8fCUHqAg8BdklLIAwzwP+gKzNYHyNDZlU3ulU4FRdvO80tJcA3JkZ8SWYBImJ9YipYaFV1r1JfVDVZgGRxZS1LT3svM4BRqwE5EQVHZjk1KTEmIQ15OUkaAVUpCkOKTW5aL3JzFQIKZv+mFwZlHRAKVYBlxBo5EgpmZtUiFCt1FA8ko4BEARpmPUclIjUf88BFPEcmSXcc3iVELYAiAS8L9as+ERNGklU3PkYlKyWaZKNVoAE/CVyIHEAgyVVLDwkJQP+4dxBWBhwFQP8Z+AE4CBGEif83dIA6DxRShzkaeSikMh+JmoUZI9ozZyyDg3sfBp5WKECHlOAtt4AWGhGD8JoOAdEtEBVbQN4HAcU4FSebPIoXZtVTDA02wP9ELxxVGlVVgIAgkqsSCwc/kKsEBPYjGwqSrqsMGoC+UCNjtFB+Ni1Vfi9XsDMpFCBlS4CLdpJ0gFU4KQ+w7FUlCT5HHhF3dv8REoplJjyKN0YrGo6SJBMeq/9hGxSKLT0+2wFRvEAgKRR1l44UFaNwEww9w4AwBBgAAAAAAAAAAAAAAAAAAf8C/gMEBv0F/Pv6B/kI+PcAAAAAAAAAAAAAAAAAAP///////////////////////////////////////////7D2////////////3/H8///////////5/f3////////////0/P//////////6v7+///////////9///////////////2/v//////////7/3+///////////+//7////////////4/v//////////+//+///////////////////////////9/v//////////+/7+///////////+//7////////////+/f/+////////+v/+//7////////+/////////////////////////////////////////////////////////9n/////////////4fzx/f///v/////q+vH6/f/9/v/////+////////////3/7+///////////u/f7+///////////4/v//////////+f7////////////////////////////9////////////9/7////////////////////////////9/v///////////P/////////////////////////////+/v///////////f/////////////////////////////+/f//////////+v/////////////+/////////////////////////////////////////////////////////7r7+v//////////6vv0/v/////////7+/P9/v/+///////9/v//////////7P3+///////////7/f3+/v/////////+/v///////////v7+///////////////////////////+/////////////v7////////////+/////////////////////////////v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////j/////////////+v78/v/////////4/vn9///////////9/f//////////9v39///////////8/vv+/v/////////+/P//////////+P79///////////9//7+///////////7/v//////////9fv+///////////9/f7////////////7/f///////////P3+/////////////v/////////////8////////////+f/+//////////////7//////////////f//////////+v///////////////////////////////////////////v///////////////////////////4CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgP2I/v/k24CAgICAvYHy/+PV/9uAgIBqfuP81tH//4CAgAFi+P/s4v//gICAtYXu/t3q/5qAgIBOhsr3xrT/24CAgAG5+f/z/4CAgICAuJb3/+zggICAgIBNbtj/7OaAgICAgAFl+//x/4CAgICAqovx/OzR//+AgIAldMTz5P///4CAgAHM/v/1/4CAgICAz6D6/+6AgICAgIBmZ+f/06uAgICAgAGY/P/w/4CAgICAsYfz/+rhgICAgIBQgdP/wuCAgICAgAEB/4CAgICAgICA9gH/gICAgICAgID/gICAgICAgICAgMYj7d/Bu6KgkZs+gy3G3ayw3J383QFEL5LQlafdov/fgAGV8f/d4P//gICAuI3q/d7c/8eAgIBRY7XysL75yv//gAGB6P3WxfLE//+AY3nS+snG/8qAgIAXW6Pyqrv30v//gAHI9v/q/4CAgICAbbLx/+f1//+AgIAsgsn9zcD//4CAgAGE7/vb0f+lgICAXojh+9q+//+AgIAWZK71uqH/x4CAgAG2+f/o64CAgICAfI/x/+PqgICAgIAjTbX7wdP/zYCAgAGd9//s5///gICAeY3r/+Hj//+AgIAtY7z7w9n/4ICAgAEB+//V/4CAgICAywH4//+AgICAgICJAbH/4P+AgICAgP0J+PvP0P/AgICArw3g88G5+cb//4BJEavdobPsp//qgAFf9/3Ut///gICA71r0+tPR//+AgICbTcP4vMP//4CAgAEY7/va2//NgICAyTPb/8S6gICAgIBFLr7vydr/5ICAgAG/+///gICAgICA36X5/9X/gICAgICNfPj//4CAgICAgAEQ+P//gICAgICAviTm/+z/gICAgICVAf+AgICAgICAgAHi/4CAgICAgICA98D/gICAgICAgIDwgP+AgICAgICAgAGG/P//gICAgICA1T76//+AgICAgIA3Xf+AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMoY1eu6v9yg8K//fia26Km45K7/u4A9Lorbl7Lwqv/YgAFw5vrHv/ef//+Apm3k/NPX/66AgIAnTaLorLT1sv//gAE03PbGx/nc//+AfEq/87fB+t3//4AYR4Lbmqrztv//gAG24fnb8P/ggICAlZbi/NjN/6uAgIAcbKryt8L+3///gAFR5vzMy//AgICAe2bR97zE/+mAgIAUX5nzpK3/y4CAgAHe+P/Y1YCAgICAqK/2/OvN//+AgIAvdNf/09T//4CAgAF57P3U1v//gICAjVTV/MnK/9uAgIAqUKDworn/zYCAgAEB/4CAgICAgICA9AH/gICAgICAgIDuAf+AgICAgICAgAQFBgcICQoKCwwNDg8QERESExQUFRUWFhcXGBkZGhscHR4fICEiIyQlJSYnKCkqKywtLi4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xMTU5PUFFSU1RVVldYWVtdX2BiZGVmaGpsbnBydHZ6fH6AgoSGiIqMj5GUl5qdBAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA8AD4AQABCAEQARgBIAEoATABOAFAAUgBUAFYAWABaAFwAXgBgAGIAZABmAGgAagBsAG4AcAByAHQAdwB6AH0AgACDAIYAiQCMAI8AkgCVAJgAmwCeAKEApACnAKoArQCxALUAuQC9AMEAxQDJAM0A0QDVANkA3QDhAOUA6gDvAPUA+QD+AAMBCAENARIBFwEcAQABBAgFAgMGCQwNCgcLDg+pIwAArSMAALIjAAC4IwAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGDAQAAIAIAAD/CQAA/wwAALAfAAC0HwAAuB8AALwfAADAHwAAxB8AAMgfAAABAAAAAQAAAAIAAAACAAAAAwAAAAQAAADkHwAA6B8AAPAfAAAFAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAABQqAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD0KQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExpYnJhcnkgdmVyc2lvbiBtaXNtYXRjaCEKAFVuYWJsZSB0byBzZXQgdmlkZW8gbW9kZSAoMzJicHAgJWR4JWQpIQoAVW5hYmxlIHRvIGNyZWF0ZSAlZHglZCBSR0JBIHN1cmZhY2UhCgBFcnJvciBkZWNvZGluZyBpbWFnZSAoJWQpCgACAwcDAwsDBAMEBAICBAQEAgEBCAcGBAQCAgIBAQEBAAIIQ291bGQgbm90IGRlY29kZSBhbHBoYSBkYXRhLgBGcmFtZSBzZXR1cCBmYWlsZWQAdGhyZWFkIGluaXRpYWxpemF0aW9uIGZhaWxlZC4Abm8gbWVtb3J5IGR1cmluZyBmcmFtZSBpbml0aWFsaXphdGlvbi4AUklGRgBXRUJQAFZQOFgAQUxQSABWUDggAFZQOEwAT0sAbnVsbCBWUDhJbyBwYXNzZWQgdG8gVlA4R2V0SGVhZGVycygpAFRydW5jYXRlZCBoZWFkZXIuAEluY29ycmVjdCBrZXlmcmFtZSBwYXJhbWV0ZXJzLgBGcmFtZSBub3QgZGlzcGxheWFibGUuAGNhbm5vdCBwYXJzZSBwaWN0dXJlIGhlYWRlcgBCYWQgY29kZSB3b3JkAGJhZCBwYXJ0aXRpb24gbGVuZ3RoAGNhbm5vdCBwYXJzZSBzZWdtZW50IGhlYWRlcgBjYW5ub3QgcGFyc2UgZmlsdGVyIGhlYWRlcgBjYW5ub3QgcGFyc2UgcGFydGl0aW9ucwBOb3QgYSBrZXkgZnJhbWUuAK2UjACwm4yHALSdjYaCAP7+8+bEsZmMhYKBAE5VTEwgVlA4SW8gcGFyYW1ldGVyIGluIFZQOERlY29kZSgpLgBQcmVtYXR1cmUgZW5kLW9mLXBhcnRpdGlvbjAgZW5jb3VudGVyZWQuAFByZW1hdHVyZSBlbmQtb2YtZmlsZSBlbmNvdW50ZXJlZC4AT3V0cHV0IGFib3J0ZWQuAC0rICAgMFgweAAobnVsbCkALTBYKzBYIDBYLTB4KzB4IDB4AGluZgBJTkYAbmFuAE5BTgAu";var tempDoublePtr=11040;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"/";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)},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.resolve(from).substr(1);to=PATH.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){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h1)return 0;if(!surfData.buffer){surfData.buffer=_malloc(surfData.width*surfData.height*4);HEAP32[surf+20>>2]=surfData.buffer}HEAP32[surf+20>>2]=surfData.buffer;if(surf==SDL.screen&&Module.screenIsReadOnly&&surfData.image)return 0;if(SDL.defaults.discardOnLock){if(!surfData.image){surfData.image=surfData.ctx.createImageData(surfData.width,surfData.height)}if(!SDL.defaults.opaqueFrontBuffer)return}else{surfData.image=surfData.ctx.getImageData(0,0,surfData.width,surfData.height)}if(surf==SDL.screen&&SDL.defaults.opaqueFrontBuffer){var data=surfData.image.data;var num=data.length;for(var i=0;i>2],y:HEAP32[rect+4>>2],w:HEAP32[rect+8>>2],h:HEAP32[rect+12>>2]}},updateRect:function(rect,r){HEAP32[rect>>2]=r.x;HEAP32[rect+4>>2]=r.y;HEAP32[rect+8>>2]=r.w;HEAP32[rect+12>>2]=r.h},intersectionOfRects:function(first,second){var leftX=Math.max(first.x,second.x);var leftY=Math.max(first.y,second.y);var rightX=Math.min(first.x+first.w,second.x+second.w);var rightY=Math.min(first.y+first.h,second.y+second.h);return{x:leftX,y:leftY,w:Math.max(leftX,rightX)-leftX,h:Math.max(leftY,rightY)-leftY}},checkPixelFormat:function(fmt){},loadColorToCSSRGB:function(color){var rgba=HEAP32[color>>2];return"rgb("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+")"},loadColorToCSSRGBA:function(color){var rgba=HEAP32[color>>2];return"rgba("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+","+(rgba>>24&255)/255+")"},translateColorToCSSRGBA:function(rgba){return"rgba("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+","+(rgba>>>24)/255+")"},translateRGBAToCSSRGBA:function(r,g,b,a){return"rgba("+(r&255)+","+(g&255)+","+(b&255)+","+(a&255)/255+")"},translateRGBAToColor:function(r,g,b,a){return r|g<<8|b<<16|a<<24},makeSurface:function(width,height,flags,usePageCanvas,source,rmask,gmask,bmask,amask){flags=flags||0;var is_SDL_HWSURFACE=flags&1;var is_SDL_HWPALETTE=flags&2097152;var is_SDL_OPENGL=flags&67108864;var surf=_malloc(60);var pixelFormat=_malloc(44);var bpp=is_SDL_HWPALETTE?1:4;var buffer=0;if(!is_SDL_HWSURFACE&&!is_SDL_OPENGL){buffer=_malloc(width*height*4)}HEAP32[surf>>2]=flags;HEAP32[surf+4>>2]=pixelFormat;HEAP32[surf+8>>2]=width;HEAP32[surf+12>>2]=height;HEAP32[surf+16>>2]=width*bpp;HEAP32[surf+20>>2]=buffer;HEAP32[surf+36>>2]=0;HEAP32[surf+40>>2]=0;HEAP32[surf+44>>2]=Module["canvas"].width;HEAP32[surf+48>>2]=Module["canvas"].height;HEAP32[surf+56>>2]=1;HEAP32[pixelFormat>>2]=-2042224636;HEAP32[pixelFormat+4>>2]=0;HEAP8[pixelFormat+8>>0]=bpp*8;HEAP8[pixelFormat+9>>0]=bpp;HEAP32[pixelFormat+12>>2]=rmask||255;HEAP32[pixelFormat+16>>2]=gmask||65280;HEAP32[pixelFormat+20>>2]=bmask||16711680;HEAP32[pixelFormat+24>>2]=amask||4278190080;SDL.GL=SDL.GL||is_SDL_OPENGL;var canvas;if(!usePageCanvas){if(SDL.canvasPool.length>0){canvas=SDL.canvasPool.pop()}else{canvas=document.createElement("canvas")}canvas.width=width;canvas.height=height}else{canvas=Module["canvas"]}var webGLContextAttributes={antialias:SDL.glAttributes[13]!=0&&SDL.glAttributes[14]>1,depth:SDL.glAttributes[6]>0,stencil:SDL.glAttributes[7]>0,alpha:SDL.glAttributes[3]>0};var ctx=Browser.createContext(canvas,is_SDL_OPENGL,usePageCanvas,webGLContextAttributes);SDL.surfaces[surf]={width:width,height:height,canvas:canvas,ctx:ctx,surf:surf,buffer:buffer,pixelFormat:pixelFormat,alpha:255,flags:flags,locked:0,usePageCanvas:usePageCanvas,source:source,isFlagSet:function(flag){return flags&flag}};return surf},copyIndexedColorData:function(surfData,rX,rY,rW,rH){if(!surfData.colors){return}var fullWidth=Module["canvas"].width;var fullHeight=Module["canvas"].height;var startX=rX||0;var startY=rY||0;var endX=(rW||fullWidth-startX)+startX;var endY=(rH||fullHeight-startY)+startY;var buffer=surfData.buffer;if(!surfData.image.data32){surfData.image.data32=new Uint32Array(surfData.image.data.buffer)}var data32=surfData.image.data32;var colors32=surfData.colors32;for(var y=startY;y>0]]}}},freeSurface:function(surf){var refcountPointer=surf+56;var refcount=HEAP32[refcountPointer>>2];if(refcount>1){HEAP32[refcountPointer>>2]=refcount-1;return}var info=SDL.surfaces[surf];if(!info.usePageCanvas&&info.canvas)SDL.canvasPool.push(info.canvas);if(info.buffer)_free(info.buffer);_free(info.pixelFormat);_free(surf);SDL.surfaces[surf]=null;if(surf===SDL.screen){SDL.screen=null}},blitSurface:function(src,srcrect,dst,dstrect,scale){var srcData=SDL.surfaces[src];var dstData=SDL.surfaces[dst];var sr,dr;if(srcrect){sr=SDL.loadRect(srcrect)}else{sr={x:0,y:0,w:srcData.width,h:srcData.height}}if(dstrect){dr=SDL.loadRect(dstrect)}else{dr={x:0,y:0,w:srcData.width,h:srcData.height}}if(dstData.clipRect){var widthScale=!scale||sr.w===0?1:sr.w/dr.w;var heightScale=!scale||sr.h===0?1:sr.h/dr.h;dr=SDL.intersectionOfRects(dstData.clipRect,dr);sr.w=dr.w*widthScale;sr.h=dr.h*heightScale;if(dstrect){SDL.updateRect(dstrect,dr)}}var blitw,blith;if(scale){blitw=dr.w;blith=dr.h}else{blitw=sr.w;blith=sr.h}if(sr.w===0||sr.h===0||blitw===0||blith===0){return 0}var oldAlpha=dstData.ctx.globalAlpha;dstData.ctx.globalAlpha=srcData.alpha/255;dstData.ctx.drawImage(srcData.canvas,sr.x,sr.y,sr.w,sr.h,dr.x,dr.y,blitw,blith);dstData.ctx.globalAlpha=oldAlpha;if(dst!=SDL.screen){warnOnce("WARNING: copying canvas data to memory for compatibility");_SDL_LockSurface(dst);dstData.locked--}return 0},downFingers:{},savedKeydown:null,receiveEvent:function(event){function unpressAllPressedKeys(){for(var code in SDL.keyboardMap){SDL.events.push({type:"keyup",keyCode:SDL.keyboardMap[code]})}}switch(event.type){case"touchstart":case"touchmove":{event.preventDefault();var touches=[];if(event.type==="touchstart"){for(var i=0;i0?Math.max(delta,1):Math.min(delta,-1);var button=delta>0?3:4;SDL.events.push({type:"mousedown",button:button,pageX:event.pageX,pageY:event.pageY});SDL.events.push({type:"mouseup",button:button,pageX:event.pageX,pageY:event.pageY});SDL.events.push({type:"wheel",deltaX:0,deltaY:delta});event.preventDefault();break;case"mousemove":if(SDL.DOMButtons[0]===1){SDL.events.push({type:"touchmove",touch:{identifier:0,deviceID:-1,pageX:event.pageX,pageY:event.pageY}})}if(Browser.pointerLock){if("mozMovementX"in event){event["movementX"]=event["mozMovementX"];event["movementY"]=event["mozMovementY"]}if(event["movementX"]==0&&event["movementY"]==0){event.preventDefault();return}}case"keydown":case"keyup":case"keypress":case"mousedown":case"mouseup":if(event.type!=="keydown"||!SDL.unicode&&!SDL.textInput||(event.keyCode===8||event.keyCode===9)){event.preventDefault()}if(event.type=="mousedown"){SDL.DOMButtons[event.button]=1;SDL.events.push({type:"touchstart",touch:{identifier:0,deviceID:-1,pageX:event.pageX,pageY:event.pageY}})}else if(event.type=="mouseup"){if(!SDL.DOMButtons[event.button]){return}SDL.events.push({type:"touchend",touch:{identifier:0,deviceID:-1,pageX:event.pageX,pageY:event.pageY}});SDL.DOMButtons[event.button]=0}if(event.type==="keydown"||event.type==="mousedown"){SDL.canRequestFullscreen=true}else if(event.type==="keyup"||event.type==="mouseup"){if(SDL.isRequestingFullscreen){Module["requestFullscreen"](true,true);SDL.isRequestingFullscreen=false}SDL.canRequestFullscreen=false}if(event.type==="keypress"&&SDL.savedKeydown){SDL.savedKeydown.keypressCharCode=event.charCode;SDL.savedKeydown=null}else if(event.type==="keydown"){SDL.savedKeydown=event}if(event.type!=="keypress"||SDL.textInput){SDL.events.push(event)}break;case"mouseout":for(var i=0;i<3;i++){if(SDL.DOMButtons[i]){SDL.events.push({type:"mouseup",button:i,pageX:event.pageX,pageY:event.pageY});SDL.DOMButtons[i]=0}}event.preventDefault();break;case"focus":SDL.events.push(event);event.preventDefault();break;case"blur":SDL.events.push(event);unpressAllPressedKeys();event.preventDefault();break;case"visibilitychange":SDL.events.push({type:"visibilitychange",visible:!document.hidden});unpressAllPressedKeys();event.preventDefault();break;case"unload":if(Browser.mainLoop.runner){SDL.events.push(event);Browser.mainLoop.runner()}return;case"resize":SDL.events.push(event);if(event.preventDefault){event.preventDefault()}break}if(SDL.events.length>=1e4){err("SDL event queue full, dropping events");SDL.events=SDL.events.slice(0,1e4)}SDL.flushEventsToHandler();return},lookupKeyCodeForEvent:function(event){var code=event.keyCode;if(code>=65&&code<=90){code+=32}else{code=SDL.keyCodes[event.keyCode]||event.keyCode;if(event.location===KeyboardEvent.DOM_KEY_LOCATION_RIGHT&&code>=(224|1<<10)&&code<=(227|1<<10)){code+=4}}return code},handleEvent:function(event){if(event.handled)return;event.handled=true;switch(event.type){case"touchstart":case"touchend":case"touchmove":{Browser.calculateMouseEvent(event);break}case"keydown":case"keyup":{var down=event.type==="keydown";var code=SDL.lookupKeyCodeForEvent(event);HEAP8[SDL.keyboardState+code>>0]=down;SDL.modState=(HEAP8[SDL.keyboardState+1248>>0]?64:0)|(HEAP8[SDL.keyboardState+1249>>0]?1:0)|(HEAP8[SDL.keyboardState+1250>>0]?256:0)|(HEAP8[SDL.keyboardState+1252>>0]?128:0)|(HEAP8[SDL.keyboardState+1253>>0]?2:0)|(HEAP8[SDL.keyboardState+1254>>0]?512:0);if(down){SDL.keyboardMap[code]=event.keyCode}else{delete SDL.keyboardMap[code]}break}case"mousedown":case"mouseup":if(event.type=="mousedown"){SDL.buttonState|=1<0){if(SDL.makeCEvent(SDL.events.shift(),ptr)!==false)return 1}return 0}else{return SDL.events.length>0}},makeCEvent:function(event,ptr){if(typeof event==="number"){_memcpy(ptr,event,28);_free(event);return}SDL.handleEvent(event);switch(event.type){case"keydown":case"keyup":{var down=event.type==="keydown";var key=SDL.lookupKeyCodeForEvent(event);var scan;if(key>=1024){scan=key-1024}else{scan=SDL.scanCodes[key]||key}HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+8>>0]=down?1:0;HEAP8[ptr+9>>0]=0;HEAP32[ptr+12>>2]=scan;HEAP32[ptr+16>>2]=key;HEAP16[ptr+20>>1]=SDL.modState;HEAP32[ptr+24>>2]=event.keypressCharCode||key;break}case"keypress":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];var cStr=intArrayFromString(String.fromCharCode(event.charCode));for(var i=0;i>0]=cStr[i]}break}case"mousedown":case"mouseup":case"mousemove":{if(event.type!="mousemove"){var down=event.type==="mousedown";HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP32[ptr+8>>2]=0;HEAP32[ptr+12>>2]=0;HEAP8[ptr+16>>0]=event.button+1;HEAP8[ptr+17>>0]=down?1:0;HEAP32[ptr+20>>2]=Browser.mouseX;HEAP32[ptr+24>>2]=Browser.mouseY}else{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP32[ptr+8>>2]=0;HEAP32[ptr+12>>2]=0;HEAP32[ptr+16>>2]=SDL.buttonState;HEAP32[ptr+20>>2]=Browser.mouseX;HEAP32[ptr+24>>2]=Browser.mouseY;HEAP32[ptr+28>>2]=Browser.mouseMovementX;HEAP32[ptr+32>>2]=Browser.mouseMovementY}break}case"wheel":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+16>>2]=event.deltaX;HEAP32[ptr+20>>2]=event.deltaY;break}case"touchstart":case"touchend":case"touchmove":{var touch=event.touch;if(!Browser.touches[touch.identifier])break;var w=Module["canvas"].width;var h=Module["canvas"].height;var x=Browser.touches[touch.identifier].x/w;var y=Browser.touches[touch.identifier].y/h;var lx=Browser.lastTouches[touch.identifier].x/w;var ly=Browser.lastTouches[touch.identifier].y/h;var dx=x-lx;var dy=y-ly;if(touch["deviceID"]===undefined)touch.deviceID=SDL.TOUCH_DEFAULT_ID;if(dx===0&&dy===0&&event.type==="touchmove")return false;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=_SDL_GetTicks();tempI64=[touch.deviceID>>>0,(tempDouble=touch.deviceID,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr+8>>2]=tempI64[0],HEAP32[ptr+12>>2]=tempI64[1];tempI64=[touch.identifier>>>0,(tempDouble=touch.identifier,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr+16>>2]=tempI64[0],HEAP32[ptr+20>>2]=tempI64[1];HEAPF32[ptr+24>>2]=x;HEAPF32[ptr+28>>2]=y;HEAPF32[ptr+32>>2]=dx;HEAPF32[ptr+36>>2]=dy;if(touch.force!==undefined){HEAPF32[ptr+40>>2]=touch.force}else{HEAPF32[ptr+40>>2]=event.type=="touchend"?0:1}break}case"unload":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];break}case"resize":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=event.w;HEAP32[ptr+8>>2]=event.h;break}case"joystick_button_up":case"joystick_button_down":{var state=event.type==="joystick_button_up"?0:1;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+4>>0]=event.index;HEAP8[ptr+5>>0]=event.button;HEAP8[ptr+6>>0]=state;break}case"joystick_axis_motion":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+4>>0]=event.index;HEAP8[ptr+5>>0]=event.axis;HEAP32[ptr+8>>2]=SDL.joystickAxisValueConversion(event.value);break}case"focus":{var SDL_WINDOWEVENT_FOCUS_GAINED=12;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP8[ptr+8>>0]=SDL_WINDOWEVENT_FOCUS_GAINED;break}case"blur":{var SDL_WINDOWEVENT_FOCUS_LOST=13;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP8[ptr+8>>0]=SDL_WINDOWEVENT_FOCUS_LOST;break}case"visibilitychange":{var SDL_WINDOWEVENT_SHOWN=1;var SDL_WINDOWEVENT_HIDDEN=2;var visibilityEventID=event.visible?SDL_WINDOWEVENT_SHOWN:SDL_WINDOWEVENT_HIDDEN;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP8[ptr+8>>0]=visibilityEventID;break}default:throw"Unhandled SDL event: "+event.type}},makeFontString:function(height,fontName){if(fontName.charAt(0)!="'"&&fontName.charAt(0)!='"'){fontName='"'+fontName+'"'}return height+"px "+fontName+", serif"},estimateTextWidth:function(fontData,text){var h=fontData.size;var fontString=SDL.makeFontString(h,fontData.name);var tempCtx=SDL.ttfContext;tempCtx.save();tempCtx.font=fontString;var ret=tempCtx.measureText(text).width|0;tempCtx.restore();return ret},allocateChannels:function(num){if(SDL.numChannels&&SDL.numChannels>=num&&num!=0)return;SDL.numChannels=num;SDL.channels=[];for(var i=0;i>1]/32768}}else if(SDL.audio.format==8){for(var j=0;j>0];channelData[j]=(v>=0?v-128:v+128)/128}}else if(SDL.audio.format==33056){for(var j=0;j>2]}}else{throw"Invalid SDL audio format "+SDL.audio.format+"!"}}},debugSurface:function(surfData){console.log("dumping surface "+[surfData.surf,surfData.source,surfData.width,surfData.height]);var image=surfData.ctx.getImageData(0,0,surfData.width,surfData.height);var data=image.data;var num=Math.min(surfData.width,surfData.height);for(var i=0;i0}},queryJoysticks:function(){for(var joystick in SDL.lastJoystickState){var state=SDL.getGamepad(joystick-1);var prevState=SDL.lastJoystickState[joystick];if(typeof state==="undefined")return;if(state===null)return;if(typeof state.timestamp!=="number"||state.timestamp!==prevState.timestamp||!state.timestamp){var i;for(i=0;ideviceIndex&&deviceIndex>=0){return gamepads[deviceIndex]}return null}};function _SDL_CreateRGBSurface(flags,width,height,depth,rmask,gmask,bmask,amask){return SDL.makeSurface(width,height,flags,false,"CreateRGBSurface",rmask,gmask,bmask,amask)}function _SDL_Flip(surf){}function _SDL_FreeSurface(surf){if(surf)SDL.freeSurface(surf)}function _SDL_Init(initFlags){SDL.startTime=Date.now();SDL.initFlags=initFlags;if(!Module["doNotCaptureKeyboard"]){var keyboardListeningElement=Module["keyboardListeningElement"]||document;keyboardListeningElement.addEventListener("keydown",SDL.receiveEvent);keyboardListeningElement.addEventListener("keyup",SDL.receiveEvent);keyboardListeningElement.addEventListener("keypress",SDL.receiveEvent);window.addEventListener("focus",SDL.receiveEvent);window.addEventListener("blur",SDL.receiveEvent);document.addEventListener("visibilitychange",SDL.receiveEvent)}if(typeof window !== 'undefined') window.addEventListener("unload",SDL.receiveEvent);SDL.keyboardState=_malloc(65536);_memset(SDL.keyboardState,0,65536);SDL.DOMEventToSDLEvent["keydown"]=768;SDL.DOMEventToSDLEvent["keyup"]=769;SDL.DOMEventToSDLEvent["keypress"]=771;SDL.DOMEventToSDLEvent["mousedown"]=1025;SDL.DOMEventToSDLEvent["mouseup"]=1026;SDL.DOMEventToSDLEvent["mousemove"]=1024;SDL.DOMEventToSDLEvent["wheel"]=1027;SDL.DOMEventToSDLEvent["touchstart"]=1792;SDL.DOMEventToSDLEvent["touchend"]=1793;SDL.DOMEventToSDLEvent["touchmove"]=1794;SDL.DOMEventToSDLEvent["unload"]=256;SDL.DOMEventToSDLEvent["resize"]=28673;SDL.DOMEventToSDLEvent["visibilitychange"]=512;SDL.DOMEventToSDLEvent["focus"]=512;SDL.DOMEventToSDLEvent["blur"]=512;SDL.DOMEventToSDLEvent["joystick_axis_motion"]=1536;SDL.DOMEventToSDLEvent["joystick_button_down"]=1539;SDL.DOMEventToSDLEvent["joystick_button_up"]=1540;return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};context.cannotHandleOffsetsInUniformArrayViews=function(g){function b(c,t){var s=g.createShader(t);g.shaderSource(s,c);g.compileShader(s);return s}try{var p=g.createProgram();g.attachShader(p,b("attribute vec4 p;void main(){gl_Position=p;}",g.VERTEX_SHADER));g.attachShader(p,b("precision lowp float;uniform vec4 u;void main(){gl_FragColor=u;}",g.FRAGMENT_SHADER));g.linkProgram(p);var h=new Float32Array(8);h[4]=1;g.useProgram(p);var l=g.getUniformLocation(p,"u");g.uniform4fv(l,h.subarray(4,8));return!g.getUniform(p,l)[0]}catch(e){return false}}();if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i0){return}if(surfData.isFlagSet(2097152)){SDL.copyIndexedColorData(surfData)}else if(!surfData.colors){var data=surfData.image.data;var buffer=surfData.buffer;assert(buffer%4==0,"Invalid buffer offset: "+buffer);var src=buffer>>2;var dst=0;var isScreen=surf==SDL.screen;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&255;data[dst+2]=val>>16&255;data[dst+3]=isScreen?255:val>>24&255;src++;dst+=4}}else{var data32=new Uint32Array(data.buffer);if(isScreen&&SDL.defaults.opaqueFrontBuffer){num=data32.length;data32.set(HEAP32.subarray(src,src+num));var data8=new Uint8Array(data.buffer);var i=3;var j=i+4*num;if(num%8==0){while(i>0]*4;var start=base+x*4;data[start]=colors[val];data[start+1]=colors[val+1];data[start+2]=colors[val+2]}s+=width*3}}surfData.ctx.putImageData(surfData.image,0,0)}function _SDL_UpperBlit(src,srcrect,dst,dstrect){return SDL.blitSurface(src,srcrect,dst,dstrect,false)}var SYSCALLS={buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){var fflush=Module["_fflush"];if(fflush)fflush(0);var buffers=SYSCALLS.buffers;if(buffers[1].length)SYSCALLS.printChar(1,10);if(buffers[2].length)SYSCALLS.printChar(2,10)}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;jLIMIT){return false}var MIN_TOTAL_MEMORY=16777216;var newSize=Math.max(oldSize,MIN_TOTAL_MEMORY);while(newSize>2]=value;return value}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();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(i>2]|0,c[k>>2]|0,32,0)|0;if(!l){m=c[2043]|0;n=c[k>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=n;Af(m,8571,g)|0;o=0;p=0;q=0;break}m=w(0,c[h>>2]|0,c[k>>2]|0,32,255,65280,16711680,-16777216)|0;if(!m){n=c[2043]|0;s=c[k>>2]|0;c[f>>2]=c[h>>2];c[f+4>>2]=s;Af(n,8612,f)|0;o=0;p=l;q=0;break}B(m|0)|0;c[i>>2]=1;c[h+44>>2]=c[m+8>>2];n=m+12|0;c[h+48>>2]=c[n>>2];c[h+56>>2]=c[m+20>>2];s=m+16|0;c[h+60>>2]=c[s>>2];k=r(c[n>>2]|0,c[s>>2]|0)|0;c[h+64>>2]=k;c[h+52>>2]=1;k=Oe(a,b,h)|0;if(k|0){s=c[2043]|0;c[e>>2]=k;Af(s,8650,e)|0;o=m;p=l;q=0;break}D(m|0);if(!(E(m|0,0,l|0,0)|0)){o=m;p=l;q=(x(l|0)|0)==0&1}else{o=m;p=l;q=0}}else{o=0;p=0;q=0}while(0);y(o|0);y(p|0);Xc(i);j=q;Y=d;return j|0}function oa(a){a=a|0;var b=0,d=0;b=a+2360|0;pa(c[b>>2]|0);c[b>>2]=0;c[a+2364>>2]=0;b=a+2344|0;a=c[b>>2]|0;if(!a){c[b>>2]=0;return}d=a+20|0;qa(c[d>>2]|0);c[d>>2]=0;pa(a);c[b>>2]=0;return}function pa(a){a=a|0;Qe(a);return}function qa(a){a=a|0;if(!a)return;ra(a);pa(a);return}function ra(a){a=a|0;var b=0,d=0,e=0;if(!a)return;pa(c[a+160>>2]|0);pa(c[a+172>>2]|0);sa(c[a+168>>2]|0);ta(a+124|0);ta(a+136|0);b=a+120|0;d=b+56|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));b=a+16|0;pa(c[b>>2]|0);c[b>>2]=0;b=a+176|0;if((c[b>>2]|0)>0){d=0;do{e=a+180+(d*20|0)+16|0;pa(c[e>>2]|0);c[e>>2]=0;d=d+1|0}while((d|0)<(c[b>>2]|0))}c[b>>2]=0;c[a+260>>2]=0;b=a+264|0;pa(c[b>>2]|0);c[b>>2]=0;c[a+12>>2]=0;return}function sa(a){a=a|0;if(!a)return;pa(a);return}function ta(a){a=a|0;if(!a)return;pa(c[a>>2]|0);c[a>>2]=0;return}function ua(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;h=c[e>>2]|0;i=e+88|0;j=c[i>>2]|0;if((f|0)<0|(g|0)<1|(g+f|0)>(j|0)){k=0;return k|0}l=b+2356|0;a:do if(!(c[l>>2]|0)){m=b+2344|0;n=c[m>>2]|0;do if(!n){o=va(1,0,144)|0;c[m>>2]=o;if(!o){k=0;return k|0}o=c[e>>2]|0;p=c[i>>2]|0;q=Cf(p|0,((p|0)<0)<<31>>31|0,o|0,((o|0)<0)<<31>>31|0)|0;o=wa(q,v()|0,1)|0;c[b+2360>>2]=o;if(((o|0?(c[b+2364>>2]=o,c[b+2368>>2]=0,q=c[m>>2]|0,p=c[b+2348>>2]|0,s=c[b+2352>>2]|0,t=p+1|0,u=s+-1|0,w=q+24|0,xa(),c[q+136>>2]=o,c[q>>2]=c[e>>2],o=e+4|0,x=q+4|0,c[x>>2]=c[o>>2],s>>>0>=2):0)?(s=a[p>>0]&3,y=q+8|0,c[y>>2]=s&255,z=d[p>>0]|0,c[q+12>>2]=(2?z>>>2:z)&3,z=d[p>>0]|0,A=(4?z>>>4:z)&3,c[q+16>>2]=A,(s&255)<=1):0)?!(A>>>0>1|(d[p>>0]|0)>63):0){ya(w,520)|0;za(0,w);c[q+64>>2]=q;c[w>>2]=c[e>>2];c[q+28>>2]=c[o>>2];c[q+96>>2]=c[e+72>>2];c[q+100>>2]=c[e+76>>2];c[q+104>>2]=c[e+80>>2];c[q+108>>2]=c[e+84>>2];c[q+112>>2]=c[i>>2];if(!(c[y>>2]|0))B=u>>>0>=(r(c[x>>2]|0,c[q>>2]|0)|0)>>>0&1;else B=Aa(q,t,u)|0;if(B|0){u=c[m>>2]|0;if((c[u+16>>2]|0)==1){C=j-f|0;D=u;E=16;break}else{c[b+2372>>2]=0;C=g;D=u;E=16;break}}}}else{C=g;D=n;E=16}while(0);do if((E|0)==16){n=c[D>>2]|0;u=c[D+112>>2]|0;if(c[D+8>>2]|0){t=C+f|0;if(!(Ba(D,t)|0))break;else F=t}else{t=b+2368|0;q=c[t>>2]|0;x=r(n,f)|0;y=(c[b+2348>>2]|0)+1+x|0;o=c[b+2364>>2]|0;w=o+x|0;x=D+12|0;p=c[x>>2]|0;A=(C|0)>0;if(!p)if(A){s=C+f+-1|0;z=y;G=0;H=w;while(1){Lf(H|0,z|0,n|0)|0;G=G+1|0;if((G|0)==(C|0))break;else{z=z+n|0;H=H+n|0}}I=o+(r(n,s)|0)|0}else I=q;else if(A){H=r(n,C+f+-1|0)|0;ga[c[9472+(p<<2)>>2]&31](q,y,w,n);if((C|0)!=1){z=y;G=w;J=1;do{z=z+n|0;K=G;G=G+n|0;ga[c[9472+(c[x>>2]<<2)>>2]&31](K,z,G,n);J=J+1|0}while((J|0)!=(C|0))}I=o+H|0}else I=q;c[t>>2]=I;F=C+f|0}if((F|0)<(u|0)){if(!(c[l>>2]|0))break a}else c[l>>2]=1;J=c[m>>2]|0;if(J|0){n=J+20|0;qa(c[n>>2]|0);c[n>>2]=0;pa(J)}c[m>>2]=0;J=c[b+2372>>2]|0;if((J|0)<=0)break a;n=c[e+84>>2]|0;G=(c[b+2364>>2]|0)+(r(n,h)|0)|0;z=c[e+76>>2]|0;if(Ca(G+z|0,(c[e+80>>2]|0)-z|0,(c[i>>2]|0)-n|0,h,J)|0)break a}while(0);J=b+2360|0;pa(c[J>>2]|0);c[J>>2]=0;c[b+2364>>2]=0;J=c[m>>2]|0;if(J|0){n=J+20|0;qa(c[n>>2]|0);c[n>>2]=0;pa(J)}c[m>>2]=0;k=0;return k|0}while(0);k=(c[b+2364>>2]|0)+(r(h,f)|0)|0;return k|0}function va(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=Cf(c|0,0,a|0,b|0)|0;e=v()|0;if(!((a|0)==0&(b|0)==0)?(f=Hf(2147418112,0,a|0,b|0)|0,b=v()|0,(d|0)!=(d|0)|(e|0)!=0|(b>>>0<0|(b|0)==0&f>>>0>>0)):0){g=0;return g|0}g=Re(a,c)|0;return g|0}function wa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=Cf(c|0,0,a|0,b|0)|0;e=v()|0;if(!((a|0)==0&(b|0)==0)?(f=Hf(2147418112,0,a|0,b|0)|0,b=v()|0,(d|0)!=(d|0)|(e|0)!=0|(b>>>0<0|(b|0)==0&f>>>0>>0)):0){g=0;return g|0}g=Pe(r(a,c)|0)|0;return g|0}function xa(){if(Te(10112)|0)return;if(c[2034]|0){c[2368]=0;c[2369]=1;c[2370]=2;c[2371]=3;c[2364]=0;c[2365]=1;c[2366]=2;c[2367]=3}c[2034]=0;Ue(10112)|0;return}function ya(a,b){a=a|0;b=b|0;var d=0;if((b&-256|0)!=512){d=0;return d|0}if(!a){d=1;return d|0}b=a;a=b+108|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(a|0));d=1;return d|0}function za(a,b){a=a|0;b=b|0;c[b+44>>2]=4;c[b+48>>2]=5;c[b+52>>2]=5;c[b+40>>2]=a;return}function Aa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;f=va(1,0,272)|0;if(!f){g=0;return g|0}c[f>>2]=0;c[f+4>>2]=2;_a();h=c[b>>2]|0;i=f+100|0;c[i>>2]=h;j=b+4|0;k=c[j>>2]|0;l=f+104|0;c[l>>2]=k;m=b+24|0;c[f+8>>2]=m;c[b+64>>2]=b;c[m>>2]=h;c[b+28>>2]=k;c[f>>2]=0;$a(f+24|0,d,e);if(!(ab(c[b>>2]|0,c[j>>2]|0,1,f,0)|0)){ra(f);pa(f);g=0;return g|0}a:do if(((c[f+176>>2]|0)==1?(c[f+180>>2]|0)==3:0)?(c[f+120>>2]|0)<=0:0){j=c[f+164>>2]|0;if((j|0)>0){e=c[f+168>>2]|0;d=0;do{if(a[c[e+(d*548|0)+4>>2]>>0]|0){n=14;break a}if(a[c[e+(d*548|0)+8>>2]>>0]|0){n=14;break a}if(a[c[e+(d*548|0)+12>>2]>>0]|0){n=14;break a}d=d+1|0}while((d|0)<(j|0))}c[b+132>>2]=1;j=c[i>>2]|0;d=c[l>>2]|0;e=Cf(d|0,((d|0)<0)<<31>>31|0,j|0,((j|0)<0)<<31>>31|0)|0;j=v()|0;c[f+20>>2]=0;d=wa(e,j,1)|0;c[f+16>>2]=d;if(!d){c[f>>2]=1;n=19}else n=17}else n=14;while(0);do if((n|0)==14){c[b+132>>2]=0;d=c[b>>2]|0;j=c[i>>2]|0;e=c[l>>2]|0;k=Cf(e|0,((e|0)<0)<<31>>31|0,j|0,((j|0)<0)<<31>>31|0)|0;j=v()|0;e=d&65535;h=Jf(d|0,((d|0)<0)<<31>>31|0,4)|0;d=Df(h|0,v()|0,e|0,0)|0;h=Df(d|0,v()|0,k|0,j|0)|0;j=wa(h,v()|0,4)|0;c[f+16>>2]=j;if(!j){c[f>>2]=1;c[f+20>>2]=0;n=19;break}else{c[f+20>>2]=j+(k<<2)+(e<<2);n=17;break}}while(0);if((n|0)==17){c[b+20>>2]=f;g=1;return g|0}else if((n|0)==19){ra(f);pa(f);g=0;return g|0}return 0}function Ba(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0;h=c[f+20>>2]|0;if((c[h+108>>2]|0)>=(g|0)){i=1;return i|0}j=f+132|0;if(!(c[j>>2]|0)){Da();f=c[h+16>>2]|0;if(!(c[j>>2]|0)){i=Ia(h,f,c[h+100>>2]|0,c[h+104>>2]|0,g,1)|0;return i|0}else k=f}else k=c[h+16>>2]|0;f=c[h+100>>2]|0;j=h+112|0;l=c[j>>2]|0;m=(l|0)/(f|0)|0;n=l-(r(m,f)|0)|0;o=h+24|0;p=r(c[h+104>>2]|0,f)|0;q=r(f,g)|0;s=c[h+148>>2]|0;a:do if((l|0)<(q|0)){t=h+152|0;u=c[t>>2]|0;if(!u)w=0;else{x=r(c[h+156>>2]|0,u?m>>u:m)|0;w=c[(c[h+160>>2]|0)+(x+(u?n>>u:n)<<2)>>2]|0}u=h+48|0;if(!(c[u>>2]|0)){x=h+168|0;y=h+44|0;z=h+160|0;A=h+156|0;B=h+40|0;C=h+36|0;D=m;E=n;F=l;G=(c[x>>2]|0)+(w*548|0)|0;while(1){if(!(E&s)){H=c[t>>2]|0;if(!H)I=0;else{J=r(c[A>>2]|0,H?D>>H:D)|0;I=c[(c[z>>2]|0)+(J+(H?E>>H:E)<<2)>>2]|0}K=(c[x>>2]|0)+(I*548|0)|0}else K=G;H=c[y>>2]|0;if((H|0)>31){Ea(o);L=c[y>>2]|0}else L=H;H=c[K>>2]|0;J=o;M=c[J>>2]|0;N=c[J+4>>2]|0;J=If(M|0,N|0,L&63|0)|0;v()|0;O=J&255;J=H+(O<<2)|0;P=a[J>>0]|0;if((P&255)>8){Q=L+8|0;c[y>>2]=Q;R=If(M|0,N|0,Q&63|0)|0;v()|0;S=J+((e[H+(O<<2)+2>>1]|0)<<2)+(((1<<(P&255)+-8)+-1&R)<<2)|0;T=S;U=a[S>>0]|0;V=Q}else{T=J;U=P;V=L}P=V+(U&255)|0;c[y>>2]=P;J=b[T+2>>1]|0;Q=J&65535;do if((J&65535)<256){a[k+F>>0]=J;S=F+1|0;R=E+1|0;if((R|0)>=(f|0)){O=D+1|0;if((D|0)<(g|0)&(O&15|0)==0){Fa(h,O);W=S;X=O;Y=0;Z=K}else{W=S;X=O;Y=0;Z=K}}else{W=S;X=D;Y=R;Z=K}}else{if((J&65535)>=280){_=F;$=0;aa=u;break a}R=Q+-258|0;S=1?R>>1:R;if((J&65535)<260){ba=Q+-256|0;ca=P;da=M;ea=N}else{R=(Ga(o,S)|0)+(((J&1|2)&65535)<>2]|0;da=c[S>>2]|0;ea=c[S+4>>2]|0}S=ba+1|0;R=c[K+16>>2]|0;O=If(da|0,ea|0,ca&63|0)|0;v()|0;H=O&255;O=R+(H<<2)|0;fa=a[O>>0]|0;if((fa&255)>8){ga=ca+8|0;c[y>>2]=ga;ha=If(da|0,ea|0,ga&63|0)|0;v()|0;ia=O+((e[R+(H<<2)+2>>1]|0)<<2)+(((1<<(fa&255)+-8)+-1&ha)<<2)|0;ja=ia;ka=a[ia>>0]|0;la=ga}else{ja=O;ka=fa;la=ca}fa=la+(ka&255)|0;c[y>>2]=fa;O=b[ja+2>>1]|0;ga=O&65535;if((fa|0)>31)Ea(o);fa=ga+-2|0;ia=1?fa>>1:fa;if((O&65535)<4)ma=ga;else ma=(Ga(o,ia)|0)+((ga&1|2)<120)na=ma+-119|0;else{ia=d[3584+ma>>0]|0;ga=(r(4?ia>>>4:ia,f)|0)+(8-(ia&15))|0;na=(ga|0)>1?ga:1}if((p-F|0)<(S|0)|(F|0)<(na|0)){_=F;$=0;aa=u;break a}ga=k+F|0;ia=ga+(0-na)|0;b:do if((S|0)>7){switch(na|0){case 1:{O=a[ia>>0]|0;oa=r(O&255,16843009)|0;pa=O;break}case 2:{O=d[ia>>0]|d[ia+1>>0]<<8;oa=(O&65535)*65537|0;pa=O&255;break}case 4:{O=d[ia>>0]|d[ia+1>>0]<<8|d[ia+2>>0]<<16|d[ia+3>>0]<<24;oa=O;pa=O&255;break}default:{qa=54;break b}}do if(ga&3){O=ia+1|0;fa=ga+1|0;a[ga>>0]=pa;ha=oa<<24|(8?oa>>>8:oa);if(!(fa&3)){ra=ha;sa=ba;ta=fa;ua=O;va=2?ba>>>2:ba;qa=48;break}H=O;O=fa;fa=ha;ha=ba;while(1){R=H;H=H+1|0;wa=O;O=O+1|0;a[wa>>0]=a[R>>0]|0;fa=fa<<24|(8?fa>>>8:fa);xa=ha+-1|0;if(!(O&3))break;else ha=xa}if((ha|0)>4){ra=fa;sa=xa;ta=O;ua=H;va=2?xa>>2:xa;qa=48}else{ya=0;za=xa;Aa=O;Ba=H}}else{ra=oa;sa=S;ta=ga;ua=ia;va=2?S>>>2:S;qa=48}while(0);if((qa|0)==48){qa=0;R=0;do{c[ta+(R<<2)>>2]=ra;R=R+1|0}while((R|0)<(va|0));ya=R<<2;za=sa;Aa=ta;Ba=ua}if((ya|0)>=(za|0))break;wa=ya;do{a[Aa+wa>>0]=a[Ba+wa>>0]|0;wa=wa+1|0}while((wa|0)!=(za|0))}else qa=54;while(0);do if((qa|0)==54){qa=0;if((na|0)>=(S|0)){Lf(ga|0,ia|0,S|0)|0;break}if((S|0)<=0)break;wa=0;do{a[ga+wa>>0]=a[ia+wa>>0]|0;wa=wa+1|0}while((wa|0)!=(S|0))}while(0);ia=S+F|0;ga=S+E|0;if((ga|0)<(f|0)){Ca=D;Ha=ga}else{wa=D;R=ga;while(1){ga=R-f|0;Ja=wa+1|0;if((wa|0)<(g|0)&(Ja&15|0)==0)Fa(h,Ja);if((ga|0)<(f|0)){Ca=Ja;Ha=ga;break}else{wa=Ja;R=ga}}}if((ia|0)>=(q|0)|(Ha&s|0)==0){W=ia;X=Ca;Y=Ha;Z=K;break}R=c[t>>2]|0;if(!R)Ka=0;else{wa=r(c[A>>2]|0,R?Ca>>R:Ca)|0;Ka=c[(c[z>>2]|0)+(wa+(R?Ha>>R:Ha)<<2)>>2]|0}W=ia;X=Ca;Y=Ha;Z=(c[x>>2]|0)+(Ka*548|0)|0}while(0);if(c[u>>2]|0)break;if((c[B>>2]|0)==(c[C>>2]|0))La=(c[y>>2]|0)>64&1;else La=0;c[u>>2]=La;if((W|0)<(q|0)&(La|0)==0){D=X;E=Y;F=W;G=Z}else{Ma=X;Na=W;Oa=u;qa=73;break a}}c[u>>2]=1;Ma=X;Na=W;Oa=u;qa=73}else{Ma=m;Na=l;Oa=u;qa=73}}else{Ma=m;Na=l;Oa=h+48|0;qa=73}while(0);if((qa|0)==73){Fa(h,(Ma|0)>(g|0)?g:Ma);_=Na;$=1;aa=Oa}if(!(c[aa>>2]|0))if((c[h+40>>2]|0)==(c[h+36>>2]|0))Pa=(c[h+44>>2]|0)>64&1;else Pa=0;else Pa=1;c[aa>>2]=Pa;if($|0?!((p|0)>(_|0)&(Pa|0)!=0):0){c[j>>2]=_;i=1;return i|0}c[h>>2]=(Pa|0)==0?3:5;i=0;return i|0}function Ca(c,f,g,h,i){c=c|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;j=Y;Y=Y+256|0;k=j;l=(i|0)/25|0;if(i>>>0>100){m=0;Y=j;return m|0}if((c|0)==0|(f|0)<1|(g|0)<1){m=0;Y=j;return m|0}i=f+-1|0;n=(l<<1|1|0)>(f|0)?(1?i>>1:i):l;l=g+-1|0;o=(n<<1|1|0)>(g|0)?(1?l>>1:l):n;n=0-o|0;if((o|0)<=0){m=1;Y=j;return m|0}p=o<<1|1;q=f<<1;s=r(p+1|0,q)|0;t=wa(1,0,q+4094+s|0)|0;if(!t){m=0;Y=j;return m|0}u=t+((r(p,f)|0)<<1)|0;v=u+(0-f<<1)|0;Nf(v|0,0,q|0)|0;w=t+s|0;s=r(p,p)|0;Nf(k|0,0,256)|0;p=0;x=c;y=255;z=0;A=0;B=255;while(1){C=0;D=y;E=z;F=B;G=A;do{H=d[x+C>>0]|0;I=(F|0)>(H|0);D=I?H:D;F=I?H:F;I=(G|0)<(H|0);E=I?H:E;G=I?H:G;a[k+H>>0]=1;C=C+1|0}while((C|0)!=(f|0));p=p+1|0;if((p|0)==(g|0))break;else{x=x+h|0;y=D;z=E;A=G;B=F}}B=t;A=w+q|0;z=262144/(s>>>0)|0;s=-1;y=0;x=0;p=G-F|0;while(1){if(a[k+y>>0]|0){F=x+1|0;if((s|0)>-1){G=y-s|0;J=y;K=F;L=(G|0)<(p|0)?G:p}else{J=y;K=F;L=p}}else{J=s;K=x;L=p}y=y+1|0;if((y|0)==256)break;else{s=J;x=K;p=L}}p=A+2046|0;A=L<<2;x=L*12|0;L=2?x>>2:x;x=A-L|0;J=1;do{if((J|0)>(L|0))if((A|0)>(J|0))M=(r(A-J|0,L)|0)/(x|0)|0;else M=0;else M=J;s=2?M>>2:M;b[p+(J<<1)>>1]=s;b[p+(0-J<<1)>>1]=0-s;J=J+1|0}while((J|0)!=1024);b[p>>1]=0;if((K|0)>2&(n|0)<(g|0)){K=(f|0)>0;J=(o|0)<0;M=f-o|0;x=o+-1|0;L=o+1|0;A=~o;s=u+(i<<1)|0;i=q+-2-o|0;q=n;n=c;y=c;c=B;k=v;while(1){v=k;k=c;if(K){F=0;G=0;do{G=(G&65535)+(d[n+F>>0]|0)|0;C=G+(e[v+(F<<1)>>1]|0)|0;H=k+(F<<1)|0;b[u+(F<<1)>>1]=C-(e[H>>1]|0);b[H>>1]=C;F=F+1|0}while((F|0)!=(f|0))}F=k+(f<<1)|0;c=(F|0)==(u|0)?B:F;n=(q|0)>-1&(q|0)<(l|0)?n+h|0:n;if((q|0)<(o|0))N=y;else{if(J)O=0;else{F=0;do{v=r((e[u+(o-F<<1)>>1]|0)+(e[u+(x+F<<1)>>1]|0)&65535,z)|0;b[w+(F<<1)>>1]=16?v>>>16:v;F=F+1|0}while((F|0)!=(L|0));O=L}if((O|0)<(M|0)){F=O;do{v=r((e[u+(F+o<<1)>>1]|0)-(e[u+(F+A<<1)>>1]|0)&65535,z)|0;b[w+(F<<1)>>1]=16?v>>>16:v;F=F+1|0}while((F|0)!=(M|0));P=M}else P=O;if((P|0)<(f|0)){F=P;do{v=r((e[s>>1]<<1)-(e[u+(i-F<<1)>>1]|0)-(e[u+(F+A<<1)>>1]|0)&65535,z)|0;b[w+(F<<1)>>1]=16?v>>>16:v;F=F+1|0}while((F|0)!=(f|0))}if(K){F=0;do{v=y+F|0;G=d[v>>0]|0;if((E|0)>(G|0)&(D|0)<(G|0)){C=(b[p+((e[w+(F<<1)>>1]|0)-(G<<2)<<1)>>1]|0)+G|0;if(C>>>0>255)Q=((31?C>>31:C)&-255)+255|0;else Q=C&255;a[v>>0]=Q}F=F+1|0}while((F|0)!=(f|0))}N=y+h|0}q=q+1|0;if((q|0)==(g|0))break;else y=N}}pa(t);m=1;Y=j;return m|0}function Da(){if(Te(9944)|0)return;c[2028]=0;Ue(9944)|0;return}function Ea(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;b=a+16|0;e=a+20|0;f=c[e>>2]|0;a:do if((f|0)>7){g=a+8|0;h=c[a+12>>2]|0;i=f;j=c[b>>2]|0;while(1){if(j>>>0>=h>>>0){k=i;break a}l=a;m=If(c[l>>2]|0,c[l+4>>2]|0,8)|0;l=v()|0;n=a;c[n>>2]=m;c[n+4>>2]=l;n=Jf(d[(c[g>>2]|0)+j>>0]|0|0,0,56)|0;o=v()|0|l;l=a;c[l>>2]=n|m;c[l+4>>2]=o;j=j+1|0;c[b>>2]=j;o=i+-8|0;c[e>>2]=o;if((i|0)<=15){k=o;break}else i=o}}else k=f;while(0);f=a+24|0;if((c[f>>2]|0)==0?((k|0)<65?1:(c[b>>2]|0)!=(c[a+12>>2]|0)):0)return;c[f>>2]=1;c[e>>2]=0;return}function Fa(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;d=c[a+8>>2]|0;e=c[d+40>>2]|0;f=e+12|0;g=a+108|0;h=c[((c[f>>2]|0)>>>0<2?d+84|0:g)>>2]|0;i=c[g>>2]|0;j=(i|0)<(h|0)?h:i;if((j|0)>=(b|0)){k=a+116|0;c[k>>2]=b;c[g>>2]=b;return}i=c[d>>2]|0;d=(c[e+136>>2]|0)+(r(i,j)|0)|0;Sa(a+180|0,j,b,(c[a+16>>2]|0)+(r(c[a+100>>2]|0,j)|0)|0,d);h=c[f>>2]|0;if(!h){k=a+116|0;c[k>>2]=b;c[g>>2]=b;return}l=e+140|0;e=r(i,b+-1-j|0)|0;ga[c[9472+(h<<2)>>2]&31](c[l>>2]|0,d,d,i);h=j+1|0;if((h|0)!=(b|0)){j=d;m=h;do{h=j;j=j+i|0;ga[c[9472+(c[f>>2]<<2)>>2]&31](h,j,j,i);m=m+1|0}while((m|0)!=(b|0))}c[l>>2]=d+e;k=a+116|0;c[k>>2]=b;c[g>>2]=b;return}function Ga(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=a+24|0;if(!((b|0)<25&(c[e>>2]|0)==0)){c[e>>2]=1;c[a+20>>2]=0;f=0;return f|0}g=a;h=c[g>>2]|0;i=c[g+4>>2]|0;g=a+20|0;j=c[g>>2]|0;k=If(h|0,i|0,j&63|0)|0;v()|0;l=c[3712+(b<<2)>>2]&k;k=j+b|0;c[g>>2]=k;b=a+16|0;if((k|0)<=7){f=l;return f|0}j=a+8|0;m=c[a+12>>2]|0;n=c[b>>2]|0;o=h;h=i;i=k;while(1){if(n>>>0>=m>>>0){p=i;break}k=If(o|0,h|0,8)|0;q=v()|0;r=a;c[r>>2]=k;c[r+4>>2]=q;r=Jf(d[(c[j>>2]|0)+n>>0]|0|0,0,56)|0;o=r|k;h=v()|0|q;q=a;c[q>>2]=o;c[q+4>>2]=h;n=n+1|0;c[b>>2]=n;q=i+-8|0;c[g>>2]=q;if((i|0)<=15){p=q;break}else i=q}if((p|0)<65?1:(c[b>>2]|0)!=(c[a+12>>2]|0)){f=l;return f|0}c[e>>2]=1;c[g>>2]=0;f=l;return f|0}function Ha(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;d=a+108|0;e=c[d>>2]|0;f=b-e|0;g=a+100|0;if((f|0)<=0){h=a+116|0;c[h>>2]=b;c[d>>2]=b;return}i=c[g>>2]|0;j=a+8|0;k=a+20|0;l=a+176|0;m=f;f=(c[a+16>>2]|0)+((r(i,e)|0)<<2)|0;n=e;o=e;e=i;while(1){i=(m|0)<16?m:16;p=c[j>>2]|0;q=c[p+40>>2]|0;s=c[p>>2]|0;p=r(s,i)|0;t=(c[q+136>>2]|0)+(r(s,n)|0)|0;u=c[k>>2]|0;v=c[l>>2]|0;w=o+i|0;if((v|0)>0){x=v+-1|0;La(a+180+(x*20|0)|0,o,w,f,u);if((v|0)!=1){v=x;do{x=v;v=v+-1|0;La(a+180+(v*20|0)|0,o,w,u,u)}while((x|0)>1)}}else if((u|0)!=(f|0))Lf(u|0,f|0,r(i<<2,e)|0)|0;Za(u,t,p);w=i+n|0;v=q+12|0;x=c[v>>2]|0;if(x|0){y=q+140|0;z=c[y>>2]|0;if((m|0)>0){A=r(s,i+-1|0)|0;ga[c[9472+(x<<2)>>2]&31](z,t,t,s);x=n+1|0;if((x|0)!=(w|0)){B=t;C=x;do{x=B;B=B+s|0;ga[c[9472+(c[v>>2]<<2)>>2]&31](x,B,B,s);C=C+1|0}while((C|0)!=(w|0))}D=t+A|0}else D=z;c[y>>2]=D}C=m-i|0;s=c[g>>2]|0;if((C|0)<=0)break;B=f+((r(s,i)|0)<<2)|0;m=C;f=B;n=w;o=c[d>>2]|0;e=s}h=a+116|0;c[h>>2]=b;c[d>>2]=b;return}function Ia(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Fa=0,Ha=0,Ia=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0;l=f+112|0;m=c[l>>2]|0;n=(m|0)/(h|0)|0;o=m-(r(n,h)|0)|0;p=f+24|0;q=g+(m<<2)|0;s=g+((r(i,h)|0)<<2)|0;i=r(j,h)|0;t=g+(i<<2)|0;u=f+120|0;w=c[u>>2]|0;x=w+280|0;y=f+56|0;z=(c[y>>2]|0)==0?16777216:n;A=(w|0)>0;w=f+124|0;B=A?w:0;C=c[f+148>>2]|0;a:do if((m|0)<(i|0)){D=c[f+152>>2]|0;if(!D)E=0;else{F=r(c[f+156>>2]|0,D?n>>D:n)|0;E=c[(c[f+160>>2]|0)+(F+(D?o>>D:o)<<2)>>2]|0}D=g;F=f+64|0;G=f+96|0;H=f+152|0;I=f+136|0;J=f+168|0;K=f+160|0;L=f+156|0;M=f+44|0;N=(k|0)!=0;O=f+48|0;P=f+40|0;Q=f+36|0;R=B+4|0;S=s;T=(k|0)==0;U=n;V=o;W=q;X=q;Y=z;Z=(c[f+168>>2]|0)+(E*548|0)|0;while(1){_=X;if((U|0)<(Y|0))$=Y;else{aa=W-D|0;c[F>>2]=c[p>>2];c[F+4>>2]=c[p+4>>2];c[F+8>>2]=c[p+8>>2];c[F+12>>2]=c[p+12>>2];c[F+16>>2]=c[p+16>>2];c[F+20>>2]=c[p+20>>2];c[F+24>>2]=c[p+24>>2];c[F+28>>2]=c[p+28>>2];c[G>>2]=2?aa>>2:aa;if((c[u>>2]|0)>0)Ja(w,I);$=U+8|0}if(!(V&C)){aa=c[H>>2]|0;if(!aa)ba=0;else{ca=r(c[L>>2]|0,aa?U>>aa:U)|0;ba=c[(c[K>>2]|0)+(ca+(aa?V>>aa:V)<<2)>>2]|0}da=(c[J>>2]|0)+(ba*548|0)|0}else da=Z;do if(!(c[da+28>>2]|0)){if((c[M>>2]|0)>31)Ea(p);if(!(c[da+32>>2]|0)){aa=c[da>>2]|0;ca=p;ea=c[ca>>2]|0;ga=c[ca+4>>2]|0;ca=c[M>>2]|0;ha=If(ea|0,ga|0,ca&63|0)|0;v()|0;ia=ha&255;ha=aa+(ia<<2)|0;ja=a[ha>>0]|0;if((ja&255)>8){ka=ca+8|0;c[M>>2]=ka;la=If(ea|0,ga|0,ka&63|0)|0;v()|0;ma=ha+((e[aa+(ia<<2)+2>>1]|0)<<2)+(((1<<(ja&255)+-8)+-1&la)<<2)|0;na=ma;oa=a[ma>>0]|0;pa=ka}else{na=ha;oa=ja;pa=ca}c[M>>2]=pa+(oa&255);if(!(c[O>>2]|0)){qa=e[na+2>>1]|0;ra=ea;sa=ga}else{ta=U;ua=W;va=O;wa=1;xa=111;break a}}else{ga=p;ea=c[ga>>2]|0;ca=c[ga+4>>2]|0;ga=c[M>>2]|0;ja=If(ea|0,ca|0,ga&63|0)|0;v()|0;ha=ja&63;ja=c[da+36+(ha<<3)>>2]|0;ka=c[da+36+(ha<<3)+4>>2]|0;ha=ja+ga|0;if((ja|0)<256){c[M>>2]=ha;c[W>>2]=ka;ya=0}else{c[M>>2]=ha+-256;ya=ka}if(c[O>>2]|0){ta=U;ua=W;va=O;wa=1;xa=111;break a}if((c[P>>2]|0)==(c[Q>>2]|0)?(c[M>>2]|0)>=65:0){za=U;Aa=W;Ba=O;xa=108;break a}if(!ya){Ca=X;Da=_;xa=46;break}else{qa=ya;ra=ea;sa=ca}}if((c[P>>2]|0)==(c[Q>>2]|0)?(c[M>>2]|0)>=65:0){za=U;Aa=W;Ba=O;xa=108;break a}if((qa|0)<256){if(c[da+20>>2]|0){Fa=X;Ha=_;Ia=c[da+24>>2]|qa<<8;xa=45;break}ca=c[da+4>>2]|0;ea=c[M>>2]|0;ka=If(ra|0,sa|0,ea&63|0)|0;v()|0;ha=ka&255;ka=ca+(ha<<2)|0;ja=a[ka>>0]|0;if((ja&255)>8){ga=ea+8|0;c[M>>2]=ga;ma=If(ra|0,sa|0,ga&63|0)|0;v()|0;la=ka+((e[ca+(ha<<2)+2>>1]|0)<<2)+(((1<<(ja&255)+-8)+-1&ma)<<2)|0;Ka=la;La=a[la>>0]|0;Ma=ga}else{Ka=ka;La=ja;Ma=ea}ea=Ma+(La&255)|0;c[M>>2]=ea;ja=e[Ka+2>>1]|0;if((ea|0)>31){Ea(p);ka=p;Na=c[M>>2]|0;Oa=c[ka>>2]|0;Pa=c[ka+4>>2]|0}else{Na=ea;Oa=ra;Pa=sa}ea=c[da+8>>2]|0;ka=If(Oa|0,Pa|0,Na&63|0)|0;v()|0;ga=ka&255;ka=ea+(ga<<2)|0;la=a[ka>>0]|0;if((la&255)>8){ma=Na+8|0;c[M>>2]=ma;ha=If(Oa|0,Pa|0,ma&63|0)|0;v()|0;ca=ka+((e[ea+(ga<<2)+2>>1]|0)<<2)+(((1<<(la&255)+-8)+-1&ha)<<2)|0;Qa=ca;Ra=a[ca>>0]|0;Sa=ma}else{Qa=ka;Ra=la;Sa=Na}la=Sa+(Ra&255)|0;c[M>>2]=la;ka=e[Qa+2>>1]|0;ma=c[da+12>>2]|0;ca=If(Oa|0,Pa|0,la&63|0)|0;v()|0;ha=ca&255;ca=ma+(ha<<2)|0;ga=a[ca>>0]|0;if((ga&255)>8){ea=la+8|0;c[M>>2]=ea;ia=If(Oa|0,Pa|0,ea&63|0)|0;v()|0;aa=ca+((e[ma+(ha<<2)+2>>1]|0)<<2)+(((1<<(ga&255)+-8)+-1&ia)<<2)|0;Ta=aa;Ua=a[aa>>0]|0;Va=ea}else{Ta=ca;Ua=ga;Va=la}la=Va+(Ua&255)|0;c[M>>2]=la;if(c[O>>2]|0){ta=U;ua=W;va=O;wa=1;xa=111;break a}if(!((la|0)<65?1:(c[P>>2]|0)!=(c[Q>>2]|0))){za=U;Aa=W;Ba=O;xa=108;break a}Fa=X;Ha=_;Ia=ja<<16|qa<<8|ka|(e[Ta+2>>1]|0)<<24;xa=45;break}if((qa|0)>=280){if((qa|0)>=(x|0))break a;ka=qa+-280|0;ja=c[B>>2]|0;if(X>>>0>>0){la=W+-1+(0-_)|0;ga=2?la>>>2:la;la=X;do{ca=c[la>>2]|0;la=la+4|0;ea=c[R>>2]|0;aa=r(ca,506832829)|0;c[ja+((ea?aa>>>ea:aa)<<2)>>2]=ca}while(la>>>0>>0);la=X+4+(ga<<2)|0;Wa=la;Xa=la}else{Wa=X;Xa=_}Fa=Wa;Ha=Xa;Ia=c[ja+(ka<<2)>>2]|0;xa=45;break}la=qa+-256|0;ca=qa+-258|0;aa=1?ca>>1:ca;if((qa|0)<260){Ya=la;Za=ra;_a=sa}else{ca=(Ga(p,aa)|0)+((la&1|2)<>2]|0;_a=c[aa+4>>2]|0}aa=Ya+1|0;ca=c[da+16>>2]|0;la=c[M>>2]|0;ea=If(Za|0,_a|0,la&63|0)|0;v()|0;ia=ea&255;ea=ca+(ia<<2)|0;ha=a[ea>>0]|0;if((ha&255)>8){ma=la+8|0;c[M>>2]=ma;$a=If(Za|0,_a|0,ma&63|0)|0;v()|0;ab=ea+((e[ca+(ia<<2)+2>>1]|0)<<2)+(((1<<(ha&255)+-8)+-1&$a)<<2)|0;bb=ab;cb=a[ab>>0]|0;db=ma}else{bb=ea;cb=ha;db=la}la=db+(cb&255)|0;c[M>>2]=la;ha=b[bb+2>>1]|0;ea=ha&65535;if((la|0)>31)Ea(p);la=ea+-2|0;ma=1?la>>1:la;if((ha&65535)<4)eb=ea;else eb=(Ga(p,ma)|0)+((ea&1|2)<120)fb=eb+-119|0;else{ma=d[3584+eb>>0]|0;ea=(r(4?ma>>>4:ma,h)|0)+(8-(ma&15))|0;fb=(ea|0)>1?ea:1}if(c[O>>2]|0){ta=U;ua=W;va=O;wa=1;xa=111;break a}if((c[P>>2]|0)==(c[Q>>2]|0)?(c[M>>2]|0)>=65:0){za=U;Aa=W;Ba=O;xa=108;break a}ea=W;ma=ea-D|0;if(((2?ma>>2:ma)|0)<(fb|0))break a;ma=S-ea|0;if(((2?ma>>2:ma)|0)<(aa|0))break a;ma=W+(0-fb<<2)|0;do if((ea&3|0)==0&((aa|0)>3&(fb|0)<3)){if((fb|0)==1){ha=c[ma>>2]|0;gb=ha;hb=ha;ib=ha}else{ha=ma;la=c[ha>>2]|0;gb=la;hb=la;ib=c[ha+4>>2]|0}if(!(ea&4)){jb=aa;kb=W;lb=ma;mb=hb;nb=ib}else{c[W>>2]=gb;jb=Ya;kb=W+4|0;lb=ma+4|0;mb=ib;nb=hb}ha=1?jb>>>1:jb;la=0;do{ab=kb+(la<<3)|0;c[ab>>2]=mb;c[ab+4>>2]=nb;la=la+1|0}while(la>>>0>>0);ha=la<<1;if(!(jb&1))break;c[kb+(ha<<2)>>2]=c[lb+(ha<<2)>>2]}else{if((fb|0)>=(aa|0)){Lf(W|0,ma|0,aa<<2|0)|0;break}if((aa|0)<=0)break;ha=0;do{c[W+(ha<<2)>>2]=c[ma+(ha<<2)>>2];ha=ha+1|0}while((ha|0)!=(aa|0))}while(0);ma=W+(aa<<2)|0;ea=aa+V|0;b:do if((ea|0)<(h|0)){ob=U;pb=ea}else{if(T){ka=ea;ja=U;while(1){ga=ka-h|0;ha=ja+1|0;if((ga|0)<(h|0)){ob=ha;pb=ga;break b}else{ka=ga;ja=ha}}}ja=ea;ka=U;while(1){ha=ja-h|0;ga=ka+1|0;if((ka|0)<(j|0)&(ga&15|0)==0)fa[k&3](f,ga);if((ha|0)<(h|0)){ob=ga;pb=ha;break}else{ja=ha;ka=ga}}}while(0);if(!(pb&C))qb=da;else{ea=c[H>>2]|0;if(!ea)rb=0;else{aa=r(c[L>>2]|0,ea?ob>>ea:ob)|0;rb=c[(c[K>>2]|0)+(aa+(ea?pb>>ea:pb)<<2)>>2]|0}qb=(c[J>>2]|0)+(rb*548|0)|0}if(!(A&X>>>0>>0)){sb=ma;tb=ob;ub=pb;vb=qb;wb=X;break}ea=c[B>>2]|0;aa=W+3+((Ya<<2)-_)|0;ka=2?aa>>>2:aa;aa=X;do{ja=c[aa>>2]|0;aa=aa+4|0;ga=c[R>>2]|0;ha=r(ja,506832829)|0;c[ea+((ga?ha>>>ga:ha)<<2)>>2]=ja}while(aa>>>0>>0);sb=ma;tb=ob;ub=pb;vb=qb;wb=X+4+(ka<<2)|0}else{Fa=X;Ha=_;Ia=c[da+24>>2]|0;xa=45}while(0);if((xa|0)==45){xa=0;c[W>>2]=Ia;Ca=Fa;Da=Ha;xa=46}if((xa|0)==46){xa=0;_=W+4|0;aa=V+1|0;if((aa|0)>=(h|0)){ea=U+1|0;if(N&(U|0)<(j|0)&(ea&15|0)==0)fa[k&3](f,ea);if(A&Ca>>>0<_>>>0){ja=c[B>>2]|0;ha=(Ca>>>0>W>>>0?Ca:W)+3+(0-Da)|0;ga=2?ha>>>2:ha;ha=Ca;while(1){la=c[ha>>2]|0;ab=c[R>>2]|0;$a=r(la,506832829)|0;c[ja+((ab?$a>>>ab:$a)<<2)>>2]=la;if(ha>>>0>>0)ha=ha+4|0;else break}sb=_;tb=ea;ub=0;vb=da;wb=Ca+4+(ga<<2)|0}else{sb=_;tb=ea;ub=0;vb=da;wb=Ca}}else{sb=_;tb=U;ub=aa;vb=da;wb=Ca}}if(sb>>>0>>0){U=tb;V=ub;W=sb;X=wb;Y=$;Z=vb}else{za=tb;Aa=sb;Ba=O;xa=108;break}}}else{za=n;Aa=q;Ba=f+48|0;xa=108}while(0);if((xa|0)==108)if(!(c[Ba>>2]|0))if((c[f+40>>2]|0)==(c[f+36>>2]|0)){ta=za;ua=Aa;va=Ba;wa=(c[f+44>>2]|0)>64&1;xa=111}else{ta=za;ua=Aa;va=Ba;wa=0;xa=111}else{ta=za;ua=Aa;va=Ba;wa=1;xa=111}if((xa|0)==111){c[va>>2]=wa;va=(wa|0)==0;if(ua>>>0>>0&((va|(c[y>>2]|0)==0)^1)){c[f>>2]=5;y=f+64|0;c[p>>2]=c[y>>2];c[p+4>>2]=c[y+4>>2];c[p+8>>2]=c[y+8>>2];c[p+12>>2]=c[y+12>>2];c[p+16>>2]=c[y+16>>2];c[p+20>>2]=c[y+20>>2];c[p+24>>2]=c[y+24>>2];c[p+28>>2]=c[y+28>>2];c[l>>2]=c[f+96>>2];if((c[u>>2]|0)<=0){xb=1;return xb|0}Ja(f+136|0,w);xb=1;return xb|0}if(va){if(k|0)fa[k&3](f,(ta|0)>(j|0)?j:ta);c[f>>2]=0;ta=ua-g|0;c[l>>2]=2?ta>>2:ta;xb=1;return xb|0}}c[f>>2]=3;xb=0;return xb|0}function Ja(a,b){a=a|0;b=b|0;Lf(c[b>>2]|0,c[a>>2]|0,4<>2]|0)|0;return}function Ka(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,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;d=a+108|0;e=c[d>>2]|0;f=b-e|0;if((f|0)<=0){c[d>>2]=b;return}g=c[a+100>>2]|0;h=(c[a+16>>2]|0)+((r(g,e)|0)<<2)|0;i=c[a+8>>2]|0;j=c[a+20>>2]|0;k=c[i>>2]<<2;l=c[a+176>>2]|0;m=j;if((l|0)>0){n=l+-1|0;La(a+180+(n*20|0)|0,e,b,h,m);if((l|0)!=1){l=n;do{n=l;l=l+-1|0;La(a+180+(l*20|0)|0,e,b,m,m)}while((n|0)>1)}}else if((h|0)!=(m|0))Lf(j|0,h|0,r(f<<2,g)|0)|0;g=c[d>>2]|0;f=c[i+88>>2]|0;h=(f|0)<(b|0)?f:b;f=c[i+84>>2]|0;m=(f|0)>(g|0);e=m?f:g;if((h|0)<=(e|0)){c[d>>2]=b;return}l=j+(r(f-g|0,k)|0)|0;g=c[i+76>>2]|0;n=(m?l:j)+(g<<2)|0;c[i+8>>2]=e-f;f=(c[i+80>>2]|0)-g|0;c[i+12>>2]=f;g=h-e|0;c[i+16>>2]=g;e=a+12|0;h=c[e>>2]|0;j=c[h>>2]|0;if(j>>>0<=10){l=a+116|0;m=c[h+20>>2]|0;o=(c[h+16>>2]|0)+(r(m,c[l>>2]|0)|0)|0;p=(g|0)>0;if(!(c[i+92>>2]|0))if(p){q=g;s=n;t=o;while(1){Qa(s,f,j,t);if((q|0)>1){q=q+-1|0;s=s+k|0;t=t+m|0}else{u=g;break}}}else u=g;else if(p){p=a+268|0;t=0;s=0;while(1){q=n+(r(s,k)|0)|0;v=o+(r(t,m)|0)|0;w=g-s|0;x=Ma(c[p>>2]|0,w)|0;Na(q,k,c[(c[p>>2]|0)+44>>2]|0,x,0);s=(Oa(c[p>>2]|0,w,q,k)|0)+s|0;q=c[p>>2]|0;w=c[q+68>>2]|0;x=c[q+52>>2]|0;y=q+24|0;z=q+56|0;A=q+64|0;a:do if((c[A>>2]|0)<(c[z>>2]|0)){B=0;while(1){if((c[y>>2]|0)>0){C=B;break a}D=v+(r(B,m)|0)|0;Pa(q);Ta(w,x,1);Qa(w,x,j,D);D=B+1|0;if((c[A>>2]|0)<(c[z>>2]|0))B=D;else{C=D;break}}}else C=0;while(0);z=C+t|0;if((s|0)>=(g|0)){u=z;break}else t=z}}else u=0;c[l>>2]=(c[l>>2]|0)+u;c[d>>2]=b;return}u=a+116|0;l=c[u>>2]|0;t=(g|0)>0;b:do if(!(c[i+92>>2]|0))if(t){s=g;C=n;j=l;m=h;while(1){Ae(C,(c[m+16>>2]|0)+(r(c[m+32>>2]|0,j)|0)|0,f);p=1?j>>1:j;o=(c[m+20>>2]|0)+(r(c[m+36>>2]|0,p)|0)|0;Be(C,o,(c[m+24>>2]|0)+(r(c[m+40>>2]|0,p)|0)|0,f,j&1^1);p=c[m+28>>2]|0;if(p|0)Ya(C+3|0,0,f,1,p+(r(c[m+44>>2]|0,j)|0)|0,0)|0;p=j+1|0;if((s|0)<=1){E=p;break b}s=s+-1|0;C=C+k|0;j=p;m=c[e>>2]|0}}else E=l;else if(t){m=a+268|0;j=0;C=l;s=n;while(1){p=g-j|0;o=Ma(c[m>>2]|0,p)|0;Na(s,k,c[(c[m>>2]|0)+44>>2]|0,o,0);j=(Oa(c[m>>2]|0,p,s,k)|0)+j|0;s=s+(r(o,k)|0)|0;o=c[m>>2]|0;p=c[o+68>>2]|0;z=c[o+52>>2]|0;A=o+24|0;x=o+56|0;w=o+64|0;c:do if((c[w>>2]|0)<(c[x>>2]|0)){q=p+3|0;v=C;y=0;while(1){if((c[A>>2]|0)>0){F=y;break c}Pa(o);Ta(p,z,1);B=c[e>>2]|0;Ae(p,(c[B+16>>2]|0)+(r(c[B+32>>2]|0,v)|0)|0,z);D=1?v>>1:v;G=(c[B+20>>2]|0)+(r(c[B+36>>2]|0,D)|0)|0;Be(p,G,(c[B+24>>2]|0)+(r(c[B+40>>2]|0,D)|0)|0,z,v&1^1);D=c[B+28>>2]|0;if(D|0)Ya(q,0,z,1,D+(r(c[B+44>>2]|0,v)|0)|0,0)|0;B=y+1|0;if((c[w>>2]|0)<(c[x>>2]|0)){v=v+1|0;y=B}else{F=B;break}}}else F=0;while(0);x=F+C|0;if((j|0)>=(g|0)){E=x;break}else C=x}}else E=l;while(0);c[u>>2]=E;c[d>>2]=b;return}function La(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;h=Y;Y=Y+16|0;i=h;j=b+8|0;k=c[j>>2]|0;switch(c[b>>2]|0){case 2:{Ib(f,r(k,e-d|0)|0,g);Y=h;return}case 0:{if(!d){l=c[f>>2]|0;m=l+-16777216&-16711936|l&16711935;c[g>>2]=m;l=f+4|0;n=k+-1|0;o=g+4|0;if((k|0)>1){p=0;q=m;do{m=c[l+(p<<2)>>2]|0;q=(m&-16711936)+(q&-16711936)&-16711936|(m&16711935)+(q&16711935)&16711935;c[o+(p<<2)>>2]=q;p=p+1|0}while((p|0)!=(n|0))}s=1;t=f+(k<<2)|0;u=g+(k<<2)|0;v=n}else{s=d;t=f;u=g;v=k+-1|0}n=c[b+4>>2]|0;p=1<>>n:o;a:do if((s|0)<(e|0)){o=0-k|0;l=0-p|0;if((k|0)<=1){m=s;w=t;x=u;while(1){y=c[x+(o<<2)>>2]|0;z=c[w>>2]|0;c[x>>2]=(z&-16711936)+(y&-16711936)&-16711936|(z&16711935)+(y&16711935)&16711935;m=m+1|0;if((m|0)==(e|0))break a;else{w=w+(k<<2)|0;x=x+(k<<2)|0}}}x=(c[b+16>>2]|0)+((r(v,n?s>>n:s)|0)<<2)|0;w=s;m=t;y=u;while(1){z=c[y+(o<<2)>>2]|0;A=c[m>>2]|0;c[y>>2]=(A&-16711936)+(z&-16711936)&-16711936|(A&16711935)+(z&16711935)&16711935;z=1;A=x;while(1){B=c[A>>2]|0;C=(z&l)+p|0;D=z;z=(C|0)>(k|0)?k:C;E=y+(D<<2)|0;ga[c[9488+(((8?B>>>8:B)&15)<<2)>>2]&31](m+(D<<2)|0,E+(o<<2)|0,z-D|0,E);if((k|0)<=(C|0))break;else A=A+4|0}A=w+1|0;if((A|0)==(e|0))break;else{x=(A&q|0)==0?x+(v<<2)|0:x;w=A;m=m+(k<<2)|0;y=y+(k<<2)|0}}}while(0);if((c[b+12>>2]|0)==(e|0)){Y=h;return}Lf(g+(0-k<<2)|0,g+((r(k,~d+e|0)|0)<<2)|0,k<<2|0)|0;Y=h;return}case 1:{v=c[b+4>>2]|0;q=1<>>v:s;if((e|0)<=(d|0)){Y=h;return}s=(c[b+16>>2]|0)+((r(n,v?d>>v:d)|0)<<2)|0;v=i+1|0;y=i+2|0;if((u|0)<=0){m=(k|0)>0;w=g;x=s;o=d;l=f;while(1){a[i>>0]=0;a[i+1>>0]=0;a[i+2>>0]=0;if(m){A=c[x>>2]|0;a[i>>0]=A;a[v>>0]=8?A>>>8:A;a[y>>0]=16?A>>>16:A;Jb(i,l,t,w);F=l+(t<<2)|0;G=w+(t<<2)|0}else{F=l;G=w}A=o+1|0;if((A|0)==(e|0))break;else{w=G;x=(A&p|0)==0?x+(n<<2)|0:x;o=A;l=F}}Y=h;return}F=g;l=s;s=d;o=f;while(1){a[i>>0]=0;a[i+1>>0]=0;a[i+2>>0]=0;x=o+(u<<2)|0;G=l;w=o;m=F;do{A=G;G=G+4|0;z=c[A>>2]|0;a[i>>0]=z;a[v>>0]=8?z>>>8:z;a[y>>0]=16?z>>>16:z;Jb(i,w,q,m);w=w+(q<<2)|0;m=m+(q<<2)|0}while(w>>>0>>0);if(w>>>0<(o+(k<<2)|0)>>>0){x=c[G>>2]|0;a[i>>0]=x;a[v>>0]=8?x>>>8:x;a[y>>0]=16?x>>>16:x;Jb(i,w,t,m);H=w+(t<<2)|0;I=m+(t<<2)|0}else{H=w;I=m}x=s+1|0;if((x|0)==(e|0))break;else{F=I;l=(x&p|0)==0?l+(n<<2)|0:l;s=x;o=H}}Y=h;return}case 3:{H=b+4|0;o=c[H>>2]|0;if((f|0)==(g|0)&(o|0)>0){s=e-d|0;l=r(k,s)|0;n=k+-1+(1<>>o:n,s)|0;s=f+(l<<2)+(0-p<<2)|0;Mf(s|0,f|0,p<<2|0)|0;p=c[H>>2]|0;H=c[j>>2]|0;j=c[b+16>>2]|0;l=p?8>>>p:8;if((l|0)>=8){Pb(s,j,f,d,e,H);Y=h;return}n=(1<(d|0)&(H|0)>0)){Y=h;return}I=s;s=f;F=d;while(1){t=0;i=0;y=I;v=s;while(1){if(!(t&n)){q=c[y>>2]|0;J=(8?q>>>8:q)&255;K=y+4|0}else{J=i;K=y}c[v>>2]=c[j+((J&p)<<2)>>2];t=t+1|0;if((t|0)==(H|0))break;else{i=l?J>>>l:J;y=K;v=v+4|0}}F=F+1|0;if((F|0)==(e|0))break;else{I=K;s=s+(H<<2)|0}}Y=h;return}else{H=c[b+16>>2]|0;b=o?8>>>o:8;if((b|0)>=8){Pb(f,H,g,d,e,k);Y=h;return}s=(1<(d|0)&(k|0)>0)){Y=h;return}K=f;f=g;g=d;while(1){d=0;I=0;F=K;J=f;while(1){if(!(d&s)){l=c[F>>2]|0;L=(8?l>>>8:l)&255;M=F+4|0}else{L=I;M=F}c[J>>2]=c[H+((L&o)<<2)>>2];d=d+1|0;if((d|0)==(k|0))break;else{I=b?L>>>b:L;F=M;J=J+4|0}}g=g+1|0;if((g|0)==(e|0))break;else{K=M;f=f+(k<<2)|0}}Y=h;return}break}default:{Y=h;return}}}function Ma(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a+32>>2]|0;e=((c[a+24>>2]|0)+-1+d|0)/(d|0)|0;return ((e|0)>(b|0)?b:e)|0}function Na(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;if((d|0)<=0)return;f=0;g=a;while(1){Ta(g,c,e);f=f+1|0;if((f|0)==(d|0))break;else g=g+b|0}return}function Oa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;f=a+24|0;if((b|0)<=0){g=0;return g|0}h=a+56|0;i=a+64|0;j=a+4|0;k=a+76|0;l=a+80|0;m=a+8|0;n=a+52|0;o=a+60|0;p=a+32|0;q=d;d=0;while(1){if((c[i>>2]|0)<(c[h>>2]|0)?(c[f>>2]|0)<=0:0){g=d;s=12;break}if(c[j>>2]|0){t=c[k>>2]|0;c[k>>2]=c[l>>2];c[l>>2]=t}Ra(a,q);if((c[j>>2]|0)==0?(r(c[n>>2]|0,c[m>>2]|0)|0)>0:0){t=c[l>>2]|0;u=c[k>>2]|0;v=0;do{w=u+(v<<2)|0;c[w>>2]=(c[w>>2]|0)+(c[t+(v<<2)>>2]|0);v=v+1|0}while((v|0)<(r(c[n>>2]|0,c[m>>2]|0)|0))}c[o>>2]=(c[o>>2]|0)+1;v=d+1|0;c[f>>2]=(c[f>>2]|0)-(c[p>>2]|0);if((v|0)<(b|0)){q=q+e|0;d=v}else{g=v;s=12;break}}if((s|0)==12)return g|0;return 0}function Pa(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=b+24|0;if((c[d>>2]|0)>=1)return;do if(!(c[b+4>>2]|0)){if(c[b+20>>2]|0){Cc(b);break}e=b+8|0;f=b+52|0;if((r(c[f>>2]|0,c[e>>2]|0)|0)>0){g=b+76|0;h=b+68|0;i=0;j=c[g>>2]|0;do{a[(c[h>>2]|0)+i>>0]=c[j+(i<<2)>>2];j=c[g>>2]|0;c[j+(i<<2)>>2]=0;i=i+1|0}while((i|0)<(r(c[f>>2]|0,c[e>>2]|0)|0))}}else Bc(b);while(0);c[d>>2]=(c[d>>2]|0)+(c[b+28>>2]|0);d=b+68|0;c[d>>2]=(c[d>>2]|0)+(c[b+72>>2]|0);d=b+64|0;c[d>>2]=(c[d>>2]|0)+1;return}function Qa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;do switch(e|0){case 0:{Lb(b,d,f);return}case 1:{Kb(b,d,f);return}case 7:{Kb(b,d,f);Wa(f,0,d,1,0);return}case 2:{Mb(b,d,f);return}case 3:{Lf(f|0,b|0,d<<2|0)|0;return}case 8:{Lf(f|0,b|0,d<<2|0)|0;Wa(f,0,d,1,0);return}case 4:{g=b+(d<<2)|0;if((d|0)<=0)return;h=f;i=b;while(1){j=Kf(c[i>>2]|0)|0;i=i+4|0;a[h>>0]=j;a[h+1>>0]=j>>8;a[h+2>>0]=j>>16;a[h+3>>0]=j>>24;if(i>>>0>=g>>>0)break;else h=h+4|0}return}case 9:{h=b+(d<<2)|0;if((d|0)>0){g=f;i=b;while(1){j=Kf(c[i>>2]|0)|0;i=i+4|0;a[g>>0]=j;a[g+1>>0]=j>>8;a[g+2>>0]=j>>16;a[g+3>>0]=j>>24;if(i>>>0>=h>>>0)break;else g=g+4|0}}Wa(f,1,d,1,0);return}case 5:{Nb(b,d,f);return}case 10:{Nb(b,d,f);Va(f,d,1,0);return}case 6:{Ob(b,d,f);return}default:return}while(0)}function Ra(a,b){a=a|0;b=b|0;if(!(c[a>>2]|0)){Ec(a,b);return}else{Dc(a,b);return}}function Sa(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;i=c[b+4>>2]|0;j=i?8>>>i:8;k=c[b+8>>2]|0;l=c[b+16>>2]|0;if((j|0)>=8){Qb(g,l,h,e,f,k);return}b=(1<0))return;m=g;g=h;h=e;while(1){e=0;n=0;o=m;p=g;while(1){if(!(n&b)){q=d[o>>0]|0;r=o+1|0}else{q=e;r=o}s=c[l+((q&i)<<2)>>2]|0;a[p>>0]=8?s>>>8:s;n=n+1|0;if((n|0)==(k|0))break;else{e=j?q>>>j:q;o=r;p=p+1|0}}h=h+1|0;if((h|0)==(f|0))break;else{m=r;g=g+k|0}}return}function Ta(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;if((b|0)<=0)return;if(!d){d=0;do{e=a+(d<<2)|0;f=c[e>>2]|0;if(f>>>0<4278190080){if(f>>>0<16777216)g=0;else{h=(24?f>>>24:f)*65793|0;i=(r(h,f&255)|0)+8388608|0;j=(r(h,(8?f>>>8:f)&255)|0)+8388608|0;k=(r(h,(16?f>>>16:f)&255)|0)+8388608|0;g=(24?i>>>24:i)|f&-16777216|(24?j>>>24:j)<<8|(24?k>>>24:k)<<16}c[e>>2]=g}d=d+1|0}while((d|0)!=(b|0));return}else{d=0;do{g=a+(d<<2)|0;e=c[g>>2]|0;if(e>>>0<4278190080){if(e>>>0<16777216)l=0;else{k=4278190080/((24?e>>>24:e)>>>0)|0;j=(r(k,e&255)|0)+8388608|0;f=(r(k,(8?e>>>8:e)&255)|0)+8388608|0;i=(r(k,(16?e>>>16:e)&255)|0)+8388608|0;l=(24?j>>>24:j)|e&-16777216|(24?f>>>24:f)<<8|(24?i>>>24:i)<<16}c[g>>2]=l}d=d+1|0}while((d|0)!=(b|0));return}}function Ua(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0,i=0;if((e|0)<=0)return;if(!f){f=0;do{g=a[c+f>>0]|0;switch(g<<24>>24){case -1:break;case 0:{a[b+f>>0]=0;break}default:{h=b+f|0;i=(r((g&255)*65793|0,d[h>>0]|0)|0)+8388608|0;a[h>>0]=24?i>>>24:i}}f=f+1|0}while((f|0)!=(e|0));return}else{f=0;do{i=a[c+f>>0]|0;switch(i<<24>>24){case -1:break;case 0:{a[b+f>>0]=0;break}default:{h=b+f|0;g=(r(4278190080/((i&255)>>>0)|0,d[h>>0]|0)|0)+8388608|0;a[h>>0]=24?g>>>24:g}}f=f+1|0}while((f|0)!=(e|0));return}}function Va(b,c,e,f){b=b|0;c=c|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;if(!((c|0)>0&(e|0)>0))return;g=b;b=e;while(1){e=0;do{h=e<<1;i=g+h|0;j=g+(h|1)|0;h=a[j>>0]|0;k=h&15;l=(k&255)*4369|0;m=d[i>>0]|0;n=r(l,m&240|(4?m>>>4:m))|0;o=r(m<<4&240|m&15,l)|0;m=h&255;h=r(m&240|(4?m>>>4:m),l)|0;a[i>>0]=(20?o>>>20:o)&15|(16?n>>>16:n)&240;a[j>>0]=(16?h>>>16:h)&255&-16|k;e=e+1|0}while((e|0)!=(c|0));if((b|0)>1){g=g+f|0;b=b+-1|0}else break}return}function Wa(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if((f|0)<=0)return;h=(c|0)!=0;c=h&1;i=h?0:3;if((e|0)<=0)return;h=b;b=f;while(1){f=b;b=b+-1|0;j=h+c|0;k=h+i|0;l=0;do{m=l<<2;n=a[k+m>>0]|0;if(n<<24>>24!=-1){o=(n&255)*32897|0;n=j+m|0;p=r(o,d[n>>0]|0)|0;a[n>>0]=23?p>>>23:p;p=j+(m|1)|0;n=r(o,d[p>>0]|0)|0;a[p>>0]=23?n>>>23:n;n=j+(m|2)|0;m=r(o,d[n>>0]|0)|0;a[n>>0]=23?m>>>23:m}l=l+1|0}while((l|0)!=(e|0));if((f|0)<=1)break;else h=h+g|0}return}function Xa(b,c,d,e,f,g){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,l=0,m=0;if(!((e|0)>0&(d|0)>0)){h=0;return h|0}i=0;j=255;k=f;f=b;while(1){b=0;l=j;do{m=a[f+b>>0]|0;a[k+(b<<2)>>0]=m;l=l&(m&255);b=b+1|0}while((b|0)!=(d|0));i=i+1|0;if((i|0)==(e|0))break;else{j=l;k=k+g|0;f=f+c|0}}h=(l|0)!=255&1;return h|0}function Ya(b,c,d,e,f,g){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,l=0,m=0;if(!((e|0)>0&(d|0)>0)){h=1;return h|0}i=0;j=-1;k=f;f=b;while(1){b=0;l=j;do{m=a[f+(b<<2)>>0]|0;a[k+b>>0]=m;l=m&l;b=b+1|0}while((b|0)!=(d|0));i=i+1|0;if((i|0)==(e|0))break;else{j=l;k=k+g|0;f=f+c|0}}h=l<<24>>24==-1&1;return h|0}function Za(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;if((e|0)<=0)return;f=0;do{g=c[b+(f<<2)>>2]|0;a[d+f>>0]=8?g>>>8:g;f=f+1|0}while((f|0)!=(e|0));return}function _a(){if(Te(9972)|0)return;if(c[2029]|0){c[2388]=1;c[2389]=2;c[2390]=3;c[2391]=4;c[2392]=5;c[2393]=6;c[2394]=7;c[2395]=8;c[2396]=9;c[2397]=10;c[2398]=11;c[2399]=12;c[2400]=13;c[2401]=14;c[2402]=1;c[2403]=1;c[2420]=1;c[2421]=2;c[2422]=3;c[2423]=4;c[2424]=5;c[2425]=6;c[2426]=7;c[2427]=8;c[2428]=9;c[2429]=10;c[2430]=11;c[2431]=12;c[2432]=13;c[2433]=14;c[2434]=1;c[2435]=1;c[2372]=4;c[2373]=5;c[2374]=6;c[2375]=7;c[2376]=8;c[2377]=9;c[2378]=10;c[2379]=11;c[2380]=12;c[2381]=13;c[2382]=14;c[2383]=15;c[2384]=16;c[2385]=17;c[2386]=4;c[2387]=4;c[2404]=4;c[2405]=5;c[2406]=6;c[2407]=7;c[2408]=8;c[2409]=9;c[2410]=10;c[2411]=11;c[2412]=12;c[2413]=13;c[2414]=14;c[2415]=15;c[2416]=16;c[2417]=17;c[2418]=4;c[2419]=4}c[2029]=0;Ue(9972)|0;return}function $a(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;c[a+12>>2]=e;f=a;c[f>>2]=0;c[f+4>>2]=0;c[a+20>>2]=0;c[a+24>>2]=0;f=e>>>0<8?e:8;if(!f){g=0;h=0}else{e=0;i=0;j=0;while(1){k=Jf(d[b+e>>0]|0|0,0,e<<3|0)|0;l=k|i;k=v()|0|j;e=e+1|0;if(e>>>0>=f>>>0){g=l;h=k;break}else{i=l;j=k}}}j=a;c[j>>2]=g;c[j+4>>2]=h;c[a+16>>2]=f;c[a+8>>2]=b;return}function ab(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,ua=0,xa=0,ya=0,za=0,Aa=0,Ba=0;k=Y;Y=Y+16|0;l=k;m=i+24|0;n=i+120|0;o=(h|0)!=0;a:do if(o){p=i+176|0;q=i+260|0;s=f;while(1){if(!(Ga(m,1)|0)){t=s;u=18;break a}w=c[p>>2]|0;x=Ga(m,2)|0;y=c[q>>2]|0;z=1<>2]=y|z;c[i+180+(w*20|0)>>2]=x;z=i+180+(w*20|0)+8|0;c[z>>2]=s;y=i+180+(w*20|0)+12|0;c[y>>2]=g;A=i+180+(w*20|0)+16|0;c[A>>2]=0;c[p>>2]=(c[p>>2]|0)+1;switch(x|0){case 1:case 0:{x=(Ga(m,3)|0)+2|0;c[i+180+(w*20|0)+4>>2]=x;B=(1<>2]|0)|0;D=B+(c[y>>2]|0)|0;E=ab(x?C>>>x:C,x?D>>>x:D,0,i,A)|0;F=s;break}case 3:{D=(Ga(m,8)|0)+1|0;if((D|0)>16)G=0;else G=(D|0)>4?1:(D|0)>2?2:3;x=(c[z>>2]|0)+-1+(1<>>G:x;x=i+180+(w*20|0)+4|0;c[x>>2]=G;if(!(ab(D,1,0,i,A)|0)){u=73;break a}w=c[x>>2]|0;x=1<<(w?8>>>w:8);w=wa(x,((x|0)<0)<<31>>31,4)|0;if(!w){u=73;break a}C=c[A>>2]|0;c[w>>2]=c[C>>2];y=D<<2;if((D|0)>1){D=4;while(1){a[w+D>>0]=(d[w+(D+-4)>>0]|0)+(d[C+D>>0]|0);B=D+1|0;if((B|0)<(y|0))D=B;else{H=B;break}}}else H=4;D=x<<2;if((D|0)>(H|0))Nf(w+H|0,0,D-H|0)|0;pa(c[A>>2]|0);c[A>>2]=w;E=1;F=z;break}default:{E=1;F=s}}if(!E){u=73;break a}else s=F}}else{t=f;u=18}while(0);do if((u|0)==18){if(Ga(m,1)|0){f=Ga(m,4)|0;if((f+-1|0)>>>0<11)I=f;else{c[i>>2]=3;J=0;break}}else I=0;c[l>>2]=0;f=e[3824+(I<<1)>>1]|0;do if((h|0)!=0?(Ga(m,1)|0)!=0:0){F=(Ga(m,3)|0)+2|0;E=(1<>>F:H;H=E+g|0;E=F?H>>>F:H;H=r(G,E)|0;if(ab(G,E,0,i,l)|0){c[i+152>>2]=F;F=(H|0)>0;if(F){E=c[l>>2]|0;G=0;s=1;while(1){p=E+(G<<2)|0;q=c[p>>2]|0;D=(8?q>>>8:q)&65535;c[p>>2]=D;p=(D|0)<(s|0)?s:D+1|0;G=G+1|0;if((G|0)==(H|0)){K=p;break}else s=p}}else K=1;if((K|0)>1e3|(K|0)>(r(t,g)|0)){s=wa(K,((K|0)<0)<<31>>31,4)|0;if(!s){c[i>>2]=1;L=0;M=0;N=1;O=0;P=0;break}Nf(s|0,-1,K<<2|0)|0;if(F){G=c[l>>2]|0;E=0;z=0;while(1){w=G+(z<<2)|0;A=s+(c[w>>2]<<2)|0;x=c[A>>2]|0;if((x|0)==-1){c[A>>2]=E;Q=E+1|0;R=E}else{Q=E;R=x}c[w>>2]=R;z=z+1|0;if((z|0)==(H|0)){S=s;T=K;U=Q;V=s;u=35;break}else E=Q}}else{S=s;T=K;U=0;V=s;u=35}}else{S=0;T=K;U=K;V=0;u=35}}else{L=0;M=0;N=1;O=0;P=0}}else{S=0;T=1;U=1;V=0;u=35}while(0);b:do if((u|0)==35)if(!(c[i+48>>2]|0)){E=(I|0)>0;H=1<-24?H+280|0:256;W=(z|0)>40?z:40;X=0}else{W=280;X=0}z=va(W,X,4)|0;G=r(U,f)|0;F=wa(G,((G|0)<0)<<31>>31,4)|0;G=bb(U)|0;if((F|0)==0|((z|0)==0|(G|0)==0)){c[i>>2]=1;L=G;M=F;N=1;O=z;P=V;break}if((T|0)>0){w=(S|0)==0;x=H+280|0;A=(H|0)>-279;p=H+280|0;H=F;D=0;while(1){do if(!w){q=c[S+(D<<2)>>2]|0;if((q|0)==-1)if(E){if(!(cb(p,i,z,0)|0)){L=G;M=F;N=1;O=z;P=V;break b}if(!(cb(256,i,z,0)|0)){L=G;M=F;N=1;O=z;P=V;break b}if(!(cb(256,i,z,0)|0)){L=G;M=F;N=1;O=z;P=V;break b}if(!(cb(256,i,z,0)|0)){L=G;M=F;N=1;O=z;P=V;break b}if(!(cb(40,i,z,0)|0)){L=G;M=F;N=1;O=z;P=V;break b}else{Z=H;break}}else{if(!(cb(280,i,z,0)|0)){L=G;M=F;N=1;O=z;P=V;break b}if(!(cb(256,i,z,0)|0)){L=G;M=F;N=1;O=z;P=V;break b}if(!(cb(256,i,z,0)|0)){L=G;M=F;N=1;O=z;P=V;break b}if(!(cb(256,i,z,0)|0)){L=G;M=F;N=1;O=z;P=V;break b}if(!(cb(40,i,z,0)|0)){L=G;M=F;N=1;O=z;P=V;break b}else{Z=H;break}}else{_=q;u=49}}else{_=D;u=49}while(0);do if((u|0)==49){u=0;q=G+(_*548|0)|0;c[q>>2]=H;if(E){y=cb(x,i,z,H)|0;if(!y){L=G;M=F;N=1;O=z;P=V;break b}C=d[H>>0]|0;B=H+(y<<2)|0;y=c[z>>2]|0;if(A){$=1;aa=y;while(1){ba=c[z+($<<2)>>2]|0;ca=(ba|0)>(aa|0)?ba:aa;$=$+1|0;if(($|0)==(x|0)){da=ca;break}else aa=ca}}else da=y;c[G+(_*548|0)+4>>2]=B;aa=cb(256,i,z,B)|0;if(!aa){L=G;M=F;N=1;O=z;P=V;break b}$=a[B>>0]|0;ca=C+($&255)|0;ba=B+(aa<<2)|0;aa=1;ea=c[z>>2]|0;do{fa=c[z+(aa<<2)>>2]|0;ea=(fa|0)>(ea|0)?fa:ea;aa=aa+1|0}while((aa|0)!=256);aa=ea+da|0;c[G+(_*548|0)+8>>2]=ba;B=cb(256,i,z,ba)|0;if(!B){L=G;M=F;N=1;O=z;P=V;break b}C=a[ba>>0]|0;y=$|C;fa=ca+(C&255)|0;C=ba+(B<<2)|0;B=1;ga=c[z>>2]|0;do{ha=c[z+(B<<2)>>2]|0;ga=(ha|0)>(ga|0)?ha:ga;B=B+1|0}while((B|0)!=256);B=ga+aa|0;c[G+(_*548|0)+12>>2]=C;ba=cb(256,i,z,C)|0;if(!ba){L=G;M=F;N=1;O=z;P=V;break b}ca=a[C>>0]|0;$=y|ca;ea=fa+(ca&255)|0;ca=C+(ba<<2)|0;ba=1;ha=c[z>>2]|0;do{ia=c[z+(ba<<2)>>2]|0;ha=(ia|0)>(ha|0)?ia:ha;ba=ba+1|0}while((ba|0)!=256);c[G+(_*548|0)+16>>2]=ca;ba=cb(40,i,z,ca)|0;if(!ba){L=G;M=F;N=1;O=z;P=V;break b}ja=ha+B|0;ka=$;la=ea+(d[ca>>0]|0)|0;ma=ca+(ba<<2)|0}else{ba=cb(280,i,z,H)|0;if(!ba){L=G;M=F;N=1;O=z;P=V;break b}C=d[H>>0]|0;fa=H+(ba<<2)|0;ba=1;y=c[z>>2]|0;do{aa=c[z+(ba<<2)>>2]|0;y=(aa|0)>(y|0)?aa:y;ba=ba+1|0}while(ba>>>0<280);c[G+(_*548|0)+4>>2]=fa;ba=cb(256,i,z,fa)|0;if(!ba){L=G;M=F;N=1;O=z;P=V;break b}ca=a[fa>>0]|0;ea=C+(ca&255)|0;$=fa+(ba<<2)|0;ba=1;B=c[z>>2]|0;do{ha=c[z+(ba<<2)>>2]|0;B=(ha|0)>(B|0)?ha:B;ba=ba+1|0}while(ba>>>0<256);ba=B+y|0;c[G+(_*548|0)+8>>2]=$;fa=cb(256,i,z,$)|0;if(!fa){L=G;M=F;N=1;O=z;P=V;break b}C=a[$>>0]|0;ha=ca|C;aa=ea+(C&255)|0;C=$+(fa<<2)|0;fa=1;ga=c[z>>2]|0;do{ia=c[z+(fa<<2)>>2]|0;ga=(ia|0)>(ga|0)?ia:ga;fa=fa+1|0}while(fa>>>0<256);fa=ga+ba|0;c[G+(_*548|0)+12>>2]=C;$=cb(256,i,z,C)|0;if(!$){L=G;M=F;N=1;O=z;P=V;break b}ea=a[C>>0]|0;ca=ha|ea;y=aa+(ea&255)|0;ea=C+($<<2)|0;$=1;B=c[z>>2]|0;do{ia=c[z+($<<2)>>2]|0;B=(ia|0)>(B|0)?ia:B;$=$+1|0}while($>>>0<256);c[G+(_*548|0)+16>>2]=ea;$=cb(40,i,z,ea)|0;if(!$){L=G;M=F;N=1;O=z;P=V;break b}ja=B+fa|0;ka=ca;la=y+(d[ea>>0]|0)|0;ma=ea+($<<2)|0}$=ka<<24>>24==0;c[G+(_*548|0)+20>>2]=$&1;C=G+(_*548|0)+28|0;c[C>>2]=0;if(($?($=(e[(c[G+(_*548|0)+4>>2]|0)+2>>1]|0)<<16|(e[(c[G+(_*548|0)+8>>2]|0)+2>>1]|0)|(e[(c[G+(_*548|0)+12>>2]|0)+2>>1]|0)<<24,aa=G+(_*548|0)+24|0,c[aa>>2]=$,(la|0)==0):0)?(ha=b[(c[q>>2]|0)+2>>1]|0,(ha&65535)<256):0){c[C>>2]=1;c[aa>>2]=(ha&65535)<<8|$;c[G+(_*548|0)+32>>2]=0;Z=ma;break}$=(ja|0)<6;c[G+(_*548|0)+32>>2]=$&1;if($){$=G+(_*548|0)+4|0;ha=G+(_*548|0)+8|0;aa=G+(_*548|0)+12|0;C=c[q>>2]|0;ba=0;do{ga=G+(_*548|0)+36+(ba<<3)|0;ia=C+(ba<<2)|0;na=e[ia>>1]|e[ia+2>>1]<<16;ia=16?na>>>16:na;if((ia&65535)>255){c[ga>>2]=na&255|256;c[G+(_*548|0)+36+(ba<<3)+4>>2]=ia}else{oa=G+(_*548|0)+36+(ba<<3)+4|0;qa=na&255;c[ga>>2]=qa;na=ia<<8;c[oa>>2]=na;ia=qa?ba>>>qa:ba;ra=c[$>>2]|0;ua=b[ra+(ia<<2)+2>>1]|0;xa=d[ra+(ia<<2)>>0]|0;ra=qa+xa|0;c[ga>>2]=ra;qa=(ua&65535)<<16|na;c[oa>>2]=qa;na=xa?ia>>>xa:ia;ia=c[ha>>2]|0;xa=b[ia+(na<<2)+2>>1]|0;ua=d[ia+(na<<2)>>0]|0;ia=ra+ua|0;c[ga>>2]=ia;ra=qa|xa&65535;c[oa>>2]=ra;xa=ua?na>>>ua:na;na=c[aa>>2]|0;ua=b[na+(xa<<2)+2>>1]|0;c[ga>>2]=ia+(d[na+(xa<<2)>>0]|0);c[oa>>2]=(ua&65535)<<24|ra}ba=ba+1|0}while((ba|0)!=64);Z=ma}else Z=ma}while(0);D=D+1|0;if((D|0)>=(T|0))break;else H=Z}}c[i+160>>2]=c[l>>2];c[i+164>>2]=U;c[i+168>>2]=G;c[i+172>>2]=F;L=G;M=F;N=0;O=z;P=V}else{L=0;M=0;N=1;O=0;P=V}while(0);pa(O);pa(P);if(N){pa(c[l>>2]|0);pa(M);sa(L);u=73;break}if((I|0)>0){c[n>>2]=1<>2]=1;J=0;break}}else c[n>>2]=0;f=c[i+152>>2]|0;c[i+100>>2]=t;c[i+104>>2]=g;H=(1<>2]=f?D>>>f:D;c[i+148>>2]=(f|0)==0?-1:H;if(!o){H=Cf(t|0,((t|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;f=wa(H,v()|0,4)|0;if(!f){c[i>>2]=1;J=0;break}if(!(Ia(i,f,t,g,g,0)|0)){J=f;break}if(!(c[i+48>>2]|0))ya=f;else{J=f;break}}else{c[i+4>>2]=1;ya=0}if(j|0)c[j>>2]=ya;c[i+112>>2]=0;if(o){za=1;Y=k;return za|0}pa(c[i+160>>2]|0);pa(c[i+172>>2]|0);sa(c[i+168>>2]|0);ta(i+124|0);ta(i+136|0);Aa=n;Ba=Aa+56|0;do{c[Aa>>2]=0;Aa=Aa+4|0}while((Aa|0)<(Ba|0));za=1;Y=k;return za|0}while(0);if((u|0)==73){c[i>>2]=3;J=0}pa(J);pa(c[i+160>>2]|0);pa(c[i+172>>2]|0);sa(c[i+168>>2]|0);ta(i+124|0);ta(i+136|0);Aa=n;Ba=Aa+56|0;do{c[Aa>>2]=0;Aa=Aa+4|0}while((Aa|0)<(Ba|0));za=0;Y=k;return za|0}function bb(a){a=a|0;return wa(a,((a|0)<0)<<31>>31,548)|0}function cb(a,e,f,g){a=a|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;h=Y;Y=Y+592|0;i=h+80|0;j=h;k=e+24|0;l=Ga(k,1)|0;Nf(f|0,0,a<<2|0)|0;a:do if(l){m=Ga(k,1)|0;n=(Ga(k,1)|0)==0;o=f+((Ga(k,n?1:8)|0)<<2)|0;c[o>>2]=1;if((m|0)==1){m=f+((Ga(k,8)|0)<<2)|0;c[m>>2]=1;p=26}else p=26}else{m=j;o=m+76|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(o|0));m=(Ga(k,4)|0)+4|0;if((m|0)>19){c[e>>2]=3;q=0;Y=h;return q|0}if((m|0)>0){o=0;do{n=Ga(k,3)|0;c[j+((d[3856+o>>0]|0)<<2)>>2]=n;o=o+1|0}while((o|0)!=(m|0))}b:do if(eb(i,7,j,19)|0){if(Ga(k,1)|0){m=(Ga(k,((Ga(k,3)|0)<<1)+2|0)|0)+2|0;if((m|0)>(a|0))break;else r=m}else r=a;c:do if((a|0)>0){m=e+44|0;o=0;n=8;s=r;while(1){if(!s)break c;s=s+-1|0;t=c[m>>2]|0;if((t|0)>31){Ea(k);u=c[m>>2]|0}else u=t;t=k;w=If(c[t>>2]|0,c[t+4>>2]|0,u&63|0)|0;v()|0;t=w&127;c[m>>2]=u+(d[i+(t<<2)>>0]|0);w=b[i+(t<<2)+2>>1]|0;t=w&65535;if((w&65535)>=16){x=t+-16|0;y=d[8680+x>>0]|0;z=(Ga(k,d[8677+x>>0]|0)|0)+y|0;if((z+o|0)>(a|0))break b;y=w<<16>>16==16?n:0;if((z|0)>0){x=z;z=o;while(1){A=z+1|0;c[f+(z<<2)>>2]=y;if((x|0)>1){x=x+-1|0;z=A}else{B=n;C=A;break}}}else{B=n;C=o}}else{c[f+(o<<2)>>2]=t;B=w<<16>>16==0?n:t;C=o+1|0}if((C|0)>=(a|0))break;else{o=C;n=B}}}while(0);p=26;break a}while(0);c[e>>2]=3}while(0);if(((p|0)==26?(c[e+48>>2]|0)==0:0)?(p=eb(g,8,f,a)|0,p|0):0){q=p;Y=h;return q|0}c[e>>2]=3;q=0;Y=h;return q|0}function db(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=1<>31,4)|0;c[a>>2]=e;if(!e){f=0;return f|0}c[a+4>>2]=32-b;c[a+8>>2]=b;f=1;return f|0}function eb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Y;Y=Y+1024|0;f=e;do if(a){if((d|0)<513){g=fb(a,b,c,d,f)|0;break}h=wa(d,((d|0)<0)<<31>>31,2)|0;if(!h)g=0;else{i=fb(a,b,c,d,h)|0;pa(h);g=i}}else g=fb(0,b,c,d,0)|0;while(0);Y=e;return g|0}function fb(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0;j=Y;Y=Y+128|0;k=j+64|0;l=j;m=1<>2]=0;n=n+4|0}while((n|0)<(o|0));n=(h|0)>0;do if(n){o=0;while(1){p=c[g+(o<<2)>>2]|0;if((p|0)>15){q=0;r=69;break}s=k+(p<<2)|0;c[s>>2]=(c[s>>2]|0)+1;o=o+1|0;if((o|0)>=(h|0)){r=5;break}}if((r|0)==5){t=c[k>>2]|0;break}else if((r|0)==69){Y=j;return q|0}}else t=0;while(0);if((t|0)==(h|0)){q=0;Y=j;return q|0}c[l+4>>2]=0;t=c[k+4>>2]|0;if((t|0)>2){q=0;Y=j;return q|0}c[l+8>>2]=t;o=c[k+8>>2]|0;if((o|0)>4){q=0;Y=j;return q|0}s=t+o|0;c[l+12>>2]=s;o=c[k+12>>2]|0;if((o|0)>8){q=0;Y=j;return q|0}p=s+o|0;c[l+16>>2]=p;o=c[k+16>>2]|0;if((o|0)>16){q=0;Y=j;return q|0}s=p+o|0;c[l+20>>2]=s;o=c[k+20>>2]|0;if((o|0)>32){q=0;Y=j;return q|0}p=s+o|0;c[l+24>>2]=p;o=c[k+24>>2]|0;if((o|0)>64){q=0;Y=j;return q|0}s=p+o|0;c[l+28>>2]=s;o=c[k+28>>2]|0;if((o|0)>128){q=0;Y=j;return q|0}p=s+o|0;c[l+32>>2]=p;o=c[k+32>>2]|0;if((o|0)>256){q=0;Y=j;return q|0}s=p+o|0;c[l+36>>2]=s;o=c[k+36>>2]|0;if((o|0)>512){q=0;Y=j;return q|0}p=s+o|0;c[l+40>>2]=p;o=c[k+40>>2]|0;if((o|0)>1024){q=0;Y=j;return q|0}s=p+o|0;c[l+44>>2]=s;o=c[k+44>>2]|0;if((o|0)>2048){q=0;Y=j;return q|0}p=s+o|0;c[l+48>>2]=p;o=c[k+48>>2]|0;if((o|0)>4096){q=0;Y=j;return q|0}s=p+o|0;c[l+52>>2]=s;o=c[k+52>>2]|0;if((o|0)>8192){q=0;Y=j;return q|0}p=s+o|0;c[l+56>>2]=p;o=c[k+56>>2]|0;if((o|0)>16384){q=0;Y=j;return q|0}s=p+o|0;o=l+60|0;c[o>>2]=s;if(n){if(!i){n=0;do{p=c[g+(n<<2)>>2]|0;if((p|0)>0){u=l+(p<<2)|0;c[u>>2]=(c[u>>2]|0)+1}n=n+1|0}while((n|0)!=(h|0))}else{n=0;do{u=c[g+(n<<2)>>2]|0;if((u|0)>0){p=l+(u<<2)|0;u=c[p>>2]|0;c[p>>2]=u+1;b[i+(u<<1)>>1]=n}n=n+1|0}while((n|0)!=(h|0))}v=c[o>>2]|0}else v=s;if((v|0)==1){if(!i){q=m;Y=j;return q|0}s=(e[i>>1]|0)<<16;h=m;do{n=h;h=h+-1|0;l=d+(h<<2)|0;b[l>>1]=s;b[l+2>>1]=s>>>16}while((n|0)>1);q=m;Y=j;return q|0}s=m+-1|0;if((f|0)>=1){h=2-t|0;n=(h|0)<0;a:do if(!d){if(n){q=0;Y=j;return q|0}l=1;g=h;u=3;while(1){if((l|0)>=(f|0)){w=g;x=u;y=0;z=0;break a}l=l+1|0;p=g<<1;g=p-(c[k+(l<<2)>>2]|0)|0;if((g|0)<0){q=0;break}else u=p+u|0}Y=j;return q|0}else{if(n){q=0;Y=j;return q|0}u=0;g=2;l=1;p=0;A=t;B=k+4|0;C=h;D=3;while(1){if((A|0)>0){E=l&255;F=1<>1]|0)<<16|E;L=m;do{L=L-g|0;M=J+(L<<2)|0;b[M>>1]=K;b[M+2>>1]=K>>>16}while((L|0)>0);L=F;while(1)if(!(L&G))break;else L=1?L>>>1:L;H=H+1|0;G=(L|0)==0?G:(L+-1&G)+L|0;K=I;I=I+-1|0}while((K|0)>1);c[B>>2]=I;N=G;O=H}else{N=u;O=p}F=l+1|0;if((l|0)>=(f|0)){w=C;x=D;y=N;z=O;break a}A=c[k+(F<<2)>>2]|0;E=C<<1;C=E-A|0;if((C|0)<0){q=0;break}else{u=N;g=g<<1;l=F;p=O;B=k+(F<<2)|0;D=E+D|0}}Y=j;return q|0}while(0);if((f|0)<15){P=w;Q=x;R=y;S=z;r=42}else{T=m;U=x;V=v}}else{P=1;Q=1;R=0;S=0;r=42}do if((r|0)==42){v=(d|0)!=0;x=d;z=-1;y=d;w=m;O=m;N=P;h=Q;t=2;n=f;D=R;B=S;while(1){p=n;n=n+1|0;l=N<<1;h=l+h|0;g=k+(n<<2)|0;u=c[g>>2]|0;N=l-u|0;if((N|0)<0){q=0;r=69;break}b:do if(v&(u|0)>0){l=n-f|0;C=l&255;A=1<=14){E=n&255;F=z;K=y;J=w;M=O;W=D;X=B;while(1){Z=W&s;if((Z|0)==(F|0)){_=M;$=F;aa=K;ba=J}else{ca=K+(M<<2)|0;a[d+(Z<<2)>>0]=E;da=ca-x|0;b[d+(Z<<2)+2>>1]=(2?da>>>2:da)-Z;_=A;$=Z;aa=ca;ba=A+J|0}ca=aa+((f?W>>>f:W)<<2)|0;Z=(e[i+(X<<1)>>1]|0)<<16|C;da=_;do{da=da-t|0;ea=ca+(da<<2)|0;b[ea>>1]=Z;b[ea+2>>1]=Z>>>16}while((da|0)>0);da=l;while(1)if(!(da&W))break;else da=1?da>>>1:da;Z=X+1|0;ca=(da|0)==0?W:(da+-1&W)+da|0;ea=c[g>>2]|0;c[g>>2]=ea+-1;if((ea|0)>1){F=$;K=aa;J=ba;M=_;W=ca;X=Z}else{fa=_;ga=$;ha=aa;ia=ba;ja=ca;ka=Z;break b}}}X=z;W=y;M=w;J=O;K=D;F=B;E=u;while(1){L=K&s;if((L|0)==(X|0)){la=J;ma=X;na=W;oa=M}else{Z=W+(J<<2)|0;ca=A-E|0;c:do if((ca|0)<1)pa=n;else{ea=n;qa=ca;while(1){ra=ea+1|0;if((ea|0)>=14){pa=ra;break c}qa=(qa<<1)-(c[k+(ra<<2)>>2]|0)|0;if((qa|0)<1){pa=ra;break}else ea=ra}}while(0);ca=1<>0]=pa;da=Z-x|0;b[d+(L<<2)+2>>1]=(2?da>>>2:da)-L;la=ca;ma=L;na=Z;oa=ca+M|0}ca=na+((f?K>>>f:K)<<2)|0;da=(e[i+(F<<1)>>1]|0)<<16|C;ea=la;do{ea=ea-t|0;qa=ca+(ea<<2)|0;b[qa>>1]=da;b[qa+2>>1]=da>>>16}while((ea|0)>0);ea=l;while(1)if(!(ea&K))break;else ea=1?ea>>>1:ea;da=F+1|0;ca=(ea|0)==0?K:(ea+-1&K)+ea|0;Z=c[g>>2]|0;E=Z+-1|0;c[g>>2]=E;if((Z|0)<=1){fa=la;ga=ma;ha=na;ia=oa;ja=ca;ka=da;break}else{X=ma;W=na;M=oa;J=la;K=ca;F=da}}}else{fa=O;ga=z;ha=y;ia=w;ja=D;ka=B}while(0);if((p|0)>=14){r=67;break}else{z=ga;y=ha;w=ia;O=fa;t=t<<1;D=ja;B=ka}}if((r|0)==67){T=ia;U=h;V=c[o>>2]|0;break}else if((r|0)==69){Y=j;return q|0}}while(0);q=(U|0)==((V<<1)+-1|0)?T:0;Y=j;return q|0}function gb(a,b){a=a|0;b=b|0;return -16777216}function hb(a,b){a=a|0;b=b|0;return a|0}function ib(a,b){a=a|0;b=b|0;return c[b>>2]|0}function jb(a,b){a=a|0;b=b|0;return c[b+4>>2]|0}function kb(a,b){a=a|0;b=b|0;return c[b+-4>>2]|0}function lb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[b>>2]|0;e=c[b+4>>2]|0;b=e^a;f=((1?b>>>1:b)&2139062143)+(e&a)|0;a=f^d;return ((1?a>>>1:a)&2139062143)+(f&d)|0}function mb(a,b){a=a|0;b=b|0;var d=0;d=c[b+-4>>2]|0;b=d^a;return ((1?b>>>1:b)&2139062143)+(d&a)|0}function nb(a,b){a=a|0;b=b|0;var d=0;d=c[b>>2]|0;b=d^a;return ((1?b>>>1:b)&2139062143)+(d&a)|0}function ob(a,b){a=a|0;b=b|0;var d=0;a=c[b+-4>>2]|0;d=c[b>>2]|0;b=d^a;return ((1?b>>>1:b)&2139062143)+(d&a)|0}function pb(a,b){a=a|0;b=b|0;var d=0;a=c[b>>2]|0;d=c[b+4>>2]|0;b=d^a;return ((1?b>>>1:b)&2139062143)+(d&a)|0}function qb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=c[b+-4>>2]|0;e=c[b>>2]|0;f=c[b+4>>2]|0;b=d^a;g=((1?b>>>1:b)&2139062143)+(d&a)|0;a=f^e;d=((1?a>>>1:a)&2139062143)+(f&e)|0;e=d^g;return ((1?e>>>1:e)&2139062143)+(d&g)|0}function rb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=c[b>>2]|0;e=c[b+-4>>2]|0;b=24?e>>>24:e;f=(24?a>>>24:a)-b|0;g=(24?d>>>24:d)-b|0;b=(16?e>>>16:e)&255;h=((16?a>>>16:a)&255)-b|0;i=((16?d>>>16:d)&255)-b|0;b=(8?e>>>8:e)&255;j=((8?a>>>8:a)&255)-b|0;k=((8?d>>>8:d)&255)-b|0;b=e&255;e=(a&255)-b|0;l=(d&255)-b|0;return ((((e|0)>-1?e:0-e|0)-((l|0)>-1?l:0-l|0)-((g|0)>-1?g:0-g|0)+((f|0)>-1?f:0-f|0)-((k|0)>-1?k:0-k|0)+((j|0)>-1?j:0-j|0)-((i|0)>-1?i:0-i|0)+((h|0)>-1?h:0-h|0)|0)<1?d:a)|0}function sb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=c[b>>2]|0;e=c[b+-4>>2]|0;b=(24?d>>>24:d)+(24?a>>>24:a)-(24?e>>>24:e)|0;f=((16?d>>>16:d)&255)+((16?a>>>16:a)&255)-((16?e>>>16:e)&255)|0;g=((8?d>>>8:d)&255)+((8?a>>>8:a)&255)-((8?e>>>8:e)&255)|0;h=(d&255)+(a&255)-(e&255)|0;return (b>>>0<256?b:(24?b>>>24:b)^255)<<24|(h>>>0<256?h:(24?h>>>24:h)^255)|(f>>>0<256?f:(24?f>>>24:f)^255)<<16|(g>>>0<256?g:(24?g>>>24:g)^255)<<8|0}function tb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=c[b>>2]|0;e=c[b+-4>>2]|0;b=d^a;f=((1?b>>>1:b)&2139062143)+(d&a)|0;a=24?f>>>24:f;d=((a-(24?e>>>24:e)|0)/2|0)+a|0;a=(16?f>>>16:f)&255;b=((a-((16?e>>>16:e)&255)|0)/2|0)+a|0;a=(8?f>>>8:f)&255;g=((a-((8?e>>>8:e)&255)|0)/2|0)+a|0;a=f&255;f=((a-(e&255)|0)/2|0)+a|0;return (d>>>0<256?d:(24?d>>>24:d)^255)<<24|(f>>>0<256?f:(24?f>>>24:f)^255)|(b>>>0<256?b:(24?b>>>24:b)^255)<<16|(g>>>0<256?g:(24?g>>>24:g)^255)<<8|0}function ub(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((d|0)<=0)return;b=0;do{f=c[a+(b<<2)>>2]|0;c[e+(b<<2)>>2]=f+-16777216&-16711936|f&16711935;b=b+1|0}while((b|0)!=(d|0));return}function vb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if((d|0)<=0)return;b=0;f=c[e+-4>>2]|0;do{g=c[a+(b<<2)>>2]|0;f=(g&-16711936)+(f&-16711936)&-16711936|(g&16711935)+(f&16711935)&16711935;c[e+(b<<2)>>2]=f;b=b+1|0}while((b|0)!=(d|0));return}function wb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((d|0)<=0)return;f=0;do{g=c[b+(f<<2)>>2]|0;h=c[a+(f<<2)>>2]|0;c[e+(f<<2)>>2]=(h&-16711936)+(g&-16711936)&-16711936|(h&16711935)+(g&16711935)&16711935;f=f+1|0}while((f|0)!=(d|0));return}function xb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((d|0)<=0)return;f=0;do{g=c[b+(f<<2)+4>>2]|0;h=c[a+(f<<2)>>2]|0;c[e+(f<<2)>>2]=(h&-16711936)+(g&-16711936)&-16711936|(h&16711935)+(g&16711935)&16711935;f=f+1|0}while((f|0)!=(d|0));return}function yb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((d|0)<=0)return;f=0;do{g=c[b+(f<<2)+-4>>2]|0;h=c[a+(f<<2)>>2]|0;c[e+(f<<2)>>2]=(h&-16711936)+(g&-16711936)&-16711936|(h&16711935)+(g&16711935)&16711935;f=f+1|0}while((f|0)!=(d|0));return}function zb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if((d|0)<=0)return;f=0;g=c[e+-4>>2]|0;do{h=b+(f<<2)|0;i=c[h>>2]|0;j=c[h+4>>2]|0;h=j^g;k=((1?h>>>1:h)&2139062143)+(j&g)|0;j=k^i;h=((1?j>>>1:j)&2139062143)+(k&i)|0;i=c[a+(f<<2)>>2]|0;g=(h&-16711936)+(i&-16711936)&-16711936|(h&16711935)+(i&16711935)&16711935;c[e+(f<<2)>>2]=g;f=f+1|0}while((f|0)!=(d|0));return}function Ab(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if((d|0)<=0)return;f=0;g=c[e+-4>>2]|0;do{h=c[b+(f<<2)+-4>>2]|0;i=h^g;j=((1?i>>>1:i)&2139062143)+(h&g)|0;h=c[a+(f<<2)>>2]|0;g=(j&-16711936)+(h&-16711936)&-16711936|(j&16711935)+(h&16711935)&16711935;c[e+(f<<2)>>2]=g;f=f+1|0}while((f|0)!=(d|0));return}function Bb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if((d|0)<=0)return;f=0;g=c[e+-4>>2]|0;do{h=c[b+(f<<2)>>2]|0;i=h^g;j=((1?i>>>1:i)&2139062143)+(h&g)|0;h=c[a+(f<<2)>>2]|0;g=(j&-16711936)+(h&-16711936)&-16711936|(j&16711935)+(h&16711935)&16711935;c[e+(f<<2)>>2]=g;f=f+1|0}while((f|0)!=(d|0));return}function Cb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if((d|0)<=0)return;f=0;do{g=b+(f<<2)|0;h=c[g+-4>>2]|0;i=c[g>>2]|0;g=i^h;j=((1?g>>>1:g)&2139062143)+(i&h)|0;h=c[a+(f<<2)>>2]|0;c[e+(f<<2)>>2]=(j&-16711936)+(h&-16711936)&-16711936|(j&16711935)+(h&16711935)&16711935;f=f+1|0}while((f|0)!=(d|0));return}function Db(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if((d|0)<=0)return;f=0;do{g=b+(f<<2)|0;h=c[g>>2]|0;i=c[g+4>>2]|0;g=i^h;j=((1?g>>>1:g)&2139062143)+(i&h)|0;h=c[a+(f<<2)>>2]|0;c[e+(f<<2)>>2]=(j&-16711936)+(h&-16711936)&-16711936|(j&16711935)+(h&16711935)&16711935;f=f+1|0}while((f|0)!=(d|0));return}function Eb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;if((d|0)<=0)return;f=0;g=c[e+-4>>2]|0;do{h=b+(f<<2)|0;i=c[h+-4>>2]|0;j=c[h>>2]|0;k=c[h+4>>2]|0;h=i^g;l=((1?h>>>1:h)&2139062143)+(i&g)|0;i=k^j;h=((1?i>>>1:i)&2139062143)+(k&j)|0;j=h^l;k=((1?j>>>1:j)&2139062143)+(h&l)|0;l=c[a+(f<<2)>>2]|0;g=(k&-16711936)+(l&-16711936)&-16711936|(k&16711935)+(l&16711935)&16711935;c[e+(f<<2)>>2]=g;f=f+1|0}while((f|0)!=(d|0));return}function Fb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((d|0)<=0)return;f=0;g=c[e+-4>>2]|0;do{h=b+(f<<2)|0;i=c[h>>2]|0;j=c[h+-4>>2]|0;h=24?j>>>24:j;k=(24?g>>>24:g)-h|0;l=(24?i>>>24:i)-h|0;h=(16?j>>>16:j)&255;m=((16?g>>>16:g)&255)-h|0;n=((16?i>>>16:i)&255)-h|0;h=(8?j>>>8:j)&255;o=((8?g>>>8:g)&255)-h|0;p=((8?i>>>8:i)&255)-h|0;h=j&255;j=(g&255)-h|0;q=(i&255)-h|0;h=(((j|0)>-1?j:0-j|0)-((q|0)>-1?q:0-q|0)-((l|0)>-1?l:0-l|0)+((k|0)>-1?k:0-k|0)-((p|0)>-1?p:0-p|0)+((o|0)>-1?o:0-o|0)-((n|0)>-1?n:0-n|0)+((m|0)>-1?m:0-m|0)|0)<1?i:g;i=c[a+(f<<2)>>2]|0;g=(h&-16711936)+(i&-16711936)&-16711936|(h&16711935)+(i&16711935)&16711935;c[e+(f<<2)>>2]=g;f=f+1|0}while((f|0)!=(d|0));return}function Gb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if((d|0)<=0)return;f=0;g=c[e+-4>>2]|0;do{h=b+(f<<2)|0;i=c[h>>2]|0;j=c[h+-4>>2]|0;h=(24?i>>>24:i)+(24?g>>>24:g)-(24?j>>>24:j)|0;k=((16?i>>>16:i)&255)+((16?g>>>16:g)&255)-((16?j>>>16:j)&255)|0;l=((8?i>>>8:i)&255)+((8?g>>>8:g)&255)-((8?j>>>8:j)&255)|0;m=(i&255)+(g&255)-(j&255)|0;j=(h>>>0<256?h:(24?h>>>24:h)^255)<<24|(m>>>0<256?m:(24?m>>>24:m)^255)|(k>>>0<256?k:(24?k>>>24:k)^255)<<16|(l>>>0<256?l:(24?l>>>24:l)^255)<<8;l=c[a+(f<<2)>>2]|0;g=(j&-16711936)+(l&-16711936)&-16711936|(j&16711935)+(l&16711935)&16711935;c[e+(f<<2)>>2]=g;f=f+1|0}while((f|0)!=(d|0));return}function Hb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if((d|0)<=0)return;f=0;g=c[e+-4>>2]|0;do{h=b+(f<<2)|0;i=c[h>>2]|0;j=c[h+-4>>2]|0;h=i^g;k=((1?h>>>1:h)&2139062143)+(i&g)|0;i=24?k>>>24:k;h=((i-(24?j>>>24:j)|0)/2|0)+i|0;i=(16?k>>>16:k)&255;l=((i-((16?j>>>16:j)&255)|0)/2|0)+i|0;i=(8?k>>>8:k)&255;m=((i-((8?j>>>8:j)&255)|0)/2|0)+i|0;i=k&255;k=((i-(j&255)|0)/2|0)+i|0;i=(h>>>0<256?h:(24?h>>>24:h)^255)<<24|(k>>>0<256?k:(24?k>>>24:k)^255)|(l>>>0<256?l:(24?l>>>24:l)^255)<<16|(m>>>0<256?m:(24?m>>>24:m)^255)<<8;m=c[a+(f<<2)>>2]|0;g=(i&-16711936)+(m&-16711936)&-16711936|(i&16711935)+(m&16711935)&16711935;c[e+(f<<2)>>2]=g;f=f+1|0}while((f|0)!=(d|0));return}function Ib(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if((b|0)<=0)return;e=0;do{f=c[a+(e<<2)>>2]|0;g=(8?f>>>8:f)&255;c[d+(e<<2)>>2]=(g<<16|g)+(f&16711935)&16711935|f&-16711936;e=e+1|0}while((e|0)!=(b|0));return}function Jb(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if((e|0)<=0)return;g=a[b>>0]|0;h=a[b+1>>0]|0;i=a[b+2>>0]|0;b=0;do{j=c[d+(b<<2)>>2]|0;k=j<<16;l=24?k>>24:k;k=r(l,g)|0;m=(5?k>>5:k)+(16?j>>>16:j)|0;k=r(l,h)|0;l=m<<24;n=r(24?l>>24:l,i)|0;c[f+(b<<2)>>2]=m<<16&16711680|j&-16711936|(5?k>>>5:k)+j+(5?n>>>5:n)&255;b=b+1|0}while((b|0)!=(e|0));return}function Kb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;f=b+(d<<2)|0;if((d|0)<=0)return;d=e;e=b;while(1){b=c[e>>2]|0;e=e+4|0;a[d>>0]=16?b>>>16:b;a[d+1>>0]=8?b>>>8:b;a[d+2>>0]=b;a[d+3>>0]=24?b>>>24:b;if(e>>>0>=f>>>0)break;else d=d+4|0}return}function Lb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;f=b+(d<<2)|0;if((d|0)<=0)return;d=e;e=b;while(1){b=c[e>>2]|0;e=e+4|0;a[d>>0]=16?b>>>16:b;a[d+1>>0]=8?b>>>8:b;a[d+2>>0]=b;if(e>>>0>=f>>>0)break;else d=d+3|0}return}function Mb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;f=b+(d<<2)|0;if((d|0)<=0)return;d=e;e=b;while(1){b=c[e>>2]|0;e=e+4|0;a[d>>0]=b;a[d+1>>0]=8?b>>>8:b;a[d+2>>0]=16?b>>>16:b;if(e>>>0>=f>>>0)break;else d=d+3|0}return}function Nb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;f=b+(d<<2)|0;if((d|0)<=0)return;d=e;e=b;while(1){b=c[e>>2]|0;e=e+4|0;a[d>>0]=(16?b>>>16:b)&240|(12?b>>>12:b)&15;a[d+1>>0]=b&240|(28?b>>>28:b);if(e>>>0>=f>>>0)break;else d=d+2|0}return}function Ob(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;f=b+(d<<2)|0;if((d|0)<=0)return;d=e;e=b;while(1){b=c[e>>2]|0;e=e+4|0;a[d>>0]=(16?b>>>16:b)&248|(13?b>>>13:b)&7;a[d+1>>0]=(5?b>>>5:b)&224|(3?b>>>3:b)&31;if(e>>>0>=f>>>0)break;else d=d+2|0}return}function Pb(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;if(!((e|0)<(f|0)&(g|0)>0))return;h=e;e=a;a=d;while(1){d=0;i=a;j=e;e=e+(g<<2)|0;while(1){k=c[j>>2]|0;c[i>>2]=c[b+(((8?k>>>8:k)&255)<<2)>>2];d=d+1|0;if((d|0)==(g|0))break;else{i=i+4|0;j=j+4|0}}h=h+1|0;if((h|0)==(f|0))break;else a=a+(g<<2)|0}return}function Qb(b,e,f,g,h,i){b=b|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;if(!((g|0)<(h|0)&(i|0)>0))return;j=g;g=b;b=f;while(1){f=0;k=b;l=g;g=g+i|0;while(1){m=c[e+((d[l>>0]|0)<<2)>>2]|0;a[k>>0]=8?m>>>8:m;f=f+1|0;if((f|0)==(i|0))break;else{k=k+1|0;l=l+1|0}}j=j+1|0;if((j|0)==(h|0))break;else b=b+i|0}return}function Rb(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a+40>>2]|0;if((c[a+12>>2]|0)<1?1:(c[a+16>>2]|0)<1){d=0;return d|0}e=ba[c[b+44>>2]&31](a,b)|0;f=c[b+48>>2]|0;if(f|0)ca[f&15](a,b,e)|0;a=b+16|0;c[a>>2]=(c[a>>2]|0)+e;d=1;return d|0}function Sb(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;b=c[a+40>>2]|0;d=c[c[b>>2]>>2]|0;e=d>>>0<11;f=d+-1|0;if(f>>>0<12?(g=f&65535,((g?2077>>>g:2077)&1)!=0):0)h=1;else h=(d+-7|0)>>>0<4;g=b+40|0;f=b+44|0;i=b+48|0;j=b+52|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;if(!(Ub(c[b+20>>2]|0,a,h?11:12)|0)){k=0;return k|0}if(!((d+-7|0)>>>0>3|h^1))Vb();if(!(c[a+92>>2]|0)){do if(e){cc();c[f>>2]=17;if(c[a+56>>2]|0){l=a+12|0;m=c[l>>2]|0;n=m+1|0;o=wa(1,0,(n&-2)+m|0)|0;c[g>>2]=o;if(!o){k=0;return k|0}else{c[b+4>>2]=o;m=o+(c[l>>2]|0)|0;c[b+8>>2]=m;c[b+12>>2]=m+(1?n>>1:n);c[f>>2]=18;Vb();break}}}else c[f>>2]=19;while(0);if(!h){k=1;return k|0}switch(d|0){case 5:case 10:{p=9;break}default:p=e?6:5}c[i>>2]=p;if(!e){k=1;return k|0}Da();k=1;return k|0}p=c[b>>2]|0;d=c[p>>2]|0;h=d+-1|0;n=h>>>0<12;if(!e){if(n?(e=h&65535,((e?2077>>>e:2077)&1)!=0):0)q=1;else q=(d+-7|0)>>>0<4;e=c[a+96>>2]|0;m=c[a+100>>2]|0;l=e+1|0;o=1?l>>1:l;s=m+1|0;t=1?s>>1:s;s=a+12|0;u=(c[s>>2]|0)+1|0;v=1?u>>1:u;u=a+16|0;w=(c[u>>2]|0)+1|0;x=1?w>>1:w;w=e<<1;y=l&-2;l=y<<1;z=(l+w<<2)+(q?e<<3:0)|0;A=wa(1,0,z+(q?367:283)|0)|0;c[g>>2]=A;if(!A){k=0;return k|0}B=A+z+31&-32;c[b+24>>2]=B;z=b+28|0;c[z>>2]=B+84;C=b+32|0;c[C>>2]=B+168;D=b+36|0;c[D>>2]=q?B+252|0:0;Wb(B,c[s>>2]|0,c[u>>2]|0,c[p+16>>2]|0,e,m,c[p+32>>2]|0,1,A);B=A+(w<<2)|0;Wb(c[z>>2]|0,v,x,c[p+20>>2]|0,o,t,c[p+36>>2]|0,1,B);Wb(c[C>>2]|0,v,x,c[p+24>>2]|0,o,t,c[p+40>>2]|0,1,B+(y<<2)|0);c[f>>2]=16;if(!q){k=1;return k|0}Wb(c[D>>2]|0,c[s>>2]|0,c[u>>2]|0,c[p+28>>2]|0,e,m,c[p+44>>2]|0,1,B+(l<<2)|0);c[i>>2]=4;Da();k=1;return k|0}if(n?(n=h&65535,((n?2077>>>n:2077)&1)!=0):0)E=1;else E=(d+-7|0)>>>0<4;d=c[a+96>>2]|0;n=c[a+100>>2]|0;h=a+12|0;l=(c[h>>2]|0)+1|0;B=1?l>>1:l;l=a+16|0;a=(c[l>>2]|0)+1|0;p=1?a>>1:a;a=d<<1;m=d*6|0;e=r(d,E?36:27)|0;u=wa(1,0,e+(E?367:283)|0)|0;c[g>>2]=u;if(!u){k=0;return k|0}g=u+((E?d<<3:m)<<2)|0;s=u+e+31&-32;c[b+24>>2]=s;e=b+28|0;c[e>>2]=s+84;D=b+32|0;c[D>>2]=s+168;q=b+36|0;c[q>>2]=E?s+252|0:0;Wb(s,c[h>>2]|0,c[l>>2]|0,g,d,n,0,1,u);Wb(c[e>>2]|0,B,p,g+d|0,d,n,0,1,u+(a<<2)|0);Wb(c[D>>2]|0,B,p,g+a|0,d,n,0,1,u+(d<<2<<2)|0);c[f>>2]=15;Yb();if(!E){k=1;return k|0}Wb(c[q>>2]|0,c[h>>2]|0,c[l>>2]|0,g+(d*3|0)|0,d,n,0,1,u+(m<<2)|0);c[i>>2]=3;switch(c[c[b>>2]>>2]|0){case 10:case 5:{F=7;break}default:F=8}c[j>>2]=F;Da();k=1;return k|0}function Tb(a){a=a|0;var b=0;b=(c[a+40>>2]|0)+40|0;pa(c[b>>2]|0);c[b>>2]=0;return}function Ub(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;e=Y;Y=Y+16|0;f=e+4|0;g=e;h=c[b>>2]|0;i=c[b+4>>2]|0;j=(a|0)!=0;if(j){k=(c[a+8>>2]|0)>0;c[b+72>>2]=k&1;if(k){k=c[a+20>>2]|0;l=c[a+24>>2]|0;m=c[a+12>>2]|0;n=c[a+16>>2]|0;o=d>>>0>10;d=o?m&-2:m;m=o?n&-2:n;if((m+l|0)>(i|0)|((d+k|0)>(h|0)|((l|0)<1|((k|0)<1|(m|d|0)<0)))){p=0;Y=e;return p|0}else{q=l;r=k;s=m;t=d}}else{q=i;r=h;s=0;t=0}}else{c[b+72>>2]=0;q=i;r=h;s=0;t=0}c[b+76>>2]=t;c[b+84>>2]=s;c[b+80>>2]=r+t;c[b+88>>2]=q+s;c[b+12>>2]=r;c[b+16>>2]=q;if(!j){c[b+92>>2]=0;c[b+68>>2]=0;c[b+56>>2]=1;p=1;Y=e;return p|0}j=(c[a+28>>2]|0)>0;s=b+92|0;c[s>>2]=j&1;do if(j){c[f>>2]=c[a+32>>2];c[g>>2]=c[a+36>>2];if(Mc(r,q,f,g)|0){c[b+96>>2]=c[f>>2];c[b+100>>2]=c[g>>2];u=(c[s>>2]|0)==0;break}p=0;Y=e;return p|0}else u=1;while(0);s=b+68|0;c[s>>2]=(c[a>>2]|0)!=0&1;g=b+56|0;c[g>>2]=(c[a+4>>2]|0)==0&1;if(u){p=1;Y=e;return p|0}if((c[b+96>>2]|0)<((h*3|0)/4|0|0))v=(c[b+100>>2]|0)<((i*3|0)/4|0|0)&1;else v=0;c[s>>2]=v;c[g>>2]=0;p=1;Y=e;return p|0}function Vb(){if(Te(10084)|0)return;if(c[2033]|0){c[2437]=1;c[2439]=2;c[2443]=1;c[2444]=2;c[2436]=3;c[2438]=4;c[2440]=5;c[2441]=6;c[2442]=7;c[2445]=5;c[2446]=6}c[2033]=0;Ue(10084)|0;return}function Wb(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;k=(b|0)<(f|0);c[a>>2]=k&1;l=(d|0)<(g|0);c[a+4>>2]=l&1;c[a+44>>2]=b;c[a+48>>2]=d;c[a+52>>2]=f;c[a+56>>2]=g;c[a+60>>2]=0;c[a+64>>2]=0;c[a+68>>2]=e;c[a+72>>2]=h;c[a+8>>2]=i;h=k?f+-1|0:b;c[a+36>>2]=h;e=k?b+-1|0:f;c[a+40>>2]=e;if(!k){k=Hf(0,1,e|0,((e|0)<0)<<31>>31|0)|0;v()|0;c[a+12>>2]=k}k=l<<31>>31;e=k+d|0;c[a+28>>2]=e;d=k+g|0;c[a+32>>2]=d;k=a+24|0;if(l){c[k>>2]=d;m=h}else{c[k>>2]=e;k=r(e,h)|0;h=Hf(0,g|0,k|0,((k|0)<0)<<31>>31|0)|0;k=(h|0)==(h|0)&(v()|0)==0;c[a+20>>2]=k?h:0;m=d}d=Hf(0,1,m|0,((m|0)<0)<<31>>31|0)|0;v()|0;c[a+16>>2]=d;c[a+76>>2]=j;d=j+((r(i,f)|0)<<2)|0;c[a+80>>2]=d;Nf(j|0,0,r(f<<3,i)|0)|0;Ac();return}function Xb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,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;d=c[a+16>>2]|0;e=d+1|0;f=1?e>>1:e;if((d|0)<=0){g=0;return g|0}e=b+24|0;h=a+20|0;i=a+32|0;j=b+28|0;k=a+24|0;l=a+36|0;m=b+32|0;n=a+28|0;a=b+16|0;o=0;p=0;q=0;s=c[e>>2]|0;while(1){t=c[i>>2]|0;q=(Oa(s,d-q|0,(c[h>>2]|0)+(r(t,q)|0)|0,t)|0)+q|0;t=f-o|0;if(!(Ma(c[j>>2]|0,t)|0))u=o;else{v=c[l>>2]|0;w=Oa(c[j>>2]|0,t,(c[k>>2]|0)+(r(v,o)|0)|0,v)|0;v=c[l>>2]|0;Oa(c[m>>2]|0,t,(c[n>>2]|0)+(r(v,o)|0)|0,v)|0;u=w+o|0}w=c[b>>2]|0;v=c[9808+(c[w>>2]<<2)>>2]|0;t=w+20|0;x=c[e>>2]|0;a:do if((c[x+64>>2]|0)<(c[x+56>>2]|0)){y=(c[w+16>>2]|0)+(r(c[t>>2]|0,(c[a>>2]|0)+p|0)|0)|0;z=0;A=x;while(1){if((c[A+24>>2]|0)>0){B=z;C=A;break a}D=c[j>>2]|0;if((c[D+64>>2]|0)>=(c[D+56>>2]|0)){B=z;C=A;break a}if((c[D+24>>2]|0)>0){B=z;C=A;break a}Pa(A);Pa(c[j>>2]|0);Pa(c[m>>2]|0);D=c[e>>2]|0;ha[v&31](c[D+68>>2]|0,c[(c[j>>2]|0)+68>>2]|0,c[(c[m>>2]|0)+68>>2]|0,y,c[D+52>>2]|0);D=z+1|0;E=c[e>>2]|0;if((c[E+64>>2]|0)<(c[E+56>>2]|0)){y=y+(c[t>>2]|0)|0;z=D;A=E}else{B=D;C=E;break}}}else{B=0;C=x}while(0);x=B+p|0;if((d|0)<=(q|0)){g=x;break}else{o=u;p=x;s=C}}return g|0}function Yb(){if(Te(10028)|0)return;if(c[2031]|0){c[2453]=4;c[2455]=5;c[2452]=6;c[2454]=7;c[2456]=8;c[2457]=9;c[2458]=10;c[2459]=4;c[2460]=5;c[2461]=8;c[2462]=9}c[2031]=0;Ue(10028)|0;return}function Zb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;e=a+104|0;f=c[e>>2]|0;if(!f)return 0;g=c[b+36>>2]|0;h=(c[b+16>>2]|0)+d|0;if((d|0)<=0)return 0;i=g+60|0;j=a+8|0;k=a+16|0;l=b+52|0;m=d;d=f;while(1){f=c[i>>2]|0;n=c[j>>2]|0;o=c[a>>2]|0;Oa(g,n-f+(c[k>>2]|0)|0,d+(r(o,f-n|0)|0)|0,o)|0;o=m-(ca[c[l>>2]&15](b,h-m|0,m)|0)|0;if((o|0)<=0)break;m=o;d=c[e>>2]|0}return 0}function _b(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;e=c[a>>2]|0;f=e+20|0;g=c[f>>2]|0;h=(c[e+16>>2]|0)+(r(g,b)|0)|0;b=c[e>>2]|0;e=(b|0)==4|(b|0)==9;i=e&1;j=(b+-7|0)>>>0<4;b=a+36|0;a=c[b>>2]|0;k=c[a+52>>2]|0;if((c[a+64>>2]|0)>=(c[a+56>>2]|0)){l=0;return l|0}m=0;n=0;o=h+(e?0:3)|0;e=a;a=g;while(1){if(!((n|0)<(d|0)?(c[e+24>>2]|0)<1:0)){p=m;q=n;s=a;break}Pa(e);g=Xa(c[(c[b>>2]|0)+68>>2]|0,0,k,1,o,0)|0|m;t=c[f>>2]|0;u=n+1|0;e=c[b>>2]|0;if((c[e+64>>2]|0)>=(c[e+56>>2]|0)){p=g;q=u;s=t;break}else{m=g;n=u;o=o+t|0;a=t}}if(!(j&(p|0)!=0)){l=q;return l|0}Wa(h,i,k,q,s);l=q;return l|0}function $b(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;g=c[b>>2]|0;h=g+20|0;i=(c[g+16>>2]|0)+(r(c[h>>2]|0,e)|0)|0;e=b+36|0;b=c[e>>2]|0;j=c[b+52>>2]|0;k=((c[g>>2]|0)+-7|0)>>>0<4;if((c[b+64>>2]|0)>=(c[b+56>>2]|0)){l=0;return l|0}if((j|0)<=0){g=0;m=b;while(1){if(!((g|0)<(f|0)?(c[m+24>>2]|0)<1:0)){l=g;n=13;break}Pa(m);o=g+1|0;m=c[e>>2]|0;if((c[m+64>>2]|0)>=(c[m+56>>2]|0)){l=o;n=13;break}else g=o}if((n|0)==13)return l|0}n=15;g=0;m=i+1|0;o=b;while(1){if(!((g|0)<(f|0)?(c[o+24>>2]|0)<1:0)){p=n;q=g;break}Pa(o);b=0;s=n;do{t=d[(c[(c[e>>2]|0)+68>>2]|0)+b>>0]|0;u=4?t>>>4:t;t=m+(b<<1)|0;a[t>>0]=u|a[t>>0]&-16&255;s=u&s;b=b+1|0}while((b|0)!=(j|0));b=g+1|0;o=c[e>>2]|0;if((c[o+64>>2]|0)>=(c[o+56>>2]|0)){p=s;q=b;break}else{n=s;g=b;m=m+(c[h>>2]|0)|0}}if(!(k&(p|0)!=15)){l=q;return l|0}Va(i,j,q,c[h>>2]|0);l=q;return l|0}function ac(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=c[a+16>>2]|0;e=d+1|0;f=1?e>>1:e;e=c[b+24>>2]|0;g=c[c[b>>2]>>2]|0;switch(g|0){case 1:case 3:case 4:case 5:case 12:{h=3;break}default:if((g+-7|0)>>>0<=3)h=3}if((h|0)==3?(h=c[a+104>>2]|0,h|0):0)sc(c[a+20>>2]|0,c[a+32>>2]|0,h,c[a>>2]|0,c[a+12>>2]|0,d,0);h=c[a+32>>2]|0;g=(d|0)>0;if(!g){i=0;return i|0}j=0;k=d;d=c[a+20>>2]|0;do{l=Oa(e,k,d,h)|0;d=d+(r(l,h)|0)|0;k=k-l|0;j=(rc(e)|0)+j|0}while((k|0)>0);k=a+36|0;e=c[k>>2]|0;h=c[b+28>>2]|0;if(!g){i=j;return i|0}g=f;d=c[a+24>>2]|0;do{l=Oa(h,g,d,e)|0;d=d+(r(l,e)|0)|0;g=g-l|0;rc(h)|0}while((g|0)>0);g=c[k>>2]|0;k=c[b+32>>2]|0;b=f;f=c[a+28>>2]|0;do{a=Oa(k,b,f,g)|0;f=f+(r(a,g)|0)|0;b=b-a|0;rc(k)|0}while((b|0)>0);i=j;return i|0}function bc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;e=c[b>>2]|0;f=c[e+28>>2]|0;g=c[b+16>>2]|0;h=e+44|0;i=c[h>>2]|0;j=f+(r(i,g)|0)|0;k=c[a+104>>2]|0;if(!k){if(!f)return 0;f=c[a+96>>2]|0;if((d|0)<=0)return 0;l=j;m=0;while(1){Nf(l|0,-1,f|0)|0;m=m+1|0;if((m|0)==(d|0))break;else l=l+i|0}return 0}i=c[e+16>>2]|0;l=e+32|0;e=c[l>>2]|0;d=c[a>>2]|0;m=c[a+16>>2]|0;a=b+36|0;b=c[a>>2]|0;if((m|0)<=0)return 0;f=0;n=m;m=k;do{k=Oa(b,n,m,d)|0;m=m+(r(k,d)|0)|0;n=n-k|0;f=(rc(b)|0)+f|0}while((n|0)>0);if((f|0)<=0)return 0;n=i+(r(e,g)|0)|0;sc(n,c[l>>2]|0,j,c[h>>2]|0,c[(c[a>>2]|0)+52>>2]|0,f,1);return 0}function cc(){if(Te(1e4)|0)return;if(c[2030]|0){c[2468]=11;c[2469]=12;c[2470]=13;c[2471]=14;c[2472]=15;c[2473]=16;c[2474]=17;c[2475]=12;c[2476]=14;c[2477]=15;c[2478]=16}c[2030]=0;Ue(1e4)|0;return}function dc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[b>>2]|0;b=c[d+20>>2]|0;e=(c[d+16>>2]|0)+(r(b,c[a+8>>2]|0)|0)|0;f=a+16|0;jc(c[a+20>>2]|0,c[a+32>>2]|0,c[a+24>>2]|0,c[a+28>>2]|0,c[a+36>>2]|0,e,b,c[a+12>>2]|0,c[f>>2]|0,c[9872+(c[d>>2]<<2)>>2]|0);return c[f>>2]|0}function ec(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;d=c[a+16>>2]|0;e=c[b>>2]|0;f=c[a+8>>2]|0;g=e+20|0;h=c[g>>2]|0;i=(c[e+16>>2]|0)+(r(h,f)|0)|0;j=c[9744+(c[e>>2]<<2)>>2]|0;e=c[a+20>>2]|0;k=c[a+24>>2]|0;l=c[a+28>>2]|0;m=b+8|0;n=b+12|0;o=f+d|0;p=c[a+12>>2]|0;q=(p+1|0)/2|0;if(!f){ia[j&7](e,0,k,l,k,l,i,0,p);s=d}else{ia[j&7](c[b+4>>2]|0,e,c[m>>2]|0,c[n>>2]|0,k,l,i+(0-h)|0,i,p);s=d+1|0}d=f+2|0;if((d|0)<(o|0)){f=a+36|0;h=a+32|0;t=i;u=e;v=l;w=k;x=d;while(1){d=c[f>>2]|0;y=w+d|0;z=v+d|0;d=c[g>>2]|0;A=t+(d<<1)|0;B=c[h>>2]|0;C=u+(B<<1)|0;ia[j&7](C+(0-B)|0,C,w,v,y,z,A+(0-d)|0,A,p);x=x+2|0;if((x|0)>=(o|0)){D=A;E=C;F=z;G=y;H=h;break}else{t=A;u=C;v=z;w=y}}}else{D=i;E=e;F=l;G=k;H=a+32|0}k=E+(c[H>>2]|0)|0;if(((c[a+84>>2]|0)+o|0)<(c[a+88>>2]|0)){Lf(c[b+4>>2]|0,k|0,p|0)|0;Lf(c[m>>2]|0,G|0,q|0)|0;Lf(c[n>>2]|0,F|0,q|0)|0;I=s+-1|0;return I|0}if(o&1|0){I=s;return I|0}ia[j&7](k,0,G,F,G,F,D+(c[g>>2]|0)|0,0,p);I=s;return I|0}function fc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;d=c[b>>2]|0;b=c[a+8>>2]|0;e=d+32|0;f=(c[d+16>>2]|0)+(r(c[e>>2]|0,b)|0)|0;g=1?b>>1:b;b=d+36|0;h=(c[d+20>>2]|0)+(r(c[b>>2]|0,g)|0)|0;i=d+40|0;j=(c[d+24>>2]|0)+(r(c[i>>2]|0,g)|0)|0;g=c[a+12>>2]|0;d=a+16|0;k=c[d>>2]|0;l=(g+1|0)/2|0;m=(k+1|0)/2|0;n=(k|0)>0;if(!n){o=c[d>>2]|0;return o|0}p=a+20|0;q=a+32|0;Lf(f|0,c[p>>2]|0,g|0)|0;if((k|0)!=1){s=1;do{t=f+(r(c[e>>2]|0,s)|0)|0;Lf(t|0,(c[p>>2]|0)+(r(c[q>>2]|0,s)|0)|0,g|0)|0;s=s+1|0}while((s|0)!=(k|0))}if(!n){o=c[d>>2]|0;return o|0}n=a+24|0;k=a+36|0;s=a+28|0;a=0;do{g=h+(r(c[b>>2]|0,a)|0)|0;Lf(g|0,(c[n>>2]|0)+(r(c[k>>2]|0,a)|0)|0,l|0)|0;g=j+(r(c[i>>2]|0,a)|0)|0;Lf(g|0,(c[s>>2]|0)+(r(c[k>>2]|0,a)|0)|0,l|0)|0;a=a+1|0}while((a|0)<(m|0));o=c[d>>2]|0;return o|0}function gc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;d=c[a+104>>2]|0;if(!d)return 0;e=c[a+12>>2]|0;f=c[b>>2]|0;b=c[f>>2]|0;g=(b|0)==4|(b|0)==9;h=g&1;i=c[a+8>>2]|0;j=c[a+16>>2]|0;if(!(c[a+56>>2]|0)){k=j;l=i;m=d}else{if(!i){n=j+-1|0;o=0;p=d}else{n=j;o=i+-1|0;p=d+(0-(c[a>>2]|0))|0}d=c[a+84>>2]|0;q=j+i+d|0;k=(q|0)==(c[a+88>>2]|0)?q-(d+o)|0:n;l=o;m=p}p=f+20|0;o=c[p>>2]|0;n=(c[f+16>>2]|0)+(r(o,l)|0)|0;if((b+-7|0)>>>0>3|(Xa(m,c[a>>2]|0,e,k,n+(g?0:3)|0,o)|0)==0)return 0;Wa(n,h,e,k,c[p>>2]|0);return 0}function hc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;d=c[a+104>>2]|0;e=c[b>>2]|0;b=c[a+12>>2]|0;f=c[a+16>>2]|0;g=c[e+28>>2]|0;h=e+44|0;e=c[h>>2]|0;i=g+(r(e,c[a+8>>2]|0)|0)|0;if(!d){if(!((f|0)>0&(g|0)!=0))return 0;g=i;j=0;while(1){Nf(g|0,-1,b|0)|0;j=j+1|0;if((j|0)==(f|0))break;else g=g+e|0}return 0}else{if((f|0)<=0)return 0;e=i;i=d;d=0;while(1){Lf(e|0,i|0,b|0)|0;d=d+1|0;if((d|0)==(f|0))break;else{e=e+(c[h>>2]|0)|0;i=i+(c[a>>2]|0)|0}}return 0}return 0}function ic(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;f=c[b+104>>2]|0;if(!f)return 0;g=c[b+12>>2]|0;h=c[e>>2]|0;e=c[h>>2]|0;i=c[b+8>>2]|0;j=c[b+16>>2]|0;if(!(c[b+56>>2]|0)){k=i;l=j;m=f}else{if(!i){n=0;o=j+-1|0;p=f}else{n=i+-1|0;o=j;p=f+(0-(c[b>>2]|0))|0}f=c[b+84>>2]|0;q=j+i+f|0;k=n;l=(q|0)==(c[b+88>>2]|0)?q-(f+n)|0:o;m=p}p=h+20|0;o=(c[h+16>>2]|0)+(r(c[p>>2]|0,k)|0)|0;if((l|0)<=0)return 0;if((g|0)<=0)return 0;k=0;h=15;n=o+1|0;f=m;while(1){m=0;s=h;do{q=d[f+m>>0]|0;i=4?q>>>4:q;q=n+(m<<1)|0;a[q>>0]=i|a[q>>0]&-16&255;s=i&s;m=m+1|0}while((m|0)!=(g|0));t=c[p>>2]|0;k=k+1|0;if((k|0)==(l|0))break;else{h=s;n=n+t|0;f=f+(c[b>>2]|0)|0}}if((e+-7|0)>>>0>3|(s|0)==15)return 0;Va(o,g,l,t);return 0}function jc(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;if((i|0)<=0)return;k=a;a=c;c=d;d=f;f=0;while(1){ha[j&31](k,a,c,d,h);l=(f&1|0)==0;f=f+1|0;if((f|0)==(i|0))break;else{k=k+b|0;a=l?a:a+e|0;c=l?c:c+e|0;d=d+g|0}}return}function kc(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;h=g&-2;i=f+(h*3|0)|0;if(!h){j=b;k=c;l=f;m=e}else{h=c;c=f;f=e;e=b;while(1){b=d[h>>0]|0;n=d[f>>0]|0;o=(d[e>>0]|0)*19077|0;p=8?o>>>8:o;o=n*26149|0;q=p+-14234+(8?o>>>8:o)|0;if(q>>>0<16384)r=6?q>>>6:q;else r=((31?q>>31:q)&-255)+255|0;a[c>>0]=r;q=b*6419|0;o=n*13320|0;n=p+8708-(8?q>>>8:q)-(8?o>>>8:o)|0;if(n>>>0<16384)s=6?n>>>6:n;else s=((31?n>>31:n)&-255)+255|0;a[c+1>>0]=s;n=b*33050|0;b=p+-17685+(8?n>>>8:n)|0;if(b>>>0<16384)t=6?b>>>6:b;else t=((31?b>>31:b)&-255)+255|0;a[c+2>>0]=t;b=d[h>>0]|0;n=d[f>>0]|0;p=(d[e+1>>0]|0)*19077|0;o=8?p>>>8:p;p=n*26149|0;q=o+-14234+(8?p>>>8:p)|0;if(q>>>0<16384)u=6?q>>>6:q;else u=((31?q>>31:q)&-255)+255|0;a[c+3>>0]=u;q=b*6419|0;p=n*13320|0;n=o+8708-(8?q>>>8:q)-(8?p>>>8:p)|0;if(n>>>0<16384)v=6?n>>>6:n;else v=((31?n>>31:n)&-255)+255|0;a[c+4>>0]=v;n=b*33050|0;b=o+-17685+(8?n>>>8:n)|0;if(b>>>0<16384)w=6?b>>>6:b;else w=((31?b>>31:b)&-255)+255|0;a[c+5>>0]=w;b=e+2|0;n=h+1|0;o=f+1|0;c=c+6|0;if((c|0)==(i|0)){j=b;k=n;l=i;m=o;break}else{h=n;f=o;e=b}}}if(!(g&1))return;g=d[k>>0]|0;k=d[m>>0]|0;m=(d[j>>0]|0)*19077|0;j=8?m>>>8:m;m=k*26149|0;e=j+-14234+(8?m>>>8:m)|0;if(e>>>0<16384)x=6?e>>>6:e;else x=((31?e>>31:e)&-255)+255|0;a[l>>0]=x;x=g*6419|0;e=k*13320|0;k=j+8708-(8?x>>>8:x)-(8?e>>>8:e)|0;if(k>>>0<16384)y=6?k>>>6:k;else y=((31?k>>31:k)&-255)+255|0;a[l+1>>0]=y;y=g*33050|0;g=j+-17685+(8?y>>>8:y)|0;if(g>>>0<16384)z=6?g>>>6:g;else z=((31?g>>31:g)&-255)+255|0;a[l+2>>0]=z;return}function lc(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;h=g<<2&-8;i=f+h|0;if(!h){j=b;k=c;l=f;m=e}else{n=h+-8|0;o=(2?n>>>2:n)+2|0;p=(3?n>>>3:n)+1|0;n=c+p|0;q=c;c=f;r=e;s=b;while(1){t=d[q>>0]|0;u=d[r>>0]|0;v=(d[s>>0]|0)*19077|0;w=8?v>>>8:v;v=u*26149|0;x=w+-14234+(8?v>>>8:v)|0;if(x>>>0<16384)y=6?x>>>6:x;else y=((31?x>>31:x)&-255)+255|0;a[c>>0]=y;x=t*6419|0;v=u*13320|0;u=w+8708-(8?x>>>8:x)-(8?v>>>8:v)|0;if(u>>>0<16384)z=6?u>>>6:u;else z=((31?u>>31:u)&-255)+255|0;a[c+1>>0]=z;u=t*33050|0;t=w+-17685+(8?u>>>8:u)|0;if(t>>>0<16384)A=6?t>>>6:t;else A=((31?t>>31:t)&-255)+255|0;a[c+2>>0]=A;a[c+3>>0]=-1;t=d[q>>0]|0;u=d[r>>0]|0;w=(d[s+1>>0]|0)*19077|0;v=8?w>>>8:w;w=u*26149|0;x=v+-14234+(8?w>>>8:w)|0;if(x>>>0<16384)B=6?x>>>6:x;else B=((31?x>>31:x)&-255)+255|0;a[c+4>>0]=B;x=t*6419|0;w=u*13320|0;u=v+8708-(8?x>>>8:x)-(8?w>>>8:w)|0;if(u>>>0<16384)C=6?u>>>6:u;else C=((31?u>>31:u)&-255)+255|0;a[c+5>>0]=C;u=t*33050|0;t=v+-17685+(8?u>>>8:u)|0;if(t>>>0<16384)D=6?t>>>6:t;else D=((31?t>>31:t)&-255)+255|0;a[c+6>>0]=D;a[c+7>>0]=-1;c=c+8|0;if((c|0)==(i|0))break;else{q=q+1|0;r=r+1|0;s=s+2|0}}j=b+o|0;k=n;l=f+h|0;m=e+p|0}if(!(g&1))return;g=d[k>>0]|0;k=d[m>>0]|0;m=(d[j>>0]|0)*19077|0;j=8?m>>>8:m;m=k*26149|0;p=j+-14234+(8?m>>>8:m)|0;if(p>>>0<16384)E=6?p>>>6:p;else E=((31?p>>31:p)&-255)+255|0;a[l>>0]=E;E=g*6419|0;p=k*13320|0;k=j+8708-(8?E>>>8:E)-(8?p>>>8:p)|0;if(k>>>0<16384)F=6?k>>>6:k;else F=((31?k>>31:k)&-255)+255|0;a[l+1>>0]=F;F=g*33050|0;g=j+-17685+(8?F>>>8:F)|0;if(g>>>0<16384)G=6?g>>>6:g;else G=((31?g>>31:g)&-255)+255|0;a[l+2>>0]=G;a[l+3>>0]=-1;return}function mc(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;h=g&-2;i=f+(h*3|0)|0;if(!h){j=b;k=c;l=f;m=e}else{h=c;c=f;f=e;e=b;while(1){b=d[h>>0]|0;n=d[f>>0]|0;o=(d[e>>0]|0)*19077|0;p=8?o>>>8:o;o=b*33050|0;q=p+-17685+(8?o>>>8:o)|0;if(q>>>0<16384)r=6?q>>>6:q;else r=((31?q>>31:q)&-255)+255|0;a[c>>0]=r;q=b*6419|0;b=n*13320|0;o=p+8708-(8?q>>>8:q)-(8?b>>>8:b)|0;if(o>>>0<16384)s=6?o>>>6:o;else s=((31?o>>31:o)&-255)+255|0;a[c+1>>0]=s;o=n*26149|0;n=p+-14234+(8?o>>>8:o)|0;if(n>>>0<16384)t=6?n>>>6:n;else t=((31?n>>31:n)&-255)+255|0;a[c+2>>0]=t;n=d[h>>0]|0;o=d[f>>0]|0;p=(d[e+1>>0]|0)*19077|0;b=8?p>>>8:p;p=n*33050|0;q=b+-17685+(8?p>>>8:p)|0;if(q>>>0<16384)u=6?q>>>6:q;else u=((31?q>>31:q)&-255)+255|0;a[c+3>>0]=u;q=n*6419|0;n=o*13320|0;p=b+8708-(8?q>>>8:q)-(8?n>>>8:n)|0;if(p>>>0<16384)v=6?p>>>6:p;else v=((31?p>>31:p)&-255)+255|0;a[c+4>>0]=v;p=o*26149|0;o=b+-14234+(8?p>>>8:p)|0;if(o>>>0<16384)w=6?o>>>6:o;else w=((31?o>>31:o)&-255)+255|0;a[c+5>>0]=w;o=e+2|0;p=h+1|0;b=f+1|0;c=c+6|0;if((c|0)==(i|0)){j=o;k=p;l=i;m=b;break}else{h=p;f=b;e=o}}}if(!(g&1))return;g=d[k>>0]|0;k=d[m>>0]|0;m=(d[j>>0]|0)*19077|0;j=8?m>>>8:m;m=g*33050|0;e=j+-17685+(8?m>>>8:m)|0;if(e>>>0<16384)x=6?e>>>6:e;else x=((31?e>>31:e)&-255)+255|0;a[l>>0]=x;x=g*6419|0;g=k*13320|0;e=j+8708-(8?x>>>8:x)-(8?g>>>8:g)|0;if(e>>>0<16384)y=6?e>>>6:e;else y=((31?e>>31:e)&-255)+255|0;a[l+1>>0]=y;y=k*26149|0;k=j+-14234+(8?y>>>8:y)|0;if(k>>>0<16384)z=6?k>>>6:k;else z=((31?k>>31:k)&-255)+255|0;a[l+2>>0]=z;return}function nc(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;h=g<<2&-8;i=f+h|0;if(!h){j=b;k=c;l=f;m=e}else{n=h+-8|0;o=(2?n>>>2:n)+2|0;p=(3?n>>>3:n)+1|0;n=c+p|0;q=c;c=f;r=e;s=b;while(1){t=d[q>>0]|0;u=d[r>>0]|0;v=(d[s>>0]|0)*19077|0;w=8?v>>>8:v;v=t*33050|0;x=w+-17685+(8?v>>>8:v)|0;if(x>>>0<16384)y=6?x>>>6:x;else y=((31?x>>31:x)&-255)+255|0;a[c>>0]=y;x=t*6419|0;t=u*13320|0;v=w+8708-(8?x>>>8:x)-(8?t>>>8:t)|0;if(v>>>0<16384)z=6?v>>>6:v;else z=((31?v>>31:v)&-255)+255|0;a[c+1>>0]=z;v=u*26149|0;u=w+-14234+(8?v>>>8:v)|0;if(u>>>0<16384)A=6?u>>>6:u;else A=((31?u>>31:u)&-255)+255|0;a[c+2>>0]=A;a[c+3>>0]=-1;u=d[q>>0]|0;v=d[r>>0]|0;w=(d[s+1>>0]|0)*19077|0;t=8?w>>>8:w;w=u*33050|0;x=t+-17685+(8?w>>>8:w)|0;if(x>>>0<16384)B=6?x>>>6:x;else B=((31?x>>31:x)&-255)+255|0;a[c+4>>0]=B;x=u*6419|0;u=v*13320|0;w=t+8708-(8?x>>>8:x)-(8?u>>>8:u)|0;if(w>>>0<16384)C=6?w>>>6:w;else C=((31?w>>31:w)&-255)+255|0;a[c+5>>0]=C;w=v*26149|0;v=t+-14234+(8?w>>>8:w)|0;if(v>>>0<16384)D=6?v>>>6:v;else D=((31?v>>31:v)&-255)+255|0;a[c+6>>0]=D;a[c+7>>0]=-1;c=c+8|0;if((c|0)==(i|0))break;else{q=q+1|0;r=r+1|0;s=s+2|0}}j=b+o|0;k=n;l=f+h|0;m=e+p|0}if(!(g&1))return;g=d[k>>0]|0;k=d[m>>0]|0;m=(d[j>>0]|0)*19077|0;j=8?m>>>8:m;m=g*33050|0;p=j+-17685+(8?m>>>8:m)|0;if(p>>>0<16384)E=6?p>>>6:p;else E=((31?p>>31:p)&-255)+255|0;a[l>>0]=E;E=g*6419|0;g=k*13320|0;p=j+8708-(8?E>>>8:E)-(8?g>>>8:g)|0;if(p>>>0<16384)F=6?p>>>6:p;else F=((31?p>>31:p)&-255)+255|0;a[l+1>>0]=F;F=k*26149|0;k=j+-14234+(8?F>>>8:F)|0;if(k>>>0<16384)G=6?k>>>6:k;else G=((31?k>>31:k)&-255)+255|0;a[l+2>>0]=G;a[l+3>>0]=-1;return}function oc(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;g=f<<2&-8;h=e+g|0;if(!g){i=b;j=c;k=e;l=d}else{m=g+-8|0;n=(2?m>>>2:m)+2|0;o=(3?m>>>3:m)+1|0;m=c+o|0;p=c;c=e;q=d;r=b;while(1){s=a[r>>0]|0;t=a[p>>0]|0;u=a[q>>0]|0;a[c>>0]=-1;v=t&255;t=u&255;u=(s&255)*19077|0;s=8?u>>>8:u;u=t*26149|0;w=s+-14234+(8?u>>>8:u)|0;if(w>>>0<16384)x=6?w>>>6:w;else x=((31?w>>31:w)&-255)+255|0;a[c+1>>0]=x;w=v*6419|0;u=t*13320|0;t=s+8708-(8?w>>>8:w)-(8?u>>>8:u)|0;if(t>>>0<16384)y=6?t>>>6:t;else y=((31?t>>31:t)&-255)+255|0;a[c+2>>0]=y;t=v*33050|0;v=s+-17685+(8?t>>>8:t)|0;if(v>>>0<16384)z=6?v>>>6:v;else z=((31?v>>31:v)&-255)+255|0;a[c+3>>0]=z;v=a[r+1>>0]|0;t=a[p>>0]|0;s=a[q>>0]|0;a[c+4>>0]=-1;u=t&255;t=s&255;s=(v&255)*19077|0;v=8?s>>>8:s;s=t*26149|0;w=v+-14234+(8?s>>>8:s)|0;if(w>>>0<16384)A=6?w>>>6:w;else A=((31?w>>31:w)&-255)+255|0;a[c+5>>0]=A;w=u*6419|0;s=t*13320|0;t=v+8708-(8?w>>>8:w)-(8?s>>>8:s)|0;if(t>>>0<16384)B=6?t>>>6:t;else B=((31?t>>31:t)&-255)+255|0;a[c+6>>0]=B;t=u*33050|0;u=v+-17685+(8?t>>>8:t)|0;if(u>>>0<16384)C=6?u>>>6:u;else C=((31?u>>31:u)&-255)+255|0;a[c+7>>0]=C;c=c+8|0;if((c|0)==(h|0))break;else{p=p+1|0;q=q+1|0;r=r+2|0}}i=b+n|0;j=m;k=e+g|0;l=d+o|0}if(!(f&1))return;f=a[i>>0]|0;i=a[j>>0]|0;j=a[l>>0]|0;a[k>>0]=-1;l=i&255;i=j&255;j=(f&255)*19077|0;f=8?j>>>8:j;j=i*26149|0;o=f+-14234+(8?j>>>8:j)|0;if(o>>>0<16384)D=6?o>>>6:o;else D=((31?o>>31:o)&-255)+255|0;a[k+1>>0]=D;D=l*6419|0;o=i*13320|0;i=f+8708-(8?D>>>8:D)-(8?o>>>8:o)|0;if(i>>>0<16384)E=6?i>>>6:i;else E=((31?i>>31:i)&-255)+255|0;a[k+2>>0]=E;E=l*33050|0;l=f+-17685+(8?E>>>8:E)|0;if(l>>>0<16384)F=6?l>>>6:l;else F=((31?l>>31:l)&-255)+255|0;a[k+3>>0]=F;return}function pc(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;h=g<<1&-4;i=f+h|0;if(!h){j=b;k=c;l=f;m=e}else{n=h+-4|0;o=(1?n>>>1:n)+2|0;p=(2?n>>>2:n)+1|0;n=c+p|0;q=c;c=f;r=e;s=b;while(1){t=d[q>>0]|0;u=d[r>>0]|0;v=(d[s>>0]|0)*19077|0;w=8?v>>>8:v;v=u*26149|0;x=w+-14234+(8?v>>>8:v)|0;if(x>>>0<16384)y=6?x>>>6:x;else y=((31?x>>31:x)&-255)+255|0;x=t*6419|0;v=u*13320|0;u=w+8708-(8?x>>>8:x)-(8?v>>>8:v)|0;if(u>>>0<16384)z=6?u>>>6:u;else z=((31?u>>31:u)&-255)+255|0;u=t*33050|0;t=w+-17685+(8?u>>>8:u)|0;if(t>>>0<16384)A=6?t>>>6:t;else A=((31?t>>31:t)&-255)+255|0;a[c>>0]=(4?z>>>4:z)|y&240;a[c+1>>0]=A|15;t=d[q>>0]|0;u=d[r>>0]|0;w=(d[s+1>>0]|0)*19077|0;v=8?w>>>8:w;w=u*26149|0;x=v+-14234+(8?w>>>8:w)|0;if(x>>>0<16384)B=6?x>>>6:x;else B=((31?x>>31:x)&-255)+255|0;x=t*6419|0;w=u*13320|0;u=v+8708-(8?x>>>8:x)-(8?w>>>8:w)|0;if(u>>>0<16384)C=6?u>>>6:u;else C=((31?u>>31:u)&-255)+255|0;u=t*33050|0;t=v+-17685+(8?u>>>8:u)|0;if(t>>>0<16384)D=6?t>>>6:t;else D=((31?t>>31:t)&-255)+255|0;a[c+2>>0]=(4?C>>>4:C)|B&240;a[c+3>>0]=D|15;c=c+4|0;if((c|0)==(i|0))break;else{q=q+1|0;r=r+1|0;s=s+2|0}}j=b+o|0;k=n;l=f+h|0;m=e+p|0}if(!(g&1))return;g=d[k>>0]|0;k=d[m>>0]|0;m=(d[j>>0]|0)*19077|0;j=8?m>>>8:m;m=k*26149|0;p=j+-14234+(8?m>>>8:m)|0;if(p>>>0<16384)E=6?p>>>6:p;else E=((31?p>>31:p)&-255)+255|0;p=g*6419|0;m=k*13320|0;k=j+8708-(8?p>>>8:p)-(8?m>>>8:m)|0;if(k>>>0<16384)F=6?k>>>6:k;else F=((31?k>>31:k)&-255)+255|0;k=g*33050|0;g=j+-17685+(8?k>>>8:k)|0;if(g>>>0<16384)G=6?g>>>6:g;else G=((31?g>>31:g)&-255)+255|0;a[l>>0]=(4?F>>>4:F)|E&240;a[l+1>>0]=G|15;return}function qc(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;h=g<<1&-4;i=f+h|0;if(!h){j=b;k=c;l=f;m=e}else{n=h+-4|0;o=(1?n>>>1:n)+2|0;p=(2?n>>>2:n)+1|0;n=c+p|0;q=c;c=f;r=e;s=b;while(1){t=d[q>>0]|0;u=d[r>>0]|0;v=(d[s>>0]|0)*19077|0;w=8?v>>>8:v;v=u*26149|0;x=w+-14234+(8?v>>>8:v)|0;if(x>>>0<16384)y=6?x>>>6:x;else y=((31?x>>31:x)&-255)+255|0;x=t*6419|0;v=u*13320|0;u=w+8708-(8?x>>>8:x)-(8?v>>>8:v)|0;if(u>>>0<16384)z=6?u>>>6:u;else z=((31?u>>31:u)&-255)+255|0;u=t*33050|0;t=w+-17685+(8?u>>>8:u)|0;if(t>>>0<16384)A=6?t>>>6:t;else A=((31?t>>31:t)&-255)+255|0;a[c>>0]=(5?z>>>5:z)|y&248;a[c+1>>0]=(3?A>>>3:A)|z<<3&224;t=d[q>>0]|0;u=d[r>>0]|0;w=(d[s+1>>0]|0)*19077|0;v=8?w>>>8:w;w=u*26149|0;x=v+-14234+(8?w>>>8:w)|0;if(x>>>0<16384)B=6?x>>>6:x;else B=((31?x>>31:x)&-255)+255|0;x=t*6419|0;w=u*13320|0;u=v+8708-(8?x>>>8:x)-(8?w>>>8:w)|0;if(u>>>0<16384)C=6?u>>>6:u;else C=((31?u>>31:u)&-255)+255|0;u=t*33050|0;t=v+-17685+(8?u>>>8:u)|0;if(t>>>0<16384)D=6?t>>>6:t;else D=((31?t>>31:t)&-255)+255|0;a[c+2>>0]=(5?C>>>5:C)|B&248;a[c+3>>0]=(3?D>>>3:D)|C<<3&224;c=c+4|0;if((c|0)==(i|0))break;else{q=q+1|0;r=r+1|0;s=s+2|0}}j=b+o|0;k=n;l=f+h|0;m=e+p|0}if(!(g&1))return;g=d[k>>0]|0;k=d[m>>0]|0;m=(d[j>>0]|0)*19077|0;j=8?m>>>8:m;m=k*26149|0;p=j+-14234+(8?m>>>8:m)|0;if(p>>>0<16384)E=6?p>>>6:p;else E=((31?p>>31:p)&-255)+255|0;p=g*6419|0;m=k*13320|0;k=j+8708-(8?p>>>8:p)-(8?m>>>8:m)|0;if(k>>>0<16384)F=6?k>>>6:k;else F=((31?k>>31:k)&-255)+255|0;k=g*33050|0;g=j+-17685+(8?k>>>8:k)|0;if(g>>>0<16384)G=6?g>>>6:g;else G=((31?g>>31:g)&-255)+255|0;a[l>>0]=(5?F>>>5:F)|E&248;a[l+1>>0]=(3?G>>>3:G)|F<<3&224;return}function rc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=a+24|0;d=a+56|0;e=a+64|0;if((c[e>>2]|0)>=(c[d>>2]|0)){f=0;return f|0}g=0;while(1){if((c[b>>2]|0)>0){f=g;h=5;break}Pa(a);i=g+1|0;if((c[e>>2]|0)<(c[d>>2]|0))g=i;else{f=i;h=5;break}}if((h|0)==5)return f|0;return 0}function sc(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;if((f|0)<=0)return;h=a;a=c;c=0;while(1){Ua(h,a,e,g);c=c+1|0;if((c|0)==(f|0))break;else{h=h+b|0;a=a+d|0}}return}function tc(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((g|0)<=0)return;h=0;do{i=f+(h<<2)|0;j=d[c+h>>0]|0;k=d[e+h>>0]|0;l=(d[b+h>>0]|0)*19077|0;m=8?l>>>8:l;l=k*26149|0;n=m+-14234+(8?l>>>8:l)|0;if(n>>>0<16384)o=6?n>>>6:n;else o=((31?n>>31:n)&-255)+255|0;a[i>>0]=o;n=j*6419|0;l=k*13320|0;k=m+8708-(8?n>>>8:n)-(8?l>>>8:l)|0;if(k>>>0<16384)p=6?k>>>6:k;else p=((31?k>>31:k)&-255)+255|0;a[i+1>>0]=p;k=j*33050|0;j=m+-17685+(8?k>>>8:k)|0;if(j>>>0<16384)q=6?j>>>6:j;else q=((31?j>>31:j)&-255)+255|0;a[i+2>>0]=q;a[i+3>>0]=-1;h=h+1|0}while((h|0)!=(g|0));return}function uc(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((g|0)<=0)return;h=0;do{i=f+(h<<2)|0;j=d[c+h>>0]|0;k=d[e+h>>0]|0;l=(d[b+h>>0]|0)*19077|0;m=8?l>>>8:l;l=j*33050|0;n=m+-17685+(8?l>>>8:l)|0;if(n>>>0<16384)o=6?n>>>6:n;else o=((31?n>>31:n)&-255)+255|0;a[i>>0]=o;n=j*6419|0;j=k*13320|0;l=m+8708-(8?n>>>8:n)-(8?j>>>8:j)|0;if(l>>>0<16384)p=6?l>>>6:l;else p=((31?l>>31:l)&-255)+255|0;a[i+1>>0]=p;l=k*26149|0;k=m+-14234+(8?l>>>8:l)|0;if(k>>>0<16384)q=6?k>>>6:k;else q=((31?k>>31:k)&-255)+255|0;a[i+2>>0]=q;a[i+3>>0]=-1;h=h+1|0}while((h|0)!=(g|0));return}function vc(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((g|0)<=0)return;h=0;do{i=d[c+h>>0]|0;j=d[e+h>>0]|0;k=f+(h*3|0)|0;l=(d[b+h>>0]|0)*19077|0;m=8?l>>>8:l;l=j*26149|0;n=m+-14234+(8?l>>>8:l)|0;if(n>>>0<16384)o=6?n>>>6:n;else o=((31?n>>31:n)&-255)+255|0;a[k>>0]=o;n=i*6419|0;l=j*13320|0;j=m+8708-(8?n>>>8:n)-(8?l>>>8:l)|0;if(j>>>0<16384)p=6?j>>>6:j;else p=((31?j>>31:j)&-255)+255|0;a[k+1>>0]=p;j=i*33050|0;i=m+-17685+(8?j>>>8:j)|0;if(i>>>0<16384)q=6?i>>>6:i;else q=((31?i>>31:i)&-255)+255|0;a[k+2>>0]=q;h=h+1|0}while((h|0)!=(g|0));return}function wc(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((g|0)<=0)return;h=0;do{i=d[c+h>>0]|0;j=d[e+h>>0]|0;k=f+(h*3|0)|0;l=(d[b+h>>0]|0)*19077|0;m=8?l>>>8:l;l=i*33050|0;n=m+-17685+(8?l>>>8:l)|0;if(n>>>0<16384)o=6?n>>>6:n;else o=((31?n>>31:n)&-255)+255|0;a[k>>0]=o;n=i*6419|0;i=j*13320|0;l=m+8708-(8?n>>>8:n)-(8?i>>>8:i)|0;if(l>>>0<16384)p=6?l>>>6:l;else p=((31?l>>31:l)&-255)+255|0;a[k+1>>0]=p;l=j*26149|0;j=m+-14234+(8?l>>>8:l)|0;if(j>>>0<16384)q=6?j>>>6:j;else q=((31?j>>31:j)&-255)+255|0;a[k+2>>0]=q;h=h+1|0}while((h|0)!=(g|0));return}function xc(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if((f|0)<=0)return;g=0;do{h=a[b+g>>0]|0;i=a[c+g>>0]|0;j=a[d+g>>0]|0;k=e+(g<<2)|0;a[k>>0]=-1;l=i&255;i=j&255;j=(h&255)*19077|0;h=8?j>>>8:j;j=i*26149|0;m=h+-14234+(8?j>>>8:j)|0;if(m>>>0<16384)n=6?m>>>6:m;else n=((31?m>>31:m)&-255)+255|0;a[k+1>>0]=n;m=l*6419|0;j=i*13320|0;i=h+8708-(8?m>>>8:m)-(8?j>>>8:j)|0;if(i>>>0<16384)o=6?i>>>6:i;else o=((31?i>>31:i)&-255)+255|0;a[k+2>>0]=o;i=l*33050|0;l=h+-17685+(8?i>>>8:i)|0;if(l>>>0<16384)p=6?l>>>6:l;else p=((31?l>>31:l)&-255)+255|0;a[k+3>>0]=p;g=g+1|0}while((g|0)!=(f|0));return}function yc(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((g|0)<=0)return;h=0;do{i=d[c+h>>0]|0;j=d[e+h>>0]|0;k=f+(h<<1)|0;l=(d[b+h>>0]|0)*19077|0;m=8?l>>>8:l;l=j*26149|0;n=m+-14234+(8?l>>>8:l)|0;if(n>>>0<16384)o=6?n>>>6:n;else o=((31?n>>31:n)&-255)+255|0;n=i*6419|0;l=j*13320|0;j=m+8708-(8?n>>>8:n)-(8?l>>>8:l)|0;if(j>>>0<16384)p=6?j>>>6:j;else p=((31?j>>31:j)&-255)+255|0;j=i*33050|0;i=m+-17685+(8?j>>>8:j)|0;if(i>>>0<16384)q=6?i>>>6:i;else q=((31?i>>31:i)&-255)+255|0;a[k>>0]=(4?p>>>4:p)|o&240;a[k+1>>0]=q|15;h=h+1|0}while((h|0)!=(g|0));return}function zc(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((g|0)<=0)return;h=0;do{i=d[c+h>>0]|0;j=d[e+h>>0]|0;k=f+(h<<1)|0;l=(d[b+h>>0]|0)*19077|0;m=8?l>>>8:l;l=j*26149|0;n=m+-14234+(8?l>>>8:l)|0;if(n>>>0<16384)o=6?n>>>6:n;else o=((31?n>>31:n)&-255)+255|0;n=i*6419|0;l=j*13320|0;j=m+8708-(8?n>>>8:n)-(8?l>>>8:l)|0;if(j>>>0<16384)p=6?j>>>6:j;else p=((31?j>>31:j)&-255)+255|0;j=i*33050|0;i=m+-17685+(8?j>>>8:j)|0;if(i>>>0<16384)q=6?i>>>6:i;else q=((31?i>>31:i)&-255)+255|0;a[k>>0]=(5?p>>>5:p)|o&248;a[k+1>>0]=(3?q>>>3:q)|p<<3&224;h=h+1|0}while((h|0)!=(g|0));return}function Ac(){if(Te(10056)|0)return;c[2032]=0;Ue(10056)|0;return}function Bc(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;d=c[b+68>>2]|0;e=c[b+76>>2]|0;f=r(c[b+8>>2]|0,c[b+52>>2]|0)|0;g=c[b+80>>2]|0;h=c[b+24>>2]|0;if(!h){if((f|0)<=0)return;i=b+16|0;j=0;do{k=Cf(c[i>>2]|0,0,c[g+(j<<2)>>2]|0,0)|0;Df(k|0,v()|0,-2147483648,0)|0;k=v()|0;a[d+j>>0]=(k|0)>255?-1:k&255;j=j+1|0}while((j|0)!=(f|0));return}else{j=c[b+32>>2]|0;i=Hf(0,0-h|0,j|0,((j|0)<0)<<31>>31|0)|0;v()|0;if((f|0)<=0)return;j=0-i|0;h=b+16|0;b=0;do{k=Cf(c[g+(b<<2)>>2]|0,0,j|0,0)|0;l=v()|0;m=Cf(i|0,0,c[e+(b<<2)>>2]|0,0)|0;n=v()|0;o=Df(k|0,l|0,-2147483648,0)|0;Df(o|0,v()|0,m|0,n|0)|0;n=v()|0;m=Cf(n|0,0,c[h>>2]|0,0)|0;Df(m|0,v()|0,-2147483648,0)|0;m=v()|0;a[d+b>>0]=(m|0)>255?-1:m&255;b=b+1|0}while((b|0)!=(f|0));return}}function Cc(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;d=c[b+68>>2]|0;e=c[b+76>>2]|0;f=r(c[b+8>>2]|0,c[b+52>>2]|0)|0;g=c[b+80>>2]|0;h=r(c[b+24>>2]|0,0-(c[b+16>>2]|0)|0)|0;i=(f|0)>0;if(!h){if(!i)return;j=b+20|0;k=0;do{l=e+(k<<2)|0;m=Cf(c[j>>2]|0,0,c[l>>2]|0,0)|0;Df(m|0,v()|0,-2147483648,0)|0;m=v()|0;a[d+k>>0]=(m|0)>255?-1:m&255;c[l>>2]=0;k=k+1|0}while((k|0)!=(f|0));return}else{if(!i)return;i=b+20|0;b=0;do{Cf(c[g+(b<<2)>>2]|0,0,h|0,0)|0;k=v()|0;j=e+(b<<2)|0;l=Cf((c[j>>2]|0)-k|0,0,c[i>>2]|0,0)|0;Df(l|0,v()|0,-2147483648,0)|0;l=v()|0;a[d+b>>0]=(l|0)>255?-1:l&255;c[j>>2]=k;b=b+1|0}while((b|0)!=(f|0));return}}function Dc(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;e=c[a+8>>2]|0;f=r(c[a+52>>2]|0,e)|0;if((e|0)<=0)return;g=a+36|0;h=a+44|0;i=a+80|0;j=a+40|0;a=0;do{k=c[g>>2]|0;l=d[b+a>>0]|0;m=a+e|0;if((c[h>>2]|0)>1)n=d[b+m>>0]|0;else n=l;o=r(k,l)|0;p=c[i>>2]|0;c[p+(a<<2)>>2]=o;if((m|0)<(f|0)){o=l;l=k;k=m;q=n;s=m;while(1){m=l-(c[j>>2]|0)|0;t=k+e|0;if((m|0)<0){u=c[g>>2]|0;v=d[b+t>>0]|0;w=q;x=u+m|0;y=t;z=u}else{v=q;w=o;x=m;y=k;z=c[g>>2]|0}m=(r(z,v)|0)+(r(w-v|0,x)|0)|0;c[p+(s<<2)>>2]=m;s=s+e|0;if((s|0)>=(f|0))break;else{o=w;l=x;k=y;q=v}}}a=a+1|0}while((a|0)!=(e|0));return}function Ec(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0;e=c[b+8>>2]|0;f=r(c[b+52>>2]|0,e)|0;if((e|0)<=0)return;g=b+36|0;h=b+40|0;i=b+80|0;j=b+12|0;b=0;do{if((b|0)<(f|0)){k=0;l=0;m=b;n=b;while(1){o=(c[g>>2]|0)+k|0;p=c[h>>2]|0;if((o|0)>0){q=l;s=n;t=o;do{t=t-p|0;u=a[d+s>>0]|0;q=q+(u&255)|0;s=s+e|0}while((t|0)>0);w=u&255;x=t;y=q;z=s}else{w=0;x=o;y=l;z=n}A=r(w,0-x|0)|0;B=(r(p,y)|0)-A|0;c[(c[i>>2]|0)+(m<<2)>>2]=B;B=Cf(c[j>>2]|0,0,A|0,0)|0;Df(B|0,v()|0,-2147483648,0)|0;l=v()|0;m=m+e|0;if((m|0)>=(f|0))break;else{k=x;n=z}}}b=b+1|0}while((b|0)!=(e|0));return}function Fc(b,c,e,f,g,h,i,j,k){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;l=k+-1|0;m=1?l>>1:l;n=(d[f>>0]|0)<<16|(d[e>>0]|0);o=(d[h>>0]|0)<<16|(d[g>>0]|0);p=(n*3|0)+131074+o|0;q=(2?p>>>2:p)&255;r=(18?p>>>18:p)&255;p=(d[b>>0]|0)*19077|0;s=8?p>>>8:p;p=r*26149|0;t=s+-14234+(8?p>>>8:p)|0;if(t>>>0<16384)u=6?t>>>6:t;else u=((31?t>>31:t)&-255)+255|0;a[i>>0]=u;u=q*6419|0;t=r*13320|0;r=s+8708-(8?u>>>8:u)-(8?t>>>8:t)|0;if(r>>>0<16384)v=6?r>>>6:r;else v=((31?r>>31:r)&-255)+255|0;a[i+1>>0]=v;v=q*33050|0;q=s+-17685+(8?v>>>8:v)|0;if(q>>>0<16384)w=6?q>>>6:q;else w=((31?q>>31:q)&-255)+255|0;a[i+2>>0]=w;a[i+3>>0]=-1;w=(c|0)!=0;if(w){q=n+131074+(o*3|0)|0;v=(2?q>>>2:q)&255;s=(18?q>>>18:q)&255;q=(d[c>>0]|0)*19077|0;r=8?q>>>8:q;q=s*26149|0;t=(8?q>>>8:q)+-14234+r|0;if(t>>>0<16384)x=6?t>>>6:t;else x=((31?t>>31:t)&-255)+255|0;a[j>>0]=x;x=v*6419|0;t=s*13320|0;s=8708-(8?x>>>8:x)-(8?t>>>8:t)+r|0;if(s>>>0<16384)y=6?s>>>6:s;else y=((31?s>>31:s)&-255)+255|0;a[j+1>>0]=y;y=v*33050|0;v=(8?y>>>8:y)+-17685+r|0;if(v>>>0<16384)z=6?v>>>6:v;else z=((31?v>>31:v)&-255)+255|0;a[j+2>>0]=z;a[j+3>>0]=-1}if((k|0)<3){A=n;B=o}else{z=n;n=o;o=1;while(1){v=(d[f+o>>0]|0)<<16|(d[e+o>>0]|0);r=(d[h+o>>0]|0)<<16|(d[g+o>>0]|0);y=v+n|0;s=y+524296+z+r|0;t=s+(y<<1)|0;y=3?t>>>3:t;t=s+(r+z<<1)|0;s=3?t>>>3:t;t=y+z|0;x=s+v|0;q=o<<1;u=q+-1|0;p=u<<2;C=i+p|0;D=(1?t>>>1:t)&255;E=(17?t>>>17:t)&255;t=(d[b+u>>0]|0)*19077|0;F=8?t>>>8:t;t=E*26149|0;G=F+-14234+(8?t>>>8:t)|0;if(G>>>0<16384)H=6?G>>>6:G;else H=((31?G>>31:G)&-255)+255|0;a[C>>0]=H;G=D*6419|0;t=E*13320|0;E=F+8708-(8?G>>>8:G)-(8?t>>>8:t)|0;if(E>>>0<16384)I=6?E>>>6:E;else I=((31?E>>31:E)&-255)+255|0;a[C+1>>0]=I;E=D*33050|0;D=F+-17685+(8?E>>>8:E)|0;if(D>>>0<16384)J=6?D>>>6:D;else J=((31?D>>31:D)&-255)+255|0;a[C+2>>0]=J;a[C+3>>0]=-1;C=o<<3;D=i+C|0;E=(1?x>>>1:x)&255;F=(17?x>>>17:x)&255;x=(d[b+q>>0]|0)*19077|0;t=8?x>>>8:x;x=F*26149|0;G=(8?x>>>8:x)+-14234+t|0;if(G>>>0<16384)K=6?G>>>6:G;else K=((31?G>>31:G)&-255)+255|0;a[D>>0]=K;G=E*6419|0;x=F*13320|0;F=8708-(8?G>>>8:G)-(8?x>>>8:x)+t|0;if(F>>>0<16384)L=6?F>>>6:F;else L=((31?F>>31:F)&-255)+255|0;a[D+1>>0]=L;F=E*33050|0;E=(8?F>>>8:F)+-17685+t|0;if(E>>>0<16384)M=6?E>>>6:E;else M=((31?E>>31:E)&-255)+255|0;a[D+2>>0]=M;a[D+3>>0]=-1;if(w){D=s+n|0;s=y+r|0;y=j+p|0;p=(1?D>>>1:D)&255;E=(17?D>>>17:D)&255;D=(d[c+u>>0]|0)*19077|0;u=8?D>>>8:D;D=E*26149|0;t=(8?D>>>8:D)+-14234+u|0;if(t>>>0<16384)N=6?t>>>6:t;else N=((31?t>>31:t)&-255)+255|0;a[y>>0]=N;t=p*6419|0;D=E*13320|0;E=8708-(8?t>>>8:t)-(8?D>>>8:D)+u|0;if(E>>>0<16384)O=6?E>>>6:E;else O=((31?E>>31:E)&-255)+255|0;a[y+1>>0]=O;E=p*33050|0;p=(8?E>>>8:E)+-17685+u|0;if(p>>>0<16384)P=6?p>>>6:p;else P=((31?p>>31:p)&-255)+255|0;a[y+2>>0]=P;a[y+3>>0]=-1;y=j+C|0;C=(1?s>>>1:s)&255;p=(17?s>>>17:s)&255;s=(d[c+q>>0]|0)*19077|0;q=8?s>>>8:s;s=p*26149|0;u=(8?s>>>8:s)+-14234+q|0;if(u>>>0<16384)Q=6?u>>>6:u;else Q=((31?u>>31:u)&-255)+255|0;a[y>>0]=Q;u=C*6419|0;s=p*13320|0;p=8708-(8?u>>>8:u)-(8?s>>>8:s)+q|0;if(p>>>0<16384)R=6?p>>>6:p;else R=((31?p>>31:p)&-255)+255|0;a[y+1>>0]=R;p=C*33050|0;C=(8?p>>>8:p)+-17685+q|0;if(C>>>0<16384)S=6?C>>>6:C;else S=((31?C>>31:C)&-255)+255|0;a[y+2>>0]=S;a[y+3>>0]=-1}if((o|0)<(m|0)){z=v;n=r;o=o+1|0}else{A=v;B=r;break}}}if(k&1|0)return;k=B+131074+(A*3|0)|0;o=l<<2;n=i+o|0;i=(2?k>>>2:k)&255;z=(18?k>>>18:k)&255;k=(d[b+l>>0]|0)*19077|0;b=8?k>>>8:k;k=z*26149|0;m=(8?k>>>8:k)+-14234+b|0;if(m>>>0<16384)T=6?m>>>6:m;else T=((31?m>>31:m)&-255)+255|0;a[n>>0]=T;T=i*6419|0;m=z*13320|0;z=8708-(8?T>>>8:T)-(8?m>>>8:m)+b|0;if(z>>>0<16384)U=6?z>>>6:z;else U=((31?z>>31:z)&-255)+255|0;a[n+1>>0]=U;U=i*33050|0;i=(8?U>>>8:U)+-17685+b|0;if(i>>>0<16384)V=6?i>>>6:i;else V=((31?i>>31:i)&-255)+255|0;a[n+2>>0]=V;a[n+3>>0]=-1;if(!w)return;w=A+131074+(B*3|0)|0;B=j+o|0;o=(2?w>>>2:w)&255;j=(18?w>>>18:w)&255;w=(d[c+l>>0]|0)*19077|0;l=8?w>>>8:w;w=j*26149|0;c=(8?w>>>8:w)+-14234+l|0;if(c>>>0<16384)W=6?c>>>6:c;else W=((31?c>>31:c)&-255)+255|0;a[B>>0]=W;W=o*6419|0;c=j*13320|0;j=8708-(8?W>>>8:W)-(8?c>>>8:c)+l|0;if(j>>>0<16384)X=6?j>>>6:j;else X=((31?j>>31:j)&-255)+255|0;a[B+1>>0]=X;X=o*33050|0;o=(8?X>>>8:X)+-17685+l|0;if(o>>>0<16384)Y=6?o>>>6:o;else Y=((31?o>>31:o)&-255)+255|0;a[B+2>>0]=Y;a[B+3>>0]=-1;return}function Gc(b,c,e,f,g,h,i,j,k){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;l=k+-1|0;m=1?l>>1:l;n=(d[f>>0]|0)<<16|(d[e>>0]|0);o=(d[h>>0]|0)<<16|(d[g>>0]|0);p=(n*3|0)+131074+o|0;q=(2?p>>>2:p)&255;r=(18?p>>>18:p)&255;p=(d[b>>0]|0)*19077|0;s=8?p>>>8:p;p=q*33050|0;t=s+-17685+(8?p>>>8:p)|0;if(t>>>0<16384)u=6?t>>>6:t;else u=((31?t>>31:t)&-255)+255|0;a[i>>0]=u;u=q*6419|0;q=r*13320|0;t=s+8708-(8?u>>>8:u)-(8?q>>>8:q)|0;if(t>>>0<16384)v=6?t>>>6:t;else v=((31?t>>31:t)&-255)+255|0;a[i+1>>0]=v;v=r*26149|0;r=s+-14234+(8?v>>>8:v)|0;if(r>>>0<16384)w=6?r>>>6:r;else w=((31?r>>31:r)&-255)+255|0;a[i+2>>0]=w;a[i+3>>0]=-1;w=(c|0)!=0;if(w){r=n+131074+(o*3|0)|0;v=(2?r>>>2:r)&255;s=(18?r>>>18:r)&255;r=(d[c>>0]|0)*19077|0;t=8?r>>>8:r;r=v*33050|0;q=(8?r>>>8:r)+-17685+t|0;if(q>>>0<16384)x=6?q>>>6:q;else x=((31?q>>31:q)&-255)+255|0;a[j>>0]=x;x=v*6419|0;v=s*13320|0;q=8708-(8?x>>>8:x)-(8?v>>>8:v)+t|0;if(q>>>0<16384)y=6?q>>>6:q;else y=((31?q>>31:q)&-255)+255|0;a[j+1>>0]=y;y=s*26149|0;s=(8?y>>>8:y)+-14234+t|0;if(s>>>0<16384)z=6?s>>>6:s;else z=((31?s>>31:s)&-255)+255|0;a[j+2>>0]=z;a[j+3>>0]=-1}if((k|0)<3){A=n;B=o}else{z=n;n=o;o=1;while(1){s=(d[f+o>>0]|0)<<16|(d[e+o>>0]|0);t=(d[h+o>>0]|0)<<16|(d[g+o>>0]|0);y=s+n|0;q=y+524296+z+t|0;v=q+(y<<1)|0;y=3?v>>>3:v;v=q+(t+z<<1)|0;q=3?v>>>3:v;v=y+z|0;x=q+s|0;r=o<<1;u=r+-1|0;p=u<<2;C=i+p|0;D=(1?v>>>1:v)&255;E=(17?v>>>17:v)&255;v=(d[b+u>>0]|0)*19077|0;F=8?v>>>8:v;v=D*33050|0;G=F+-17685+(8?v>>>8:v)|0;if(G>>>0<16384)H=6?G>>>6:G;else H=((31?G>>31:G)&-255)+255|0;a[C>>0]=H;G=D*6419|0;D=E*13320|0;v=F+8708-(8?G>>>8:G)-(8?D>>>8:D)|0;if(v>>>0<16384)I=6?v>>>6:v;else I=((31?v>>31:v)&-255)+255|0;a[C+1>>0]=I;v=E*26149|0;E=F+-14234+(8?v>>>8:v)|0;if(E>>>0<16384)J=6?E>>>6:E;else J=((31?E>>31:E)&-255)+255|0;a[C+2>>0]=J;a[C+3>>0]=-1;C=o<<3;E=i+C|0;v=(1?x>>>1:x)&255;F=(17?x>>>17:x)&255;x=(d[b+r>>0]|0)*19077|0;D=8?x>>>8:x;x=v*33050|0;G=(8?x>>>8:x)+-17685+D|0;if(G>>>0<16384)K=6?G>>>6:G;else K=((31?G>>31:G)&-255)+255|0;a[E>>0]=K;G=v*6419|0;v=F*13320|0;x=8708-(8?G>>>8:G)-(8?v>>>8:v)+D|0;if(x>>>0<16384)L=6?x>>>6:x;else L=((31?x>>31:x)&-255)+255|0;a[E+1>>0]=L;x=F*26149|0;F=(8?x>>>8:x)+-14234+D|0;if(F>>>0<16384)M=6?F>>>6:F;else M=((31?F>>31:F)&-255)+255|0;a[E+2>>0]=M;a[E+3>>0]=-1;if(w){E=q+n|0;q=y+t|0;y=j+p|0;p=(1?E>>>1:E)&255;F=(17?E>>>17:E)&255;E=(d[c+u>>0]|0)*19077|0;u=8?E>>>8:E;E=p*33050|0;D=(8?E>>>8:E)+-17685+u|0;if(D>>>0<16384)N=6?D>>>6:D;else N=((31?D>>31:D)&-255)+255|0;a[y>>0]=N;D=p*6419|0;p=F*13320|0;E=8708-(8?D>>>8:D)-(8?p>>>8:p)+u|0;if(E>>>0<16384)O=6?E>>>6:E;else O=((31?E>>31:E)&-255)+255|0;a[y+1>>0]=O;E=F*26149|0;F=(8?E>>>8:E)+-14234+u|0;if(F>>>0<16384)P=6?F>>>6:F;else P=((31?F>>31:F)&-255)+255|0;a[y+2>>0]=P;a[y+3>>0]=-1;y=j+C|0;C=(1?q>>>1:q)&255;F=(17?q>>>17:q)&255;q=(d[c+r>>0]|0)*19077|0;r=8?q>>>8:q;q=C*33050|0;u=(8?q>>>8:q)+-17685+r|0;if(u>>>0<16384)Q=6?u>>>6:u;else Q=((31?u>>31:u)&-255)+255|0;a[y>>0]=Q;u=C*6419|0;C=F*13320|0;q=8708-(8?u>>>8:u)-(8?C>>>8:C)+r|0;if(q>>>0<16384)R=6?q>>>6:q;else R=((31?q>>31:q)&-255)+255|0;a[y+1>>0]=R;q=F*26149|0;F=(8?q>>>8:q)+-14234+r|0;if(F>>>0<16384)S=6?F>>>6:F;else S=((31?F>>31:F)&-255)+255|0;a[y+2>>0]=S;a[y+3>>0]=-1}if((o|0)<(m|0)){z=s;n=t;o=o+1|0}else{A=s;B=t;break}}}if(k&1|0)return;k=B+131074+(A*3|0)|0;o=l<<2;n=i+o|0;i=(2?k>>>2:k)&255;z=(18?k>>>18:k)&255;k=(d[b+l>>0]|0)*19077|0;b=8?k>>>8:k;k=i*33050|0;m=(8?k>>>8:k)+-17685+b|0;if(m>>>0<16384)T=6?m>>>6:m;else T=((31?m>>31:m)&-255)+255|0;a[n>>0]=T;T=i*6419|0;i=z*13320|0;m=8708-(8?T>>>8:T)-(8?i>>>8:i)+b|0;if(m>>>0<16384)U=6?m>>>6:m;else U=((31?m>>31:m)&-255)+255|0;a[n+1>>0]=U;U=z*26149|0;z=(8?U>>>8:U)+-14234+b|0;if(z>>>0<16384)V=6?z>>>6:z;else V=((31?z>>31:z)&-255)+255|0;a[n+2>>0]=V;a[n+3>>0]=-1;if(!w)return;w=A+131074+(B*3|0)|0;B=j+o|0;o=(2?w>>>2:w)&255;j=(18?w>>>18:w)&255;w=(d[c+l>>0]|0)*19077|0;l=8?w>>>8:w;w=o*33050|0;c=(8?w>>>8:w)+-17685+l|0;if(c>>>0<16384)W=6?c>>>6:c;else W=((31?c>>31:c)&-255)+255|0;a[B>>0]=W;W=o*6419|0;o=j*13320|0;c=8708-(8?W>>>8:W)-(8?o>>>8:o)+l|0;if(c>>>0<16384)X=6?c>>>6:c;else X=((31?c>>31:c)&-255)+255|0;a[B+1>>0]=X;X=j*26149|0;j=(8?X>>>8:X)+-14234+l|0;if(j>>>0<16384)Y=6?j>>>6:j;else Y=((31?j>>31:j)&-255)+255|0;a[B+2>>0]=Y;a[B+3>>0]=-1;return}function Hc(b,c,e,f,g,h,i,j,k){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;l=k+-1|0;m=1?l>>1:l;n=(d[f>>0]|0)<<16|(d[e>>0]|0);o=(d[h>>0]|0)<<16|(d[g>>0]|0);p=(n*3|0)+131074+o|0;q=(2?p>>>2:p)&255;r=18?p>>>18:p;p=(d[b>>0]|0)*19077|0;s=8?p>>>8:p;p=r*26149|0;t=s+-14234+(8?p>>>8:p)|0;if(t>>>0<16384)u=6?t>>>6:t;else u=((31?t>>31:t)&-255)+255|0;a[i>>0]=u;u=q*6419|0;t=r*13320|0;r=s+8708-(8?t>>>8:t)-(8?u>>>8:u)|0;if(r>>>0<16384)v=6?r>>>6:r;else v=((31?r>>31:r)&-255)+255|0;a[i+1>>0]=v;v=q*33050|0;q=s+-17685+(8?v>>>8:v)|0;if(q>>>0<16384)w=6?q>>>6:q;else w=((31?q>>31:q)&-255)+255|0;a[i+2>>0]=w;w=(c|0)!=0;if(w){q=n+131074+(o*3|0)|0;v=(2?q>>>2:q)&255;s=18?q>>>18:q;q=(d[c>>0]|0)*19077|0;r=8?q>>>8:q;q=s*26149|0;u=(8?q>>>8:q)+-14234+r|0;if(u>>>0<16384)x=6?u>>>6:u;else x=((31?u>>31:u)&-255)+255|0;a[j>>0]=x;x=v*6419|0;u=s*13320|0;s=8708-(8?u>>>8:u)-(8?x>>>8:x)+r|0;if(s>>>0<16384)y=6?s>>>6:s;else y=((31?s>>31:s)&-255)+255|0;a[j+1>>0]=y;y=v*33050|0;v=(8?y>>>8:y)+-17685+r|0;if(v>>>0<16384)z=6?v>>>6:v;else z=((31?v>>31:v)&-255)+255|0;a[j+2>>0]=z}if((k|0)<3){A=n;B=o}else{z=n;n=o;o=1;while(1){v=(d[f+o>>0]|0)<<16|(d[e+o>>0]|0);r=(d[h+o>>0]|0)<<16|(d[g+o>>0]|0);y=v+n|0;s=y+524296+z+r|0;x=s+(y<<1)|0;y=3?x>>>3:x;x=s+(r+z<<1)|0;s=3?x>>>3:x;x=y+z|0;u=s+v|0;q=o<<1;t=q+-1|0;p=(1?x>>>1:x)&255;C=17?x>>>17:x;x=t*3|0;D=i+x|0;E=(d[b+t>>0]|0)*19077|0;F=8?E>>>8:E;E=C*26149|0;G=F+-14234+(8?E>>>8:E)|0;if(G>>>0<16384)H=6?G>>>6:G;else H=((31?G>>31:G)&-255)+255|0;a[D>>0]=H;G=p*6419|0;E=C*13320|0;C=F+8708-(8?E>>>8:E)-(8?G>>>8:G)|0;if(C>>>0<16384)I=6?C>>>6:C;else I=((31?C>>31:C)&-255)+255|0;a[D+1>>0]=I;C=p*33050|0;p=F+-17685+(8?C>>>8:C)|0;if(p>>>0<16384)J=6?p>>>6:p;else J=((31?p>>31:p)&-255)+255|0;a[D+2>>0]=J;D=(1?u>>>1:u)&255;p=17?u>>>17:u;u=o*6|0;C=i+u|0;F=(d[b+q>>0]|0)*19077|0;G=8?F>>>8:F;F=p*26149|0;E=(8?F>>>8:F)+-14234+G|0;if(E>>>0<16384)K=6?E>>>6:E;else K=((31?E>>31:E)&-255)+255|0;a[C>>0]=K;E=D*6419|0;F=p*13320|0;p=8708-(8?F>>>8:F)-(8?E>>>8:E)+G|0;if(p>>>0<16384)L=6?p>>>6:p;else L=((31?p>>31:p)&-255)+255|0;a[C+1>>0]=L;p=D*33050|0;D=(8?p>>>8:p)+-17685+G|0;if(D>>>0<16384)M=6?D>>>6:D;else M=((31?D>>31:D)&-255)+255|0;a[C+2>>0]=M;if(w){C=s+n|0;s=y+r|0;y=(1?C>>>1:C)&255;D=17?C>>>17:C;C=j+x|0;x=(d[c+t>>0]|0)*19077|0;t=8?x>>>8:x;x=D*26149|0;G=(8?x>>>8:x)+-14234+t|0;if(G>>>0<16384)N=6?G>>>6:G;else N=((31?G>>31:G)&-255)+255|0;a[C>>0]=N;G=y*6419|0;x=D*13320|0;D=8708-(8?x>>>8:x)-(8?G>>>8:G)+t|0;if(D>>>0<16384)O=6?D>>>6:D;else O=((31?D>>31:D)&-255)+255|0;a[C+1>>0]=O;D=y*33050|0;y=(8?D>>>8:D)+-17685+t|0;if(y>>>0<16384)P=6?y>>>6:y;else P=((31?y>>31:y)&-255)+255|0;a[C+2>>0]=P;C=(1?s>>>1:s)&255;y=17?s>>>17:s;s=j+u|0;u=(d[c+q>>0]|0)*19077|0;q=8?u>>>8:u;u=y*26149|0;t=(8?u>>>8:u)+-14234+q|0;if(t>>>0<16384)Q=6?t>>>6:t;else Q=((31?t>>31:t)&-255)+255|0;a[s>>0]=Q;t=C*6419|0;u=y*13320|0;y=8708-(8?u>>>8:u)-(8?t>>>8:t)+q|0;if(y>>>0<16384)R=6?y>>>6:y;else R=((31?y>>31:y)&-255)+255|0;a[s+1>>0]=R;y=C*33050|0;C=(8?y>>>8:y)+-17685+q|0;if(C>>>0<16384)S=6?C>>>6:C;else S=((31?C>>31:C)&-255)+255|0;a[s+2>>0]=S}if((o|0)<(m|0)){z=v;n=r;o=o+1|0}else{A=v;B=r;break}}}if(k&1|0)return;k=B+131074+(A*3|0)|0;o=(2?k>>>2:k)&255;n=18?k>>>18:k;k=l*3|0;z=i+k|0;i=(d[b+l>>0]|0)*19077|0;b=8?i>>>8:i;i=n*26149|0;m=(8?i>>>8:i)+-14234+b|0;if(m>>>0<16384)T=6?m>>>6:m;else T=((31?m>>31:m)&-255)+255|0;a[z>>0]=T;T=o*6419|0;m=n*13320|0;n=8708-(8?m>>>8:m)-(8?T>>>8:T)+b|0;if(n>>>0<16384)U=6?n>>>6:n;else U=((31?n>>31:n)&-255)+255|0;a[z+1>>0]=U;U=o*33050|0;o=(8?U>>>8:U)+-17685+b|0;if(o>>>0<16384)V=6?o>>>6:o;else V=((31?o>>31:o)&-255)+255|0;a[z+2>>0]=V;if(!w)return;w=A+131074+(B*3|0)|0;B=(2?w>>>2:w)&255;A=18?w>>>18:w;w=j+k|0;k=(d[c+l>>0]|0)*19077|0;l=8?k>>>8:k;k=A*26149|0;c=(8?k>>>8:k)+-14234+l|0;if(c>>>0<16384)W=6?c>>>6:c;else W=((31?c>>31:c)&-255)+255|0;a[w>>0]=W;W=B*6419|0;c=A*13320|0;A=8708-(8?c>>>8:c)-(8?W>>>8:W)+l|0;if(A>>>0<16384)X=6?A>>>6:A;else X=((31?A>>31:A)&-255)+255|0;a[w+1>>0]=X;X=B*33050|0;B=(8?X>>>8:X)+-17685+l|0;if(B>>>0<16384)Y=6?B>>>6:B;else Y=((31?B>>31:B)&-255)+255|0;a[w+2>>0]=Y;return}function Ic(b,c,e,f,g,h,i,j,k){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;l=k+-1|0;m=1?l>>1:l;n=(d[f>>0]|0)<<16|(d[e>>0]|0);o=(d[h>>0]|0)<<16|(d[g>>0]|0);p=(n*3|0)+131074+o|0;q=(2?p>>>2:p)&255;r=18?p>>>18:p;p=(d[b>>0]|0)*19077|0;s=8?p>>>8:p;p=q*33050|0;t=s+-17685+(8?p>>>8:p)|0;if(t>>>0<16384)u=6?t>>>6:t;else u=((31?t>>31:t)&-255)+255|0;a[i>>0]=u;u=q*6419|0;q=r*13320|0;t=s+8708-(8?q>>>8:q)-(8?u>>>8:u)|0;if(t>>>0<16384)v=6?t>>>6:t;else v=((31?t>>31:t)&-255)+255|0;a[i+1>>0]=v;v=r*26149|0;r=s+-14234+(8?v>>>8:v)|0;if(r>>>0<16384)w=6?r>>>6:r;else w=((31?r>>31:r)&-255)+255|0;a[i+2>>0]=w;w=(c|0)!=0;if(w){r=n+131074+(o*3|0)|0;v=(2?r>>>2:r)&255;s=18?r>>>18:r;r=(d[c>>0]|0)*19077|0;t=8?r>>>8:r;r=v*33050|0;u=(8?r>>>8:r)+-17685+t|0;if(u>>>0<16384)x=6?u>>>6:u;else x=((31?u>>31:u)&-255)+255|0;a[j>>0]=x;x=v*6419|0;v=s*13320|0;u=8708-(8?v>>>8:v)-(8?x>>>8:x)+t|0;if(u>>>0<16384)y=6?u>>>6:u;else y=((31?u>>31:u)&-255)+255|0;a[j+1>>0]=y;y=s*26149|0;s=(8?y>>>8:y)+-14234+t|0;if(s>>>0<16384)z=6?s>>>6:s;else z=((31?s>>31:s)&-255)+255|0;a[j+2>>0]=z}if((k|0)<3){A=n;B=o}else{z=n;n=o;o=1;while(1){s=(d[f+o>>0]|0)<<16|(d[e+o>>0]|0);t=(d[h+o>>0]|0)<<16|(d[g+o>>0]|0);y=s+n|0;u=y+524296+z+t|0;x=u+(y<<1)|0;y=3?x>>>3:x;x=u+(t+z<<1)|0;u=3?x>>>3:x;x=y+z|0;v=u+s|0;r=o<<1;q=r+-1|0;p=(1?x>>>1:x)&255;C=17?x>>>17:x;x=q*3|0;D=i+x|0;E=(d[b+q>>0]|0)*19077|0;F=8?E>>>8:E;E=p*33050|0;G=F+-17685+(8?E>>>8:E)|0;if(G>>>0<16384)H=6?G>>>6:G;else H=((31?G>>31:G)&-255)+255|0;a[D>>0]=H;G=p*6419|0;p=C*13320|0;E=F+8708-(8?p>>>8:p)-(8?G>>>8:G)|0;if(E>>>0<16384)I=6?E>>>6:E;else I=((31?E>>31:E)&-255)+255|0;a[D+1>>0]=I;E=C*26149|0;C=F+-14234+(8?E>>>8:E)|0;if(C>>>0<16384)J=6?C>>>6:C;else J=((31?C>>31:C)&-255)+255|0;a[D+2>>0]=J;D=(1?v>>>1:v)&255;C=17?v>>>17:v;v=o*6|0;E=i+v|0;F=(d[b+r>>0]|0)*19077|0;G=8?F>>>8:F;F=D*33050|0;p=(8?F>>>8:F)+-17685+G|0;if(p>>>0<16384)K=6?p>>>6:p;else K=((31?p>>31:p)&-255)+255|0;a[E>>0]=K;p=D*6419|0;D=C*13320|0;F=8708-(8?D>>>8:D)-(8?p>>>8:p)+G|0;if(F>>>0<16384)L=6?F>>>6:F;else L=((31?F>>31:F)&-255)+255|0;a[E+1>>0]=L;F=C*26149|0;C=(8?F>>>8:F)+-14234+G|0;if(C>>>0<16384)M=6?C>>>6:C;else M=((31?C>>31:C)&-255)+255|0;a[E+2>>0]=M;if(w){E=u+n|0;u=y+t|0;y=(1?E>>>1:E)&255;C=17?E>>>17:E;E=j+x|0;x=(d[c+q>>0]|0)*19077|0;q=8?x>>>8:x;x=y*33050|0;G=(8?x>>>8:x)+-17685+q|0;if(G>>>0<16384)N=6?G>>>6:G;else N=((31?G>>31:G)&-255)+255|0;a[E>>0]=N;G=y*6419|0;y=C*13320|0;x=8708-(8?y>>>8:y)-(8?G>>>8:G)+q|0;if(x>>>0<16384)O=6?x>>>6:x;else O=((31?x>>31:x)&-255)+255|0;a[E+1>>0]=O;x=C*26149|0;C=(8?x>>>8:x)+-14234+q|0;if(C>>>0<16384)P=6?C>>>6:C;else P=((31?C>>31:C)&-255)+255|0;a[E+2>>0]=P;E=(1?u>>>1:u)&255;C=17?u>>>17:u;u=j+v|0;v=(d[c+r>>0]|0)*19077|0;r=8?v>>>8:v;v=E*33050|0;q=(8?v>>>8:v)+-17685+r|0;if(q>>>0<16384)Q=6?q>>>6:q;else Q=((31?q>>31:q)&-255)+255|0;a[u>>0]=Q;q=E*6419|0;E=C*13320|0;v=8708-(8?E>>>8:E)-(8?q>>>8:q)+r|0;if(v>>>0<16384)R=6?v>>>6:v;else R=((31?v>>31:v)&-255)+255|0;a[u+1>>0]=R;v=C*26149|0;C=(8?v>>>8:v)+-14234+r|0;if(C>>>0<16384)S=6?C>>>6:C;else S=((31?C>>31:C)&-255)+255|0;a[u+2>>0]=S}if((o|0)<(m|0)){z=s;n=t;o=o+1|0}else{A=s;B=t;break}}}if(k&1|0)return;k=B+131074+(A*3|0)|0;o=(2?k>>>2:k)&255;n=18?k>>>18:k;k=l*3|0;z=i+k|0;i=(d[b+l>>0]|0)*19077|0;b=8?i>>>8:i;i=o*33050|0;m=(8?i>>>8:i)+-17685+b|0;if(m>>>0<16384)T=6?m>>>6:m;else T=((31?m>>31:m)&-255)+255|0;a[z>>0]=T;T=o*6419|0;o=n*13320|0;m=8708-(8?o>>>8:o)-(8?T>>>8:T)+b|0;if(m>>>0<16384)U=6?m>>>6:m;else U=((31?m>>31:m)&-255)+255|0;a[z+1>>0]=U;U=n*26149|0;n=(8?U>>>8:U)+-14234+b|0;if(n>>>0<16384)V=6?n>>>6:n;else V=((31?n>>31:n)&-255)+255|0;a[z+2>>0]=V;if(!w)return;w=A+131074+(B*3|0)|0;B=(2?w>>>2:w)&255;A=18?w>>>18:w;w=j+k|0;k=(d[c+l>>0]|0)*19077|0;l=8?k>>>8:k;k=B*33050|0;c=(8?k>>>8:k)+-17685+l|0;if(c>>>0<16384)W=6?c>>>6:c;else W=((31?c>>31:c)&-255)+255|0;a[w>>0]=W;W=B*6419|0;B=A*13320|0;c=8708-(8?B>>>8:B)-(8?W>>>8:W)+l|0;if(c>>>0<16384)X=6?c>>>6:c;else X=((31?c>>31:c)&-255)+255|0;a[w+1>>0]=X;X=A*26149|0;A=(8?X>>>8:X)+-14234+l|0;if(A>>>0<16384)Y=6?A>>>6:A;else Y=((31?A>>31:A)&-255)+255|0;a[w+2>>0]=Y;return}function Jc(b,c,e,f,g,h,i,j,k){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;l=k+-1|0;m=1?l>>1:l;n=(d[f>>0]|0)<<16|(d[e>>0]|0);o=(d[h>>0]|0)<<16|(d[g>>0]|0);p=(n*3|0)+131074+o|0;q=a[b>>0]|0;a[i>>0]=-1;r=(2?p>>>2:p)&255;s=(18?p>>>18:p)&255;p=(q&255)*19077|0;q=8?p>>>8:p;p=s*26149|0;t=q+-14234+(8?p>>>8:p)|0;if(t>>>0<16384)u=6?t>>>6:t;else u=((31?t>>31:t)&-255)+255|0;a[i+1>>0]=u;u=r*6419|0;t=s*13320|0;s=q+8708-(8?u>>>8:u)-(8?t>>>8:t)|0;if(s>>>0<16384)v=6?s>>>6:s;else v=((31?s>>31:s)&-255)+255|0;a[i+2>>0]=v;v=r*33050|0;r=q+-17685+(8?v>>>8:v)|0;if(r>>>0<16384)w=6?r>>>6:r;else w=((31?r>>31:r)&-255)+255|0;a[i+3>>0]=w;w=(c|0)!=0;if(w){r=n+131074+(o*3|0)|0;v=a[c>>0]|0;a[j>>0]=-1;q=(2?r>>>2:r)&255;s=(18?r>>>18:r)&255;r=(v&255)*19077|0;v=8?r>>>8:r;r=s*26149|0;t=(8?r>>>8:r)+-14234+v|0;if(t>>>0<16384)x=6?t>>>6:t;else x=((31?t>>31:t)&-255)+255|0;a[j+1>>0]=x;x=q*6419|0;t=s*13320|0;s=8708-(8?x>>>8:x)-(8?t>>>8:t)+v|0;if(s>>>0<16384)y=6?s>>>6:s;else y=((31?s>>31:s)&-255)+255|0;a[j+2>>0]=y;y=q*33050|0;q=(8?y>>>8:y)+-17685+v|0;if(q>>>0<16384)z=6?q>>>6:q;else z=((31?q>>31:q)&-255)+255|0;a[j+3>>0]=z}if((k|0)<3){A=n;B=o}else{z=n;n=o;o=1;while(1){q=(d[f+o>>0]|0)<<16|(d[e+o>>0]|0);v=(d[h+o>>0]|0)<<16|(d[g+o>>0]|0);y=q+n|0;s=y+524296+z+v|0;t=s+(y<<1)|0;y=3?t>>>3:t;t=s+(v+z<<1)|0;s=3?t>>>3:t;t=y+z|0;x=s+q|0;r=o<<1;u=r+-1|0;p=a[b+u>>0]|0;C=u<<2;D=i+C|0;a[D>>0]=-1;E=(1?t>>>1:t)&255;F=(17?t>>>17:t)&255;t=(p&255)*19077|0;p=8?t>>>8:t;t=F*26149|0;G=p+-14234+(8?t>>>8:t)|0;if(G>>>0<16384)H=6?G>>>6:G;else H=((31?G>>31:G)&-255)+255|0;a[D+1>>0]=H;G=E*6419|0;t=F*13320|0;F=p+8708-(8?G>>>8:G)-(8?t>>>8:t)|0;if(F>>>0<16384)I=6?F>>>6:F;else I=((31?F>>31:F)&-255)+255|0;a[D+2>>0]=I;F=E*33050|0;E=p+-17685+(8?F>>>8:F)|0;if(E>>>0<16384)J=6?E>>>6:E;else J=((31?E>>31:E)&-255)+255|0;a[D+3>>0]=J;D=a[b+r>>0]|0;E=o<<3;F=i+E|0;a[F>>0]=-1;p=(1?x>>>1:x)&255;t=(17?x>>>17:x)&255;x=(D&255)*19077|0;D=8?x>>>8:x;x=t*26149|0;G=(8?x>>>8:x)+-14234+D|0;if(G>>>0<16384)K=6?G>>>6:G;else K=((31?G>>31:G)&-255)+255|0;a[F+1>>0]=K;G=p*6419|0;x=t*13320|0;t=8708-(8?G>>>8:G)-(8?x>>>8:x)+D|0;if(t>>>0<16384)L=6?t>>>6:t;else L=((31?t>>31:t)&-255)+255|0;a[F+2>>0]=L;t=p*33050|0;p=(8?t>>>8:t)+-17685+D|0;if(p>>>0<16384)M=6?p>>>6:p;else M=((31?p>>31:p)&-255)+255|0;a[F+3>>0]=M;if(w){F=s+n|0;s=y+v|0;y=a[c+u>>0]|0;u=j+C|0;a[u>>0]=-1;C=(1?F>>>1:F)&255;p=(17?F>>>17:F)&255;F=(y&255)*19077|0;y=8?F>>>8:F;F=p*26149|0;D=(8?F>>>8:F)+-14234+y|0;if(D>>>0<16384)N=6?D>>>6:D;else N=((31?D>>31:D)&-255)+255|0;a[u+1>>0]=N;D=C*6419|0;F=p*13320|0;p=8708-(8?D>>>8:D)-(8?F>>>8:F)+y|0;if(p>>>0<16384)O=6?p>>>6:p;else O=((31?p>>31:p)&-255)+255|0;a[u+2>>0]=O;p=C*33050|0;C=(8?p>>>8:p)+-17685+y|0;if(C>>>0<16384)P=6?C>>>6:C;else P=((31?C>>31:C)&-255)+255|0;a[u+3>>0]=P;u=a[c+r>>0]|0;r=j+E|0;a[r>>0]=-1;E=(1?s>>>1:s)&255;C=(17?s>>>17:s)&255;s=(u&255)*19077|0;u=8?s>>>8:s;s=C*26149|0;y=(8?s>>>8:s)+-14234+u|0;if(y>>>0<16384)Q=6?y>>>6:y;else Q=((31?y>>31:y)&-255)+255|0;a[r+1>>0]=Q;y=E*6419|0;s=C*13320|0;C=8708-(8?y>>>8:y)-(8?s>>>8:s)+u|0;if(C>>>0<16384)R=6?C>>>6:C;else R=((31?C>>31:C)&-255)+255|0;a[r+2>>0]=R;C=E*33050|0;E=(8?C>>>8:C)+-17685+u|0;if(E>>>0<16384)S=6?E>>>6:E;else S=((31?E>>31:E)&-255)+255|0;a[r+3>>0]=S}if((o|0)<(m|0)){z=q;n=v;o=o+1|0}else{A=q;B=v;break}}}if(k&1|0)return;k=B+131074+(A*3|0)|0;o=a[b+l>>0]|0;b=l<<2;n=i+b|0;a[n>>0]=-1;i=(2?k>>>2:k)&255;z=(18?k>>>18:k)&255;k=(o&255)*19077|0;o=8?k>>>8:k;k=z*26149|0;m=(8?k>>>8:k)+-14234+o|0;if(m>>>0<16384)T=6?m>>>6:m;else T=((31?m>>31:m)&-255)+255|0;a[n+1>>0]=T;T=i*6419|0;m=z*13320|0;z=8708-(8?T>>>8:T)-(8?m>>>8:m)+o|0;if(z>>>0<16384)U=6?z>>>6:z;else U=((31?z>>31:z)&-255)+255|0;a[n+2>>0]=U;U=i*33050|0;i=(8?U>>>8:U)+-17685+o|0;if(i>>>0<16384)V=6?i>>>6:i;else V=((31?i>>31:i)&-255)+255|0;a[n+3>>0]=V;if(!w)return;w=A+131074+(B*3|0)|0;B=a[c+l>>0]|0;l=j+b|0;a[l>>0]=-1;b=(2?w>>>2:w)&255;j=(18?w>>>18:w)&255;w=(B&255)*19077|0;B=8?w>>>8:w;w=j*26149|0;c=(8?w>>>8:w)+-14234+B|0;if(c>>>0<16384)W=6?c>>>6:c;else W=((31?c>>31:c)&-255)+255|0;a[l+1>>0]=W;W=b*6419|0;c=j*13320|0;j=8708-(8?W>>>8:W)-(8?c>>>8:c)+B|0;if(j>>>0<16384)X=6?j>>>6:j;else X=((31?j>>31:j)&-255)+255|0;a[l+2>>0]=X;X=b*33050|0;b=(8?X>>>8:X)+-17685+B|0;if(b>>>0<16384)Y=6?b>>>6:b;else Y=((31?b>>31:b)&-255)+255|0;a[l+3>>0]=Y;return}function Kc(b,c,e,f,g,h,i,j,k){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;l=k+-1|0;m=1?l>>1:l;n=(d[f>>0]|0)<<16|(d[e>>0]|0);o=(d[h>>0]|0)<<16|(d[g>>0]|0);p=(n*3|0)+131074+o|0;q=(2?p>>>2:p)&255;r=18?p>>>18:p;p=(d[b>>0]|0)*19077|0;s=8?p>>>8:p;p=r*26149|0;t=s+-14234+(8?p>>>8:p)|0;if(t>>>0<16384)u=6?t>>>6:t;else u=((31?t>>31:t)&-255)+255|0;t=q*6419|0;p=r*13320|0;r=s+8708-(8?p>>>8:p)-(8?t>>>8:t)|0;if(r>>>0<16384)v=6?r>>>6:r;else v=((31?r>>31:r)&-255)+255|0;r=q*33050|0;q=s+-17685+(8?r>>>8:r)|0;if(q>>>0<16384)w=6?q>>>6:q;else w=((31?q>>31:q)&-255)+255|0;a[i>>0]=(4?v>>>4:v)|u&240;a[i+1>>0]=w|15;w=(c|0)!=0;if(w){u=n+131074+(o*3|0)|0;v=(2?u>>>2:u)&255;q=18?u>>>18:u;u=(d[c>>0]|0)*19077|0;r=8?u>>>8:u;u=q*26149|0;s=(8?u>>>8:u)+-14234+r|0;if(s>>>0<16384)x=6?s>>>6:s;else x=((31?s>>31:s)&-255)+255|0;s=v*6419|0;u=q*13320|0;q=8708-(8?u>>>8:u)-(8?s>>>8:s)+r|0;if(q>>>0<16384)y=6?q>>>6:q;else y=((31?q>>31:q)&-255)+255|0;q=v*33050|0;v=(8?q>>>8:q)+-17685+r|0;if(v>>>0<16384)z=6?v>>>6:v;else z=((31?v>>31:v)&-255)+255|0;a[j>>0]=(4?y>>>4:y)|x&240;a[j+1>>0]=z|15}if((k|0)<3){A=n;B=o}else{z=n;n=o;o=1;while(1){x=(d[f+o>>0]|0)<<16|(d[e+o>>0]|0);y=(d[h+o>>0]|0)<<16|(d[g+o>>0]|0);v=x+n|0;r=v+524296+z+y|0;q=r+(v<<1)|0;v=3?q>>>3:q;q=r+(y+z<<1)|0;r=3?q>>>3:q;q=v+z|0;s=r+x|0;u=o<<1;t=u+-1|0;p=(1?q>>>1:q)&255;C=17?q>>>17:q;q=t<<1;D=i+q|0;E=(d[b+t>>0]|0)*19077|0;F=8?E>>>8:E;E=C*26149|0;G=F+-14234+(8?E>>>8:E)|0;if(G>>>0<16384)H=6?G>>>6:G;else H=((31?G>>31:G)&-255)+255|0;G=p*6419|0;E=C*13320|0;C=F+8708-(8?E>>>8:E)-(8?G>>>8:G)|0;if(C>>>0<16384)I=6?C>>>6:C;else I=((31?C>>31:C)&-255)+255|0;C=p*33050|0;p=F+-17685+(8?C>>>8:C)|0;if(p>>>0<16384)J=6?p>>>6:p;else J=((31?p>>31:p)&-255)+255|0;a[D>>0]=(4?I>>>4:I)|H&240;a[D+1>>0]=J|15;D=(1?s>>>1:s)&255;p=17?s>>>17:s;s=o<<2;C=i+s|0;F=(d[b+u>>0]|0)*19077|0;G=8?F>>>8:F;F=p*26149|0;E=(8?F>>>8:F)+-14234+G|0;if(E>>>0<16384)K=6?E>>>6:E;else K=((31?E>>31:E)&-255)+255|0;E=D*6419|0;F=p*13320|0;p=8708-(8?F>>>8:F)-(8?E>>>8:E)+G|0;if(p>>>0<16384)L=6?p>>>6:p;else L=((31?p>>31:p)&-255)+255|0;p=D*33050|0;D=(8?p>>>8:p)+-17685+G|0;if(D>>>0<16384)M=6?D>>>6:D;else M=((31?D>>31:D)&-255)+255|0;a[C>>0]=(4?L>>>4:L)|K&240;a[C+1>>0]=M|15;if(w){C=r+n|0;r=v+y|0;v=(1?C>>>1:C)&255;D=17?C>>>17:C;C=j+q|0;q=(d[c+t>>0]|0)*19077|0;t=8?q>>>8:q;q=D*26149|0;G=(8?q>>>8:q)+-14234+t|0;if(G>>>0<16384)N=6?G>>>6:G;else N=((31?G>>31:G)&-255)+255|0;G=v*6419|0;q=D*13320|0;D=8708-(8?q>>>8:q)-(8?G>>>8:G)+t|0;if(D>>>0<16384)O=6?D>>>6:D;else O=((31?D>>31:D)&-255)+255|0;D=v*33050|0;v=(8?D>>>8:D)+-17685+t|0;if(v>>>0<16384)P=6?v>>>6:v;else P=((31?v>>31:v)&-255)+255|0;a[C>>0]=(4?O>>>4:O)|N&240;a[C+1>>0]=P|15;C=(1?r>>>1:r)&255;v=17?r>>>17:r;r=j+s|0;s=(d[c+u>>0]|0)*19077|0;u=8?s>>>8:s;s=v*26149|0;t=(8?s>>>8:s)+-14234+u|0;if(t>>>0<16384)Q=6?t>>>6:t;else Q=((31?t>>31:t)&-255)+255|0;t=C*6419|0;s=v*13320|0;v=8708-(8?s>>>8:s)-(8?t>>>8:t)+u|0;if(v>>>0<16384)R=6?v>>>6:v;else R=((31?v>>31:v)&-255)+255|0;v=C*33050|0;C=(8?v>>>8:v)+-17685+u|0;if(C>>>0<16384)S=6?C>>>6:C;else S=((31?C>>31:C)&-255)+255|0;a[r>>0]=(4?R>>>4:R)|Q&240;a[r+1>>0]=S|15}if((o|0)<(m|0)){z=x;n=y;o=o+1|0}else{A=x;B=y;break}}}if(k&1|0)return;k=B+131074+(A*3|0)|0;o=(2?k>>>2:k)&255;n=18?k>>>18:k;k=l<<1;z=i+k|0;i=(d[b+l>>0]|0)*19077|0;b=8?i>>>8:i;i=n*26149|0;m=(8?i>>>8:i)+-14234+b|0;if(m>>>0<16384)T=6?m>>>6:m;else T=((31?m>>31:m)&-255)+255|0;m=o*6419|0;i=n*13320|0;n=8708-(8?i>>>8:i)-(8?m>>>8:m)+b|0;if(n>>>0<16384)U=6?n>>>6:n;else U=((31?n>>31:n)&-255)+255|0;n=o*33050|0;o=(8?n>>>8:n)+-17685+b|0;if(o>>>0<16384)V=6?o>>>6:o;else V=((31?o>>31:o)&-255)+255|0;a[z>>0]=(4?U>>>4:U)|T&240;a[z+1>>0]=V|15;if(!w)return;w=A+131074+(B*3|0)|0;B=(2?w>>>2:w)&255;A=18?w>>>18:w;w=j+k|0;k=(d[c+l>>0]|0)*19077|0;l=8?k>>>8:k;k=A*26149|0;c=(8?k>>>8:k)+-14234+l|0;if(c>>>0<16384)W=6?c>>>6:c;else W=((31?c>>31:c)&-255)+255|0;c=B*6419|0;k=A*13320|0;A=8708-(8?k>>>8:k)-(8?c>>>8:c)+l|0;if(A>>>0<16384)X=6?A>>>6:A;else X=((31?A>>31:A)&-255)+255|0;A=B*33050|0;B=(8?A>>>8:A)+-17685+l|0;if(B>>>0<16384)Y=6?B>>>6:B;else Y=((31?B>>31:B)&-255)+255|0;a[w>>0]=(4?X>>>4:X)|W&240;a[w+1>>0]=Y|15;return} - function Lc(b,c,e,f,g,h,i,j,k){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;l=k+-1|0;m=1?l>>1:l;n=(d[f>>0]|0)<<16|(d[e>>0]|0);o=(d[h>>0]|0)<<16|(d[g>>0]|0);p=(n*3|0)+131074+o|0;q=(2?p>>>2:p)&255;r=18?p>>>18:p;p=(d[b>>0]|0)*19077|0;s=8?p>>>8:p;p=r*26149|0;t=s+-14234+(8?p>>>8:p)|0;if(t>>>0<16384)u=6?t>>>6:t;else u=((31?t>>31:t)&-255)+255|0;t=q*6419|0;p=r*13320|0;r=s+8708-(8?p>>>8:p)-(8?t>>>8:t)|0;if(r>>>0<16384)v=6?r>>>6:r;else v=((31?r>>31:r)&-255)+255|0;r=q*33050|0;q=s+-17685+(8?r>>>8:r)|0;if(q>>>0<16384)w=6?q>>>6:q;else w=((31?q>>31:q)&-255)+255|0;a[i>>0]=(5?v>>>5:v)|u&248;a[i+1>>0]=(3?w>>>3:w)|v<<3&224;v=(c|0)!=0;if(v){w=n+131074+(o*3|0)|0;u=(2?w>>>2:w)&255;q=18?w>>>18:w;w=(d[c>>0]|0)*19077|0;r=8?w>>>8:w;w=q*26149|0;s=(8?w>>>8:w)+-14234+r|0;if(s>>>0<16384)x=6?s>>>6:s;else x=((31?s>>31:s)&-255)+255|0;s=u*6419|0;w=q*13320|0;q=8708-(8?w>>>8:w)-(8?s>>>8:s)+r|0;if(q>>>0<16384)y=6?q>>>6:q;else y=((31?q>>31:q)&-255)+255|0;q=u*33050|0;u=(8?q>>>8:q)+-17685+r|0;if(u>>>0<16384)z=6?u>>>6:u;else z=((31?u>>31:u)&-255)+255|0;a[j>>0]=(5?y>>>5:y)|x&248;a[j+1>>0]=(3?z>>>3:z)|y<<3&224}if((k|0)<3){A=n;B=o}else{y=n;n=o;o=1;while(1){z=(d[f+o>>0]|0)<<16|(d[e+o>>0]|0);x=(d[h+o>>0]|0)<<16|(d[g+o>>0]|0);u=z+n|0;r=u+524296+y+x|0;q=r+(u<<1)|0;u=3?q>>>3:q;q=r+(x+y<<1)|0;r=3?q>>>3:q;q=u+y|0;s=r+z|0;w=o<<1;t=w+-1|0;p=(1?q>>>1:q)&255;C=17?q>>>17:q;q=t<<1;D=i+q|0;E=(d[b+t>>0]|0)*19077|0;F=8?E>>>8:E;E=C*26149|0;G=F+-14234+(8?E>>>8:E)|0;if(G>>>0<16384)H=6?G>>>6:G;else H=((31?G>>31:G)&-255)+255|0;G=p*6419|0;E=C*13320|0;C=F+8708-(8?E>>>8:E)-(8?G>>>8:G)|0;if(C>>>0<16384)I=6?C>>>6:C;else I=((31?C>>31:C)&-255)+255|0;C=p*33050|0;p=F+-17685+(8?C>>>8:C)|0;if(p>>>0<16384)J=6?p>>>6:p;else J=((31?p>>31:p)&-255)+255|0;a[D>>0]=(5?I>>>5:I)|H&248;a[D+1>>0]=(3?J>>>3:J)|I<<3&224;D=(1?s>>>1:s)&255;p=17?s>>>17:s;s=o<<2;C=i+s|0;F=(d[b+w>>0]|0)*19077|0;G=8?F>>>8:F;F=p*26149|0;E=(8?F>>>8:F)+-14234+G|0;if(E>>>0<16384)K=6?E>>>6:E;else K=((31?E>>31:E)&-255)+255|0;E=D*6419|0;F=p*13320|0;p=8708-(8?F>>>8:F)-(8?E>>>8:E)+G|0;if(p>>>0<16384)L=6?p>>>6:p;else L=((31?p>>31:p)&-255)+255|0;p=D*33050|0;D=(8?p>>>8:p)+-17685+G|0;if(D>>>0<16384)M=6?D>>>6:D;else M=((31?D>>31:D)&-255)+255|0;a[C>>0]=(5?L>>>5:L)|K&248;a[C+1>>0]=(3?M>>>3:M)|L<<3&224;if(v){C=r+n|0;r=u+x|0;u=(1?C>>>1:C)&255;D=17?C>>>17:C;C=j+q|0;q=(d[c+t>>0]|0)*19077|0;t=8?q>>>8:q;q=D*26149|0;G=(8?q>>>8:q)+-14234+t|0;if(G>>>0<16384)N=6?G>>>6:G;else N=((31?G>>31:G)&-255)+255|0;G=u*6419|0;q=D*13320|0;D=8708-(8?q>>>8:q)-(8?G>>>8:G)+t|0;if(D>>>0<16384)O=6?D>>>6:D;else O=((31?D>>31:D)&-255)+255|0;D=u*33050|0;u=(8?D>>>8:D)+-17685+t|0;if(u>>>0<16384)P=6?u>>>6:u;else P=((31?u>>31:u)&-255)+255|0;a[C>>0]=(5?O>>>5:O)|N&248;a[C+1>>0]=(3?P>>>3:P)|O<<3&224;C=(1?r>>>1:r)&255;u=17?r>>>17:r;r=j+s|0;s=(d[c+w>>0]|0)*19077|0;w=8?s>>>8:s;s=u*26149|0;t=(8?s>>>8:s)+-14234+w|0;if(t>>>0<16384)Q=6?t>>>6:t;else Q=((31?t>>31:t)&-255)+255|0;t=C*6419|0;s=u*13320|0;u=8708-(8?s>>>8:s)-(8?t>>>8:t)+w|0;if(u>>>0<16384)R=6?u>>>6:u;else R=((31?u>>31:u)&-255)+255|0;u=C*33050|0;C=(8?u>>>8:u)+-17685+w|0;if(C>>>0<16384)S=6?C>>>6:C;else S=((31?C>>31:C)&-255)+255|0;a[r>>0]=(5?R>>>5:R)|Q&248;a[r+1>>0]=(3?S>>>3:S)|R<<3&224}if((o|0)<(m|0)){y=z;n=x;o=o+1|0}else{A=z;B=x;break}}}if(k&1|0)return;k=B+131074+(A*3|0)|0;o=(2?k>>>2:k)&255;n=18?k>>>18:k;k=l<<1;y=i+k|0;i=(d[b+l>>0]|0)*19077|0;b=8?i>>>8:i;i=n*26149|0;m=(8?i>>>8:i)+-14234+b|0;if(m>>>0<16384)T=6?m>>>6:m;else T=((31?m>>31:m)&-255)+255|0;m=o*6419|0;i=n*13320|0;n=8708-(8?i>>>8:i)-(8?m>>>8:m)+b|0;if(n>>>0<16384)U=6?n>>>6:n;else U=((31?n>>31:n)&-255)+255|0;n=o*33050|0;o=(8?n>>>8:n)+-17685+b|0;if(o>>>0<16384)V=6?o>>>6:o;else V=((31?o>>31:o)&-255)+255|0;a[y>>0]=(5?U>>>5:U)|T&248;a[y+1>>0]=(3?V>>>3:V)|U<<3&224;if(!v)return;v=A+131074+(B*3|0)|0;B=(2?v>>>2:v)&255;A=18?v>>>18:v;v=j+k|0;k=(d[c+l>>0]|0)*19077|0;l=8?k>>>8:k;k=A*26149|0;c=(8?k>>>8:k)+-14234+l|0;if(c>>>0<16384)W=6?c>>>6:c;else W=((31?c>>31:c)&-255)+255|0;c=B*6419|0;k=A*13320|0;A=8708-(8?k>>>8:k)-(8?c>>>8:c)+l|0;if(A>>>0<16384)X=6?A>>>6:A;else X=((31?A>>31:A)&-255)+255|0;A=B*33050|0;B=(8?A>>>8:A)+-17685+l|0;if(B>>>0<16384)Y=6?B>>>6:B;else Y=((31?B>>31:B)&-255)+255|0;a[v>>0]=(5?X>>>5:X)|W&248;a[v+1>>0]=(3?Y>>>3:Y)|X<<3&224;return}function Mc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;f=c[d>>2]|0;g=c[e>>2]|0;h=((b|0)<0)<<31>>31;i=((a|0)<0)<<31>>31;if((b|0)>0&(f|0)==0){j=Cf(g|0,((g|0)<0)<<31>>31|0,a|0,i|0)|0;k=v()|0;l=Df(b|0,h|0,-1,-1)|0;m=Df(l|0,v()|0,j|0,k|0)|0;k=Hf(m|0,v()|0,b|0,h|0)|0;v()|0;n=k}else n=f;if((a|0)>0&(g|0)==0){f=Cf(n|0,((n|0)<0)<<31>>31|0,b|0,h|0)|0;h=v()|0;b=Df(a|0,i|0,-1,-1)|0;k=Df(b|0,v()|0,f|0,h|0)|0;h=Hf(k|0,v()|0,a|0,i|0)|0;v()|0;o=h}else o=g;if((n|0)<1|(o|0)<1){p=0;return p|0}c[d>>2]=n;c[e>>2]=o;p=1;return p|0}function Nc(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0;if(!b)g=0;else g=a[b>>0]|0;if((f|0)<=0)return;b=g;g=0;do{b=(d[c+g>>0]|0)+(b&255)&255;a[e+g>>0]=b;g=g+1|0}while((g|0)!=(f|0));return}function Oc(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=(f|0)>0;if(!b){if(!g)return;h=0;i=0;do{h=(h&255)+(d[c+i>>0]|0)|0;a[e+i>>0]=h;i=i+1|0}while((i|0)!=(f|0));return}else{if(!g)return;g=0;do{a[e+g>>0]=(d[c+g>>0]|0)+(d[b+g>>0]|0);g=g+1|0}while((g|0)!=(f|0));return}}function Pc(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;if(!b){if((f|0)<=0)return;g=0;h=0;do{g=(g&255)+(d[c+h>>0]|0)|0;a[e+h>>0]=g;h=h+1|0}while((h|0)!=(f|0));return}h=a[b>>0]|0;if((f|0)<=0)return;g=(h&255)-(h&255)+(h&255)|0;i=(g>>>0<256?g:(31?g>>>31:g)+255|0)+(d[c>>0]|0)|0;a[e>>0]=i;if((f|0)==1)return;g=1;j=i;i=h;do{h=i;i=a[b+g>>0]|0;k=(j&255)-(h&255)+(i&255)|0;j=(k>>>0<256?k:(31?k>>>31:k)+255|0)+(d[c+g>>0]|0)|0;a[e+g>>0]=j;g=g+1|0}while((g|0)!=(f|0));return}function Qc(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;a[g>>0]=a[b>>0]|0;h=b+1|0;i=g+1|0;j=c+-1|0;k=(c|0)>1;if(k){c=0;do{a[i+c>>0]=(d[h+c>>0]|0)-(d[b+c>>0]|0);c=c+1|0}while((c|0)!=(j|0))}c=b+f|0;h=g+f|0;if((e|0)<=1)return;if(!k){k=1;g=c;i=h;l=b;while(1){a[i>>0]=(d[g>>0]|0)-(d[l>>0]|0);k=k+1|0;if((k|0)==(e|0))break;else{m=g;g=g+f|0;i=i+f|0;l=m}}return}l=1;i=c;c=h;h=b;while(1){a[c>>0]=(d[i>>0]|0)-(d[h>>0]|0);b=i+1|0;g=c+1|0;k=0;do{a[g+k>>0]=(d[b+k>>0]|0)-(d[i+k>>0]|0);k=k+1|0}while((k|0)!=(j|0));l=l+1|0;if((l|0)==(e|0))break;else{k=i;i=i+f|0;c=c+f|0;h=k}}return}function Rc(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;a[g>>0]=a[b>>0]|0;h=b+1|0;i=g+1|0;j=c+-1|0;if((c|0)>1){k=0;do{a[i+k>>0]=(d[h+k>>0]|0)-(d[b+k>>0]|0);k=k+1|0}while((k|0)!=(j|0))}if(!((c|0)>0&(e|0)>1))return;j=1;k=g;g=b;do{b=g;g=g+f|0;k=k+f|0;h=0;do{a[k+h>>0]=(d[g+h>>0]|0)-(d[b+h>>0]|0);h=h+1|0}while((h|0)!=(c|0));j=j+1|0}while((j|0)!=(e|0));return}function Sc(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;a[g>>0]=a[b>>0]|0;h=b+1|0;i=g+1|0;j=c+-1|0;k=(c|0)>1;if(k){l=0;do{a[i+l>>0]=(d[h+l>>0]|0)-(d[b+l>>0]|0);l=l+1|0}while((l|0)!=(j|0))}j=g+f|0;g=b+f|0;if((e|0)<=1)return;l=~f;if(!k){k=1;h=j;i=g;m=b;while(1){a[h>>0]=(d[i>>0]|0)-(d[m>>0]|0);k=k+1|0;if((k|0)==(e|0))break;else{n=i;h=h+f|0;i=i+f|0;m=n}}return}m=1;i=j;j=g;g=b;while(1){a[i>>0]=(d[j>>0]|0)-(d[g>>0]|0);b=1;do{h=(d[g+b>>0]|0)+(d[j+(b+-1)>>0]|0)-(d[j+(b+l)>>0]|0)|0;a[i+b>>0]=(d[j+b>>0]|0)-(h>>>0<256?h:(31?h>>>31:h)+255|0);b=b+1|0}while((b|0)!=(c|0));m=m+1|0;if((m|0)==(e|0))break;else{b=j;i=i+f|0;j=j+f|0;g=b}}return}function Tc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;if(!a){b=2;return b|0}d=(c[a+8>>2]|0)+-1|0;if((c[a>>2]|0)>>>0<=10){e=a+20|0;f=c[e>>2]|0;g=r(f,d)|0;h=a+16|0;c[h>>2]=(c[h>>2]|0)+g;c[e>>2]=0-f;b=0;return b|0}f=a+32|0;e=c[f>>2]|0;g=r(e,d)|0;h=a+16|0;c[h>>2]=(c[h>>2]|0)+g;c[f>>2]=0-e;e=1?d>>1:d;f=a+36|0;g=c[f>>2]|0;h=r(g,e)|0;i=a+20|0;c[i>>2]=(c[i>>2]|0)+h;c[f>>2]=0-g;g=a+40|0;f=c[g>>2]|0;h=r(f,e)|0;e=a+24|0;c[e>>2]=(c[e>>2]|0)+h;c[g>>2]=0-f;f=a+28|0;g=c[f>>2]|0;if(!g){b=0;return b|0}h=a+44|0;a=c[h>>2]|0;e=g+(r(a,d)|0)|0;c[f>>2]=e;c[h>>2]=0-a;b=0;return b|0}function Uc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;g=Y;Y=Y+16|0;h=g+4|0;i=g;if((d|0)<1|((b|0)<1|(f|0)==0)){j=2;Y=g;return j|0}k=(e|0)!=0;if(k){if(c[e+8>>2]|0){l=c[e+20>>2]|0;m=c[e+24>>2]|0;n=c[e+12>>2]|0;o=c[e+16>>2]|0;if((m|0)<1|((l|0)<1|(o|n|0)<0)){j=2;Y=g;return j|0}if(((n&-2)+l|0)>(b|0)|((o&-2)+m|0)>(d|0)){j=2;Y=g;return j|0}else{p=l;q=m}}else{p=b;q=d}if(c[e+28>>2]|0){c[h>>2]=c[e+32>>2];c[i>>2]=c[e+36>>2];m=(Mc(p,q,h,i)|0)==0;if(m){j=2;Y=g;return j|0}else{s=c[h>>2]|0;t=c[i>>2]|0}}else{s=p;t=q}}else{s=b;t=d}c[f+4>>2]=s;d=f+8|0;c[d>>2]=t;b=c[f>>2]|0;if((t|0)<1|(s|0)<1|b>>>0>12){j=2;Y=g;return j|0}do if((c[f+12>>2]|0)<1?(q=f+80|0,(c[q>>2]|0)==0):0){p=((s|0)<0)<<31>>31;i=a[8683+b>>0]|0;h=Cf(i&255|0,0,s|0,p|0)|0;m=v()|0;if(m>>>0>0|(m|0)==0&h>>>0>4294967295){j=2;Y=g;return j|0}h=r(s,i&255)|0;i=((t|0)<0)<<31>>31;m=Cf(h|0,((h|0)<0)<<31>>31|0,t|0,i|0)|0;l=v()|0;o=b>>>0>10;if(o){n=(s+1|0)/2|0;u=(t+1|0)/2|0;w=Cf(n|0,((n|0)<0)<<31>>31|0,u|0,((u|0)<0)<<31>>31|0)|0;u=v()|0;x=(b|0)==12;y=Cf(s|0,p|0,t|0,i|0)|0;i=v()|0;z=n;A=x?s:0;B=w;C=u;D=x?y:0;E=x?i:0}else{z=0;A=0;B=0;C=0;D=0;E=0}i=Jf(B|0,C|0,1)|0;x=v()|0;y=Df(D|0,E|0,m|0,l|0)|0;l=Df(y|0,v()|0,i|0,x|0)|0;x=wa(l,v()|0,1)|0;if(!x){j=1;Y=g;return j|0}c[q>>2]=x;c[f+16>>2]=x;if(!o){c[f+20>>2]=h;c[f+24>>2]=m;break}c[f+32>>2]=h;c[f+48>>2]=m;h=x+m|0;c[f+20>>2]=h;c[f+36>>2]=z;c[f+52>>2]=B;c[f+24>>2]=h+B;c[f+40>>2]=z;c[f+56>>2]=B;if((b|0)==12)c[f+28>>2]=h+i;c[f+60>>2]=D;c[f+44>>2]=A}while(0);A=Vc(f)|0;if((A|0)!=0|k^1){j=A;Y=g;return j|0}if(!(c[e+48>>2]|0)){j=0;Y=g;return j|0}e=(c[d>>2]|0)+-1|0;if((c[f>>2]|0)>>>0<=10){d=f+20|0;A=c[d>>2]|0;k=r(A,e)|0;D=f+16|0;c[D>>2]=(c[D>>2]|0)+k;c[d>>2]=0-A;j=0;Y=g;return j|0}A=f+32|0;d=c[A>>2]|0;k=r(d,e)|0;D=f+16|0;c[D>>2]=(c[D>>2]|0)+k;c[A>>2]=0-d;d=1?e>>1:e;A=f+36|0;k=c[A>>2]|0;D=r(k,d)|0;b=f+20|0;c[b>>2]=(c[b>>2]|0)+D;c[A>>2]=0-k;k=f+40|0;A=c[k>>2]|0;D=r(A,d)|0;d=f+24|0;c[d>>2]=(c[d>>2]|0)+D;c[k>>2]=0-A;A=f+28|0;k=c[A>>2]|0;if(!k){j=0;Y=g;return j|0}D=f+44|0;f=c[D>>2]|0;d=k+(r(f,e)|0)|0;c[A>>2]=d;c[D>>2]=0-f;j=0;Y=g;return j|0}function Vc(a){a=a|0;var b=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,s=0,t=0,u=0,w=0,x=0,y=0;b=c[a>>2]|0;e=c[a+4>>2]|0;f=c[a+8>>2]|0;if(b>>>0>12){g=2;return g|0}do if(b>>>0>10){h=(e+1|0)/2|0;i=c[a+32>>2]|0;j=(i|0)>-1?i:0-i|0;i=c[a+36>>2]|0;k=(i|0)>-1?i:0-i|0;i=c[a+40>>2]|0;l=(i|0)>-1?i:0-i|0;i=c[a+44>>2]|0;m=(i|0)>-1?i:0-i|0;i=f+-1|0;n=((i|0)<0)<<31>>31;o=Cf(j|0,((j|0)<0)<<31>>31|0,i|0,n|0)|0;p=((e|0)<0)<<31>>31;q=Df(o|0,v()|0,e|0,p|0)|0;o=v()|0;s=((f+1|0)/2|0)+-1|0;t=((s|0)<0)<<31>>31;u=Cf(k|0,((k|0)<0)<<31>>31|0,s|0,t|0)|0;w=((h|0)<0)<<31>>31;x=Df(u|0,v()|0,h|0,w|0)|0;u=v()|0;y=Cf(l|0,((l|0)<0)<<31>>31|0,s|0,t|0)|0;t=Df(y|0,v()|0,h|0,w|0)|0;w=v()|0;y=(c[a+24>>2]|0)!=0&((c[a+20>>2]|0)!=0&((c[a+16>>2]|0)!=0&((l|0)>=(h|0)&((k|0)>=(h|0)&((j|0)>=(e|0)&((o>>>0<0|((o|0)==0?q>>>0<=(c[a+48>>2]|0)>>>0:0))&(u>>>0<0|((u|0)==0?x>>>0<=(c[a+52>>2]|0)>>>0:0))&(w>>>0<0|((w|0)==0?t>>>0<=(c[a+56>>2]|0)>>>0:0))))))));if((b|0)==12){t=Cf(m|0,((m|0)<0)<<31>>31|0,i|0,n|0)|0;n=Df(t|0,v()|0,e|0,p|0)|0;p=v()|0;if((c[a+28>>2]|0)!=0&((m|0)>=(e|0)&y&(p>>>0<0|((p|0)==0?n>>>0<=(c[a+60>>2]|0)>>>0:0))))break;else g=2;return g|0}else{if(y)break;else g=2;return g|0}}else{y=c[a+20>>2]|0;n=(y|0)>-1?y:0-y|0;y=f+-1|0;p=Cf(n|0,((n|0)<0)<<31>>31|0,y|0,((y|0)<0)<<31>>31|0)|0;y=v()|0;m=r(e,d[8683+b>>0]|0)|0;t=Df(p|0,y|0,m|0,((m|0)<0)<<31>>31|0)|0;y=v()|0;if(!((c[a+16>>2]|0)!=0&((n|0)>=(m|0)&(y>>>0<0|((y|0)==0?t>>>0<=(c[a+24>>2]|0)>>>0:0))))){g=2;return g|0}}while(0);g=0;return g|0}function Wc(a,b){a=a|0;b=b|0;var d=0;if((a|0)==0|(b&-256|0)!=512){d=0;return d|0}b=a;a=b+84|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(a|0));d=1;return d|0}function Xc(a){a=a|0;var b=0;if(!a)return;b=a+80|0;if((c[a+12>>2]|0)<1)pa(c[b>>2]|0);c[b>>2]=0;return}function Yc(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=a+4|0;c[b+4>>2]=c[e>>2];f=a+8|0;c[b+8>>2]=c[f>>2];if(Vc(b)|0){g=2;return g|0}h=c[a>>2]|0;i=c[a+16>>2]|0;if(h>>>0<=10){j=r(c[e>>2]|0,d[8683+h>>0]|0)|0;Zc(i,c[a+20>>2]|0,c[b+16>>2]|0,c[b+20>>2]|0,j,c[f>>2]|0);g=0;return g|0}Zc(i,c[a+32>>2]|0,c[b+16>>2]|0,c[b+32>>2]|0,c[e>>2]|0,c[f>>2]|0);Zc(c[a+20>>2]|0,c[a+36>>2]|0,c[b+20>>2]|0,c[b+36>>2]|0,((c[e>>2]|0)+1|0)/2|0,((c[f>>2]|0)+1|0)/2|0);Zc(c[a+24>>2]|0,c[a+40>>2]|0,c[b+24>>2]|0,c[b+40>>2]|0,((c[e>>2]|0)+1|0)/2|0,((c[f>>2]|0)+1|0)/2|0);i=c[a>>2]|0;switch(i|0){case 1:case 3:case 4:case 5:case 12:break;default:if((i+-7|0)>>>0>3){g=0;return g|0}}Zc(c[a+28>>2]|0,c[a+44>>2]|0,c[b+28>>2]|0,c[b+44>>2]|0,c[e>>2]|0,c[f>>2]|0);g=0;return g|0}function Zc(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;if((f|0)<=0)return;g=f;f=a;a=c;while(1){Lf(a|0,f|0,e|0)|0;if((g|0)>1){g=g+-1|0;f=f+b|0;a=a+d|0}else break}return}function _c(a,b){a=a|0;b=b|0;var d=0;if((c[a+12>>2]|0)<=1){d=0;return d|0}if(!(b|0?((c[a>>2]|0)+-7|0)>>>0<4:0)){d=0;return d|0}d=(c[b+8>>2]|0)!=0&1;return d|0}function $c(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!a)return;e=c[a+44>>2]|0;do if((e|0)>=0){if((e|0)<=100){f=e*255|0;if((f|0)>99)g=(f|0)/100|0;else break}else g=255;f=c[b+800>>2]|0;if((f|0)<12){h=r(g,d[8696+((f|0)>0?f:0)>>0]|0)|0;f=3?h>>3:h;c[b+804>>2]=f;i=f}else i=c[b+804>>2]|0;f=c[b+832>>2]|0;if((f|0)<12){h=r(g,d[8696+((f|0)>0?f:0)>>0]|0)|0;f=3?h>>3:h;c[b+836>>2]=f;j=f}else j=c[b+836>>2]|0;f=c[b+864>>2]|0;if((f|0)<12){h=r(g,d[8696+((f|0)>0?f:0)>>0]|0)|0;f=3?h>>3:h;c[b+868>>2]=f;k=f}else k=c[b+868>>2]|0;f=c[b+896>>2]|0;if((f|0)<12){h=r(g,d[8696+((f|0)>0?f:0)>>0]|0)|0;f=3?h>>3:h;c[b+900>>2]=f;l=f}else l=c[b+900>>2]|0;if(l|(k|(j|i))|0){ad(b+544|0,1.0);c[b+540>>2]=1}}while(0);i=c[a+52>>2]|0;a=b+2372|0;c[a>>2]=i;if((i|0)>100){c[a>>2]=100;return}if((i|0)>=0)return;c[a>>2]=0;return}function ad(a,b){a=a|0;b=+b;var d=0;Lf(a+8|0,3888,220)|0;c[a>>2]=0;c[a+4>>2]=31;if(!(b<0.0))if(b>1.0)d=256;else d=~~(b*256.0)>>>0;else d=0;c[a+228>>2]=d;return}function bd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+160|0;if((c[a+2308>>2]|0)>0?(e=c[a+2300>>2]|0,(e|0)>=(c[a+300>>2]|0)):0)f=(e|0)<=(c[a+308>>2]|0);else f=0;e=f&1;g=a+148|0;if(!(c[g>>2]|0)){c[a+164>>2]=c[a+2300>>2];c[a+168>>2]=e;cd(a,d);h=dd(a,b)|0;return h|0}i=a+124|0;j=(ed()|0)+8|0;if(!((aa[c[j>>2]&7](i)|0)&1)){h=0;return h|0}h=a+180|0;j=b;b=h+108|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(b|0));j=a+152|0;c[d>>2]=c[j>>2];c[a+164>>2]=c[a+2300>>2];c[a+168>>2]=e;if((c[g>>2]|0)==2){g=a+176|0;e=c[g>>2]|0;h=a+2304|0;c[g>>2]=c[h>>2];c[h>>2]=e}else cd(a,d);if(!f){k=ed()|0;l=k+12|0;m=c[l>>2]|0;ea[m&31](i);n=c[j>>2]|0;o=n+1|0;p=a+156|0;q=c[p>>2]|0;r=(o|0)==(q|0);s=r?0:o;c[j>>2]=s;return 1}f=a+172|0;d=c[f>>2]|0;e=a+2260|0;c[f>>2]=c[e>>2];c[e>>2]=d;k=ed()|0;l=k+12|0;m=c[l>>2]|0;ea[m&31](i);n=c[j>>2]|0;o=n+1|0;p=a+156|0;q=c[p>>2]|0;r=(o|0)==(q|0);s=r?0:o;c[j>>2]=s;return 1}function cd(b,f){b=b|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,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0;g=c[f+4>>2]|0;h=c[f>>2]|0;i=c[b+2264>>2]|0;j=i+40|0;k=i+584|0;a[i+39>>0]=-127;a[i+71>>0]=-127;a[i+103>>0]=-127;a[i+135>>0]=-127;a[i+167>>0]=-127;a[i+199>>0]=-127;a[i+231>>0]=-127;a[i+263>>0]=-127;a[i+295>>0]=-127;a[i+327>>0]=-127;a[i+359>>0]=-127;a[i+391>>0]=-127;a[i+423>>0]=-127;a[i+455>>0]=-127;a[i+487>>0]=-127;a[i+519>>0]=-127;l=i+600|0;a[i+583>>0]=-127;a[i+599>>0]=-127;a[i+615>>0]=-127;a[i+631>>0]=-127;a[i+647>>0]=-127;a[i+663>>0]=-127;a[i+679>>0]=-127;a[i+695>>0]=-127;a[i+711>>0]=-127;a[i+727>>0]=-127;a[i+743>>0]=-127;a[i+759>>0]=-127;a[i+775>>0]=-127;a[i+791>>0]=-127;a[i+807>>0]=-127;a[i+823>>0]=-127;m=(g|0)>0;if(m){a[i+567>>0]=-127;a[i+551>>0]=-127;a[i+7>>0]=-127}else{n=i+7|0;o=n+21|0;do{a[n>>0]=127;n=n+1|0}while((n|0)<(o|0));n=i+551|0;o=n+9|0;do{a[n>>0]=127;n=n+1|0}while((n|0)<(o|0));n=i+567|0;o=n+9|0;do{a[n>>0]=127;n=n+1|0}while((n|0)<(o|0))}p=b+288|0;if((c[p>>2]|0)<=0)return;q=f+16|0;f=b+2252|0;s=i+8|0;t=i+552|0;u=i+568|0;v=i+24|0;w=(g|0)==0;x=i+408|0;y=i+280|0;z=i+152|0;A=w?6:5;B=w?4:0;w=b+292|0;C=i+520|0;D=i+808|0;E=i+824|0;F=h<<4;G=b+2280|0;H=h<<3;h=b+2284|0;I=b+2268|0;J=b+2272|0;K=b+2276|0;b=i+4|0;L=i+20|0;M=i+36|0;N=i+52|0;O=i+68|0;P=i+84|0;Q=i+100|0;R=i+116|0;S=i+132|0;T=i+148|0;U=i+164|0;V=i+180|0;W=i+196|0;X=i+212|0;Y=i+228|0;Z=i+244|0;_=i+260|0;$=i+276|0;aa=i+292|0;ba=i+308|0;ca=i+324|0;da=i+340|0;fa=i+356|0;ga=i+372|0;ha=i+388|0;ia=i+404|0;ja=i+420|0;ka=i+436|0;la=i+452|0;ma=i+468|0;na=i+484|0;oa=i+500|0;pa=i+516|0;qa=i+532|0;ra=i+548|0;sa=i+556|0;ta=i+564|0;ua=i+572|0;va=i+580|0;wa=i+588|0;xa=i+596|0;ya=i+604|0;za=i+612|0;Aa=i+620|0;Ba=i+628|0;Ca=i+636|0;Da=i+644|0;Ea=i+652|0;Fa=i+660|0;Ga=i+668|0;Ha=i+676|0;Ia=i+684|0;Ja=i+692|0;Ka=i+700|0;La=i+708|0;Ma=i+716|0;Na=i+724|0;Oa=i+732|0;Pa=i+740|0;Qa=i+748|0;Ra=i+756|0;Sa=i+764|0;Ta=i+772|0;Ua=i+780|0;Va=i+788|0;Wa=i+796|0;Xa=i+804|0;Ya=i+812|0;Za=i+820|0;_a=i+828|0;$a=i+72|0;ab=i+104|0;bb=i+136|0;cb=i+168|0;db=i+200|0;eb=i+232|0;fb=i+264|0;gb=i+296|0;hb=i+328|0;ib=i+360|0;jb=i+392|0;kb=i+424|0;lb=i+456|0;mb=i+488|0;nb=i+520|0;ob=i+616|0;pb=i+632|0;qb=i+648|0;rb=i+664|0;sb=i+680|0;tb=i+696|0;ub=i+712|0;vb=i+728|0;wb=i+744|0;xb=i+760|0;yb=i+776|0;zb=i+792|0;Ab=i+808|0;Bb=i+824|0;i=0;do{Cb=c[q>>2]|0;Db=(i|0)==0;if(!Db){Eb=d[L>>0]|d[L+1>>0]<<8|d[L+2>>0]<<16|d[L+3>>0]<<24;a[b>>0]=Eb;a[b+1>>0]=Eb>>8;a[b+2>>0]=Eb>>16;a[b+3>>0]=Eb>>24;Eb=d[N>>0]|d[N+1>>0]<<8|d[N+2>>0]<<16|d[N+3>>0]<<24;a[M>>0]=Eb;a[M+1>>0]=Eb>>8;a[M+2>>0]=Eb>>16;a[M+3>>0]=Eb>>24;Eb=d[P>>0]|d[P+1>>0]<<8|d[P+2>>0]<<16|d[P+3>>0]<<24;a[O>>0]=Eb;a[O+1>>0]=Eb>>8;a[O+2>>0]=Eb>>16;a[O+3>>0]=Eb>>24;Eb=d[R>>0]|d[R+1>>0]<<8|d[R+2>>0]<<16|d[R+3>>0]<<24;a[Q>>0]=Eb;a[Q+1>>0]=Eb>>8;a[Q+2>>0]=Eb>>16;a[Q+3>>0]=Eb>>24;Eb=d[T>>0]|d[T+1>>0]<<8|d[T+2>>0]<<16|d[T+3>>0]<<24;a[S>>0]=Eb;a[S+1>>0]=Eb>>8;a[S+2>>0]=Eb>>16;a[S+3>>0]=Eb>>24;Eb=d[V>>0]|d[V+1>>0]<<8|d[V+2>>0]<<16|d[V+3>>0]<<24;a[U>>0]=Eb;a[U+1>>0]=Eb>>8;a[U+2>>0]=Eb>>16;a[U+3>>0]=Eb>>24;Eb=d[X>>0]|d[X+1>>0]<<8|d[X+2>>0]<<16|d[X+3>>0]<<24;a[W>>0]=Eb;a[W+1>>0]=Eb>>8;a[W+2>>0]=Eb>>16;a[W+3>>0]=Eb>>24;Eb=d[Z>>0]|d[Z+1>>0]<<8|d[Z+2>>0]<<16|d[Z+3>>0]<<24;a[Y>>0]=Eb;a[Y+1>>0]=Eb>>8;a[Y+2>>0]=Eb>>16;a[Y+3>>0]=Eb>>24;Eb=d[$>>0]|d[$+1>>0]<<8|d[$+2>>0]<<16|d[$+3>>0]<<24;a[_>>0]=Eb;a[_+1>>0]=Eb>>8;a[_+2>>0]=Eb>>16;a[_+3>>0]=Eb>>24;Eb=d[ba>>0]|d[ba+1>>0]<<8|d[ba+2>>0]<<16|d[ba+3>>0]<<24;a[aa>>0]=Eb;a[aa+1>>0]=Eb>>8;a[aa+2>>0]=Eb>>16;a[aa+3>>0]=Eb>>24;Eb=d[da>>0]|d[da+1>>0]<<8|d[da+2>>0]<<16|d[da+3>>0]<<24;a[ca>>0]=Eb;a[ca+1>>0]=Eb>>8;a[ca+2>>0]=Eb>>16;a[ca+3>>0]=Eb>>24;Eb=d[ga>>0]|d[ga+1>>0]<<8|d[ga+2>>0]<<16|d[ga+3>>0]<<24;a[fa>>0]=Eb;a[fa+1>>0]=Eb>>8;a[fa+2>>0]=Eb>>16;a[fa+3>>0]=Eb>>24;Eb=d[ia>>0]|d[ia+1>>0]<<8|d[ia+2>>0]<<16|d[ia+3>>0]<<24;a[ha>>0]=Eb;a[ha+1>>0]=Eb>>8;a[ha+2>>0]=Eb>>16;a[ha+3>>0]=Eb>>24;Eb=d[ka>>0]|d[ka+1>>0]<<8|d[ka+2>>0]<<16|d[ka+3>>0]<<24;a[ja>>0]=Eb;a[ja+1>>0]=Eb>>8;a[ja+2>>0]=Eb>>16;a[ja+3>>0]=Eb>>24;Eb=d[ma>>0]|d[ma+1>>0]<<8|d[ma+2>>0]<<16|d[ma+3>>0]<<24;a[la>>0]=Eb;a[la+1>>0]=Eb>>8;a[la+2>>0]=Eb>>16;a[la+3>>0]=Eb>>24;Eb=d[oa>>0]|d[oa+1>>0]<<8|d[oa+2>>0]<<16|d[oa+3>>0]<<24;a[na>>0]=Eb;a[na+1>>0]=Eb>>8;a[na+2>>0]=Eb>>16;a[na+3>>0]=Eb>>24;Eb=d[qa>>0]|d[qa+1>>0]<<8|d[qa+2>>0]<<16|d[qa+3>>0]<<24;a[pa>>0]=Eb;a[pa+1>>0]=Eb>>8;a[pa+2>>0]=Eb>>16;a[pa+3>>0]=Eb>>24;Eb=d[sa>>0]|d[sa+1>>0]<<8|d[sa+2>>0]<<16|d[sa+3>>0]<<24;a[ra>>0]=Eb;a[ra+1>>0]=Eb>>8;a[ra+2>>0]=Eb>>16;a[ra+3>>0]=Eb>>24;Eb=d[ua>>0]|d[ua+1>>0]<<8|d[ua+2>>0]<<16|d[ua+3>>0]<<24;a[ta>>0]=Eb;a[ta+1>>0]=Eb>>8;a[ta+2>>0]=Eb>>16;a[ta+3>>0]=Eb>>24;Eb=d[wa>>0]|d[wa+1>>0]<<8|d[wa+2>>0]<<16|d[wa+3>>0]<<24;a[va>>0]=Eb;a[va+1>>0]=Eb>>8;a[va+2>>0]=Eb>>16;a[va+3>>0]=Eb>>24;Eb=d[ya>>0]|d[ya+1>>0]<<8|d[ya+2>>0]<<16|d[ya+3>>0]<<24;a[xa>>0]=Eb;a[xa+1>>0]=Eb>>8;a[xa+2>>0]=Eb>>16;a[xa+3>>0]=Eb>>24;Eb=d[Aa>>0]|d[Aa+1>>0]<<8|d[Aa+2>>0]<<16|d[Aa+3>>0]<<24;a[za>>0]=Eb;a[za+1>>0]=Eb>>8;a[za+2>>0]=Eb>>16;a[za+3>>0]=Eb>>24;Eb=d[Ca>>0]|d[Ca+1>>0]<<8|d[Ca+2>>0]<<16|d[Ca+3>>0]<<24;a[Ba>>0]=Eb;a[Ba+1>>0]=Eb>>8;a[Ba+2>>0]=Eb>>16;a[Ba+3>>0]=Eb>>24;Eb=d[Ea>>0]|d[Ea+1>>0]<<8|d[Ea+2>>0]<<16|d[Ea+3>>0]<<24;a[Da>>0]=Eb;a[Da+1>>0]=Eb>>8;a[Da+2>>0]=Eb>>16;a[Da+3>>0]=Eb>>24;Eb=d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24;a[Fa>>0]=Eb;a[Fa+1>>0]=Eb>>8;a[Fa+2>>0]=Eb>>16;a[Fa+3>>0]=Eb>>24;Eb=d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24;a[Ha>>0]=Eb;a[Ha+1>>0]=Eb>>8;a[Ha+2>>0]=Eb>>16;a[Ha+3>>0]=Eb>>24;Eb=d[Ka>>0]|d[Ka+1>>0]<<8|d[Ka+2>>0]<<16|d[Ka+3>>0]<<24;a[Ja>>0]=Eb;a[Ja+1>>0]=Eb>>8;a[Ja+2>>0]=Eb>>16;a[Ja+3>>0]=Eb>>24;Eb=d[Ma>>0]|d[Ma+1>>0]<<8|d[Ma+2>>0]<<16|d[Ma+3>>0]<<24;a[La>>0]=Eb;a[La+1>>0]=Eb>>8;a[La+2>>0]=Eb>>16;a[La+3>>0]=Eb>>24;Eb=d[Oa>>0]|d[Oa+1>>0]<<8|d[Oa+2>>0]<<16|d[Oa+3>>0]<<24;a[Na>>0]=Eb;a[Na+1>>0]=Eb>>8;a[Na+2>>0]=Eb>>16;a[Na+3>>0]=Eb>>24;Eb=d[Qa>>0]|d[Qa+1>>0]<<8|d[Qa+2>>0]<<16|d[Qa+3>>0]<<24;a[Pa>>0]=Eb;a[Pa+1>>0]=Eb>>8;a[Pa+2>>0]=Eb>>16;a[Pa+3>>0]=Eb>>24;Eb=d[Sa>>0]|d[Sa+1>>0]<<8|d[Sa+2>>0]<<16|d[Sa+3>>0]<<24;a[Ra>>0]=Eb;a[Ra+1>>0]=Eb>>8;a[Ra+2>>0]=Eb>>16;a[Ra+3>>0]=Eb>>24;Eb=d[Ua>>0]|d[Ua+1>>0]<<8|d[Ua+2>>0]<<16|d[Ua+3>>0]<<24;a[Ta>>0]=Eb;a[Ta+1>>0]=Eb>>8;a[Ta+2>>0]=Eb>>16;a[Ta+3>>0]=Eb>>24;Eb=d[Wa>>0]|d[Wa+1>>0]<<8|d[Wa+2>>0]<<16|d[Wa+3>>0]<<24;a[Va>>0]=Eb;a[Va+1>>0]=Eb>>8;a[Va+2>>0]=Eb>>16;a[Va+3>>0]=Eb>>24;Eb=d[Ya>>0]|d[Ya+1>>0]<<8|d[Ya+2>>0]<<16|d[Ya+3>>0]<<24;a[Xa>>0]=Eb;a[Xa+1>>0]=Eb>>8;a[Xa+2>>0]=Eb>>16;a[Xa+3>>0]=Eb>>24;Eb=d[_a>>0]|d[_a+1>>0]<<8|d[_a+2>>0]<<16|d[_a+3>>0]<<24;a[Za>>0]=Eb;a[Za+1>>0]=Eb>>8;a[Za+2>>0]=Eb>>16;a[Za+3>>0]=Eb>>24}Eb=c[f>>2]|0;Fb=Eb+(i<<5)|0;Gb=c[Cb+(i*800|0)+788>>2]|0;if(m){n=s;Hb=Fb;o=n+16|0;do{a[n>>0]=a[Hb>>0]|0;n=n+1|0;Hb=Hb+1|0}while((n|0)<(o|0));Ib=Eb+(i<<5)+16|0;Jb=Ib;Kb=d[Jb>>0]|d[Jb+1>>0]<<8|d[Jb+2>>0]<<16|d[Jb+3>>0]<<24;Jb=Ib+4|0;Ib=d[Jb>>0]|d[Jb+1>>0]<<8|d[Jb+2>>0]<<16|d[Jb+3>>0]<<24;Jb=t;Lb=Jb;a[Lb>>0]=Kb;a[Lb+1>>0]=Kb>>8;a[Lb+2>>0]=Kb>>16;a[Lb+3>>0]=Kb>>24;Kb=Jb+4|0;a[Kb>>0]=Ib;a[Kb+1>>0]=Ib>>8;a[Kb+2>>0]=Ib>>16;a[Kb+3>>0]=Ib>>24;Ib=Eb+(i<<5)+24|0;Kb=Ib;Jb=d[Kb>>0]|d[Kb+1>>0]<<8|d[Kb+2>>0]<<16|d[Kb+3>>0]<<24;Kb=Ib+4|0;Ib=d[Kb>>0]|d[Kb+1>>0]<<8|d[Kb+2>>0]<<16|d[Kb+3>>0]<<24;Kb=u;Lb=Kb;a[Lb>>0]=Jb;a[Lb+1>>0]=Jb>>8;a[Lb+2>>0]=Jb>>16;a[Lb+3>>0]=Jb>>24;Jb=Kb+4|0;a[Jb>>0]=Ib;a[Jb+1>>0]=Ib>>8;a[Jb+2>>0]=Ib>>16;a[Jb+3>>0]=Ib>>24}a:do if(!(a[Cb+(i*800|0)+768>>0]|0)){Ib=a[Cb+(i*800|0)+769>>0]|0;Jb=Db?A:B;ea[c[9344+((Ib<<24>>24==0?Jb:Ib&255)<<2)>>2]&31](j);if(!Gb)Mb=Jb;else{Ib=Gb;Kb=0;while(1){Lb=Cb+(i*800|0)+(Kb<<4<<1)|0;Nb=j+(e[4112+(Kb<<1)>>1]|0)|0;switch((30?Ib>>>30:Ib)&3){case 3:{vd(Lb,Nb,0);break}case 2:{xd(Lb,Nb);break}case 1:{wd(Lb,Nb);break}default:{}}Kb=Kb+1|0;if((Kb|0)==16){Mb=Jb;break a}else Ib=Ib<<2}}}else{do if(m)if((i|0)<((c[p>>2]|0)+-1|0)){Ib=Fb+32|0;Jb=d[Ib>>0]|d[Ib+1>>0]<<8|d[Ib+2>>0]<<16|d[Ib+3>>0]<<24;a[v>>0]=Jb;a[v+1>>0]=Jb>>8;a[v+2>>0]=Jb>>16;a[v+3>>0]=Jb>>24;Ob=Jb;break}else{Jb=a[Eb+(i<<5)+15>>0]|0;Nf(v|0,Jb|0,4)|0;Ib=Jb&255;Jb=Ib<<8|Ib;Ob=Jb|Jb<<16;break}else Ob=c[v>>2]|0;while(0);c[x>>2]=Ob;c[y>>2]=Ob;c[z>>2]=Ob;Jb=Gb;Ib=0;while(1){Kb=j+(e[4112+(Ib<<1)>>1]|0)|0;ea[c[9376+((a[Cb+(i*800|0)+769+Ib>>0]&255)<<2)>>2]&31](Kb);Nb=Cb+(i*800|0)+(Ib<<4<<1)|0;switch((30?Jb>>>30:Jb)&3){case 3:{vd(Nb,Kb,0);break}case 2:{xd(Nb,Kb);break}case 1:{wd(Nb,Kb);break}default:{}}Ib=Ib+1|0;if((Ib|0)==16)break;else Jb=Jb<<2}Mb=Db?A:B}while(0);Db=c[Cb+(i*800|0)+792>>2]|0;Gb=a[Cb+(i*800|0)+785>>0]|0;Jb=9424+((Gb<<24>>24==0?Mb:Gb&255)<<2)|0;ea[c[Jb>>2]&31](k);ea[c[Jb>>2]&31](l);Jb=Cb+(i*800|0)+512|0;do if(Db&255|0)if(!(Db&170)){zd(Jb,k);break}else{yd(Jb,k);break}while(0);Jb=Cb+(i*800|0)+640|0;do if(Db&65280|0)if(!(Db&43520)){zd(Jb,l);break}else{yd(Jb,l);break}while(0);if((g|0)<((c[w>>2]|0)+-1|0)){n=Fb;Hb=C;o=n+16|0;do{a[n>>0]=a[Hb>>0]|0;n=n+1|0;Hb=Hb+1|0}while((n|0)<(o|0));Fb=D;Jb=Fb;Db=d[Jb>>0]|d[Jb+1>>0]<<8|d[Jb+2>>0]<<16|d[Jb+3>>0]<<24;Jb=Fb+4|0;Fb=d[Jb>>0]|d[Jb+1>>0]<<8|d[Jb+2>>0]<<16|d[Jb+3>>0]<<24;Jb=Eb+(i<<5)+16|0;Cb=Jb;a[Cb>>0]=Db;a[Cb+1>>0]=Db>>8;a[Cb+2>>0]=Db>>16;a[Cb+3>>0]=Db>>24;Db=Jb+4|0;a[Db>>0]=Fb;a[Db+1>>0]=Fb>>8;a[Db+2>>0]=Fb>>16;a[Db+3>>0]=Fb>>24;Fb=E;Db=Fb;Jb=d[Db>>0]|d[Db+1>>0]<<8|d[Db+2>>0]<<16|d[Db+3>>0]<<24;Db=Fb+4|0;Fb=d[Db>>0]|d[Db+1>>0]<<8|d[Db+2>>0]<<16|d[Db+3>>0]<<24;Db=Eb+(i<<5)+24|0;Cb=Db;a[Cb>>0]=Jb;a[Cb+1>>0]=Jb>>8;a[Cb+2>>0]=Jb>>16;a[Cb+3>>0]=Jb>>24;Jb=Db+4|0;a[Jb>>0]=Fb;a[Jb+1>>0]=Fb>>8;a[Jb+2>>0]=Fb>>16;a[Jb+3>>0]=Fb>>24}Fb=r(F,c[G>>2]|0)|0;Jb=c[h>>2]|0;Db=(c[I>>2]|0)+(i<<4)+Fb|0;Fb=i<<3;Cb=(c[J>>2]|0)+Fb|0;Gb=(c[K>>2]|0)+Fb|0;n=Db;Hb=j;o=n+16|0;do{a[n>>0]=a[Hb>>0]|0;n=n+1|0;Hb=Hb+1|0}while((n|0)<(o|0));n=Db+(c[G>>2]|0)|0;Hb=$a;o=n+16|0;do{a[n>>0]=a[Hb>>0]|0;n=n+1|0;Hb=Hb+1|0}while((n|0)<(o|0));n=Db+(c[G>>2]<<1)|0;Hb=ab;o=n+16|0;do{a[n>>0]=a[Hb>>0]|0;n=n+1|0;Hb=Hb+1|0}while((n|0)<(o|0));n=Db+((c[G>>2]|0)*3|0)|0;Hb=bb;o=n+16|0;do{a[n>>0]=a[Hb>>0]|0;n=n+1|0;Hb=Hb+1|0}while((n|0)<(o|0));n=Db+(c[G>>2]<<2)|0;Hb=cb;o=n+16|0;do{a[n>>0]=a[Hb>>0]|0;n=n+1|0;Hb=Hb+1|0}while((n|0)<(o|0));n=Db+((c[G>>2]|0)*5|0)|0;Hb=db;o=n+16|0;do{a[n>>0]=a[Hb>>0]|0;n=n+1|0;Hb=Hb+1|0}while((n|0)<(o|0));n=Db+((c[G>>2]|0)*6|0)|0;Hb=eb;o=n+16|0;do{a[n>>0]=a[Hb>>0]|0;n=n+1|0;Hb=Hb+1|0}while((n|0)<(o|0));n=Db+((c[G>>2]|0)*7|0)|0;Hb=fb;o=n+16|0;do{a[n>>0]=a[Hb>>0]|0;n=n+1|0;Hb=Hb+1|0}while((n|0)<(o|0));n=Db+(c[G>>2]<<3)|0;Hb=gb;o=n+16|0;do{a[n>>0]=a[Hb>>0]|0;n=n+1|0;Hb=Hb+1|0}while((n|0)<(o|0));n=Db+((c[G>>2]|0)*9|0)|0;Hb=hb;o=n+16|0;do{a[n>>0]=a[Hb>>0]|0;n=n+1|0;Hb=Hb+1|0}while((n|0)<(o|0));n=Db+((c[G>>2]|0)*10|0)|0;Hb=ib;o=n+16|0;do{a[n>>0]=a[Hb>>0]|0;n=n+1|0;Hb=Hb+1|0}while((n|0)<(o|0));n=Db+((c[G>>2]|0)*11|0)|0;Hb=jb;o=n+16|0;do{a[n>>0]=a[Hb>>0]|0;n=n+1|0;Hb=Hb+1|0}while((n|0)<(o|0));n=Db+((c[G>>2]|0)*12|0)|0;Hb=kb;o=n+16|0;do{a[n>>0]=a[Hb>>0]|0;n=n+1|0;Hb=Hb+1|0}while((n|0)<(o|0));n=Db+((c[G>>2]|0)*13|0)|0;Hb=lb;o=n+16|0;do{a[n>>0]=a[Hb>>0]|0;n=n+1|0;Hb=Hb+1|0}while((n|0)<(o|0));n=Db+((c[G>>2]|0)*14|0)|0;Hb=mb;o=n+16|0;do{a[n>>0]=a[Hb>>0]|0;n=n+1|0;Hb=Hb+1|0}while((n|0)<(o|0));n=Db+((c[G>>2]|0)*15|0)|0;Hb=nb;o=n+16|0;do{a[n>>0]=a[Hb>>0]|0;n=n+1|0;Hb=Hb+1|0}while((n|0)<(o|0));Db=r(Jb,H)|0;Eb=Cb+Db|0;Fb=Gb+Db|0;Db=k;Ib=Db;Kb=d[Ib>>0]|d[Ib+1>>0]<<8|d[Ib+2>>0]<<16|d[Ib+3>>0]<<24;Ib=Db+4|0;Db=d[Ib>>0]|d[Ib+1>>0]<<8|d[Ib+2>>0]<<16|d[Ib+3>>0]<<24;Ib=Eb;Nb=Ib;a[Nb>>0]=Kb;a[Nb+1>>0]=Kb>>8;a[Nb+2>>0]=Kb>>16;a[Nb+3>>0]=Kb>>24;Kb=Ib+4|0;a[Kb>>0]=Db;a[Kb+1>>0]=Db>>8;a[Kb+2>>0]=Db>>16;a[Kb+3>>0]=Db>>24;Db=l;Kb=Db;Ib=d[Kb>>0]|d[Kb+1>>0]<<8|d[Kb+2>>0]<<16|d[Kb+3>>0]<<24;Kb=Db+4|0;Db=d[Kb>>0]|d[Kb+1>>0]<<8|d[Kb+2>>0]<<16|d[Kb+3>>0]<<24;Kb=Fb;Nb=Kb;a[Nb>>0]=Ib;a[Nb+1>>0]=Ib>>8;a[Nb+2>>0]=Ib>>16;a[Nb+3>>0]=Ib>>24;Ib=Kb+4|0;a[Ib>>0]=Db;a[Ib+1>>0]=Db>>8;a[Ib+2>>0]=Db>>16;a[Ib+3>>0]=Db>>24;Db=ob;Ib=Db;Kb=d[Ib>>0]|d[Ib+1>>0]<<8|d[Ib+2>>0]<<16|d[Ib+3>>0]<<24;Ib=Db+4|0;Db=d[Ib>>0]|d[Ib+1>>0]<<8|d[Ib+2>>0]<<16|d[Ib+3>>0]<<24;Ib=Eb+(c[h>>2]|0)|0;Nb=Ib;a[Nb>>0]=Kb;a[Nb+1>>0]=Kb>>8;a[Nb+2>>0]=Kb>>16;a[Nb+3>>0]=Kb>>24;Kb=Ib+4|0;a[Kb>>0]=Db;a[Kb+1>>0]=Db>>8;a[Kb+2>>0]=Db>>16;a[Kb+3>>0]=Db>>24;Db=pb;Kb=Db;Ib=d[Kb>>0]|d[Kb+1>>0]<<8|d[Kb+2>>0]<<16|d[Kb+3>>0]<<24;Kb=Db+4|0;Db=d[Kb>>0]|d[Kb+1>>0]<<8|d[Kb+2>>0]<<16|d[Kb+3>>0]<<24;Kb=Fb+(c[h>>2]|0)|0;Nb=Kb;a[Nb>>0]=Ib;a[Nb+1>>0]=Ib>>8;a[Nb+2>>0]=Ib>>16;a[Nb+3>>0]=Ib>>24;Ib=Kb+4|0;a[Ib>>0]=Db;a[Ib+1>>0]=Db>>8;a[Ib+2>>0]=Db>>16;a[Ib+3>>0]=Db>>24;Db=qb;Ib=Db;Kb=d[Ib>>0]|d[Ib+1>>0]<<8|d[Ib+2>>0]<<16|d[Ib+3>>0]<<24;Ib=Db+4|0;Db=d[Ib>>0]|d[Ib+1>>0]<<8|d[Ib+2>>0]<<16|d[Ib+3>>0]<<24;Ib=Eb+(c[h>>2]<<1)|0;Nb=Ib;a[Nb>>0]=Kb;a[Nb+1>>0]=Kb>>8;a[Nb+2>>0]=Kb>>16;a[Nb+3>>0]=Kb>>24;Kb=Ib+4|0;a[Kb>>0]=Db;a[Kb+1>>0]=Db>>8;a[Kb+2>>0]=Db>>16;a[Kb+3>>0]=Db>>24;Db=rb;Kb=Db;Ib=d[Kb>>0]|d[Kb+1>>0]<<8|d[Kb+2>>0]<<16|d[Kb+3>>0]<<24;Kb=Db+4|0;Db=d[Kb>>0]|d[Kb+1>>0]<<8|d[Kb+2>>0]<<16|d[Kb+3>>0]<<24;Kb=Fb+(c[h>>2]<<1)|0;Nb=Kb;a[Nb>>0]=Ib;a[Nb+1>>0]=Ib>>8;a[Nb+2>>0]=Ib>>16;a[Nb+3>>0]=Ib>>24;Ib=Kb+4|0;a[Ib>>0]=Db;a[Ib+1>>0]=Db>>8;a[Ib+2>>0]=Db>>16;a[Ib+3>>0]=Db>>24;Db=sb;Ib=Db;Kb=d[Ib>>0]|d[Ib+1>>0]<<8|d[Ib+2>>0]<<16|d[Ib+3>>0]<<24;Ib=Db+4|0;Db=d[Ib>>0]|d[Ib+1>>0]<<8|d[Ib+2>>0]<<16|d[Ib+3>>0]<<24;Ib=Eb+((c[h>>2]|0)*3|0)|0;Nb=Ib;a[Nb>>0]=Kb;a[Nb+1>>0]=Kb>>8;a[Nb+2>>0]=Kb>>16;a[Nb+3>>0]=Kb>>24;Kb=Ib+4|0;a[Kb>>0]=Db;a[Kb+1>>0]=Db>>8;a[Kb+2>>0]=Db>>16;a[Kb+3>>0]=Db>>24;Db=tb;Kb=Db;Ib=d[Kb>>0]|d[Kb+1>>0]<<8|d[Kb+2>>0]<<16|d[Kb+3>>0]<<24;Kb=Db+4|0;Db=d[Kb>>0]|d[Kb+1>>0]<<8|d[Kb+2>>0]<<16|d[Kb+3>>0]<<24;Kb=Fb+((c[h>>2]|0)*3|0)|0;Nb=Kb;a[Nb>>0]=Ib;a[Nb+1>>0]=Ib>>8;a[Nb+2>>0]=Ib>>16;a[Nb+3>>0]=Ib>>24;Ib=Kb+4|0;a[Ib>>0]=Db;a[Ib+1>>0]=Db>>8;a[Ib+2>>0]=Db>>16;a[Ib+3>>0]=Db>>24;Db=ub;Ib=Db;Kb=d[Ib>>0]|d[Ib+1>>0]<<8|d[Ib+2>>0]<<16|d[Ib+3>>0]<<24;Ib=Db+4|0;Db=d[Ib>>0]|d[Ib+1>>0]<<8|d[Ib+2>>0]<<16|d[Ib+3>>0]<<24;Ib=Eb+(c[h>>2]<<2)|0;Nb=Ib;a[Nb>>0]=Kb;a[Nb+1>>0]=Kb>>8;a[Nb+2>>0]=Kb>>16;a[Nb+3>>0]=Kb>>24;Kb=Ib+4|0;a[Kb>>0]=Db;a[Kb+1>>0]=Db>>8;a[Kb+2>>0]=Db>>16;a[Kb+3>>0]=Db>>24;Db=vb;Kb=Db;Ib=d[Kb>>0]|d[Kb+1>>0]<<8|d[Kb+2>>0]<<16|d[Kb+3>>0]<<24;Kb=Db+4|0;Db=d[Kb>>0]|d[Kb+1>>0]<<8|d[Kb+2>>0]<<16|d[Kb+3>>0]<<24;Kb=Fb+(c[h>>2]<<2)|0;Nb=Kb;a[Nb>>0]=Ib;a[Nb+1>>0]=Ib>>8;a[Nb+2>>0]=Ib>>16;a[Nb+3>>0]=Ib>>24;Ib=Kb+4|0;a[Ib>>0]=Db;a[Ib+1>>0]=Db>>8;a[Ib+2>>0]=Db>>16;a[Ib+3>>0]=Db>>24;Db=wb;Ib=Db;Kb=d[Ib>>0]|d[Ib+1>>0]<<8|d[Ib+2>>0]<<16|d[Ib+3>>0]<<24;Ib=Db+4|0;Db=d[Ib>>0]|d[Ib+1>>0]<<8|d[Ib+2>>0]<<16|d[Ib+3>>0]<<24;Ib=Eb+((c[h>>2]|0)*5|0)|0;Nb=Ib;a[Nb>>0]=Kb;a[Nb+1>>0]=Kb>>8;a[Nb+2>>0]=Kb>>16;a[Nb+3>>0]=Kb>>24;Kb=Ib+4|0;a[Kb>>0]=Db;a[Kb+1>>0]=Db>>8;a[Kb+2>>0]=Db>>16;a[Kb+3>>0]=Db>>24;Db=xb;Kb=Db;Ib=d[Kb>>0]|d[Kb+1>>0]<<8|d[Kb+2>>0]<<16|d[Kb+3>>0]<<24;Kb=Db+4|0;Db=d[Kb>>0]|d[Kb+1>>0]<<8|d[Kb+2>>0]<<16|d[Kb+3>>0]<<24;Kb=Fb+((c[h>>2]|0)*5|0)|0;Nb=Kb;a[Nb>>0]=Ib;a[Nb+1>>0]=Ib>>8;a[Nb+2>>0]=Ib>>16;a[Nb+3>>0]=Ib>>24;Ib=Kb+4|0;a[Ib>>0]=Db;a[Ib+1>>0]=Db>>8;a[Ib+2>>0]=Db>>16;a[Ib+3>>0]=Db>>24;Db=yb;Ib=Db;Kb=d[Ib>>0]|d[Ib+1>>0]<<8|d[Ib+2>>0]<<16|d[Ib+3>>0]<<24;Ib=Db+4|0;Db=d[Ib>>0]|d[Ib+1>>0]<<8|d[Ib+2>>0]<<16|d[Ib+3>>0]<<24;Ib=Eb+((c[h>>2]|0)*6|0)|0;Nb=Ib;a[Nb>>0]=Kb;a[Nb+1>>0]=Kb>>8;a[Nb+2>>0]=Kb>>16;a[Nb+3>>0]=Kb>>24;Kb=Ib+4|0;a[Kb>>0]=Db;a[Kb+1>>0]=Db>>8;a[Kb+2>>0]=Db>>16;a[Kb+3>>0]=Db>>24;Db=zb;Kb=Db;Ib=d[Kb>>0]|d[Kb+1>>0]<<8|d[Kb+2>>0]<<16|d[Kb+3>>0]<<24;Kb=Db+4|0;Db=d[Kb>>0]|d[Kb+1>>0]<<8|d[Kb+2>>0]<<16|d[Kb+3>>0]<<24;Kb=Fb+((c[h>>2]|0)*6|0)|0;Nb=Kb;a[Nb>>0]=Ib;a[Nb+1>>0]=Ib>>8;a[Nb+2>>0]=Ib>>16;a[Nb+3>>0]=Ib>>24;Ib=Kb+4|0;a[Ib>>0]=Db;a[Ib+1>>0]=Db>>8;a[Ib+2>>0]=Db>>16;a[Ib+3>>0]=Db>>24;Db=Ab;Ib=Db;Kb=d[Ib>>0]|d[Ib+1>>0]<<8|d[Ib+2>>0]<<16|d[Ib+3>>0]<<24;Ib=Db+4|0;Db=d[Ib>>0]|d[Ib+1>>0]<<8|d[Ib+2>>0]<<16|d[Ib+3>>0]<<24;Ib=Eb+((c[h>>2]|0)*7|0)|0;Eb=Ib;a[Eb>>0]=Kb;a[Eb+1>>0]=Kb>>8;a[Eb+2>>0]=Kb>>16;a[Eb+3>>0]=Kb>>24;Kb=Ib+4|0;a[Kb>>0]=Db;a[Kb+1>>0]=Db>>8;a[Kb+2>>0]=Db>>16;a[Kb+3>>0]=Db>>24;Db=Bb;Kb=Db;Ib=d[Kb>>0]|d[Kb+1>>0]<<8|d[Kb+2>>0]<<16|d[Kb+3>>0]<<24;Kb=Db+4|0;Db=d[Kb>>0]|d[Kb+1>>0]<<8|d[Kb+2>>0]<<16|d[Kb+3>>0]<<24;Kb=Fb+((c[h>>2]|0)*7|0)|0;Fb=Kb;a[Fb>>0]=Ib;a[Fb+1>>0]=Ib>>8;a[Fb+2>>0]=Ib>>16;a[Fb+3>>0]=Ib>>24;Ib=Kb+4|0;a[Ib>>0]=Db;a[Ib+1>>0]=Db>>8;a[Ib+2>>0]=Db>>16;a[Ib+3>>0]=Db>>24;i=i+1|0}while((i|0)<(c[p>>2]|0));return}function dd(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Z=0,_=0,$=0,ba=0;f=Y;Y=Y+64|0;g=f;h=b+160|0;i=c[h>>2]|0;j=b+2308|0;k=d[8708+(c[j>>2]|0)>>0]|0;l=b+2280|0;m=c[l>>2]|0;n=r(m,k)|0;o=b+2284|0;p=c[o>>2]|0;q=r(1?k>>>1:k,p)|0;s=r(m,i<<4)|0;m=r(p,i<<3)|0;p=b+2268|0;t=0-n|0;u=(c[p>>2]|0)+t+s|0;v=b+2272|0;w=0-q|0;x=(c[v>>2]|0)+w+m|0;y=b+2276|0;z=(c[y>>2]|0)+w+m|0;A=b+164|0;B=c[A>>2]|0;C=(B|0)==0;D=(B|0)>=((c[b+308>>2]|0)+-1|0);if((c[b+148>>2]|0)==2)cd(b,h);if(c[b+168>>2]|0?(E=c[b+296>>2]|0,F=b+304|0,(E|0)<(c[F>>2]|0)):0){G=b+172|0;H=(c[A>>2]|0)>0;A=E;do{E=c[h>>2]|0;I=c[l>>2]|0;J=c[G>>2]|0;K=(c[p>>2]|0)+(r(E<<4,I)|0)+(A<<4)|0;L=d[J+(A<<2)+1>>0]|0;M=a[J+(A<<2)>>0]|0;N=M&255;do if(M<<24>>24)if((c[j>>2]|0)==1){if((A|0)>0)Gd(K,I,N+4|0);O=J+(A<<2)+2|0;if(a[O>>0]|0)Id(K,I,N);if(H)Fd(K,I,N+4|0);if(!(a[O>>0]|0))break;Hd(K,I,N);break}else{O=c[o>>2]|0;P=r(O,E<<3)|0;Q=A<<3;R=(c[v>>2]|0)+P+Q|0;S=(c[y>>2]|0)+P+Q|0;Q=d[J+(A<<2)+3>>0]|0;P=N+4|0;if((A|0)>0){Cd(K,I,P,L,Q);Kd(R,S,O,P,L,Q)}T=J+(A<<2)+2|0;if(a[T>>0]|0){Jd(K,I,N,L,Q);Ld(R,S,O,N,L,Q)}if(H){Ad(K,I,P,L,Q);Dd(R,S,O,P,L,Q)}if(!(a[T>>0]|0))break;Bd(K,I,N,L,Q);Ed(R,S,O,N,L,Q);break}while(0);A=A+1|0}while((A|0)<(c[F>>2]|0))}if(c[b+540>>2]|0?(F=c[b+296>>2]|0,A=b+304|0,H=c[A>>2]|0,(F|0)<(H|0)):0){j=b+176|0;G=b+544|0;L=b+548|0;N=F;F=H;while(1){H=c[o>>2]|0;I=(c[j>>2]|0)+(N*800|0)+796|0;K=a[I>>0]|0;if((K&255)>3){J=K&255;K=c[v>>2]|0;E=r(c[h>>2]<<3,H)|0;M=c[y>>2]|0;Q=0;O=c[G>>2]|0;S=c[L>>2]|0;do{R=b+552+(O<<2)|0;T=(c[R>>2]|0)-(c[b+552+(S<<2)>>2]|0)|0;c[R>>2]=T&2147483647;R=(c[G>>2]|0)+1|0;O=(R|0)==55?0:R;c[G>>2]=O;R=(c[L>>2]|0)+1|0;S=(R|0)==55?0:R;c[L>>2]=S;R=T<<1;T=r(24?R>>24:R,J)|0;a[g+Q>>0]=(8?T>>>8:T)+128;Q=Q+1|0}while((Q|0)!=64);Q=N<<3;ie(g,K+E+Q|0,H);J=d[I>>0]|0;S=0;O=c[G>>2]|0;T=c[L>>2]|0;do{R=b+552+(O<<2)|0;P=(c[R>>2]|0)-(c[b+552+(T<<2)>>2]|0)|0;c[R>>2]=P&2147483647;R=(c[G>>2]|0)+1|0;O=(R|0)==55?0:R;c[G>>2]=O;R=(c[L>>2]|0)+1|0;T=(R|0)==55?0:R;c[L>>2]=T;R=P<<1;P=r(24?R>>24:R,J)|0;a[g+S>>0]=(8?P>>>8:P)+128;S=S+1|0}while((S|0)!=64);ie(g,M+E+Q|0,H);U=c[A>>2]|0}else U=F;N=N+1|0;if((N|0)>=(U|0))break;else F=U}}U=e+44|0;if(c[U>>2]|0){F=B<<4;if(C){c[e+20>>2]=(c[p>>2]|0)+s;c[e+24>>2]=(c[v>>2]|0)+m;V=0;W=(c[y>>2]|0)+m|0}else{c[e+20>>2]=u;c[e+24>>2]=x;V=F-k|0;W=z}c[e+28>>2]=W;W=F+16+(D?0:0-k|0)|0;k=c[e+88>>2]|0;F=(W|0)>(k|0)?k:W;W=e+104|0;c[W>>2]=0;if((c[b+2348>>2]|0)!=0&(F|0)>(V|0)){k=ua(b,e,V,F-V|0)|0;c[W>>2]=k;if(!k){X=md(b,3,8711)|0;Y=f;return X|0}else Z=k}else Z=0;k=c[e+84>>2]|0;if((k|0)>(V|0)){m=k-V|0;s=r(c[l>>2]|0,m)|0;C=e+20|0;c[C>>2]=(c[C>>2]|0)+s;s=r(c[o>>2]|0,1?m>>1:m)|0;C=e+24|0;c[C>>2]=(c[C>>2]|0)+s;C=e+28|0;c[C>>2]=(c[C>>2]|0)+s;if(!Z){_=k;$=0}else{s=Z+(r(c[e>>2]|0,m)|0)|0;c[W>>2]=s;_=k;$=s}}else{_=V;$=Z}if((F|0)>(_|0)){Z=c[e+76>>2]|0;V=e+20|0;c[V>>2]=(c[V>>2]|0)+Z;V=1?Z>>1:Z;s=e+24|0;c[s>>2]=(c[s>>2]|0)+V;s=e+28|0;c[s>>2]=(c[s>>2]|0)+V;if($|0)c[W>>2]=$+Z;c[e+8>>2]=_-k;c[e+12>>2]=(c[e+80>>2]|0)-Z;c[e+16>>2]=F-_;ba=aa[c[U>>2]&7](e)|0}else ba=1}else ba=1;if(D|(i+1|0)!=(c[b+156>>2]|0)){X=ba;Y=f;return X|0}Lf((c[p>>2]|0)+t|0,u+(c[l>>2]<<4)|0,n|0)|0;Lf((c[v>>2]|0)+w|0,x+(c[o>>2]<<3)|0,q|0)|0;Lf((c[y>>2]|0)+w|0,z+(c[o>>2]<<3)|0,q|0)|0;X=ba;Y=f;return X|0}function ed(){return 8140}function fd(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=0;c[a+20>>2]=0;return}function gd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;c[b>>2]=0;d=a+4|0;e=c[d>>2]|0;switch(e|0){case 0:{f=va(1,0,80)|0;c[a>>2]=f;if(!f){g=0;return g|0}do if(!(Se(f,0)|0)){h=f+28|0;if(Q(h|0,0)|0){Ve(f)|0;break}Te(f)|0;if(T(f+76|0,0,6,a|0)|0){Ue(f)|0;Ve(f)|0;P(h|0)|0;break}c[d>>2]=1;Ue(f)|0;g=1;return g|0}while(0);pa(f);c[a>>2]=0;g=0;return g|0}case 1:{g=e;return g|0}default:{e=c[a>>2]|0;if(!e){g=1;return g|0}Te(e)|0;if((c[d>>2]|0)>>>0>=2){a=e+28|0;do S(a|0,e|0)|0;while((c[d>>2]|0)!=1)}Ue(e)|0;g=(c[b>>2]|0)==0&1;return g|0}}return 0}function hd(a){a=a|0;var b=0,d=0,e=0;b=c[a>>2]|0;if(b|0){Te(b)|0;d=a+4|0;if((c[d>>2]|0)>>>0>=2){e=b+28|0;do S(e|0,b|0)|0;while((c[d>>2]|0)!=1)}Ue(b)|0}return (c[a+20>>2]|0)==0|0}function id(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a>>2]|0;if(!b)return;Te(b)|0;d=a+4|0;switch(c[d>>2]|0){case 0:break;case 1:{e=b+28|0;f=6;break}default:{a=b+28|0;do S(a|0,b|0)|0;while((c[d>>2]|0)!=1);e=a;f=6}}if((f|0)==6){c[d>>2]=2;R(e|0)|0}Ue(b)|0;return}function jd(a){a=a|0;var b=0,d=0;b=c[a+8>>2]|0;if(!b)return;d=(ba[b&31](c[a+12>>2]|0,c[a+16>>2]|0)|0)==0&1;b=a+20|0;c[b>>2]=c[b>>2]|d;return}function kd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=c[a>>2]|0;if(!b)return;Te(b)|0;d=a+4|0;switch(c[d>>2]|0){case 0:break;case 1:{e=b+28|0;f=6;break}default:{g=b+28|0;do S(g|0,b|0)|0;while((c[d>>2]|0)!=1);e=g;f=6}}if((f|0)==6){c[d>>2]=0;R(e|0)|0}Ue(b)|0;U(c[b+76>>2]|0,0)|0;Ve(b)|0;P(b+28|0)|0;pa(b);c[a>>2]=0;return}function ld(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a>>2]|0;d=a+4|0;e=b+28|0;a:while(1){Te(b)|0;b:while(1){switch(c[d>>2]|0){case 0:{break a;break}case 2:{f=5;break b;break}case 1:break;default:{f=7;break b}}S(e|0,b|0)|0}if((f|0)==5){f=0;ea[c[8156>>2]&31](a);c[d>>2]=1;R(e|0)|0;Ue(b)|0}else if((f|0)==7){f=0;R(e|0)|0;Ue(b)|0}}R(e|0)|0;Ue(b)|0;return 0}function md(a,b,d){a=a|0;b=b|0;d=d|0;if(c[a>>2]|0)return 0;c[a>>2]=b;c[a+8>>2]=d;c[a+4>>2]=0;return 0}function nd(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;f=c[e+48>>2]|0;if(f|0?(aa[f&7](e)|0)==0:0){md(b,6,8740)|0;g=c[b>>2]|0;return g|0}f=b+2308|0;if(!(c[e+68>>2]|0)){h=c[f>>2]|0;i=d[8708+h>>0]|0;if((h|0)==2){c[b+296>>2]=0;j=i;k=2;l=b+300|0;m=11}else{n=h;o=i;m=8}}else{c[f>>2]=0;n=0;o=0;m=8}if((m|0)==8){f=(c[e+76>>2]|0)-o|0;i=b+296|0;c[i>>2]=4?f>>4:f;h=(c[e+84>>2]|0)-o|0;p=b+300|0;c[p>>2]=4?h>>4:h;if((f|0)<0)c[i>>2]=0;if((h|0)<0){j=o;k=n;l=p;m=11}else{q=o;r=n}}if((m|0)==11){c[l>>2]=0;q=j;r=k}k=q+15|0;q=k+(c[e+88>>2]|0)|0;j=4?q>>4:q;q=b+308|0;c[q>>2]=j;l=k+(c[e+80>>2]|0)|0;e=4?l>>4:l;l=c[b+288>>2]|0;c[b+304>>2]=(e|0)>(l|0)?l:e;e=c[b+292>>2]|0;if((j|0)>(e|0))c[q>>2]=e;if((r|0)<=0){g=0;return g|0}r=b+60|0;e=b+68|0;q=b+72|0;j=b+64|0;l=b+88|0;k=b+112|0;m=(c[b+104>>2]|0)==0;n=0;do{if(!m){o=a[b+120+n>>0]|0;if(!(c[k>>2]|0))s=(c[r>>2]|0)+o|0;else s=o}else s=c[r>>2]|0;if(c[e>>2]|0){o=(c[q>>2]|0)+s|0;p=(o|0)<63?o:63;h=(p|0)>0?p:0;if((o|0)>0){p=c[j>>2]|0;i=(p|0)>4?2:1;f=i?h>>>i:h;i=9-p|0;t=(p|0)>0?((f|0)>(i|0)?i:f):h;f=(t|0)>1?t:1;a[b+2312+(n<<3)+1>>0]=f;a[b+2312+(n<<3)+3>>0]=(h|0)>39?2:(h|0)>14&1;u=f+(h<<1)&255}else u=0;a[b+2312+(n<<3)>>0]=u;a[b+2312+(n<<3)+2>>0]=0;h=(c[l>>2]|0)+o|0;o=(h|0)<63?h:63;f=(o|0)>0?o:0;if((h|0)>0){h=c[j>>2]|0;o=(h|0)>4?2:1;t=o?f>>>o:f;o=9-h|0;i=(h|0)>0?((t|0)>(o|0)?o:t):f;t=(i|0)>1?i:1;a[b+2312+(n<<3)+5>>0]=t;a[b+2312+(n<<3)+7>>0]=(f|0)>39?2:(f|0)>14&1;v=t+(f<<1)&255}else v=0}else{f=(s|0)<63?s:63;t=(f|0)>0?f:0;if((s|0)>0){f=c[j>>2]|0;i=(f|0)>4?2:1;o=i?t>>>i:t;i=9-f|0;h=(f|0)>0?((o|0)>(i|0)?i:o):t;o=(h|0)>1?h:1;h=o&255;a[b+2312+(n<<3)+1>>0]=h;i=(t|0)>39?2:(t|0)>14&1;a[b+2312+(n<<3)+3>>0]=i;a[b+2312+(n<<3)+5>>0]=h;a[b+2312+(n<<3)+7>>0]=i;w=o+(t<<1)&255}else w=0;a[b+2312+(n<<3)>>0]=w;a[b+2312+(n<<3)+2>>0]=0;v=w}a[b+2312+(n<<3)+4>>0]=v;a[b+2312+(n<<3)+6>>0]=1;n=n+1|0}while((n|0)!=4);g=0;return g|0}function od(a,b){a=a|0;b=b|0;var d=0,e=0;if((c[a+148>>2]|0)>0){d=(ed()|0)+8|0;e=aa[c[d>>2]&7](a+124|0)|0}else e=1;a=c[b+52>>2]|0;if(!a)return e|0;ea[a&31](b);return e|0}function pd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(!a)return 0;else return ((c[a+40>>2]|0)==0?0:(d|0)>511?2:0)|0;return 0}function qd(a,b){a=a|0;b=b|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;f=a+152|0;c[f>>2]=0;g=a+148|0;do if((c[g>>2]|0)>0){h=(ed()|0)+4|0;if(aa[c[h>>2]&7](a+124|0)|0){c[a+136>>2]=a;c[a+140>>2]=a+180;c[a+132>>2]=20;h=(c[a+2308>>2]|0)>0?3:2;c[a+156>>2]=h;i=h;break}if(!(md(a,1,8759)|0)){j=0;return j|0}else{i=c[a+156>>2]|0;break}}else{c[a+156>>2]=1;i=1}while(0);h=c[a+288>>2]|0;k=h<<2;l=h<<5;m=(h<<1)+2|0;n=a+2308|0;o=c[n>>2]|0;p=c[g>>2]|0;q=r((p|0)>0?2:1,k)|0;s=(o|0)>0?q:0;q=r(h*800|0,(p|0)==2?2:1)|0;t=i<<4;u=r(((t+(d[8708+o>>0]|0)|0)*3|0)/2|0,l)|0;if(!(c[a+2348>>2]|0)){w=0;x=0}else{o=Cf(e[a+50>>1]|0|0,0,e[a+48>>1]|0|0,0)|0;w=o;x=v()|0}o=Df(l|0,0,863,0)|0;y=Df(o|0,v()|0,k|0,0)|0;o=Df(y|0,v()|0,m|0,0)|0;y=Df(o|0,v()|0,q|0,0)|0;o=Df(y|0,v()|0,s|0,0)|0;y=Df(o|0,v()|0,u|0,0)|0;o=Df(y|0,v()|0,w|0,x|0)|0;y=v()|0;if(!((o|0)==(o|0)&(y|0)==0)){j=0;return j|0}z=a+2292|0;A=a+2288|0;B=c[A>>2]|0;do if(y>>>0>0|((y|0)==0?o>>>0>(c[z>>2]|0)>>>0:0)){pa(B);c[z>>2]=0;C=wa(o,y,1)|0;c[A>>2]=C;if(C|0){c[z>>2]=o;D=c[g>>2]|0;E=C;F=13;break}if(!(md(a,1,8789)|0)){j=0;return j|0}else{G=a+2276|0;H=a+2280|0;I=a+2284|0;J=a+2268|0;K=a+2272|0;break}}else{D=p;E=B;F=13}while(0);if((F|0)==13){F=a+2244|0;c[F>>2]=E;B=E+k|0;c[a+2252>>2]=B;E=B+l|0;l=E+2|0;c[a+2256>>2]=l;B=E+m|0;E=(s|0)==0?0:B;c[a+2260>>2]=E;c[a+160>>2]=0;c[a+172>>2]=(D|0)>0?E+(h<<2)|0:E;E=B+s+31&-32;c[a+2264>>2]=E;s=E+832|0;c[a+2304>>2]=s;E=a+176|0;c[E>>2]=s;if((D|0)==2)c[E>>2]=s+(h*800|0);E=s+q|0;q=h<<4;s=a+2280|0;c[s>>2]=q;D=h<<3;h=a+2284|0;c[h>>2]=D;B=d[8708+(c[n>>2]|0)>>0]|0;n=r(q,B)|0;p=r(1?B>>>1:B,D)|0;B=E+n|0;n=a+2268|0;c[n>>2]=B;g=B+(r(q,t)|0)+p|0;t=a+2272|0;c[t>>2]=g;q=g+(r(i<<3,D)|0)+p|0;p=a+2276|0;c[p>>2]=q;c[f>>2]=0;c[a+2364>>2]=(w|0)==0&(x|0)==0?0:E+u|0;Nf(l+-2|0,0,m|0)|0;rd(a);Nf(c[F>>2]|0,0,k|0)|0;G=p;H=s;I=h;J=n;K=t}c[b+8>>2]=0;c[b+20>>2]=c[J>>2];c[b+24>>2]=c[K>>2];c[b+28>>2]=c[G>>2];c[b+32>>2]=c[H>>2];c[b+36>>2]=c[I>>2];c[b+104>>2]=0;sd();j=1;return j|0}function rd(b){b=b|0;var d=0;d=c[b+2256>>2]|0;a[d+-2>>0]=0;a[d+-1>>0]=0;c[b+2248>>2]=0;c[b+2296>>2]=0;return}function sd(){var a=0;if(Te(10140)|0)return;if(!(c[2041]|0))a=0;else{c[2344]=6;c[2345]=7;c[2346]=8;c[2348]=9;c[2350]=10;c[2347]=11;c[2349]=12;c[2351]=13;c[2352]=14;c[2353]=15;c[2336]=16;c[2337]=17;c[2338]=18;c[2339]=19;c[2340]=20;c[2341]=21;c[2342]=22;c[2356]=23;c[2357]=24;c[2358]=25;c[2359]=26;c[2360]=27;c[2361]=28;c[2362]=29;a=c[2485]|0}c[2041]=a;Ue(10140)|0;return}function td(){return}function ud(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;e=Y;Y=Y+64|0;f=e;g=b[a>>1]|0;h=b[a+24>>1]|0;i=h+g|0;j=b[a+8>>1]|0;k=b[a+16>>1]|0;l=k+j|0;m=j-k|0;k=g-h|0;h=l+i|0;c[f>>2]=h;g=f+32|0;c[g>>2]=i-l;l=f+16|0;c[l>>2]=m+k;i=f+48|0;c[i>>2]=k-m;m=b[a+2>>1]|0;k=b[a+26>>1]|0;j=k+m|0;n=b[a+10>>1]|0;o=b[a+18>>1]|0;p=o+n|0;q=n-o|0;o=m-k|0;k=p+j|0;c[f+4>>2]=k;m=f+36|0;c[m>>2]=j-p;p=q+o|0;c[f+20>>2]=p;j=f+52|0;c[j>>2]=o-q;q=b[a+4>>1]|0;o=b[a+28>>1]|0;n=o+q|0;r=b[a+12>>1]|0;s=b[a+20>>1]|0;t=s+r|0;u=r-s|0;s=q-o|0;o=t+n|0;c[f+8>>2]=o;q=n-t|0;c[f+40>>2]=q;t=u+s|0;c[f+24>>2]=t;n=f+56|0;c[n>>2]=s-u;u=b[a+6>>1]|0;s=b[a+30>>1]|0;r=s+u|0;v=b[a+14>>1]|0;w=b[a+22>>1]|0;a=w+v|0;x=v-w|0;w=u-s|0;s=a+r|0;c[f+12>>2]=s;u=r-a|0;c[f+44>>2]=u;a=x+w|0;c[f+28>>2]=a;r=w-x|0;c[f+60>>2]=r;f=h+3|0;h=f+s|0;x=o+k|0;w=k-o|0;o=f-s|0;s=x+h|0;b[d>>1]=3?s>>>3:s;s=w+o|0;b[d+32>>1]=3?s>>>3:s;s=h-x|0;b[d+64>>1]=3?s>>>3:s;s=o-w|0;b[d+96>>1]=3?s>>>3:s;s=(c[l>>2]|0)+3|0;l=s+a|0;w=t+p|0;o=p-t|0;t=s-a|0;a=w+l|0;b[d+128>>1]=3?a>>>3:a;a=o+t|0;b[d+160>>1]=3?a>>>3:a;a=l-w|0;b[d+192>>1]=3?a>>>3:a;a=t-o|0;b[d+224>>1]=3?a>>>3:a;a=(c[g>>2]|0)+3|0;g=a+u|0;o=c[m>>2]|0;m=q+o|0;t=o-q|0;q=a-u|0;u=m+g|0;b[d+256>>1]=3?u>>>3:u;u=t+q|0;b[d+288>>1]=3?u>>>3:u;u=g-m|0;b[d+320>>1]=3?u>>>3:u;u=q-t|0;b[d+352>>1]=3?u>>>3:u;u=(c[i>>2]|0)+3|0;i=u+r|0;t=c[j>>2]|0;j=c[n>>2]|0;n=j+t|0;q=t-j|0;j=u-r|0;r=n+i|0;b[d+384>>1]=3?r>>>3:r;r=q+j|0;b[d+416>>1]=3?r>>>3:r;r=i-n|0;b[d+448>>1]=3?r>>>3:r;r=j-q|0;b[d+480>>1]=3?r>>>3:r;Y=e;return}function vd(a,b,c){a=a|0;b=b|0;c=c|0;le(a,b);if(!c)return;le(a+32|0,b+4|0);return}function wd(c,e){c=c|0;e=e|0;var f=0,g=0;f=(b[c>>1]|0)+4|0;c=3?f>>3:f;f=c+(d[e>>0]|0)|0;a[e>>0]=f>>>0>255?(31?f>>>31:f)+255|0:f;f=e+1|0;g=c+(d[f>>0]|0)|0;a[f>>0]=g>>>0>255?(31?g>>>31:g)+255|0:g;g=e+2|0;f=c+(d[g>>0]|0)|0;a[g>>0]=f>>>0>255?(31?f>>>31:f)+255|0:f;f=e+3|0;g=c+(d[f>>0]|0)|0;a[f>>0]=g>>>0>255?(31?g>>>31:g)+255|0:g;g=e+32|0;f=c+(d[g>>0]|0)|0;a[g>>0]=f>>>0>255?(31?f>>>31:f)+255|0:f;f=e+33|0;g=c+(d[f>>0]|0)|0;a[f>>0]=g>>>0>255?(31?g>>>31:g)+255|0:g;g=e+34|0;f=c+(d[g>>0]|0)|0;a[g>>0]=f>>>0>255?(31?f>>>31:f)+255|0:f;f=e+35|0;g=c+(d[f>>0]|0)|0;a[f>>0]=g>>>0>255?(31?g>>>31:g)+255|0:g;g=e+64|0;f=c+(d[g>>0]|0)|0;a[g>>0]=f>>>0>255?(31?f>>>31:f)+255|0:f;f=e+65|0;g=c+(d[f>>0]|0)|0;a[f>>0]=g>>>0>255?(31?g>>>31:g)+255|0:g;g=e+66|0;f=c+(d[g>>0]|0)|0;a[g>>0]=f>>>0>255?(31?f>>>31:f)+255|0:f;f=e+67|0;g=c+(d[f>>0]|0)|0;a[f>>0]=g>>>0>255?(31?g>>>31:g)+255|0:g;g=e+96|0;f=c+(d[g>>0]|0)|0;a[g>>0]=f>>>0>255?(31?f>>>31:f)+255|0:f;f=e+97|0;g=c+(d[f>>0]|0)|0;a[f>>0]=g>>>0>255?(31?g>>>31:g)+255|0:g;g=e+98|0;f=c+(d[g>>0]|0)|0;a[g>>0]=f>>>0>255?(31?f>>>31:f)+255|0:f;f=e+99|0;e=c+(d[f>>0]|0)|0;a[f>>0]=e>>>0>255?(31?e>>>31:e)+255|0:e;return}function xd(c,e){c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;f=(b[c>>1]|0)+4|0;g=b[c+8>>1]|0;h=g*35468|0;i=16?h>>16:h;h=g*20091|0;j=(16?h>>16:h)+g|0;g=b[c+2>>1]|0;c=g*35468|0;h=16?c>>16:c;c=g*20091|0;k=(16?c>>16:c)+g|0;g=j+f|0;c=g+k|0;l=(3?c>>3:c)+(d[e>>0]|0)|0;a[e>>0]=l>>>0>255?(31?l>>>31:l)+255|0:l;l=e+1|0;c=g+h|0;m=(3?c>>3:c)+(d[l>>0]|0)|0;a[l>>0]=m>>>0>255?(31?m>>>31:m)+255|0:m;m=e+2|0;l=g-h|0;c=(3?l>>3:l)+(d[m>>0]|0)|0;a[m>>0]=c>>>0>255?(31?c>>>31:c)+255|0:c;c=e+3|0;m=g-k|0;g=(3?m>>3:m)+(d[c>>0]|0)|0;a[c>>0]=g>>>0>255?(31?g>>>31:g)+255|0:g;g=i+f|0;c=e+32|0;m=k+g|0;l=(3?m>>3:m)+(d[c>>0]|0)|0;a[c>>0]=l>>>0>255?(31?l>>>31:l)+255|0:l;l=e+33|0;c=g+h|0;m=(3?c>>3:c)+(d[l>>0]|0)|0;a[l>>0]=m>>>0>255?(31?m>>>31:m)+255|0:m;m=e+34|0;l=g-h|0;c=(3?l>>3:l)+(d[m>>0]|0)|0;a[m>>0]=c>>>0>255?(31?c>>>31:c)+255|0:c;c=e+35|0;m=g-k|0;g=(3?m>>3:m)+(d[c>>0]|0)|0;a[c>>0]=g>>>0>255?(31?g>>>31:g)+255|0:g;g=f-i|0;i=e+64|0;c=k+g|0;m=(3?c>>3:c)+(d[i>>0]|0)|0;a[i>>0]=m>>>0>255?(31?m>>>31:m)+255|0:m;m=e+65|0;i=g+h|0;c=(3?i>>3:i)+(d[m>>0]|0)|0;a[m>>0]=c>>>0>255?(31?c>>>31:c)+255|0:c;c=e+66|0;m=g-h|0;i=(3?m>>3:m)+(d[c>>0]|0)|0;a[c>>0]=i>>>0>255?(31?i>>>31:i)+255|0:i;i=e+67|0;c=g-k|0;g=(3?c>>3:c)+(d[i>>0]|0)|0;a[i>>0]=g>>>0>255?(31?g>>>31:g)+255|0:g;g=f-j|0;j=e+96|0;f=g+k|0;i=(3?f>>3:f)+(d[j>>0]|0)|0;a[j>>0]=i>>>0>255?(31?i>>>31:i)+255|0:i;i=e+97|0;j=g+h|0;f=(3?j>>3:j)+(d[i>>0]|0)|0;a[i>>0]=f>>>0>255?(31?f>>>31:f)+255|0:f;f=e+98|0;i=g-h|0;h=(3?i>>3:i)+(d[f>>0]|0)|0;a[f>>0]=h>>>0>255?(31?h>>>31:h)+255|0:h;h=e+99|0;e=g-k|0;k=(3?e>>3:e)+(d[h>>0]|0)|0;a[h>>0]=k>>>0>255?(31?k>>>31:k)+255|0:k;return}function yd(a,b){a=a|0;b=b|0;vd(a,b,1);vd(a+64|0,b+128|0,1);return}function zd(a,c){a=a|0;c=c|0;var d=0;if(b[a>>1]|0)wd(a,c);d=a+32|0;if(b[d>>1]|0)wd(d,c+4|0);d=a+64|0;if(b[d>>1]|0)wd(d,c+128|0);d=a+96|0;if(!(b[d>>1]|0))return;wd(d,c+132|0);return}function Ad(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ke(a,b,1,16,c,d,e);return}function Bd(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;f=b<<2;g=a+f|0;je(g,b,1,16,c,d,e);a=g+f|0;je(a,b,1,16,c,d,e);je(a+f|0,b,1,16,c,d,e);return}function Cd(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ke(a,1,b,16,c,d,e);return}function Dd(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;ke(a,c,1,8,d,e,f);ke(b,c,1,8,d,e,f);return}function Ed(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=c<<2;je(a+g|0,c,1,8,d,e,f);je(b+g|0,c,1,8,d,e,f);return}function Fd(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;g=f<<1|1;f=r(e,-2)|0;h=0-e|0;i=c[2027]|0;j=c[2024]|0;k=c[2025]|0;l=c[2026]|0;m=0;do{n=b+m|0;o=n+h|0;p=d[o>>0]|0;q=d[n>>0]|0;s=(d[n+f>>0]|0)-(d[n+e>>0]|0)|0;if(((d[i+(p-q)>>0]<<2)+(d[i+s>>0]|0)|0)<=(g|0)){t=((q-p|0)*3|0)+(a[j+s>>0]|0)|0;s=t+4|0;u=a[k+(3?s>>3:s)>>0]|0;s=t+3|0;a[o>>0]=a[l+((a[k+(3?s>>3:s)>>0]|0)+p)>>0]|0;a[n>>0]=a[l+(q-u)>>0]|0}m=m+1|0}while((m|0)!=16);return}function Gd(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;g=f<<1|1;f=c[2027]|0;h=c[2024]|0;i=c[2025]|0;j=c[2026]|0;k=0;do{l=b+(r(k,e)|0)|0;m=l+-1|0;n=d[m>>0]|0;o=d[l>>0]|0;p=(d[l+-2>>0]|0)-(d[l+1>>0]|0)|0;if(((d[f+(n-o)>>0]<<2)+(d[f+p>>0]|0)|0)<=(g|0)){q=((o-n|0)*3|0)+(a[h+p>>0]|0)|0;p=q+4|0;s=a[i+(3?p>>3:p)>>0]|0;p=q+3|0;a[m>>0]=a[j+((a[i+(3?p>>3:p)>>0]|0)+n)>>0]|0;a[l>>0]=a[j+(o-s)>>0]|0}k=k+1|0}while((k|0)!=16);return}function Hd(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;g=e<<2;h=f<<1|1;f=r(e,-2)|0;i=0-e|0;j=c[2027]|0;k=c[2024]|0;l=c[2025]|0;m=c[2026]|0;n=b+g|0;b=0;do{o=n+b|0;p=o+i|0;q=d[p>>0]|0;s=d[o>>0]|0;t=(d[o+f>>0]|0)-(d[o+e>>0]|0)|0;if(((d[j+(q-s)>>0]<<2)+(d[j+t>>0]|0)|0)<=(h|0)){u=((s-q|0)*3|0)+(a[k+t>>0]|0)|0;t=u+4|0;v=a[l+(3?t>>3:t)>>0]|0;t=u+3|0;a[p>>0]=a[m+((a[l+(3?t>>3:t)>>0]|0)+q)>>0]|0;a[o>>0]=a[m+(s-v)>>0]|0}b=b+1|0}while((b|0)!=16);b=n+g|0;n=0;do{v=b+n|0;s=v+i|0;o=d[s>>0]|0;q=d[v>>0]|0;t=(d[v+f>>0]|0)-(d[v+e>>0]|0)|0;if(((d[j+(o-q)>>0]<<2)+(d[j+t>>0]|0)|0)<=(h|0)){p=((q-o|0)*3|0)+(a[k+t>>0]|0)|0;t=p+4|0;u=a[l+(3?t>>3:t)>>0]|0;t=p+3|0;a[s>>0]=a[m+((a[l+(3?t>>3:t)>>0]|0)+o)>>0]|0;a[v>>0]=a[m+(q-u)>>0]|0}n=n+1|0}while((n|0)!=16);n=b+g|0;g=0;do{b=n+g|0;u=b+i|0;q=d[u>>0]|0;v=d[b>>0]|0;o=(d[b+f>>0]|0)-(d[b+e>>0]|0)|0;if(((d[j+(q-v)>>0]<<2)+(d[j+o>>0]|0)|0)<=(h|0)){t=((v-q|0)*3|0)+(a[k+o>>0]|0)|0;o=t+4|0;s=a[l+(3?o>>3:o)>>0]|0;o=t+3|0;a[u>>0]=a[m+((a[l+(3?o>>3:o)>>0]|0)+q)>>0]|0;a[b>>0]=a[m+(v-s)>>0]|0}g=g+1|0}while((g|0)!=16);return}function Id(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;g=f<<1|1;f=c[2027]|0;h=c[2024]|0;i=c[2025]|0;j=c[2026]|0;k=b+4|0;l=0;do{m=k+(r(l,e)|0)|0;n=m+-1|0;o=d[n>>0]|0;p=d[m>>0]|0;q=(d[m+-2>>0]|0)-(d[m+1>>0]|0)|0;if(((d[f+(o-p)>>0]<<2)+(d[f+q>>0]|0)|0)<=(g|0)){s=((p-o|0)*3|0)+(a[h+q>>0]|0)|0;q=s+4|0;t=a[i+(3?q>>3:q)>>0]|0;q=s+3|0;a[n>>0]=a[j+((a[i+(3?q>>3:q)>>0]|0)+o)>>0]|0;a[m>>0]=a[j+(p-t)>>0]|0}l=l+1|0}while((l|0)!=16);l=b+8|0;k=0;do{t=l+(r(k,e)|0)|0;p=t+-1|0;m=d[p>>0]|0;o=d[t>>0]|0;q=(d[t+-2>>0]|0)-(d[t+1>>0]|0)|0;if(((d[f+(m-o)>>0]<<2)+(d[f+q>>0]|0)|0)<=(g|0)){n=((o-m|0)*3|0)+(a[h+q>>0]|0)|0;q=n+4|0;s=a[i+(3?q>>3:q)>>0]|0;q=n+3|0;a[p>>0]=a[j+((a[i+(3?q>>3:q)>>0]|0)+m)>>0]|0;a[t>>0]=a[j+(o-s)>>0]|0}k=k+1|0}while((k|0)!=16);k=b+12|0;b=0;do{l=k+(r(b,e)|0)|0;s=l+-1|0;o=d[s>>0]|0;t=d[l>>0]|0;m=(d[l+-2>>0]|0)-(d[l+1>>0]|0)|0;if(((d[f+(o-t)>>0]<<2)+(d[f+m>>0]|0)|0)<=(g|0)){q=((t-o|0)*3|0)+(a[h+m>>0]|0)|0;m=q+4|0;p=a[i+(3?m>>3:m)>>0]|0;m=q+3|0;a[s>>0]=a[j+((a[i+(3?m>>3:m)>>0]|0)+o)>>0]|0;a[l>>0]=a[j+(t-p)>>0]|0}b=b+1|0}while((b|0)!=16);return}function Jd(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;je(a+4|0,1,b,16,c,d,e);je(a+8|0,1,b,16,c,d,e);je(a+12|0,1,b,16,c,d,e);return}function Kd(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;ke(a,1,c,8,d,e,f);ke(b,1,c,8,d,e,f);return}function Ld(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;je(a+4|0,1,c,8,d,e,f);je(b+4|0,1,c,8,d,e,f);return}function Md(a){a=a|0;var b=0,c=0;b=(d[a+-32>>0]|0)+4+(d[a+-1>>0]|0)+(d[a+-31>>0]|0)+(d[a+31>>0]|0)+(d[a+-30>>0]|0)+(d[a+63>>0]|0)+(d[a+-29>>0]|0)+(d[a+95>>0]|0)|0;c=(3?b>>>3:b)&255;Nf(a|0,c|0,4)|0;Nf(a+32|0,c|0,4)|0;Nf(a+64|0,c|0,4)|0;Nf(a+96|0,c|0,4)|0;return}function Nd(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=(c[2026]|0)+(0-(d[b+-33>>0]|0))|0;f=e+(d[b+-1>>0]|0)|0;g=d[b+-32>>0]|0;a[b>>0]=a[f+g>>0]|0;h=d[b+-31>>0]|0;a[b+1>>0]=a[f+h>>0]|0;i=d[b+-30>>0]|0;a[b+2>>0]=a[f+i>>0]|0;j=d[b+-29>>0]|0;a[b+3>>0]=a[f+j>>0]|0;f=e+(d[b+31>>0]|0)|0;a[b+32>>0]=a[f+g>>0]|0;a[b+33>>0]=a[f+h>>0]|0;a[b+34>>0]=a[f+i>>0]|0;a[b+35>>0]=a[f+j>>0]|0;f=e+(d[b+63>>0]|0)|0;a[b+64>>0]=a[f+g>>0]|0;a[b+65>>0]=a[f+h>>0]|0;a[b+66>>0]=a[f+i>>0]|0;a[b+67>>0]=a[f+j>>0]|0;f=e+(d[b+95>>0]|0)|0;a[b+96>>0]=a[f+g>>0]|0;a[b+97>>0]=a[f+h>>0]|0;a[b+98>>0]=a[f+i>>0]|0;a[b+99>>0]=a[f+j>>0]|0;return}function Od(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0;c=d[b+-32>>0]|0;e=d[b+-31>>0]|0;f=e+2|0;g=f+(d[b+-33>>0]|0)+(c<<1)|0;h=(2?g>>>2:g)&255;g=d[b+-30>>0]|0;i=g+2|0;j=i+c+(e<<1)|0;e=(2?j>>>2:j)&255;j=d[b+-29>>0]|0;c=f+(g<<1)+j|0;g=(2?c>>>2:c)&255;c=i+(j<<1)+(d[b+-28>>0]|0)|0;j=(2?c>>>2:c)&255;a[b>>0]=h;a[b+1>>0]=e;a[b+2>>0]=g;a[b+3>>0]=j;a[b+32>>0]=h;a[b+33>>0]=e;a[b+34>>0]=g;a[b+35>>0]=j;a[b+64>>0]=h;a[b+65>>0]=e;a[b+66>>0]=g;a[b+67>>0]=j;a[b+96>>0]=h;a[b+97>>0]=e;a[b+98>>0]=g;a[b+99>>0]=j;return}function Pd(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c=d[b+-1>>0]|0;e=d[b+31>>0]|0;f=d[b+63>>0]|0;g=d[b+-33>>0]|0;h=d[b+-32>>0]|0;i=d[b+-31>>0]|0;j=d[b+-30>>0]|0;k=d[b+-29>>0]|0;l=e+2|0;m=l+(f<<1)+(d[b+95>>0]|0)|0;a[b+96>>0]=2?m>>>2:m;m=c+2|0;n=m+(e<<1)+f|0;f=(2?n>>>2:n)&255;a[b+64>>0]=f;a[b+97>>0]=f;f=l+(c<<1)+g|0;c=(2?f>>>2:f)&255;a[b+32>>0]=c;a[b+65>>0]=c;a[b+98>>0]=c;c=m+h+(g<<1)|0;m=(2?c>>>2:c)&255;a[b>>0]=m;a[b+33>>0]=m;a[b+66>>0]=m;a[b+99>>0]=m;m=g+2+i+(h<<1)|0;g=(2?m>>>2:m)&255;a[b+1>>0]=g;a[b+34>>0]=g;a[b+67>>0]=g;g=h+2+j+(i<<1)|0;h=(2?g>>>2:g)&255;a[b+2>>0]=h;a[b+35>>0]=h;h=i+2+k+(j<<1)|0;a[b+3>>0]=2?h>>>2:h;return}function Qd(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;c=d[b+-31>>0]|0;e=d[b+-30>>0]|0;f=d[b+-29>>0]|0;g=d[b+-28>>0]|0;h=d[b+-27>>0]|0;i=d[b+-26>>0]|0;j=d[b+-25>>0]|0;k=e+2|0;l=k+(d[b+-32>>0]|0)+(c<<1)|0;a[b>>0]=2?l>>>2:l;l=f+2|0;m=l+c+(e<<1)|0;e=(2?m>>>2:m)&255;a[b+32>>0]=e;a[b+1>>0]=e;e=k+(f<<1)+g|0;f=(2?e>>>2:e)&255;a[b+64>>0]=f;a[b+33>>0]=f;a[b+2>>0]=f;f=l+(g<<1)+h|0;l=(2?f>>>2:f)&255;a[b+96>>0]=l;a[b+65>>0]=l;a[b+34>>0]=l;a[b+3>>0]=l;l=g+2+(h<<1)+i|0;g=(2?l>>>2:l)&255;a[b+97>>0]=g;a[b+66>>0]=g;a[b+35>>0]=g;g=h+2+(i<<1)+j|0;h=(2?g>>>2:g)&255;a[b+98>>0]=h;a[b+67>>0]=h;h=i+2+j+(j<<1)|0;a[b+99>>0]=2?h>>>2:h;return}function Rd(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;c=d[b+-1>>0]|0;e=d[b+31>>0]|0;f=d[b+63>>0]|0;g=d[b+95>>0]|0;h=e+2|0;i=h+(d[b+-33>>0]|0)+(c<<1)|0;j=r((2?i>>>2:i)&255,16843009)|0;a[b>>0]=j;a[b+1>>0]=j>>8;a[b+2>>0]=j>>16;a[b+3>>0]=j>>24;j=b+32|0;i=f+2|0;k=i+c+(e<<1)|0;e=r((2?k>>>2:k)&255,16843009)|0;a[j>>0]=e;a[j+1>>0]=e>>8;a[j+2>>0]=e>>16;a[j+3>>0]=e>>24;e=b+64|0;j=h+(f<<1)+g|0;f=r((2?j>>>2:j)&255,16843009)|0;a[e>>0]=f;a[e+1>>0]=f>>8;a[e+2>>0]=f>>16;a[e+3>>0]=f>>24;f=b+96|0;b=i+g+(g<<1)|0;g=r((2?b>>>2:b)&255,16843009)|0;a[f>>0]=g;a[f+1>>0]=g>>8;a[f+2>>0]=g>>16;a[f+3>>0]=g>>24;return}function Sd(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c=d[b+-1>>0]|0;e=d[b+31>>0]|0;f=d[b+63>>0]|0;g=d[b+-33>>0]|0;h=d[b+-32>>0]|0;i=d[b+-31>>0]|0;j=d[b+-30>>0]|0;k=d[b+-29>>0]|0;l=h+1|0;m=l+g|0;n=(1?m>>>1:m)&255;a[b+65>>0]=n;a[b>>0]=n;n=l+i|0;l=(1?n>>>1:n)&255;a[b+66>>0]=l;a[b+1>>0]=l;l=i+1+j|0;n=(1?l>>>1:l)&255;a[b+67>>0]=n;a[b+2>>0]=n;n=j+1+k|0;a[b+3>>0]=1?n>>>1:n;n=c+2|0;l=n+f+(e<<1)|0;a[b+96>>0]=2?l>>>2:l;l=g+2|0;f=l+e+(c<<1)|0;a[b+64>>0]=2?f>>>2:f;f=n+(g<<1)+h|0;g=(2?f>>>2:f)&255;a[b+97>>0]=g;a[b+32>>0]=g;g=l+(h<<1)+i|0;l=(2?g>>>2:g)&255;a[b+98>>0]=l;a[b+33>>0]=l;l=h+2+(i<<1)+j|0;h=(2?l>>>2:l)&255;a[b+99>>0]=h;a[b+34>>0]=h;h=i+2+(j<<1)+k|0;a[b+35>>0]=2?h>>>2:h;return}function Td(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;c=d[b+-32>>0]|0;e=d[b+-31>>0]|0;f=d[b+-30>>0]|0;g=d[b+-29>>0]|0;h=d[b+-28>>0]|0;i=d[b+-27>>0]|0;j=d[b+-26>>0]|0;k=d[b+-25>>0]|0;l=e+1|0;m=l+c|0;a[b>>0]=1?m>>>1:m;m=l+f|0;l=(1?m>>>1:m)&255;a[b+64>>0]=l;a[b+1>>0]=l;l=f+1+g|0;m=(1?l>>>1:l)&255;a[b+65>>0]=m;a[b+2>>0]=m;m=g+1+h|0;l=(1?m>>>1:m)&255;a[b+66>>0]=l;a[b+3>>0]=l;l=f+2|0;m=l+c+(e<<1)|0;a[b+32>>0]=2?m>>>2:m;m=g+2|0;c=m+e+(f<<1)|0;f=(2?c>>>2:c)&255;a[b+96>>0]=f;a[b+33>>0]=f;f=l+(g<<1)+h|0;g=(2?f>>>2:f)&255;a[b+97>>0]=g;a[b+34>>0]=g;g=m+(h<<1)+i|0;m=(2?g>>>2:g)&255;a[b+98>>0]=m;a[b+35>>0]=m;m=h+2+(i<<1)+j|0;a[b+67>>0]=2?m>>>2:m;m=i+2+(j<<1)+k|0;a[b+99>>0]=2?m>>>2:m;return}function Ud(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c=d[b+-1>>0]|0;e=d[b+31>>0]|0;f=d[b+63>>0]|0;g=d[b+95>>0]|0;h=d[b+-33>>0]|0;i=d[b+-32>>0]|0;j=d[b+-31>>0]|0;k=d[b+-30>>0]|0;l=c+1|0;m=l+h|0;n=(1?m>>>1:m)&255;a[b+34>>0]=n;a[b>>0]=n;n=l+e|0;l=(1?n>>>1:n)&255;a[b+66>>0]=l;a[b+32>>0]=l;l=e+1+f|0;n=(1?l>>>1:l)&255;a[b+98>>0]=n;a[b+64>>0]=n;n=f+1+g|0;a[b+96>>0]=1?n>>>1:n;n=i+2+(j<<1)+k|0;a[b+3>>0]=2?n>>>2:n;n=h+2+(i<<1)+j|0;a[b+2>>0]=2?n>>>2:n;n=c+2|0;j=n+(h<<1)+i|0;i=(2?j>>>2:j)&255;a[b+35>>0]=i;a[b+1>>0]=i;i=e+2|0;j=i+(c<<1)+h|0;h=(2?j>>>2:j)&255;a[b+67>>0]=h;a[b+33>>0]=h;h=n+f+(e<<1)|0;e=(2?h>>>2:h)&255;a[b+99>>0]=e;a[b+65>>0]=e;e=i+g+(f<<1)|0;a[b+97>>0]=2?e>>>2:e;return}function Vd(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0;c=d[b+-1>>0]|0;e=d[b+31>>0]|0;f=d[b+63>>0]|0;g=a[b+95>>0]|0;h=g&255;i=e+1|0;j=i+c|0;a[b>>0]=1?j>>>1:j;j=i+f|0;i=(1?j>>>1:j)&255;a[b+32>>0]=i;a[b+2>>0]=i;i=f+1+h|0;j=(1?i>>>1:i)&255;a[b+64>>0]=j;a[b+34>>0]=j;j=f+2|0;i=j+c+(e<<1)|0;a[b+1>>0]=2?i>>>2:i;i=h+2+e+(f<<1)|0;f=(2?i>>>2:i)&255;a[b+33>>0]=f;a[b+3>>0]=f;f=j+h+(h<<1)|0;h=(2?f>>>2:f)&255;a[b+65>>0]=h;a[b+35>>0]=h;a[b+66>>0]=g;a[b+67>>0]=g;Nf(b+96|0,g|0,4)|0;return}function Wd(a){a=a|0;var b=0,c=0;b=(d[a+-1>>0]|0)+16+(d[a+-32>>0]|0)+(d[a+31>>0]|0)+(d[a+-31>>0]|0)+(d[a+63>>0]|0)+(d[a+-30>>0]|0)+(d[a+95>>0]|0)+(d[a+-29>>0]|0)+(d[a+127>>0]|0)+(d[a+-28>>0]|0)+(d[a+159>>0]|0)+(d[a+-27>>0]|0)+(d[a+191>>0]|0)+(d[a+-26>>0]|0)+(d[a+223>>0]|0)+(d[a+-25>>0]|0)+(d[a+255>>0]|0)+(d[a+-24>>0]|0)+(d[a+287>>0]|0)+(d[a+-23>>0]|0)+(d[a+319>>0]|0)+(d[a+-22>>0]|0)+(d[a+351>>0]|0)+(d[a+-21>>0]|0)+(d[a+383>>0]|0)+(d[a+-20>>0]|0)+(d[a+415>>0]|0)+(d[a+-19>>0]|0)+(d[a+447>>0]|0)+(d[a+-18>>0]|0)+(d[a+479>>0]|0)+(d[a+-17>>0]|0)|0;c=(5?b>>>5:b)&255;Nf(a|0,c|0,16)|0;Nf(a+32|0,c|0,16)|0;Nf(a+64|0,c|0,16)|0;Nf(a+96|0,c|0,16)|0;Nf(a+128|0,c|0,16)|0;Nf(a+160|0,c|0,16)|0;Nf(a+192|0,c|0,16)|0;Nf(a+224|0,c|0,16)|0;Nf(a+256|0,c|0,16)|0;Nf(a+288|0,c|0,16)|0;Nf(a+320|0,c|0,16)|0;Nf(a+352|0,c|0,16)|0;Nf(a+384|0,c|0,16)|0;Nf(a+416|0,c|0,16)|0;Nf(a+448|0,c|0,16)|0;Nf(a+480|0,c|0,16)|0;return}function Xd(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;e=b+-32|0;f=(c[2026]|0)+(0-(d[b+-33>>0]|0))|0;g=b+-31|0;h=b+-30|0;i=b+-29|0;j=b+-28|0;k=b+-27|0;l=b+-26|0;m=b+-25|0;n=b+-24|0;o=b+-23|0;p=b+-22|0;q=b+-21|0;r=b+-20|0;s=b+-19|0;t=b+-18|0;u=b+-17|0;v=b;b=0;while(1){w=f+(d[v+-1>>0]|0)|0;a[v>>0]=a[w+(d[e>>0]|0)>>0]|0;a[v+1>>0]=a[w+(d[g>>0]|0)>>0]|0;a[v+2>>0]=a[w+(d[h>>0]|0)>>0]|0;a[v+3>>0]=a[w+(d[i>>0]|0)>>0]|0;a[v+4>>0]=a[w+(d[j>>0]|0)>>0]|0;a[v+5>>0]=a[w+(d[k>>0]|0)>>0]|0;a[v+6>>0]=a[w+(d[l>>0]|0)>>0]|0;a[v+7>>0]=a[w+(d[m>>0]|0)>>0]|0;a[v+8>>0]=a[w+(d[n>>0]|0)>>0]|0;a[v+9>>0]=a[w+(d[o>>0]|0)>>0]|0;a[v+10>>0]=a[w+(d[p>>0]|0)>>0]|0;a[v+11>>0]=a[w+(d[q>>0]|0)>>0]|0;a[v+12>>0]=a[w+(d[r>>0]|0)>>0]|0;a[v+13>>0]=a[w+(d[s>>0]|0)>>0]|0;a[v+14>>0]=a[w+(d[t>>0]|0)>>0]|0;a[v+15>>0]=a[w+(d[u>>0]|0)>>0]|0;b=b+1|0;if((b|0)==16)break;else v=v+32|0}return}function Yd(b){b=b|0;var c=0,d=0,e=0,f=0;c=b+-32|0;d=b;e=c;f=d+16|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));d=b+32|0;e=c;f=d+16|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));d=b+64|0;e=c;f=d+16|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));d=b+96|0;e=c;f=d+16|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));d=b+128|0;e=c;f=d+16|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));d=b+160|0;e=c;f=d+16|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));d=b+192|0;e=c;f=d+16|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));d=b+224|0;e=c;f=d+16|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));d=b+256|0;e=c;f=d+16|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));d=b+288|0;e=c;f=d+16|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));d=b+320|0;e=c;f=d+16|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));d=b+352|0;e=c;f=d+16|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));d=b+384|0;e=c;f=d+16|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));d=b+416|0;e=c;f=d+16|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));d=b+448|0;e=c;f=d+16|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));d=b+480|0;e=c;f=d+16|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));return}function Zd(b){b=b|0;Nf(b|0,a[b+-1>>0]|0,16)|0;Nf(b+32|0,a[b+31>>0]|0,16)|0;Nf(b+64|0,a[b+63>>0]|0,16)|0;Nf(b+96|0,a[b+95>>0]|0,16)|0;Nf(b+128|0,a[b+127>>0]|0,16)|0;Nf(b+160|0,a[b+159>>0]|0,16)|0;Nf(b+192|0,a[b+191>>0]|0,16)|0;Nf(b+224|0,a[b+223>>0]|0,16)|0;Nf(b+256|0,a[b+255>>0]|0,16)|0;Nf(b+288|0,a[b+287>>0]|0,16)|0;Nf(b+320|0,a[b+319>>0]|0,16)|0;Nf(b+352|0,a[b+351>>0]|0,16)|0;Nf(b+384|0,a[b+383>>0]|0,16)|0;Nf(b+416|0,a[b+415>>0]|0,16)|0;Nf(b+448|0,a[b+447>>0]|0,16)|0;Nf(b+480|0,a[b+479>>0]|0,16)|0;return}function _d(a){a=a|0;var b=0,c=0;b=(d[a+-1>>0]|0)+8+(d[a+31>>0]|0)+(d[a+63>>0]|0)+(d[a+95>>0]|0)+(d[a+127>>0]|0)+(d[a+159>>0]|0)+(d[a+191>>0]|0)+(d[a+223>>0]|0)+(d[a+255>>0]|0)+(d[a+287>>0]|0)+(d[a+319>>0]|0)+(d[a+351>>0]|0)+(d[a+383>>0]|0)+(d[a+415>>0]|0)+(d[a+447>>0]|0)+(d[a+479>>0]|0)|0;c=(4?b>>>4:b)&255;Nf(a|0,c|0,16)|0;Nf(a+32|0,c|0,16)|0;Nf(a+64|0,c|0,16)|0;Nf(a+96|0,c|0,16)|0;Nf(a+128|0,c|0,16)|0;Nf(a+160|0,c|0,16)|0;Nf(a+192|0,c|0,16)|0;Nf(a+224|0,c|0,16)|0;Nf(a+256|0,c|0,16)|0;Nf(a+288|0,c|0,16)|0;Nf(a+320|0,c|0,16)|0;Nf(a+352|0,c|0,16)|0;Nf(a+384|0,c|0,16)|0;Nf(a+416|0,c|0,16)|0;Nf(a+448|0,c|0,16)|0;Nf(a+480|0,c|0,16)|0;return}function $d(a){a=a|0;var b=0,c=0;b=(d[a+-32>>0]|0)+8+(d[a+-31>>0]|0)+(d[a+-30>>0]|0)+(d[a+-29>>0]|0)+(d[a+-28>>0]|0)+(d[a+-27>>0]|0)+(d[a+-26>>0]|0)+(d[a+-25>>0]|0)+(d[a+-24>>0]|0)+(d[a+-23>>0]|0)+(d[a+-22>>0]|0)+(d[a+-21>>0]|0)+(d[a+-20>>0]|0)+(d[a+-19>>0]|0)+(d[a+-18>>0]|0)+(d[a+-17>>0]|0)|0;c=(4?b>>>4:b)&255;Nf(a|0,c|0,16)|0;Nf(a+32|0,c|0,16)|0;Nf(a+64|0,c|0,16)|0;Nf(a+96|0,c|0,16)|0;Nf(a+128|0,c|0,16)|0;Nf(a+160|0,c|0,16)|0;Nf(a+192|0,c|0,16)|0;Nf(a+224|0,c|0,16)|0;Nf(a+256|0,c|0,16)|0;Nf(a+288|0,c|0,16)|0;Nf(a+320|0,c|0,16)|0;Nf(a+352|0,c|0,16)|0;Nf(a+384|0,c|0,16)|0;Nf(a+416|0,c|0,16)|0;Nf(a+448|0,c|0,16)|0;Nf(a+480|0,c|0,16)|0;return}function ae(b){b=b|0;var c=0,d=0;c=b;d=c+16|0;do{a[c>>0]=128;c=c+1|0}while((c|0)<(d|0));c=b+32|0;d=c+16|0;do{a[c>>0]=128;c=c+1|0}while((c|0)<(d|0));c=b+64|0;d=c+16|0;do{a[c>>0]=128;c=c+1|0}while((c|0)<(d|0));c=b+96|0;d=c+16|0;do{a[c>>0]=128;c=c+1|0}while((c|0)<(d|0));c=b+128|0;d=c+16|0;do{a[c>>0]=128;c=c+1|0}while((c|0)<(d|0));c=b+160|0;d=c+16|0;do{a[c>>0]=128;c=c+1|0}while((c|0)<(d|0));c=b+192|0;d=c+16|0;do{a[c>>0]=128;c=c+1|0}while((c|0)<(d|0));c=b+224|0;d=c+16|0;do{a[c>>0]=128;c=c+1|0}while((c|0)<(d|0));c=b+256|0;d=c+16|0;do{a[c>>0]=128;c=c+1|0}while((c|0)<(d|0));c=b+288|0;d=c+16|0;do{a[c>>0]=128;c=c+1|0}while((c|0)<(d|0));c=b+320|0;d=c+16|0;do{a[c>>0]=128;c=c+1|0}while((c|0)<(d|0));c=b+352|0;d=c+16|0;do{a[c>>0]=128;c=c+1|0}while((c|0)<(d|0));c=b+384|0;d=c+16|0;do{a[c>>0]=128;c=c+1|0}while((c|0)<(d|0));c=b+416|0;d=c+16|0;do{a[c>>0]=128;c=c+1|0}while((c|0)<(d|0));c=b+448|0;d=c+16|0;do{a[c>>0]=128;c=c+1|0}while((c|0)<(d|0));c=b+480|0;d=c+16|0;do{a[c>>0]=128;c=c+1|0}while((c|0)<(d|0));return}function be(a){a=a|0;var b=0,c=0;b=(d[a+-32>>0]|0)+8+(d[a+-1>>0]|0)+(d[a+-31>>0]|0)+(d[a+31>>0]|0)+(d[a+-30>>0]|0)+(d[a+63>>0]|0)+(d[a+-29>>0]|0)+(d[a+95>>0]|0)+(d[a+-28>>0]|0)+(d[a+127>>0]|0)+(d[a+-27>>0]|0)+(d[a+159>>0]|0)+(d[a+-26>>0]|0)+(d[a+191>>0]|0)+(d[a+-25>>0]|0)+(d[a+223>>0]|0)|0;c=(4?b>>>4:b)&255;Nf(a|0,c|0,8)|0;Nf(a+32|0,c|0,8)|0;Nf(a+64|0,c|0,8)|0;Nf(a+96|0,c|0,8)|0;Nf(a+128|0,c|0,8)|0;Nf(a+160|0,c|0,8)|0;Nf(a+192|0,c|0,8)|0;Nf(a+224|0,c|0,8)|0;return}function ce(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;e=b+-32|0;f=(c[2026]|0)+(0-(d[b+-33>>0]|0))|0;g=f+(d[b+-1>>0]|0)|0;h=d[e>>0]|0;a[b>>0]=a[g+h>>0]|0;i=b+-31|0;j=d[i>>0]|0;a[b+1>>0]=a[g+j>>0]|0;k=b+-30|0;l=d[k>>0]|0;a[b+2>>0]=a[g+l>>0]|0;m=b+-29|0;n=d[m>>0]|0;a[b+3>>0]=a[g+n>>0]|0;o=b+-28|0;p=d[o>>0]|0;a[b+4>>0]=a[g+p>>0]|0;q=b+-27|0;r=d[q>>0]|0;a[b+5>>0]=a[g+r>>0]|0;s=b+-26|0;t=d[s>>0]|0;a[b+6>>0]=a[g+t>>0]|0;u=b+-25|0;v=d[u>>0]|0;a[b+7>>0]=a[g+v>>0]|0;g=f+(d[b+31>>0]|0)|0;a[b+32>>0]=a[g+h>>0]|0;a[b+33>>0]=a[g+j>>0]|0;a[b+34>>0]=a[g+l>>0]|0;a[b+35>>0]=a[g+n>>0]|0;a[b+36>>0]=a[g+p>>0]|0;a[b+37>>0]=a[g+r>>0]|0;a[b+38>>0]=a[g+t>>0]|0;a[b+39>>0]=a[g+v>>0]|0;g=f+(d[b+63>>0]|0)|0;a[b+64>>0]=a[g+h>>0]|0;a[b+65>>0]=a[g+j>>0]|0;a[b+66>>0]=a[g+l>>0]|0;a[b+67>>0]=a[g+n>>0]|0;a[b+68>>0]=a[g+p>>0]|0;a[b+69>>0]=a[g+r>>0]|0;a[b+70>>0]=a[g+t>>0]|0;a[b+71>>0]=a[g+v>>0]|0;v=f+(d[b+95>>0]|0)|0;g=d[e>>0]|0;a[b+96>>0]=a[v+g>>0]|0;t=d[i>>0]|0;a[b+97>>0]=a[v+t>>0]|0;r=d[k>>0]|0;a[b+98>>0]=a[v+r>>0]|0;p=d[m>>0]|0;a[b+99>>0]=a[v+p>>0]|0;n=d[o>>0]|0;a[b+100>>0]=a[v+n>>0]|0;l=d[q>>0]|0;a[b+101>>0]=a[v+l>>0]|0;j=d[s>>0]|0;a[b+102>>0]=a[v+j>>0]|0;h=d[u>>0]|0;a[b+103>>0]=a[v+h>>0]|0;v=f+(d[b+127>>0]|0)|0;a[b+128>>0]=a[v+g>>0]|0;a[b+129>>0]=a[v+t>>0]|0;a[b+130>>0]=a[v+r>>0]|0;a[b+131>>0]=a[v+p>>0]|0;a[b+132>>0]=a[v+n>>0]|0;a[b+133>>0]=a[v+l>>0]|0;a[b+134>>0]=a[v+j>>0]|0;a[b+135>>0]=a[v+h>>0]|0;h=f+(d[b+159>>0]|0)|0;a[b+160>>0]=a[h+g>>0]|0;a[b+161>>0]=a[h+t>>0]|0;a[b+162>>0]=a[h+(d[k>>0]|0)>>0]|0;a[b+163>>0]=a[h+(d[m>>0]|0)>>0]|0;a[b+164>>0]=a[h+(d[o>>0]|0)>>0]|0;a[b+165>>0]=a[h+(d[q>>0]|0)>>0]|0;a[b+166>>0]=a[h+(d[s>>0]|0)>>0]|0;a[b+167>>0]=a[h+(d[u>>0]|0)>>0]|0;h=f+(d[b+191>>0]|0)|0;a[b+192>>0]=a[h+(d[e>>0]|0)>>0]|0;a[b+193>>0]=a[h+(d[i>>0]|0)>>0]|0;a[b+194>>0]=a[h+(d[k>>0]|0)>>0]|0;a[b+195>>0]=a[h+(d[m>>0]|0)>>0]|0;a[b+196>>0]=a[h+(d[o>>0]|0)>>0]|0;a[b+197>>0]=a[h+(d[q>>0]|0)>>0]|0;a[b+198>>0]=a[h+(d[s>>0]|0)>>0]|0;a[b+199>>0]=a[h+(d[u>>0]|0)>>0]|0;h=f+(d[b+223>>0]|0)|0;a[b+224>>0]=a[h+(d[e>>0]|0)>>0]|0;a[b+225>>0]=a[h+(d[i>>0]|0)>>0]|0;a[b+226>>0]=a[h+(d[k>>0]|0)>>0]|0;a[b+227>>0]=a[h+(d[m>>0]|0)>>0]|0;a[b+228>>0]=a[h+(d[o>>0]|0)>>0]|0;a[b+229>>0]=a[h+(d[q>>0]|0)>>0]|0;a[b+230>>0]=a[h+(d[s>>0]|0)>>0]|0;a[b+231>>0]=a[h+(d[u>>0]|0)>>0]|0;return}function de(b){b=b|0;var c=0,e=0,f=0,g=0;c=b+-32|0;e=c;f=d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24;e=c+4|0;c=d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24;e=b;g=e;a[g>>0]=f;a[g+1>>0]=f>>8;a[g+2>>0]=f>>16;a[g+3>>0]=f>>24;g=e+4|0;a[g>>0]=c;a[g+1>>0]=c>>8;a[g+2>>0]=c>>16;a[g+3>>0]=c>>24;g=b+32|0;e=g;a[e>>0]=f;a[e+1>>0]=f>>8;a[e+2>>0]=f>>16;a[e+3>>0]=f>>24;e=g+4|0;a[e>>0]=c;a[e+1>>0]=c>>8;a[e+2>>0]=c>>16;a[e+3>>0]=c>>24;e=b+64|0;g=e;a[g>>0]=f;a[g+1>>0]=f>>8;a[g+2>>0]=f>>16;a[g+3>>0]=f>>24;g=e+4|0;a[g>>0]=c;a[g+1>>0]=c>>8;a[g+2>>0]=c>>16;a[g+3>>0]=c>>24;g=b+96|0;e=g;a[e>>0]=f;a[e+1>>0]=f>>8;a[e+2>>0]=f>>16;a[e+3>>0]=f>>24;e=g+4|0;a[e>>0]=c;a[e+1>>0]=c>>8;a[e+2>>0]=c>>16;a[e+3>>0]=c>>24;e=b+128|0;g=e;a[g>>0]=f;a[g+1>>0]=f>>8;a[g+2>>0]=f>>16;a[g+3>>0]=f>>24;g=e+4|0;a[g>>0]=c;a[g+1>>0]=c>>8;a[g+2>>0]=c>>16;a[g+3>>0]=c>>24;g=b+160|0;e=g;a[e>>0]=f;a[e+1>>0]=f>>8;a[e+2>>0]=f>>16;a[e+3>>0]=f>>24;e=g+4|0;a[e>>0]=c;a[e+1>>0]=c>>8;a[e+2>>0]=c>>16;a[e+3>>0]=c>>24;e=b+192|0;g=e;a[g>>0]=f;a[g+1>>0]=f>>8;a[g+2>>0]=f>>16;a[g+3>>0]=f>>24;g=e+4|0;a[g>>0]=c;a[g+1>>0]=c>>8;a[g+2>>0]=c>>16;a[g+3>>0]=c>>24;g=b+224|0;b=g;a[b>>0]=f;a[b+1>>0]=f>>8;a[b+2>>0]=f>>16;a[b+3>>0]=f>>24;f=g+4|0;a[f>>0]=c;a[f+1>>0]=c>>8;a[f+2>>0]=c>>16;a[f+3>>0]=c>>24;return}function ee(b){b=b|0;Nf(b|0,a[b+-1>>0]|0,8)|0;Nf(b+32|0,a[b+31>>0]|0,8)|0;Nf(b+64|0,a[b+63>>0]|0,8)|0;Nf(b+96|0,a[b+95>>0]|0,8)|0;Nf(b+128|0,a[b+127>>0]|0,8)|0;Nf(b+160|0,a[b+159>>0]|0,8)|0;Nf(b+192|0,a[b+191>>0]|0,8)|0;Nf(b+224|0,a[b+223>>0]|0,8)|0;return}function fe(a){a=a|0;var b=0,c=0;b=(d[a+-1>>0]|0)+4+(d[a+31>>0]|0)+(d[a+63>>0]|0)+(d[a+95>>0]|0)+(d[a+127>>0]|0)+(d[a+159>>0]|0)+(d[a+191>>0]|0)+(d[a+223>>0]|0)|0;c=(3?b>>>3:b)&255;Nf(a|0,c|0,8)|0;Nf(a+32|0,c|0,8)|0;Nf(a+64|0,c|0,8)|0;Nf(a+96|0,c|0,8)|0;Nf(a+128|0,c|0,8)|0;Nf(a+160|0,c|0,8)|0;Nf(a+192|0,c|0,8)|0;Nf(a+224|0,c|0,8)|0;return}function ge(a){a=a|0;var b=0,c=0;b=(d[a+-32>>0]|0)+4+(d[a+-31>>0]|0)+(d[a+-30>>0]|0)+(d[a+-29>>0]|0)+(d[a+-28>>0]|0)+(d[a+-27>>0]|0)+(d[a+-26>>0]|0)+(d[a+-25>>0]|0)|0;c=(3?b>>>3:b)&255;Nf(a|0,c|0,8)|0;Nf(a+32|0,c|0,8)|0;Nf(a+64|0,c|0,8)|0;Nf(a+96|0,c|0,8)|0;Nf(a+128|0,c|0,8)|0;Nf(a+160|0,c|0,8)|0;Nf(a+192|0,c|0,8)|0;Nf(a+224|0,c|0,8)|0;return}function he(b){b=b|0;var c=0,d=0;c=b;d=c;a[d>>0]=-2139062144;a[d+1>>0]=-2139062144>>8;a[d+2>>0]=-2139062144>>16;a[d+3>>0]=-2139062144>>24;d=c+4|0;a[d>>0]=-2139062144;a[d+1>>0]=-2139062144>>8;a[d+2>>0]=-2139062144>>16;a[d+3>>0]=-2139062144>>24;d=b+32|0;c=d;a[c>>0]=-2139062144;a[c+1>>0]=-2139062144>>8;a[c+2>>0]=-2139062144>>16;a[c+3>>0]=-2139062144>>24;c=d+4|0;a[c>>0]=-2139062144;a[c+1>>0]=-2139062144>>8;a[c+2>>0]=-2139062144>>16;a[c+3>>0]=-2139062144>>24;c=b+64|0;d=c;a[d>>0]=-2139062144;a[d+1>>0]=-2139062144>>8;a[d+2>>0]=-2139062144>>16;a[d+3>>0]=-2139062144>>24;d=c+4|0;a[d>>0]=-2139062144;a[d+1>>0]=-2139062144>>8;a[d+2>>0]=-2139062144>>16;a[d+3>>0]=-2139062144>>24;d=b+96|0;c=d;a[c>>0]=-2139062144;a[c+1>>0]=-2139062144>>8;a[c+2>>0]=-2139062144>>16;a[c+3>>0]=-2139062144>>24;c=d+4|0;a[c>>0]=-2139062144;a[c+1>>0]=-2139062144>>8;a[c+2>>0]=-2139062144>>16;a[c+3>>0]=-2139062144>>24;c=b+128|0;d=c;a[d>>0]=-2139062144;a[d+1>>0]=-2139062144>>8;a[d+2>>0]=-2139062144>>16;a[d+3>>0]=-2139062144>>24;d=c+4|0;a[d>>0]=-2139062144;a[d+1>>0]=-2139062144>>8;a[d+2>>0]=-2139062144>>16;a[d+3>>0]=-2139062144>>24;d=b+160|0;c=d;a[c>>0]=-2139062144;a[c+1>>0]=-2139062144>>8;a[c+2>>0]=-2139062144>>16;a[c+3>>0]=-2139062144>>24;c=d+4|0;a[c>>0]=-2139062144;a[c+1>>0]=-2139062144>>8;a[c+2>>0]=-2139062144>>16;a[c+3>>0]=-2139062144>>24;c=b+192|0;d=c;a[d>>0]=-2139062144;a[d+1>>0]=-2139062144>>8;a[d+2>>0]=-2139062144>>16;a[d+3>>0]=-2139062144>>24;d=c+4|0;a[d>>0]=-2139062144;a[d+1>>0]=-2139062144>>8;a[d+2>>0]=-2139062144>>16;a[d+3>>0]=-2139062144>>24;d=b+224|0;b=d;a[b>>0]=-2139062144;a[b+1>>0]=-2139062144>>8;a[b+2>>0]=-2139062144>>16;a[b+3>>0]=-2139062144>>24;b=d+4|0;a[b>>0]=-2139062144;a[b+1>>0]=-2139062144>>8;a[b+2>>0]=-2139062144>>16;a[b+3>>0]=-2139062144>>24;return}function ie(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;if((e|0)==1){f=c;g=0;h=b;i=a[c+6>>0]|0;while(1){j=(d[h>>0]|0)+-120|0;k=(4?j>>4:j)+(d[f>>0]|0)|0;a[f>>0]=k>>>0>255?(31?k>>>31:k)+255|0:k;k=(d[h+1>>0]|0)+-120|0;j=f+1|0;l=(4?k>>4:k)+(d[j>>0]|0)|0;a[j>>0]=l>>>0>255?(31?l>>>31:l)+255|0:l;l=(d[h+2>>0]|0)+-120|0;j=f+2|0;k=(4?l>>4:l)+(d[j>>0]|0)|0;a[j>>0]=k>>>0>255?(31?k>>>31:k)+255|0:k;k=(d[h+3>>0]|0)+-120|0;j=f+3|0;l=(4?k>>4:k)+(d[j>>0]|0)|0;a[j>>0]=l>>>0>255?(31?l>>>31:l)+255|0:l;l=(d[h+4>>0]|0)+-120|0;j=f+4|0;k=(4?l>>4:l)+(d[j>>0]|0)|0;a[j>>0]=k>>>0>255?(31?k>>>31:k)+255|0:k;k=(d[h+5>>0]|0)+-120|0;j=f+5|0;l=(4?k>>4:k)+(d[j>>0]|0)|0;a[j>>0]=l>>>0>255?(31?l>>>31:l)+255|0:l;l=(d[h+6>>0]|0)+-120|0;j=(4?l>>4:l)+(i&255)|0;a[f+6>>0]=j>>>0>255?(31?j>>>31:j)+255|0:j;j=(d[h+7>>0]|0)+-120|0;l=f+7|0;k=(4?j>>4:j)+(d[l>>0]|0)|0;i=(k>>>0>255?(31?k>>>31:k)+255|0:k)&255;a[l>>0]=i;g=g+1|0;if((g|0)==8)break;else{f=f+e|0;h=h+8|0}}return}else{h=c;c=0;f=b;while(1){b=(d[f>>0]|0)+-120|0;g=(4?b>>4:b)+(d[h>>0]|0)|0;a[h>>0]=g>>>0>255?(31?g>>>31:g)+255|0:g;g=(d[f+1>>0]|0)+-120|0;b=h+1|0;i=(4?g>>4:g)+(d[b>>0]|0)|0;a[b>>0]=i>>>0>255?(31?i>>>31:i)+255|0:i;i=(d[f+2>>0]|0)+-120|0;b=h+2|0;g=(4?i>>4:i)+(d[b>>0]|0)|0;a[b>>0]=g>>>0>255?(31?g>>>31:g)+255|0:g;g=(d[f+3>>0]|0)+-120|0;b=h+3|0;i=(4?g>>4:g)+(d[b>>0]|0)|0;a[b>>0]=i>>>0>255?(31?i>>>31:i)+255|0:i;i=(d[f+4>>0]|0)+-120|0;b=h+4|0;g=(4?i>>4:i)+(d[b>>0]|0)|0;a[b>>0]=g>>>0>255?(31?g>>>31:g)+255|0:g;g=(d[f+5>>0]|0)+-120|0;b=h+5|0;i=(4?g>>4:g)+(d[b>>0]|0)|0;a[b>>0]=i>>>0>255?(31?i>>>31:i)+255|0:i;i=(d[f+6>>0]|0)+-120|0;b=h+6|0;g=(4?i>>4:i)+(d[b>>0]|0)|0;a[b>>0]=g>>>0>255?(31?g>>>31:g)+255|0:g;g=(d[f+7>>0]|0)+-120|0;b=h+7|0;i=(4?g>>4:g)+(d[b>>0]|0)|0;a[b>>0]=i>>>0>255?(31?i>>>31:i)+255|0:i;c=c+1|0;if((c|0)==8)break;else{h=h+e|0;f=f+8|0}}return}}function je(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;k=h<<1|1;if((g|0)<=0)return;h=r(e,-3)|0;l=r(e,-2)|0;m=0-e|0;n=e<<1;o=e*3|0;p=c[2027]|0;q=r(e,-4)|0;s=c[2024]|0;t=c[2025]|0;u=c[2026]|0;v=b;b=g;while(1){g=b;b=b+-1|0;w=d[v+h>>0]|0;x=v+l|0;y=d[x>>0]|0;z=v+m|0;A=d[z>>0]|0;B=d[v>>0]|0;C=v+e|0;D=d[C>>0]|0;E=d[v+n>>0]|0;F=d[v+o>>0]|0;G=y-D|0;do if((((((((d[p+(A-B)>>0]<<2)+(d[p+G>>0]|0)|0)<=(k|0)?(d[p+((d[v+q>>0]|0)-w)>>0]|0)<=(i|0):0)?(d[p+(w-y)>>0]|0)<=(i|0):0)?(H=d[p+(y-A)>>0]|0,(H|0)<=(i|0)):0)?(d[p+(F-E)>>0]|0)<=(i|0):0)?(d[p+(E-D)>>0]|0)<=(i|0):0)?(I=d[p+(D-B)>>0]|0,(I|0)<=(i|0)):0){J=(B-A|0)*3|0;if((H|0)>(j|0)|(I|0)>(j|0)){I=J+(a[s+G>>0]|0)|0;H=I+4|0;K=a[t+(3?H>>3:H)>>0]|0;H=I+3|0;a[z>>0]=a[u+((a[t+(3?H>>3:H)>>0]|0)+A)>>0]|0;a[v>>0]=a[u+(B-K)>>0]|0;break}else{K=J+4|0;H=a[t+(3?K>>3:K)>>0]|0;K=J+3|0;J=a[t+(3?K>>3:K)>>0]|0;K=H+1|0;I=1?K>>1:K;a[x>>0]=a[u+(I+y)>>0]|0;a[z>>0]=a[u+(J+A)>>0]|0;a[v>>0]=a[u+(B-H)>>0]|0;a[C>>0]=a[u+(D-I)>>0]|0;break}}while(0);if((g|0)<=1)break;else v=v+f|0}return}function ke(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;k=h<<1|1;if((g|0)<=0)return;h=r(e,-3)|0;l=r(e,-2)|0;m=0-e|0;n=e<<1;o=e*3|0;p=c[2027]|0;q=r(e,-4)|0;s=c[2024]|0;t=c[2025]|0;u=c[2026]|0;v=b;b=g;while(1){g=b;b=b+-1|0;w=v+h|0;x=d[w>>0]|0;y=v+l|0;z=d[y>>0]|0;A=v+m|0;B=d[A>>0]|0;C=d[v>>0]|0;D=v+e|0;E=d[D>>0]|0;F=v+n|0;G=d[F>>0]|0;H=d[v+o>>0]|0;I=z-E|0;do if((((((((d[p+(B-C)>>0]<<2)+(d[p+I>>0]|0)|0)<=(k|0)?(d[p+((d[v+q>>0]|0)-x)>>0]|0)<=(i|0):0)?(d[p+(x-z)>>0]|0)<=(i|0):0)?(J=d[p+(z-B)>>0]|0,(J|0)<=(i|0)):0)?(d[p+(H-G)>>0]|0)<=(i|0):0)?(d[p+(G-E)>>0]|0)<=(i|0):0)?(K=d[p+(E-C)>>0]|0,(K|0)<=(i|0)):0){L=((C-B|0)*3|0)+(a[s+I>>0]|0)|0;if((J|0)>(j|0)|(K|0)>(j|0)){K=L+4|0;J=a[t+(3?K>>3:K)>>0]|0;K=L+3|0;a[A>>0]=a[u+((a[t+(3?K>>3:K)>>0]|0)+B)>>0]|0;a[v>>0]=a[u+(C-J)>>0]|0;break}else{J=a[s+L>>0]|0;L=(J*27|0)+63|0;K=7?L>>7:L;L=(J*18|0)+63|0;M=7?L>>7:L;L=(J*9|0)+63|0;J=7?L>>7:L;a[w>>0]=a[u+(J+x)>>0]|0;a[y>>0]=a[u+(M+z)>>0]|0;a[A>>0]=a[u+(K+B)>>0]|0;a[v>>0]=a[u+(C-K)>>0]|0;a[D>>0]=a[u+(E-M)>>0]|0;a[F>>0]=a[u+(G-J)>>0]|0;break}}while(0);if((g|0)<=1)break;else v=v+f|0}return}function le(e,f){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;g=Y;Y=Y+64|0;h=g;i=b[e>>1]|0;j=b[e+16>>1]|0;k=j+i|0;l=i-j|0;j=b[e+8>>1]|0;i=j*35468|0;m=b[e+24>>1]|0;n=m*20091|0;o=(16?i>>16:i)-m-(16?n>>16:n)|0;n=j*20091|0;i=m*35468|0;m=(16?n>>16:n)+j+(16?i>>16:i)|0;c[h>>2]=m+k;i=h+4|0;c[i>>2]=o+l;c[h+8>>2]=l-o;c[h+12>>2]=k-m;m=b[e+2>>1]|0;k=b[e+18>>1]|0;o=k+m|0;l=m-k|0;k=b[e+10>>1]|0;m=k*35468|0;j=b[e+26>>1]|0;n=j*20091|0;p=(16?m>>16:m)-j-(16?n>>16:n)|0;n=k*20091|0;m=j*35468|0;j=(16?n>>16:n)+k+(16?m>>16:m)|0;m=j+o|0;c[h+16>>2]=m;c[h+20>>2]=p+l;c[h+24>>2]=l-p;c[h+28>>2]=o-j;j=b[e+4>>1]|0;o=b[e+20>>1]|0;p=o+j|0;l=j-o|0;o=b[e+12>>1]|0;j=o*35468|0;k=b[e+28>>1]|0;n=k*20091|0;q=(16?j>>16:j)-k-(16?n>>16:n)|0;n=o*20091|0;j=k*35468|0;k=(16?n>>16:n)+o+(16?j>>16:j)|0;j=k+p|0;c[h+32>>2]=j;c[h+36>>2]=q+l;c[h+40>>2]=l-q;c[h+44>>2]=p-k;k=b[e+6>>1]|0;p=b[e+22>>1]|0;q=p+k|0;l=k-p|0;p=b[e+14>>1]|0;k=p*35468|0;o=b[e+30>>1]|0;e=o*20091|0;n=(16?k>>16:k)-o-(16?e>>16:e)|0;e=p*20091|0;k=o*35468|0;o=(16?e>>16:e)+p+(16?k>>16:k)|0;k=o+q|0;c[h+48>>2]=k;p=n+l|0;c[h+52>>2]=p;c[h+56>>2]=l-n;c[h+60>>2]=q-o;o=(c[h>>2]|0)+4|0;q=o+j|0;n=o-j|0;j=m*35468|0;o=k*20091|0;l=(16?j>>16:j)-k-(16?o>>16:o)|0;o=m*20091|0;j=k*35468|0;k=(16?o>>16:o)+m+(16?j>>16:j)|0;j=k+q|0;m=(3?j>>3:j)+(d[f>>0]|0)|0;a[f>>0]=m>>>0>255?(31?m>>>31:m)+255|0:m;m=f+1|0;j=l+n|0;o=(3?j>>3:j)+(d[m>>0]|0)|0;a[m>>0]=o>>>0>255?(31?o>>>31:o)+255|0:o;o=f+2|0;m=n-l|0;l=(3?m>>3:m)+(d[o>>0]|0)|0;a[o>>0]=l>>>0>255?(31?l>>>31:l)+255|0:l;l=f+3|0;o=q-k|0;k=(3?o>>3:o)+(d[l>>0]|0)|0;a[l>>0]=k>>>0>255?(31?k>>>31:k)+255|0:k;k=f+32|0;l=(c[i>>2]|0)+4|0;i=c[h+36>>2]|0;o=l+i|0;q=l-i|0;i=c[h+20>>2]|0;l=i*35468|0;m=p*20091|0;n=(16?l>>16:l)-p-(16?m>>16:m)|0;m=i*20091|0;l=p*35468|0;p=(16?m>>16:m)+i+(16?l>>16:l)|0;l=p+o|0;i=(3?l>>3:l)+(d[k>>0]|0)|0;a[k>>0]=i>>>0>255?(31?i>>>31:i)+255|0:i;i=f+33|0;k=n+q|0;l=(3?k>>3:k)+(d[i>>0]|0)|0;a[i>>0]=l>>>0>255?(31?l>>>31:l)+255|0:l;l=f+34|0;i=q-n|0;n=(3?i>>3:i)+(d[l>>0]|0)|0;a[l>>0]=n>>>0>255?(31?n>>>31:n)+255|0:n;n=f+35|0;l=o-p|0;p=(3?l>>3:l)+(d[n>>0]|0)|0;a[n>>0]=p>>>0>255?(31?p>>>31:p)+255|0:p;p=f+64|0;n=(c[h+8>>2]|0)+4|0;l=c[h+40>>2]|0;o=n+l|0;i=n-l|0;l=c[h+24>>2]|0;n=l*35468|0;q=c[h+56>>2]|0;k=q*20091|0;m=(16?n>>16:n)-q-(16?k>>16:k)|0;k=l*20091|0;n=q*35468|0;q=(16?k>>16:k)+l+(16?n>>16:n)|0;n=q+o|0;l=(3?n>>3:n)+(d[p>>0]|0)|0;a[p>>0]=l>>>0>255?(31?l>>>31:l)+255|0:l;l=f+65|0;p=m+i|0;n=(3?p>>3:p)+(d[l>>0]|0)|0;a[l>>0]=n>>>0>255?(31?n>>>31:n)+255|0:n;n=f+66|0;l=i-m|0;m=(3?l>>3:l)+(d[n>>0]|0)|0;a[n>>0]=m>>>0>255?(31?m>>>31:m)+255|0:m;m=f+67|0;n=o-q|0;q=(3?n>>3:n)+(d[m>>0]|0)|0;a[m>>0]=q>>>0>255?(31?q>>>31:q)+255|0:q;q=f+96|0;m=(c[h+12>>2]|0)+4|0;n=c[h+44>>2]|0;o=m+n|0;l=m-n|0;n=c[h+28>>2]|0;m=n*35468|0;i=c[h+60>>2]|0;h=i*20091|0;p=(16?m>>16:m)-i-(16?h>>16:h)|0;h=n*20091|0;m=i*35468|0;i=(16?h>>16:h)+n+(16?m>>16:m)|0;m=i+o|0;n=(3?m>>3:m)+(d[q>>0]|0)|0;a[q>>0]=n>>>0>255?(31?n>>>31:n)+255|0:n;n=f+97|0;q=p+l|0;m=(3?q>>3:q)+(d[n>>0]|0)|0;a[n>>0]=m>>>0>255?(31?m>>>31:m)+255|0:m;m=f+98|0;n=l-p|0;p=(3?n>>3:n)+(d[m>>0]|0)|0;a[m>>0]=p>>>0>255?(31?p>>>31:p)+255|0:p;p=f+99|0;f=o-i|0;i=(3?f>>3:f)+(d[p>>0]|0)|0;a[p>>0]=i>>>0>255?(31?i>>>31:i)+255|0:i;Y=g;return}function me(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if((a|0)==0|(d|0)==0|(e&-256|0)!=512){f=2;return f|0}e=d;g=e+40|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(g|0));f=ne(a,b,d,d+4|0,d+8|0,d+12|0,d+16|0,0)|0;return f|0}function ne(a,b,e,f,g,h,i,j){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Z=0,_=0,$=0,aa=0;k=Y;Y=Y+16|0;l=k+4|0;m=k;n=a;c[l>>2]=0;c[m>>2]=0;o=(j|0)!=0;if(o)p=c[j+8>>2]|0;else p=0;if((a|0)==0|b>>>0<12){q=7;Y=k;return q|0}if(!(af(a,8828,4)|0)){if(af(a+8|0,8833,4)|0){q=3;Y=k;return q|0}s=(d[a+5>>0]|0)<<8|(d[a+4>>0]|0)|((d[a+7>>0]|0)<<8|(d[a+6>>0]|0))<<16;if((s+-12|0)>>>0>4294967274){q=3;Y=k;return q|0}t=b+-12|0;if(t>>>0<8|(p|0)!=0&s>>>0>(b+-8|0)>>>0){q=7;Y=k;return q|0}else{u=t;v=a+12|0;w=s;x=1}}else{u=b;v=n;w=0;x=0}s=v;if(!(af(s,8838,4)|0)){if(((d[s+5>>0]|0)<<8|(d[s+4>>0]|0)|((d[s+7>>0]|0)<<8|(d[s+6>>0]|0))<<16|0)!=10){q=3;Y=k;return q|0}if(u>>>0<18){q=7;Y=k;return q|0}a=d[s+8>>0]|0;t=((d[s+13>>0]|0)<<8|(d[s+12>>0]|0)|(d[s+14>>0]|0)<<16)+1|0;y=((d[s+16>>0]|0)<<8|(d[s+15>>0]|0)|(d[s+17>>0]|0)<<16)+1|0;z=r(t,y)|0;A=(y|0)==0;if(A?0:((z>>>0)/((A?1:y)>>>0)|0|0)!=(t|0)){q=3;Y=k;return q|0}A=a&2;if(x){B=a;C=1;D=y;E=t;F=u+-18|0;G=1?A>>>1:A;H=s+18|0;I=(A|0)!=0;J=1}else{q=3;Y=k;return q|0}}else{B=0;C=0;D=0;E=0;F=u;G=0;H=v;I=0;J=0}v=(g|0)==0;if(!v)c[g>>2]=(4?B>>>4:B)&1;if(h|0)c[h>>2]=G;h=(i|0)==0;if(!h)c[i>>2]=0;c[l>>2]=E;c[m>>2]=D;B=(j|0)==0;a:do if(!(B&(J&I))){b:do if(F>>>0>=4){if(!(x&(C|0)!=0))if((C|w|0)==0?(u=H,(af(u,8843,4)|0)==0):0){K=u;L=25}else{M=F;N=H;O=0;P=0}else{K=H;L=25}c:do if((L|0)==25){if(F>>>0<8){Q=0;break b}if(!w){u=K;A=F;s=H;t=0;y=0;while(1){a=(d[u+5>>0]|0)<<8|(d[u+4>>0]|0)|((d[u+7>>0]|0)<<8|(d[u+6>>0]|0))<<16;if(a>>>0>4294967286){q=3;break}z=a+9&-2;if(!(af(u,8848,4)|0)){M=A;N=s;O=t;P=y;break c}if(!(af(u,8853,4)|0)){M=A;N=s;O=t;P=y;break c}if(A>>>0>>0){Q=y;break b}R=(af(u,8843,4)|0)==0;S=R?u+8|0:y;T=u+z|0;U=A-z|0;if(U>>>0<8){Q=S;break b}else{u=T;A=U;s=T;t=R?a:t;y=S}}Y=k;return q|0}y=K;t=22;s=F;A=H;u=0;S=0;while(1){a=(d[y+5>>0]|0)<<8|(d[y+4>>0]|0)|((d[y+7>>0]|0)<<8|(d[y+6>>0]|0))<<16;if(a>>>0>4294967286){q=3;L=65;break}R=a+9&-2;T=R+t|0;if(T>>>0>w>>>0){q=3;L=65;break}if(!(af(y,8848,4)|0)){M=s;N=A;O=u;P=S;break c}if(!(af(y,8853,4)|0)){M=s;N=A;O=u;P=S;break c}if(s>>>0>>0){Q=S;break b}U=(af(y,8843,4)|0)==0;z=U?y+8|0:S;V=y+R|0;W=s-R|0;if(W>>>0<8){Q=z;break b}else{y=V;t=T;s=W;A=V;u=U?a:u;S=z}}if((L|0)==65){Y=k;return q|0}}while(0);S=N;u=(af(S,8853,4)|0)==0;A=u&1;if(M>>>0<8)Q=P;else{if(u|(af(S,8848,4)|0)==0){u=(d[S+5>>0]|0)<<8|(d[S+4>>0]|0)|((d[S+7>>0]|0)<<8|(d[S+6>>0]|0))<<16;if(w>>>0>11&u>>>0>(w+-12|0)>>>0){q=3;Y=k;return q|0}s=M+-8|0;if((p|0)!=0&u>>>0>s>>>0){Q=P;break}X=s;Z=S+8|0;_=u;$=A}else{X=M;Z=N;_=M;$=oe(S,M)|0}if(_>>>0>4294967286){q=3;Y=k;return q|0}if(!(h|(G|0)!=0))c[i>>2]=($|0)==0?1:2;if(!$){if(X>>>0<10){Q=P;break}if(!(pe(Z,X,_,l,m)|0)){q=3;Y=k;return q|0}}else{if(X>>>0<5){Q=P;break}if(!(qe(Z,X,l,m,g)|0)){q=3;Y=k;return q|0}}if(C|0?!((E|0)==(c[l>>2]|0)?(D|0)==(c[m>>2]|0):0):0){q=3;Y=k;return q|0}if(!o){aa=P;break a}c[j>>2]=n;c[j+4>>2]=b;S=j+8|0;c[S>>2]=0;c[S+4>>2]=0;c[j+16>>2]=P;c[j+20>>2]=O;c[j+24>>2]=_;c[j+28>>2]=w;c[j+32>>2]=$;c[j+12>>2]=Z-n;aa=P;break a}}else Q=0;while(0);if(B&(C|0)!=0)aa=Q;else{q=7;Y=k;return q|0}}else aa=0;while(0);if(!v)c[g>>2]=c[g>>2]|(aa|0)!=0;if(e|0)c[e>>2]=c[l>>2];if(!f){q=0;Y=k;return q|0}c[f>>2]=c[m>>2];q=0;Y=k;return q|0}function oe(b,c){b=b|0;c=c|0;var e=0;if(c>>>0<=4){e=0;return e|0}if((a[b>>0]|0)!=47){e=0;return e|0}e=(d[b+4>>0]|0)<32&1;return e|0}function pe(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;if((b|0)==0|e>>>0<10){i=0;return i|0}if((a[b+3>>0]|0)!=-99){i=0;return i|0}if((a[b+4>>0]|0)!=1){i=0;return i|0}if((a[b+5>>0]|0)!=42){i=0;return i|0}e=d[b>>0]|0;j=d[b+1>>0]<<8|e|d[b+2>>0]<<16;k=d[b+7>>0]<<8&16128|d[b+6>>0];l=d[b+9>>0]<<8&16128|d[b+8>>0];if(!((e&25|0)==16&(5?j>>>5:j)>>>0>>0)){i=0;return i|0}if((k|0)==0|(l|0)==0){i=0;return i|0}if(g|0)c[g>>2]=k;if(!h){i=1;return i|0}c[h>>2]=l;i=1;return i|0}function qe(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0;i=Y;Y=Y+32|0;j=i;if((b|0)==0|e>>>0<5){k=0;Y=i;return k|0}if((a[b>>0]|0)!=47){k=0;Y=i;return k|0}if((d[b+4>>0]|0)>31){k=0;Y=i;return k|0}$a(j,b,e);if(((Ga(j,8)|0)==47?(e=(Ga(j,14)|0)+1|0,b=(Ga(j,14)|0)+1|0,l=Ga(j,1)|0,(Ga(j,3)|0)==0):0)?(c[j+24>>2]|0)==0:0){if(f|0)c[f>>2]=e;if(g|0)c[g>>2]=b;if(!h)m=1;else{c[h>>2]=l;m=1}}else m=0;k=m;Y=i;return k|0}function re(a){a=a|0;var b=0;if(!a)return;b=(ed()|0)+20|0;ea[c[b>>2]&31](a+124|0);oa(a);b=a+2288|0;pa(c[b>>2]|0);c[b>>2]=0;c[a+2292>>2]=0;b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[a+4>>2]=0;pa(a);return}function se(){var a=0,b=0;a=va(1,0,2376)|0;if(!a)return a|0;c[a>>2]=0;c[a+8>>2]=8858;b=ed()|0;ea[c[b>>2]&31](a+124|0);c[a+4>>2]=0;c[a+312>>2]=0;if(c[2549]|0)return a|0;c[2549]=1;return a|0}function te(){var a=0,b=0;a=va(1,0,272)|0;if(!a){b=0;return b|0}c[a>>2]=0;c[a+4>>2]=2;_a();b=a;return b|0}function ue(e,f){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,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;if(!e){g=0;return g|0}c[e>>2]=0;h=e+8|0;c[h>>2]=8858;if(!f){c[e>>2]=2;c[h>>2]=8861;c[e+4>>2]=0;g=0;return g|0}i=c[f+64>>2]|0;j=c[f+60>>2]|0;if(j>>>0<4){c[e>>2]=7;c[h>>2]=8898;c[e+4>>2]=0;g=0;return g|0}k=d[i>>0]|0;l=d[i+1>>0]<<8|k|d[i+2>>0]<<16;m=(k&1^1)&255;n=e+40|0;a[n>>0]=m;o=(1?k>>>1:k)&7;a[e+41>>0]=o;p=(4?k>>>4:k)&1;a[e+42>>0]=p;k=5?l>>>5:l;l=e+44|0;c[l>>2]=k;if((o&255)>3){c[e>>2]=3;c[h>>2]=8916;c[e+4>>2]=0;g=0;return g|0}if(!(p<<24>>24)){c[e>>2]=4;c[h>>2]=8947;c[e+4>>2]=0;g=0;return g|0}p=i+3|0;o=j+-3|0;do if(!(m<<24>>24)){q=p;r=o;s=k}else{if(o>>>0<7){c[e>>2]=7;c[h>>2]=8970;c[e+4>>2]=0;g=0;return g|0}if(((a[p>>0]|0)==-99?(a[i+4>>0]|0)==1:0)?(a[i+5>>0]|0)==42:0){t=i+7|0;u=d[t>>0]<<8&16128|d[i+6>>0];b[e+48>>1]=u;v=a[t>>0]|0;a[e+52>>0]=6?(v&255)>>>6:v&255;v=i+9|0;t=d[v>>0]<<8&16128|d[i+8>>0];b[e+50>>1]=t;w=a[v>>0]|0;a[e+53>>0]=6?(w&255)>>>6:w&255;w=u+15|0;c[e+288>>2]=4?w>>>4:w;w=t+15|0;c[e+292>>2]=4?w>>>4:w;c[f>>2]=u;c[f+4>>2]=t;c[f+72>>2]=0;c[f+84>>2]=0;c[f+76>>2]=0;c[f+80>>2]=u;c[f+88>>2]=t;c[f+92>>2]=0;c[f+96>>2]=u;c[f+100>>2]=t;c[f+12>>2]=u;c[f+16>>2]=t;De(e+904|0);c[e+104>>2]=0;c[e+108>>2]=0;c[e+112>>2]=1;c[e+116>>2]=0;c[e+120>>2]=0;q=i+10|0;r=j+-10|0;s=c[l>>2]|0;break}c[e>>2]=3;c[h>>2]=8998;c[e+4>>2]=0;g=0;return g|0}while(0);if(s>>>0>r>>>0){if(c[e>>2]|0){g=0;return g|0}c[e>>2]=7;c[h>>2]=9012;c[e+4>>2]=0;g=0;return g|0}j=e+12|0;Ee(j,q,s);s=c[l>>2]|0;l=q+s|0;i=r-s|0;if(a[n>>0]|0){s=(Fe(j,1)|0)&255;a[e+54>>0]=s;s=(Fe(j,1)|0)&255;a[e+55>>0]=s}s=Fe(j,1)|0;c[e+104>>2]=s;if(s){s=Fe(j,1)|0;f=e+108|0;c[f>>2]=s;if(Fe(j,1)|0){s=Fe(j,1)|0;c[e+112>>2]=s;if(!(Fe(j,1)|0))x=0;else x=(Ge(j,7)|0)&255;a[e+116>>0]=x;if(!(Fe(j,1)|0))y=0;else y=(Ge(j,7)|0)&255;a[e+117>>0]=y;if(!(Fe(j,1)|0))z=0;else z=(Ge(j,7)|0)&255;a[e+118>>0]=z;if(!(Fe(j,1)|0))A=0;else A=(Ge(j,7)|0)&255;a[e+119>>0]=A;if(!(Fe(j,1)|0))B=0;else B=(Ge(j,6)|0)&255;a[e+120>>0]=B;if(!(Fe(j,1)|0))C=0;else C=(Ge(j,6)|0)&255;a[e+121>>0]=C;if(!(Fe(j,1)|0))D=0;else D=(Ge(j,6)|0)&255;a[e+122>>0]=D;if(!(Fe(j,1)|0))E=0;else E=(Ge(j,6)|0)&255;a[e+123>>0]=E}if(c[f>>2]|0){if(!(Fe(j,1)|0))F=-1;else F=(Fe(j,8)|0)&255;a[e+904>>0]=F;if(!(Fe(j,1)|0))G=-1;else G=(Fe(j,8)|0)&255;a[e+905>>0]=G;if(!(Fe(j,1)|0))H=-1;else H=(Fe(j,8)|0)&255;a[e+906>>0]=H}}else c[e+108>>2]=0;H=e+36|0;if(c[H>>2]|0){if(c[e>>2]|0){g=0;return g|0}c[e>>2]=3;c[h>>2]=9033;c[e+4>>2]=0;g=0;return g|0}G=Fe(j,1)|0;F=e+56|0;c[F>>2]=G;G=Fe(j,6)|0;f=e+60|0;c[f>>2]=G;G=Fe(j,3)|0;c[e+64>>2]=G;G=Fe(j,1)|0;c[e+68>>2]=G;do if(G|0?Fe(j,1)|0:0){if(Fe(j,1)|0){E=Ge(j,6)|0;c[e+72>>2]=E}if(Fe(j,1)|0){E=Ge(j,6)|0;c[e+76>>2]=E}if(Fe(j,1)|0){E=Ge(j,6)|0;c[e+80>>2]=E}if(Fe(j,1)|0){E=Ge(j,6)|0;c[e+84>>2]=E}if(Fe(j,1)|0){E=Ge(j,6)|0;c[e+88>>2]=E}if(Fe(j,1)|0){E=Ge(j,6)|0;c[e+92>>2]=E}if(Fe(j,1)|0){E=Ge(j,6)|0;c[e+96>>2]=E}if(!(Fe(j,1)|0))break;E=Ge(j,6)|0;c[e+100>>2]=E}while(0);if(!(c[f>>2]|0))I=0;else I=(c[F>>2]|0)==0?2:1;c[e+2308>>2]=I;if(c[H>>2]|0){if(c[e>>2]|0){g=0;return g|0}c[e>>2]=3;c[h>>2]=9061;c[e+4>>2]=0;g=0;return g|0}H=q+r|0;r=(1<<(Fe(j,2)|0))+-1|0;c[e+312>>2]=r;q=r*3|0;if(i>>>0>=q>>>0){I=l+q|0;F=i-q|0;if(!r){J=F;K=I}else{q=0;i=F;F=I;I=l;while(1){l=d[I+1>>0]<<8|d[I>>0]|d[I+2>>0]<<16;f=l>>>0>i>>>0?i:l;Ee(e+316+(q*28|0)|0,F,f);l=F+f|0;G=i-f|0;q=q+1|0;if((q|0)==(r|0)){J=G;K=l;break}else{i=G;F=l;I=I+3|0}}}Ee(e+316+(r*28|0)|0,K,J);if(K>>>0>>0){He(e);if(a[n>>0]|0){Fe(j,1)|0;Ie(j,e);c[e+4>>2]=1;g=1;return g|0}if(c[e>>2]|0){g=0;return g|0}c[e>>2]=4;c[h>>2]=9112;c[e+4>>2]=0;g=0;return g|0}else L=5}else L=7;if(c[e>>2]|0){g=0;return g|0}c[e>>2]=L;c[h>>2]=9088;c[e+4>>2]=0;g=0;return g|0}function ve(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0;f=e+288|0;if((c[f>>2]|0)<=0){g=e+36|0;h=c[g>>2]|0;i=(h|0)==0;j=i&1;return j|0}k=e+2244|0;l=e+2248|0;m=e+2304|0;n=e+108|0;o=e+2236|0;p=e+904|0;q=b+4|0;t=b+8|0;u=e+2240|0;v=b+12|0;w=b+20|0;x=e+906|0;y=e+905|0;z=0;do{A=(c[k>>2]|0)+(z<<2)|0;B=c[m>>2]|0;if(!(c[n>>2]|0))C=0;else{D=d[p>>0]|0;E=c[q>>2]|0;F=c[t>>2]|0;do if((F|0)<0){G=c[v>>2]|0;if(G>>>0<(c[w>>2]|0)>>>0){H=d[G>>0]|d[G+1>>0]<<8|d[G+2>>0]<<16|d[G+3>>0]<<24;c[v>>2]=G+3;G=Kf(H|0)|0;c[b>>2]=c[b>>2]<<24|(8?G>>>8:G);G=F+24|0;c[t>>2]=G;I=G;break}else{Ce(b);I=c[t>>2]|0;break}}else I=F;while(0);F=r(E,D)|0;G=8?F>>>8:F;F=c[b>>2]|0;H=(I?F>>>I:F)>>>0>G>>>0;if(H){J=F-(G+1<>2]=J;K=E-G|0;L=J}else{K=G+1|0;L=F}F=(s(K|0)|0)^24;G=I-F|0;c[t>>2]=G;J=(K<>2]=J;if(H){H=d[x>>0]|0;do if((G|0)<0){F=c[v>>2]|0;if(F>>>0<(c[w>>2]|0)>>>0){M=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;c[v>>2]=F+3;F=Kf(M|0)|0;M=(8?F>>>8:F)|L<<24;c[b>>2]=M;F=G+24|0;c[t>>2]=F;N=M;O=F;break}else{Ce(b);N=c[b>>2]|0;O=c[t>>2]|0;break}}else{N=L;O=G}while(0);E=r(J,H)|0;D=8?E>>>8:E;E=(O?N>>>O:N)>>>0>D>>>0;if(E){c[b>>2]=N-(D+1<>2]=O-D;c[q>>2]=(P<>0]|0;do if((G|0)<0){D=c[v>>2]|0;if(D>>>0<(c[w>>2]|0)>>>0){F=d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24;c[v>>2]=D+3;D=Kf(F|0)|0;F=(8?D>>>8:D)|L<<24;c[b>>2]=F;D=G+24|0;c[t>>2]=D;R=F;S=D;break}else{Ce(b);R=c[b>>2]|0;S=c[t>>2]|0;break}}else{R=L;S=G}while(0);G=r(J,E)|0;H=8?G>>>8:G;G=(S?R>>>S:R)>>>0>H>>>0;if(G){c[b>>2]=R-(H+1<>2]=S-H;c[q>>2]=(T<>0]=C;if(!(c[o>>2]|0)){U=c[t>>2]|0;V=c[q>>2]|0}else{G=d[u>>0]|0;H=c[q>>2]|0;D=c[t>>2]|0;do if((D|0)<0){F=c[v>>2]|0;if(F>>>0<(c[w>>2]|0)>>>0){M=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;c[v>>2]=F+3;F=Kf(M|0)|0;c[b>>2]=c[b>>2]<<24|(8?F>>>8:F);F=D+24|0;c[t>>2]=F;W=F;break}else{Ce(b);W=c[t>>2]|0;break}}else W=D;while(0);D=r(H,G)|0;J=8?D>>>8:D;D=c[b>>2]|0;E=(W?D>>>W:D)>>>0>J>>>0;if(E){c[b>>2]=D-(J+1<>2]=D;F=(X<>2]=F;a[B+(z*800|0)+797>>0]=E&1;U=D;V=F}do if((U|0)<0){F=c[v>>2]|0;if(F>>>0<(c[w>>2]|0)>>>0){D=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;c[v>>2]=F+3;F=Kf(D|0)|0;c[b>>2]=c[b>>2]<<24|(8?F>>>8:F);F=U+24|0;c[t>>2]=F;Y=F;break}else{Ce(b);Y=c[t>>2]|0;break}}else Y=U;while(0);H=V*145|0;G=8?H>>>8:H;H=c[b>>2]|0;F=(Y?H>>>Y:H)>>>0>G>>>0;if(F){D=H-(G+1<>2]=D;Z=V-G|0;_=D}else{Z=G+1|0;_=H}H=(s(Z|0)|0)^24;G=Y-H|0;c[t>>2]=G;D=(Z<>2]=D;a[B+(z*800|0)+768>>0]=(F^1)&1;if(F){do if((G|0)<0){F=c[v>>2]|0;if(F>>>0<(c[w>>2]|0)>>>0){H=d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24;c[v>>2]=F+3;F=Kf(H|0)|0;H=(8?F>>>8:F)|_<<24;c[b>>2]=H;F=G+24|0;c[t>>2]=F;$=H;aa=F;break}else{Ce(b);$=c[b>>2]|0;aa=c[t>>2]|0;break}}else{$=_;aa=G}while(0);G=D*156|0;F=8?G>>>8:G;G=(aa?$>>>aa:$)>>>0>F>>>0;if(G){H=$-(F+1<>2]=H;ba=D-F|0;ca=H}else{ba=F+1|0;ca=$}F=(s(ba|0)|0)^24;H=aa-F|0;c[t>>2]=H;E=(ba<>2]=E;F=(H|0)<0;if(G){do if(F){G=c[v>>2]|0;if(G>>>0<(c[w>>2]|0)>>>0){J=d[G>>0]|d[G+1>>0]<<8|d[G+2>>0]<<16|d[G+3>>0]<<24;c[v>>2]=G+3;G=Kf(J|0)|0;J=(8?G>>>8:G)|ca<<24;c[b>>2]=J;G=H+24|0;c[t>>2]=G;da=J;ea=G;break}else{Ce(b);da=c[b>>2]|0;ea=c[t>>2]|0;break}}else{da=ca;ea=H}while(0);D=(1?E>>>1:E)&16777215;G=(ea?da>>>ea:da)>>>0>D>>>0;if(G){c[b>>2]=da-(D+1<>2]=ea-D;c[q>>2]=(fa<>2]|0;if(G>>>0<(c[w>>2]|0)>>>0){D=d[G>>0]|d[G+1>>0]<<8|d[G+2>>0]<<16|d[G+3>>0]<<24;c[v>>2]=G+3;G=Kf(D|0)|0;D=(8?G>>>8:G)|ca<<24;c[b>>2]=D;G=H+24|0;c[t>>2]=G;ha=D;ia=G;break}else{Ce(b);ha=c[b>>2]|0;ia=c[t>>2]|0;break}}else{ha=ca;ia=H}while(0);H=E*163|0;F=8?H>>>8:H;H=(ia?ha>>>ia:ha)>>>0>F>>>0;if(H){c[b>>2]=ha-(F+1<>2]=ia-F;c[q>>2]=(ja<>0]=H;Nf(A|0,H|0,4)|0;Nf(l|0,H|0,4)|0}else{H=B+(z*800|0)+769|0;F=0;while(1){G=e+2248+F|0;D=0;J=d[G>>0]|0;do{M=A+D|0;ka=d[M>>0]|0;la=d[4144+(ka*90|0)+(J*9|0)>>0]|0;ma=c[q>>2]|0;na=c[t>>2]|0;do if((na|0)<0){oa=c[v>>2]|0;if(oa>>>0<(c[w>>2]|0)>>>0){pa=d[oa>>0]|d[oa+1>>0]<<8|d[oa+2>>0]<<16|d[oa+3>>0]<<24;c[v>>2]=oa+3;oa=Kf(pa|0)|0;c[b>>2]=c[b>>2]<<24|(8?oa>>>8:oa);oa=na+24|0;c[t>>2]=oa;qa=oa;break}else{Ce(b);qa=c[t>>2]|0;break}}else qa=na;while(0);na=r(ma,la)|0;oa=8?na>>>8:na;na=c[b>>2]|0;pa=(qa?na>>>qa:na)>>>0>oa>>>0;ra=pa&1;if(pa){pa=na-(oa+1<>2]=pa;sa=ma-oa|0;ta=pa}else{sa=oa+1|0;ta=na}na=(s(sa|0)|0)^24;oa=qa-na|0;c[t>>2]=oa;pa=(sa<>2]=pa;na=a[5056+ra>>0]|0;if(!((ra?41706>>>ra:41706)&1))ua=na;else{ra=na;na=oa;oa=ta;va=pa;while(1){pa=ra<<1;wa=d[4144+(ka*90|0)+(J*9|0)+ra>>0]|0;do if((na|0)<0){xa=c[v>>2]|0;if(xa>>>0<(c[w>>2]|0)>>>0){ya=d[xa>>0]|d[xa+1>>0]<<8|d[xa+2>>0]<<16|d[xa+3>>0]<<24;c[v>>2]=xa+3;xa=Kf(ya|0)|0;ya=(8?xa>>>8:xa)|oa<<24;c[b>>2]=ya;xa=na+24|0;c[t>>2]=xa;za=ya;Aa=xa;break}else{Ce(b);za=c[b>>2]|0;Aa=c[t>>2]|0;break}}else{za=oa;Aa=na}while(0);xa=r(va,wa)|0;ya=8?xa>>>8:xa;xa=(Aa?za>>>Aa:za)>>>0>ya>>>0;if(xa){Ba=za-(ya+1<>2]=Ba;Ca=va-ya|0;Da=Ba}else{Ca=ya+1|0;Da=za}ya=(s(Ca|0)|0)^24;na=Aa-ya|0;c[t>>2]=na;va=(Ca<>2]=va;ya=pa|xa&1;Ea=a[5056+ya>>0]|0;if(!((ya?41706>>>ya:41706)&1))break;else{ra=Ea<<24>>24;oa=Da}}ua=Ea<<24>>24}J=0-ua|0;Fa=J&255;a[M>>0]=Fa;D=D+1|0}while((D|0)!=4);D=d[A>>0]|d[A+1>>0]<<8|d[A+2>>0]<<16|d[A+3>>0]<<24;a[H>>0]=D;a[H+1>>0]=D>>8;a[H+2>>0]=D>>16;a[H+3>>0]=D>>24;a[G>>0]=Fa;F=F+1|0;if((F|0)==4)break;else H=H+4|0}}H=c[q>>2]|0;F=c[t>>2]|0;do if((F|0)<0){A=c[v>>2]|0;if(A>>>0<(c[w>>2]|0)>>>0){E=d[A>>0]|d[A+1>>0]<<8|d[A+2>>0]<<16|d[A+3>>0]<<24;c[v>>2]=A+3;A=Kf(E|0)|0;c[b>>2]=c[b>>2]<<24|(8?A>>>8:A);A=F+24|0;c[t>>2]=A;Ga=A;break}else{Ce(b);Ga=c[t>>2]|0;break}}else Ga=F;while(0);F=H*142|0;A=8?F>>>8:F;F=c[b>>2]|0;E=(Ga?F>>>Ga:F)>>>0>A>>>0;if(E){D=F-(A+1<>2]=D;Ha=H-A|0;Ia=D}else{Ha=A+1|0;Ia=F}F=(s(Ha|0)|0)^24;A=Ga-F|0;c[t>>2]=A;D=(Ha<>2]=D;if(E){do if((A|0)<0){E=c[v>>2]|0;if(E>>>0<(c[w>>2]|0)>>>0){F=d[E>>0]|d[E+1>>0]<<8|d[E+2>>0]<<16|d[E+3>>0]<<24;c[v>>2]=E+3;E=Kf(F|0)|0;F=(8?E>>>8:E)|Ia<<24;c[b>>2]=F;E=A+24|0;c[t>>2]=E;Ja=F;Ka=E;break}else{Ce(b);Ja=c[b>>2]|0;Ka=c[t>>2]|0;break}}else{Ja=Ia;Ka=A}while(0);A=D*114|0;H=8?A>>>8:A;A=(Ka?Ja>>>Ka:Ja)>>>0>H>>>0;if(A){E=Ja-(H+1<>2]=E;La=D-H|0;Ma=E}else{La=H+1|0;Ma=Ja}H=(s(La|0)|0)^24;E=Ka-H|0;c[t>>2]=E;F=(La<>2]=F;if(A){do if((E|0)<0){A=c[v>>2]|0;if(A>>>0<(c[w>>2]|0)>>>0){H=d[A>>0]|d[A+1>>0]<<8|d[A+2>>0]<<16|d[A+3>>0]<<24;c[v>>2]=A+3;A=Kf(H|0)|0;H=(8?A>>>8:A)|Ma<<24;c[b>>2]=H;A=E+24|0;c[t>>2]=A;Na=H;Oa=A;break}else{Ce(b);Na=c[b>>2]|0;Oa=c[t>>2]|0;break}}else{Na=Ma;Oa=E}while(0);E=F*183|0;D=8?E>>>8:E;E=(Oa?Na>>>Oa:Na)>>>0>D>>>0;if(E){c[b>>2]=Na-(D+1<>2]=Oa-D;c[q>>2]=(Pa<>0]=Qa;z=z+1|0}while((z|0)<(c[f>>2]|0));g=e+36|0;h=c[g>>2]|0;i=(h|0)==0;j=i&1;return j|0}function we(e,f){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,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;g=Y;Y=Y+32|0;h=g;i=c[e+2256>>2]|0;j=e+2296|0;k=c[j>>2]|0;l=i+(k<<1)|0;m=c[e+2304>>2]|0;if((c[e+2236>>2]|0)!=0?(n=a[m+(k*800|0)+797>>0]|0,o=n&255,n<<24>>24!=0):0){a[l>>0]=0;a[i+-2>>0]=0;if(!(a[m+(k*800|0)+768>>0]|0)){a[i+(k<<1)+1>>0]=0;a[i+-1>>0]=0}c[m+(k*800|0)+788>>2]=0;c[m+(k*800|0)+792>>2]=0;a[m+(k*800|0)+796>>0]=0;p=o}else{o=m+(k*800|0)|0;n=d[m+(k*800|0)+798>>0]|0;Nf(o|0,0,768)|0;if(!(a[m+(k*800|0)+768>>0]|0)){c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[h+24>>2]=0;c[h+28>>2]=0;q=i+(k<<1)+1|0;r=i+-1|0;s=da[c[2549]&1](f,e+2032|0,(d[r>>0]|0)+(d[q>>0]|0)|0,e+776+(n<<5)+8|0,0,h)|0;t=(s|0)>0&1;a[r>>0]=t;a[q>>0]=t;if((s|0)>1)ud(h,o);else{s=(b[h>>1]|0)+3|0;h=(3?s>>3:s)&65535;b[m+(k*800|0)>>1]=h;b[m+(k*800|0)+32>>1]=h;b[m+(k*800|0)+64>>1]=h;b[m+(k*800|0)+96>>1]=h;b[m+(k*800|0)+128>>1]=h;b[m+(k*800|0)+160>>1]=h;b[m+(k*800|0)+192>>1]=h;b[m+(k*800|0)+224>>1]=h;b[m+(k*800|0)+256>>1]=h;b[m+(k*800|0)+288>>1]=h;b[m+(k*800|0)+320>>1]=h;b[m+(k*800|0)+352>>1]=h;b[m+(k*800|0)+384>>1]=h;b[m+(k*800|0)+416>>1]=h;b[m+(k*800|0)+448>>1]=h;b[m+(k*800|0)+480>>1]=h}u=1;v=0}else{u=0;v=3}h=e+1964+(v*68|0)|0;v=i+-2|0;i=e+776+(n<<5)|0;s=o;o=a[l>>0]&15;t=a[v>>0]&15;q=0;r=0;while(1){w=t&255;x=o&255;y=da[c[2549]&1](f,h,(w&1)+(x&1)|0,i,u,s)|0;z=(y|0)>(u|0)&1;A=1?x>>>1:x;x=z<<7|A;B=(b[s>>1]|0)!=0&1;C=s+32|0;D=da[c[2549]&1](f,h,(A&1)+z|0,i,u,C)|0;z=(D|0)>(u|0)&1;A=1?x>>>1:x;x=z<<7|A;E=((D|0)>3?3:(D|0)>1?2:(b[C>>1]|0)!=0&1)|((y|0)>3?12:(y|0)>1?8:B<<2);B=s+64|0;y=da[c[2549]&1](f,h,(A&1)+z|0,i,u,B)|0;z=(y|0)>(u|0)&1;A=1?x>>>1:x;x=((y|0)>3?3:(y|0)>1?2:(b[B>>1]|0)!=0&1)|E<<2;E=s+96|0;B=z<<7|A&224;y=da[c[2549]&1](f,h,(A&1)+z|0,i,u,E)|0;z=((y|0)>(u|0)&1)<<7;A=(z|(1?B>>>1:B))&255;o=4?(A&255)>>>4:A&255;F=z|(1?w>>>1:w);q=x<<2|q<<8|((y|0)>3?3:(y|0)>1?2:(b[E>>1]|0)!=0&1);r=r+1|0;if((r|0)==4)break;else{s=s+128|0;t=F&255}}t=m+(k*800|0)+512|0;s=e+2100|0;r=e+776+(n<<5)+16|0;u=d[l>>0]|0;i=d[v>>0]|0;h=da[c[2549]&1](f,s,((4?i>>>4:i)&1)+((4?u>>>4:u)&1)|0,r,0,t)|0;E=(h|0)>0&1;y=(b[t>>1]|0)!=0&1;t=m+(k*800|0)+544|0;x=da[c[2549]&1](f,s,((5?u>>>5:u)&1)+E|0,r,0,t)|0;u=(x|0)>0&1;w=((x|0)>3?3:(x|0)>1?2:(b[t>>1]|0)!=0&1)|((h|0)>3?12:(h|0)>1?8:y<<2);y=m+(k*800|0)+576|0;h=da[c[2549]&1](f,s,((5?i>>>5:i)&1)+E|0,r,0,y)|0;E=(h|0)>0&1;i=((h|0)>3?3:(h|0)>1?2:(b[y>>1]|0)!=0&1)|w<<2;w=m+(k*800|0)+608|0;y=da[c[2549]&1](f,s,E+u|0,r,0,w)|0;h=(y|0)>0&1;t=((y|0)>3?3:(y|0)>1?2:(b[w>>1]|0)!=0&1)|i<<2;i=m+(k*800|0)+640|0;w=d[l>>0]|0;y=d[v>>0]|0;x=da[c[2549]&1](f,s,((6?y>>>6:y)&1)+((6?w>>>6:w)&1)|0,r,0,i)|0;z=(x|0)>0&1;A=(b[i>>1]|0)!=0&1;i=m+(k*800|0)+672|0;B=da[c[2549]&1](f,s,(7?w>>>7:w)+z|0,r,0,i)|0;w=(B|0)>0&1;C=((B|0)>3?3:(B|0)>1?2:(b[i>>1]|0)!=0&1)|((x|0)>3?12:(x|0)>1?8:A<<2);A=m+(k*800|0)+704|0;x=da[c[2549]&1](f,s,(7?y>>>7:y)+z|0,r,0,A)|0;z=(x|0)>0&1;y=((x|0)>3?3:(x|0)>1?2:(b[A>>1]|0)!=0&1)|C<<2;C=m+(k*800|0)+736|0;A=da[c[2549]&1](f,s,z+w|0,r,0,C)|0;r=(A|0)>0&1;s=t|(((A|0)>3?3:(A|0)>1?2:(b[C>>1]|0)!=0&1)|y<<2)<<8;a[l>>0]=(h<<1|E)<<4|o&255|(r<<1|z)<<6;a[v>>0]=u<<4|(4?F>>>4:F)|h<<5|w<<6|r<<7;c[m+(k*800|0)+788>>2]=q;c[m+(k*800|0)+792>>2]=s;if(!(s&43690))G=c[e+776+(n<<5)+28>>2]&255;else G=0;a[m+(k*800|0)+796>>0]=G;p=(s|q|0)==0&1}if((c[e+2308>>2]|0)<=0){H=f+24|0;I=c[H>>2]|0;J=(I|0)==0;K=J&1;Y=g;return K|0}q=c[e+2260>>2]|0;s=c[j>>2]|0;j=q+(s<<2)|0;G=e+2312+(d[m+(k*800|0)+798>>0]<<3)+(d[m+(k*800|0)+768>>0]<<2)|0;k=d[G>>0]|d[G+1>>0]<<8|d[G+2>>0]<<16|d[G+3>>0]<<24;a[j>>0]=k;a[j+1>>0]=k>>8;a[j+2>>0]=k>>16;a[j+3>>0]=k>>24;k=q+(s<<2)+2|0;a[k>>0]=d[k>>0]|(p|0)==0;H=f+24|0;I=c[H>>2]|0;J=(I|0)==0;K=J&1;Y=g;return K|0}function xe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!a){d=0;return d|0}if(!b){c[a>>2]=2;d=0;return d|0}c[a+8>>2]=b;c[a>>2]=0;e=a+24|0;$a(e,c[b+64>>2]|0,c[b+60>>2]|0);if(((Ga(e,8)|0)==47?(f=(Ga(e,14)|0)+1|0,g=(Ga(e,14)|0)+1|0,Ga(e,1)|0,(Ga(e,3)|0)==0):0)?(c[a+48>>2]|0)==0:0){c[a+4>>2]=2;c[b>>2]=f;c[b+4>>2]=g;if(ab(f,g,1,a,0)|0){d=1;return d|0}ra(a);d=0;return d|0}c[a>>2]=3;ra(a);d=0;return d|0}function ye(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0;if(!a){b=0;return b|0}d=c[a+8>>2]|0;e=c[d+40>>2]|0;f=a+4|0;a:do if(!(c[f>>2]|0)){g=a+16|0;h=a+100|0;i=a+104|0;j=23}else{k=a+12|0;c[k>>2]=c[e>>2];if(!(Ub(c[e+20>>2]|0,d,3)|0)){c[a>>2]=2;break}l=c[d>>2]|0;m=a+100|0;n=c[m>>2]|0;o=a+104|0;p=c[o>>2]|0;q=Cf(p|0,((p|0)<0)<<31>>31|0,n|0,((n|0)<0)<<31>>31|0)|0;n=v()|0;p=l&65535;r=Jf(l|0,((l|0)<0)<<31>>31|0,4)|0;l=Df(r|0,v()|0,p|0,0)|0;r=Df(l|0,v()|0,q|0,n|0)|0;n=wa(r,v()|0,4)|0;r=a+16|0;c[r>>2]=n;if(!n){c[a>>2]=1;c[a+20>>2]=0;break}c[a+20>>2]=n+(q<<2)+(p<<2);p=d+92|0;do if(c[p>>2]|0){q=c[d+12>>2]|0;n=c[d+96>>2]|0;l=c[d+16>>2]|0;s=c[d+100>>2]|0;t=((n|0)<0)<<31>>31;u=Jf(n|0,t|0,5)|0;w=Df(u|0,v()|0,84,0)|0;x=v()|0;y=Jf(n|0,t|0,2)|0;t=Df(w|0,x|0,y|0,v()|0)|0;y=wa(t,v()|0,1)|0;if(y){c[a+264>>2]=y;c[a+268>>2]=y;t=y+84|0;Wb(y,q,l,t+u|0,n,s,0,4,t);if(!(c[p>>2]|0)){j=12;break}else{j=13;break}}else{c[a>>2]=1;break a}}else j=12;while(0);if((j|0)==12){p=c[c[k>>2]>>2]|0;if((p+-7|0)>>>0>3)z=p;else j=13}if((j|0)==13){Da();z=c[c[k>>2]>>2]|0}if(z>>>0>10?(ze(),c[(c[k>>2]|0)+28>>2]|0):0)Da();if(((c[a+56>>2]|0?(c[a+120>>2]|0)>0:0)?(p=a+136|0,(c[p>>2]|0)==0):0)?(db(p,c[a+132>>2]|0)|0)==0:0){c[a>>2]=1;break}c[f>>2]=0;g=r;h=m;i=o;j=23}while(0);if((j|0)==23?Ia(a,c[g>>2]|0,c[h>>2]|0,c[i>>2]|0,c[d+88>>2]|0,2)|0:0){c[e+16>>2]=c[a+116>>2];b=1;return b|0}ra(a);b=0;return b|0}function ze(){if(Te(10168)|0)return;c[2042]=0;Ue(10168)|0;return}function Ae(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)<=0)return;f=0;do{g=c[b+(f<<2)>>2]|0;h=((g&255)*6420|0)+1081344+(((16?g>>>16:g)&255)*16839|0)+(((8?g>>>8:g)&255)*33059|0)|0;a[d+f>>0]=16?h>>>16:h;f=f+1|0}while((f|0)!=(e|0));return}function Be(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;i=1?g>>1:g;if((g|0)>1)if(!h){j=0;while(1){k=j<<1;l=c[b+(k<<2)>>2]|0;m=c[b+((k|1)<<2)>>2]|0;k=((15?m>>>15:m)&510)+((15?l>>>15:l)&510)|0;n=((7?m>>>7:m)&510)+((7?l>>>7:l)&510)|0;o=(m<<1&510)+(l<<1&510)|0;l=(r(n,-19081)|0)+(r(k,-9719)|0)+(o*28800|0)|0;m=l+33685504|0;p=18?m>>18:m;m=(r(n,-24116)|0)+(k*28800|0)+(r(o,-4684)|0)|0;o=m+33685504|0;k=18?o>>18:o;o=e+j|0;n=(p>>>0<256?p:(l|0)<-33685504?0:255)+1+(d[o>>0]|0)|0;a[o>>0]=1?n>>>1:n;n=f+j|0;o=(k>>>0<256?k:(m|0)<-33685504?0:255)+1+(d[n>>0]|0)|0;a[n>>0]=1?o>>>1:o;o=j+1|0;if((o|0)<(i|0))j=o;else{q=o;break}}}else{j=0;while(1){o=j<<1;n=c[b+(o<<2)>>2]|0;m=c[b+((o|1)<<2)>>2]|0;o=((15?m>>>15:m)&510)+((15?n>>>15:n)&510)|0;k=((7?m>>>7:m)&510)+((7?n>>>7:n)&510)|0;l=(m<<1&510)+(n<<1&510)|0;n=(r(k,-19081)|0)+(r(o,-9719)|0)+(l*28800|0)|0;m=n+33685504|0;p=18?m>>18:m;m=(r(k,-24116)|0)+(o*28800|0)+(r(l,-4684)|0)|0;l=m+33685504|0;o=18?l>>18:l;a[e+j>>0]=p>>>0<256?p:(n|0)<-33685504?0:255;a[f+j>>0]=o>>>0<256?o:(m|0)<-33685504?0:255;m=j+1|0;if((m|0)<(i|0))j=m;else{q=m;break}}}else q=0;if(!(g&1))return;g=c[b+(q<<1<<2)>>2]|0;b=(14?g>>>14:g)&1020;j=(6?g>>>6:g)&1020;i=g<<2&1020;g=(r(j,-19081)|0)+(r(b,-9719)|0)+(i*28800|0)|0;m=g+33685504|0;o=18?m>>18:m;m=o>>>0<256?o:(g|0)<-33685504?0:255;g=(r(j,-24116)|0)+(b*28800|0)+(r(i,-4684)|0)|0;i=g+33685504|0;b=18?i>>18:i;i=b>>>0<256?b:(g|0)<-33685504?0:255;if(!h){h=e+q|0;g=m+1+(d[h>>0]|0)|0;a[h>>0]=1?g>>>1:g;g=f+q|0;h=i+1+(d[g>>0]|0)|0;a[g>>0]=1?h>>>1:h;return}else{a[e+q>>0]=m;a[f+q>>0]=i;return}}function Ce(a){a=a|0;var b=0,e=0,f=0;b=a+12|0;e=c[b>>2]|0;if(e>>>0<(c[a+16>>2]|0)>>>0){f=a+8|0;c[f>>2]=(c[f>>2]|0)+8;c[b>>2]=e+1;c[a>>2]=c[a>>2]<<8|(d[e>>0]|0);return}e=a+24|0;if(!(c[e>>2]|0)){c[a>>2]=c[a>>2]<<8;b=a+8|0;c[b>>2]=(c[b>>2]|0)+8;c[e>>2]=1;return}else{c[a+8>>2]=0;return}}function De(c){c=c|0;b[c>>1]=65535;a[c+2>>0]=255;return}function Ee(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;c[a+4>>2]=254;c[a>>2]=0;f=a+8|0;c[f>>2]=-8;g=a+24|0;c[g>>2]=0;h=a+12|0;c[h>>2]=b;i=b+e|0;c[a+16>>2]=i;j=e>>>0>3?i+-4+1|0:b;c[a+20>>2]=j;if(j>>>0>b>>>0){j=d[b>>0]|d[b+1>>0]<<8|d[b+2>>0]<<16|d[b+3>>0]<<24;c[h>>2]=b+3;i=Kf(j|0)|0;c[a>>2]=8?i>>>8:i;c[f>>2]=16;return}if((e|0)>0){c[f>>2]=0;c[h>>2]=b+1;c[a>>2]=d[b>>0];return}else{c[a>>2]=0;c[f>>2]=0;c[g>>2]=1;return}}function Fe(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,t=0,u=0;if((b|0)<=0){e=0;return e|0}f=a+4|0;g=a+8|0;h=a+12|0;i=a+20|0;j=a+16|0;k=a+24|0;l=0;m=b;b=c[g>>2]|0;n=c[f>>2]|0;while(1){o=m;m=m+-1|0;do if((b|0)<0){p=c[h>>2]|0;if(p>>>0<(c[i>>2]|0)>>>0){q=d[p>>0]|d[p+1>>0]<<8|d[p+2>>0]<<16|d[p+3>>0]<<24;c[h>>2]=p+3;r=Kf(q|0)|0;c[a>>2]=c[a>>2]<<24|(8?r>>>8:r);r=b+24|0;c[g>>2]=r;t=r;break}if(p>>>0<(c[j>>2]|0)>>>0){r=b+8|0;c[g>>2]=r;c[h>>2]=p+1;c[a>>2]=c[a>>2]<<8|(d[p>>0]|0);t=r;break}if(!(c[k>>2]|0)){c[a>>2]=c[a>>2]<<8;r=b+8|0;c[g>>2]=r;c[k>>2]=1;t=r;break}else{c[g>>2]=0;t=0;break}}else t=b;while(0);r=(1?n>>>1:n)&16777215;p=c[a>>2]|0;q=(t?p>>>t:p)>>>0>r>>>0;if(q){c[a>>2]=p-(r+1<>2]=b;n=(u<>2]=n;r=(q&1)<>2]|0)==0;o=0;do{if(n)if(!o){p=g;q=16}else{r=b+776+(o<<5)|0;c[r>>2]=c[m>>2];c[r+4>>2]=c[m+4>>2];c[r+8>>2]=c[m+8>>2];c[r+12>>2]=c[m+12>>2];c[r+16>>2]=c[m+16>>2];c[r+20>>2]=c[m+20>>2];c[r+24>>2]=c[m+24>>2];c[r+28>>2]=c[m+28>>2]}else{p=((c[f>>2]|0)==0?g:0)+(a[b+116+o>>0]|0)|0;q=16}if((q|0)==16){q=0;r=p+h|0;s=(r|0)<127?r:127;c[b+776+(o<<5)>>2]=d[7200+((s|0)>0?s:0)>>0];s=(p|0)<127?p:127;c[b+776+(o<<5)+4>>2]=e[7328+(((s|0)>0?s:0)<<1)>>1];s=p+i|0;r=(s|0)<127?s:127;c[b+776+(o<<5)+8>>2]=d[7200+((r|0)>0?r:0)>>0]<<1;r=p+j|0;s=(r|0)<127?r:127;r=(e[7328+(((s|0)>0?s:0)<<1)>>1]|0)*101581|0;c[b+776+(o<<5)+12>>2]=r>>>0<524288?8:16?r>>>16:r;r=p+k|0;s=(r|0)<117?r:117;c[b+776+(o<<5)+16>>2]=d[7200+((s|0)>0?s:0)>>0];s=p+l|0;r=(s|0)<127?s:127;c[b+776+(o<<5)+20>>2]=e[7328+(((r|0)>0?r:0)<<1)>>1];c[b+776+(o<<5)+24>>2]=s}o=o+1|0}while((o|0)!=4);return}function Ie(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;f=b+4|0;g=b+8|0;h=b+12|0;i=b+20|0;j=0;do{k=0;do{l=0;do{m=d[5088+(j*264|0)+(k*33|0)+l>>0]|0;n=c[f>>2]|0;o=c[g>>2]|0;do if((o|0)<0){p=c[h>>2]|0;if(p>>>0<(c[i>>2]|0)>>>0){q=d[p>>0]|d[p+1>>0]<<8|d[p+2>>0]<<16|d[p+3>>0]<<24;c[h>>2]=p+3;p=Kf(q|0)|0;c[b>>2]=c[b>>2]<<24|(8?p>>>8:p);p=o+24|0;c[g>>2]=p;t=p;break}else{Ce(b);t=c[g>>2]|0;break}}else t=o;while(0);o=r(n,m)|0;p=8?o>>>8:o;o=c[b>>2]|0;q=(t?o>>>t:o)>>>0>p>>>0;if(q){c[b>>2]=o-(p+1<>2]=t-p;c[f>>2]=(u<>0]|0;a[e+907+(j*264|0)+(k*33|0)+l>>0]=v;l=l+1|0}while((l|0)!=11);l=0;do{q=d[5088+(j*264|0)+(k*33|0)+11+l>>0]|0;p=c[f>>2]|0;o=c[g>>2]|0;do if((o|0)<0){w=c[h>>2]|0;if(w>>>0<(c[i>>2]|0)>>>0){x=d[w>>0]|d[w+1>>0]<<8|d[w+2>>0]<<16|d[w+3>>0]<<24;c[h>>2]=w+3;w=Kf(x|0)|0;c[b>>2]=c[b>>2]<<24|(8?w>>>8:w);w=o+24|0;c[g>>2]=w;y=w;break}else{Ce(b);y=c[g>>2]|0;break}}else y=o;while(0);o=r(p,q)|0;n=8?o>>>8:o;o=c[b>>2]|0;m=(y?o>>>y:o)>>>0>n>>>0;if(m){c[b>>2]=o-(n+1<>2]=y-n;c[f>>2]=(z<>0]|0;a[e+907+(j*264|0)+(k*33|0)+11+l>>0]=A;l=l+1|0}while((l|0)!=11);l=0;do{m=d[5088+(j*264|0)+(k*33|0)+22+l>>0]|0;n=c[f>>2]|0;o=c[g>>2]|0;do if((o|0)<0){w=c[h>>2]|0;if(w>>>0<(c[i>>2]|0)>>>0){x=d[w>>0]|d[w+1>>0]<<8|d[w+2>>0]<<16|d[w+3>>0]<<24;c[h>>2]=w+3;w=Kf(x|0)|0;c[b>>2]=c[b>>2]<<24|(8?w>>>8:w);w=o+24|0;c[g>>2]=w;B=w;break}else{Ce(b);B=c[g>>2]|0;break}}else B=o;while(0);o=r(n,m)|0;p=8?o>>>8:o;o=c[b>>2]|0;q=(B?o>>>B:o)>>>0>p>>>0;if(q){c[b>>2]=o-(p+1<>2]=B-p;c[f>>2]=(C<>0]|0;a[e+907+(j*264|0)+(k*33|0)+22+l>>0]=D;l=l+1|0}while((l|0)!=11);k=k+1|0}while((k|0)!=8);k=e+907+(j*264|0)|0;c[e+1964+(j*68|0)>>2]=k;c[e+1964+(j*68|0)+4>>2]=e+907+(j*264|0)+33;c[e+1964+(j*68|0)+8>>2]=e+907+(j*264|0)+66;c[e+1964+(j*68|0)+12>>2]=e+907+(j*264|0)+99;l=e+907+(j*264|0)+198|0;c[e+1964+(j*68|0)+16>>2]=l;c[e+1964+(j*68|0)+20>>2]=e+907+(j*264|0)+132;c[e+1964+(j*68|0)+24>>2]=e+907+(j*264|0)+165;c[e+1964+(j*68|0)+28>>2]=l;c[e+1964+(j*68|0)+32>>2]=l;c[e+1964+(j*68|0)+36>>2]=l;c[e+1964+(j*68|0)+40>>2]=l;c[e+1964+(j*68|0)+44>>2]=l;c[e+1964+(j*68|0)+48>>2]=l;c[e+1964+(j*68|0)+52>>2]=l;c[e+1964+(j*68|0)+56>>2]=l;c[e+1964+(j*68|0)+60>>2]=e+907+(j*264|0)+231;c[e+1964+(j*68|0)+64>>2]=k;j=j+1|0}while((j|0)!=4);j=Fe(b,1)|0;c[e+2236>>2]=j;if(!j)return;j=(Fe(b,8)|0)&255;a[e+2240>>0]=j;return}function Je(a,e,f,g,h,i){a=a|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,q=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;if((h|0)>=16){j=16;return j|0}k=a+4|0;l=a+8|0;m=a+12|0;n=a+20|0;o=(c[e+(h<<2)>>2]|0)+(f*11|0)|0;f=h;h=c[l>>2]|0;p=c[k>>2]|0;a:while(1){q=d[o>>0]|0;do if((h|0)<0){t=c[m>>2]|0;if(t>>>0<(c[n>>2]|0)>>>0){u=d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24;c[m>>2]=t+3;t=Kf(u|0)|0;c[a>>2]=c[a>>2]<<24|(8?t>>>8:t);t=h+24|0;c[l>>2]=t;v=t;break}else{Ce(a);v=c[l>>2]|0;break}}else v=h;while(0);t=r(p,q)|0;u=8?t>>>8:t;t=c[a>>2]|0;w=(v?t>>>v:t)>>>0>u>>>0;if(w){x=t-(u+1<>2]=x;y=p-u|0;z=x}else{y=u+1|0;z=t}t=(s(y|0)|0)^24;u=v-t|0;c[l>>2]=u;x=(y<>2]=x;if(!w){j=f;A=37;break}w=o;t=f;B=u;u=z;C=x;while(1){x=d[w+1>>0]|0;do if((B|0)<0){D=c[m>>2]|0;if(D>>>0<(c[n>>2]|0)>>>0){E=d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24;c[m>>2]=D+3;D=Kf(E|0)|0;E=u<<24|(8?D>>>8:D);c[a>>2]=E;D=B+24|0;c[l>>2]=D;F=E;G=D;break}else{Ce(a);F=c[a>>2]|0;G=c[l>>2]|0;break}}else{F=u;G=B}while(0);D=r(C,x)|0;E=8?D>>>8:D;D=(G?F>>>G:F)>>>0>E>>>0;if(D){H=F-(E+1<>2]=H;I=C-E|0;J=H}else{I=E+1|0;J=F}E=(s(I|0)|0)^24;K=G-E|0;c[l>>2]=K;L=(I<>2]=L;M=t+1|0;if(D)break;if((M|0)==16){j=16;A=37;break a}w=c[e+(M<<2)>>2]|0;t=M;B=K;u=J;C=L}C=c[e+(M<<2)>>2]|0;u=d[w+2>>0]|0;do if((K|0)<0){B=c[m>>2]|0;if(B>>>0<(c[n>>2]|0)>>>0){q=d[B>>0]|d[B+1>>0]<<8|d[B+2>>0]<<16|d[B+3>>0]<<24;c[m>>2]=B+3;B=Kf(q|0)|0;q=J<<24|(8?B>>>8:B);c[a>>2]=q;B=K+24|0;c[l>>2]=B;N=q;O=B;break}else{Ce(a);N=c[a>>2]|0;O=c[l>>2]|0;break}}else{N=J;O=K}while(0);B=r(L,u)|0;q=8?B>>>8:B;B=(O?N>>>O:N)>>>0>q>>>0;if(B){c[a>>2]=N-(q+1<>2]=D;c[k>>2]=(P<>2]|0}else{Q=1;R=C+11|0;S=D}do if((S|0)<0){D=c[m>>2]|0;if(D>>>0<(c[n>>2]|0)>>>0){B=d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24;c[m>>2]=D+3;D=Kf(B|0)|0;c[a>>2]=c[a>>2]<<24|(8?D>>>8:D);D=S+24|0;c[l>>2]=D;T=D;break}else{Ce(a);T=c[l>>2]|0;break}}else T=S;while(0);C=c[k>>2]|0;w=1?C>>>1:C;u=c[a>>2]|0;D=w-(T?u>>>T:u)|0;B=31?D>>31:D;D=T+-1|0;c[l>>2]=D;q=B+C|1;c[k>>2]=q;c[a>>2]=u-((B&w+1)<0&1)<<2)>>2]|0)|0)&65535;b[i+((d[7584+t>>0]|0)<<1)>>1]=w;if((t|0)<15){o=R;f=M;h=D;p=q}else{j=16;A=37;break}}if((A|0)==37)return j|0;return 0}function Ke(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;f=d[e+3>>0]|0;g=b+4|0;h=c[g>>2]|0;i=b+8|0;j=c[i>>2]|0;do if((j|0)<0){k=b+12|0;l=c[k>>2]|0;if(l>>>0<(c[b+20>>2]|0)>>>0){m=d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24;c[k>>2]=l+3;l=Kf(m|0)|0;c[b>>2]=c[b>>2]<<24|(8?l>>>8:l);l=j+24|0;c[i>>2]=l;n=l;break}else{Ce(b);n=c[i>>2]|0;break}}else n=j;while(0);j=r(h,f)|0;f=8?j>>>8:j;j=c[b>>2]|0;l=(n?j>>>n:j)>>>0>f>>>0;if(l){m=j-(f+1<>2]=m;o=h-f|0;p=m}else{o=f+1|0;p=j}j=(s(o|0)|0)^24;f=n-j|0;c[i>>2]=f;n=(o<>2]=n;if(!l){l=d[e+4>>0]|0;do if((f|0)<0){j=b+12|0;o=c[j>>2]|0;if(o>>>0<(c[b+20>>2]|0)>>>0){m=d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24;c[j>>2]=o+3;o=Kf(m|0)|0;m=p<<24|(8?o>>>8:o);c[b>>2]=m;o=f+24|0;c[i>>2]=o;q=m;t=o;break}else{Ce(b);q=c[b>>2]|0;t=c[i>>2]|0;break}}else{q=p;t=f}while(0);o=r(n,l)|0;l=8?o>>>8:o;o=(t?q>>>t:q)>>>0>l>>>0;if(o){m=q-(l+1<>2]=m;u=n-l|0;v=m}else{u=l+1|0;v=q}q=(s(u|0)|0)^24;l=t-q|0;c[i>>2]=l;t=(u<>2]=t;if(!o){w=2;return w|0}o=d[e+5>>0]|0;do if((l|0)<0){q=b+12|0;u=c[q>>2]|0;if(u>>>0<(c[b+20>>2]|0)>>>0){m=d[u>>0]|d[u+1>>0]<<8|d[u+2>>0]<<16|d[u+3>>0]<<24;c[q>>2]=u+3;u=Kf(m|0)|0;m=v<<24|(8?u>>>8:u);c[b>>2]=m;u=l+24|0;c[i>>2]=u;x=m;y=u;break}else{Ce(b);x=c[b>>2]|0;y=c[i>>2]|0;break}}else{x=v;y=l}while(0);l=r(t,o)|0;o=8?l>>>8:l;l=(y?x>>>y:x)>>>0>o>>>0;if(l){c[b>>2]=x-(o+1<>2]=y-o;c[g>>2]=(z<>0]|0;do if((f|0)<0){o=b+12|0;z=c[o>>2]|0;if(z>>>0<(c[b+20>>2]|0)>>>0){y=d[z>>0]|d[z+1>>0]<<8|d[z+2>>0]<<16|d[z+3>>0]<<24;c[o>>2]=z+3;z=Kf(y|0)|0;y=p<<24|(8?z>>>8:z);c[b>>2]=y;z=f+24|0;c[i>>2]=z;A=y;B=z;break}else{Ce(b);A=c[b>>2]|0;B=c[i>>2]|0;break}}else{A=p;B=f}while(0);f=r(n,l)|0;l=8?f>>>8:f;f=(B?A>>>B:A)>>>0>l>>>0;if(f){p=A-(l+1<>2]=p;C=n-l|0;D=p}else{C=l+1|0;D=A}A=(s(C|0)|0)^24;l=B-A|0;c[i>>2]=l;B=(C<>2]=B;if(f){f=d[e+8>>0]|0;do if((l|0)<0){A=b+12|0;C=c[A>>2]|0;if(C>>>0<(c[b+20>>2]|0)>>>0){p=d[C>>0]|d[C+1>>0]<<8|d[C+2>>0]<<16|d[C+3>>0]<<24;c[A>>2]=C+3;C=Kf(p|0)|0;p=D<<24|(8?C>>>8:C);c[b>>2]=p;C=l+24|0;c[i>>2]=C;E=p;F=C;break}else{Ce(b);E=c[b>>2]|0;F=c[i>>2]|0;break}}else{E=D;F=l}while(0);C=r(B,f)|0;f=8?C>>>8:C;C=(F?E>>>F:E)>>>0>f>>>0;p=C&1;if(C){A=E-(f+1<>2]=A;G=B-f|0;H=A}else{G=f+1|0;H=E}E=(s(G|0)|0)^24;f=F-E|0;c[i>>2]=f;F=(G<>2]=F;E=d[e+(C?10:9)>>0]|0;do if((f|0)<0){C=b+12|0;G=c[C>>2]|0;if(G>>>0<(c[b+20>>2]|0)>>>0){A=d[G>>0]|d[G+1>>0]<<8|d[G+2>>0]<<16|d[G+3>>0]<<24;c[C>>2]=G+3;G=Kf(A|0)|0;A=H<<24|(8?G>>>8:G);c[b>>2]=A;G=f+24|0;c[i>>2]=G;I=A;J=G;break}else{Ce(b);I=c[b>>2]|0;J=c[i>>2]|0;break}}else{I=H;J=f}while(0);f=r(F,E)|0;E=8?f>>>8:f;f=(J?I>>>J:I)>>>0>E>>>0;if(f){H=I-(E+1<>2]=H;K=F-E|0;L=H}else{K=E+1|0;L=I}I=(s(K|0)|0)^24;E=J-I|0;c[i>>2]=E;J=(K<>2]=J;I=p<<1|f&1;f=c[7600+(I<<2)>>2]|0;p=a[f>>0]|0;if(!(p<<24>>24))M=0;else{K=b+12|0;H=b+20|0;F=f;f=0;G=p;p=E;E=L;L=J;while(1){J=G&255;do if((p|0)<0){A=c[K>>2]|0;if(A>>>0<(c[H>>2]|0)>>>0){C=d[A>>0]|d[A+1>>0]<<8|d[A+2>>0]<<16|d[A+3>>0]<<24;c[K>>2]=A+3;A=Kf(C|0)|0;C=E<<24|(8?A>>>8:A);c[b>>2]=C;A=p+24|0;c[i>>2]=A;N=C;O=A;break}else{Ce(b);N=c[b>>2]|0;O=c[i>>2]|0;break}}else{N=E;O=p}while(0);A=r(L,J)|0;C=8?A>>>8:A;A=(O?N>>>O:N)>>>0>C>>>0;if(A){n=N-(C+1<>2]=n;P=L-C|0;Q=n}else{P=C+1|0;Q=N}C=(s(P|0)|0)^24;p=O-C|0;c[i>>2]=p;L=(P<>2]=L;C=f<<1|A&1;F=F+1|0;G=a[F>>0]|0;if(!(G<<24>>24)){M=C;break}else{f=C;E=Q}}}w=M+(8<>0]|0;do if((l|0)<0){e=b+12|0;M=c[e>>2]|0;if(M>>>0<(c[b+20>>2]|0)>>>0){Q=d[M>>0]|d[M+1>>0]<<8|d[M+2>>0]<<16|d[M+3>>0]<<24;c[e>>2]=M+3;M=Kf(Q|0)|0;Q=D<<24|(8?M>>>8:M);c[b>>2]=Q;M=l+24|0;c[i>>2]=M;R=Q;S=M;break}else{Ce(b);R=c[b>>2]|0;S=c[i>>2]|0;break}}else{R=D;S=l}while(0);l=r(B,I)|0;I=8?l>>>8:l;l=(S?R>>>S:R)>>>0>I>>>0;if(l){D=R-(I+1<>2]=D;T=B-I|0;U=D}else{T=I+1|0;U=R}R=(s(T|0)|0)^24;I=S-R|0;c[i>>2]=I;S=(T<>2]=S;R=(I|0)<0;if(!l){do if(R){l=b+12|0;T=c[l>>2]|0;if(T>>>0<(c[b+20>>2]|0)>>>0){D=d[T>>0]|d[T+1>>0]<<8|d[T+2>>0]<<16|d[T+3>>0]<<24;c[l>>2]=T+3;T=Kf(D|0)|0;D=U<<24|(8?T>>>8:T);c[b>>2]=D;T=I+24|0;c[i>>2]=T;V=D;W=T;break}else{Ce(b);V=c[b>>2]|0;W=c[i>>2]|0;break}}else{V=U;W=I}while(0);T=S*159|0;D=8?T>>>8:T;T=(W?V>>>W:V)>>>0>D>>>0;if(T){c[b>>2]=V-(D+1<>2]=W-D;c[g>>2]=(X<>2]|0;if(D>>>0<(c[b+20>>2]|0)>>>0){X=d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24;c[T>>2]=D+3;D=Kf(X|0)|0;X=U<<24|(8?D>>>8:D);c[b>>2]=X;D=I+24|0;c[i>>2]=D;Y=X;Z=D;break}else{Ce(b);Y=c[b>>2]|0;Z=c[i>>2]|0;break}}else{Y=U;Z=I}while(0);I=S*165|0;U=8?I>>>8:I;I=(Z?Y>>>Z:Y)>>>0>U>>>0;if(I){R=Y-(U+1<>2]=R;_=S-U|0;$=R}else{_=U+1|0;$=Y}Y=(s(_|0)|0)^24;U=Z-Y|0;c[i>>2]=U;Z=(_<>2]=Z;Y=((I&1)<<1)+7|0;do if((U|0)<0){I=b+12|0;_=c[I>>2]|0;if(_>>>0<(c[b+20>>2]|0)>>>0){R=d[_>>0]|d[_+1>>0]<<8|d[_+2>>0]<<16|d[_+3>>0]<<24;c[I>>2]=_+3;_=Kf(R|0)|0;R=$<<24|(8?_>>>8:_);c[b>>2]=R;_=U+24|0;c[i>>2]=_;aa=R;ba=_;break}else{Ce(b);aa=c[b>>2]|0;ba=c[i>>2]|0;break}}else{aa=$;ba=U}while(0);U=Z*145|0;$=8?U>>>8:U;U=(ba?aa>>>ba:aa)>>>0>$>>>0;if(U){c[b>>2]=aa-($+1<>2]=ba-$;c[g>>2]=(ca<<$)+-1;w=Y+(U&1)|0;return w|0}function Le(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;if(!b){e=0;return e|0}if(!d){if(c[b>>2]|0){e=0;return e|0}c[b>>2]=2;c[b+8>>2]=9156;c[b+4>>2]=0;e=0;return e|0}f=b+4|0;if((c[f>>2]|0)==0?(ue(b,d)|0)==0:0){e=0;return e|0}if(!(nd(b,d)|0)){a:do if(!(qd(b,d)|0))g=0;else{h=b+2300|0;c[h>>2]=0;i=b+308|0;b:do if((c[i>>2]|0)>0){j=b+312|0;k=b+12|0;l=b+2296|0;m=b+288|0;n=b+2256|0;o=b+2248|0;p=0;c:while(1){q=b+316+((c[j>>2]&p)*28|0)|0;if(!(ve(k,b)|0)){r=12;break}if((c[l>>2]|0)<(c[m>>2]|0))do{if(!(we(b,q)|0)){r=17;break c}s=(c[l>>2]|0)+1|0;c[l>>2]=s}while((s|0)<(c[m>>2]|0));q=c[n>>2]|0;a[q+-2>>0]=0;a[q+-1>>0]=0;c[o>>2]=0;c[l>>2]=0;if(!(bd(b,d)|0)){r=21;break}p=(c[h>>2]|0)+1|0;c[h>>2]=p;if((p|0)>=(c[i>>2]|0))break b}if((r|0)==12){if(c[b>>2]|0){g=0;break a}c[b>>2]=7;c[b+8>>2]=9193;c[f>>2]=0;g=0;break a}else if((r|0)==17){if(c[b>>2]|0){g=0;break a}c[b>>2]=7;c[b+8>>2]=9234;c[f>>2]=0;g=0;break a}else if((r|0)==21){if(c[b>>2]|0){g=0;break a}c[b>>2]=6;c[b+8>>2]=9269;c[f>>2]=0;g=0;break a}}while(0);if((c[b+148>>2]|0)>0?(i=(ed()|0)+8|0,(aa[c[i>>2]&7](b+124|0)|0)==0):0){g=0;break}g=1}while(0);r=(od(b,d)|0)&g;if(r|0){c[f>>2]=0;e=r;return e|0}}r=(ed()|0)+20|0;ea[c[r>>2]&31](b+124|0);oa(b);r=b+2288|0;pa(c[r>>2]|0);c[r>>2]=0;c[b+2292>>2]=0;r=b+12|0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;c[r+16>>2]=0;c[r+20>>2]=0;c[r+24>>2]=0;c[f>>2]=0;e=0;return e|0}function Me(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;e=Y;Y=Y+160|0;f=e+148|0;g=e+144|0;h=e+36|0;i=e;c[i>>2]=a;j=i+4|0;c[j>>2]=b;c[i+8>>2]=1;c[g>>2]=0;k=ne(a,b,0,0,0,g,0,i)|0;c[f>>2]=k;if(!(c[f>>2]|0)){if(c[g>>2]|0)l=4}else if((c[f>>2]|0)==7&(c[g>>2]|0)!=0)l=4;if((l|0)==4)c[f>>2]=4;l=c[f>>2]|0;if(l|0){m=l;Y=e;return m|0}ya(h,520)|0;l=c[i+12>>2]|0;c[h+64>>2]=(c[i>>2]|0)+l;c[h+60>>2]=(c[j>>2]|0)-l;za(d,h);if(!(c[i+32>>2]|0)){l=se()|0;if(!l){m=1;Y=e;return m|0}c[l+2348>>2]=c[i+16>>2];c[l+2352>>2]=c[i+20>>2];if(ue(l,h)|0){j=h+4|0;f=d+20|0;g=Uc(c[h>>2]|0,c[j>>2]|0,c[f>>2]|0,c[d>>2]|0)|0;if(!g){k=pd(c[f>>2]|0,i,c[h>>2]|0,c[j>>2]|0)|0;c[l+148>>2]=k;$c(c[f>>2]|0,l);if(!(Le(l,h)|0))n=c[l>>2]|0;else n=0}else n=g}else n=c[l>>2]|0;re(l);o=n}else{n=te()|0;if(!n){m=1;Y=e;return m|0}if(xe(n,h)|0){l=Uc(c[h>>2]|0,c[h+4>>2]|0,c[d+20>>2]|0,c[d>>2]|0)|0;if(!l)if(!(ye(n)|0))p=c[n>>2]|0;else p=0;else p=l}else p=c[n>>2]|0;qa(n);o=p}if(o|0){Xc(c[d>>2]|0);m=o;Y=e;return m|0}o=c[d+20>>2]|0;if(!o){m=0;Y=e;return m|0}if(!(c[o+48>>2]|0)){m=0;Y=e;return m|0}m=Tc(c[d>>2]|0)|0;Y=e;return m|0}function Ne(a,b){a=a|0;b=b|0;var c=0;if((a|0)==0|(b&-256|0)!=512){c=0;return c|0}Nf(a|0,0,200)|0;Wc(a+40|0,520)|0;c=1;return c|0}function Oe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;e=Y;Y=Y+144|0;f=e+88|0;g=e;if(!d){h=2;Y=e;return h|0}a:do if(!a)i=2;else{j=d;k=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));l=d+4|0;m=ne(a,b,d,l,d+8|0,d+12|0,d+16|0,0)|0;switch(m|0){case 0:break;case 7:{h=3;Y=e;return h|0}default:{i=m;break a}}j=f+4|0;k=j+52|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));c[f+20>>2]=d+124;j=d+40|0;c[f>>2]=j;if(!(_c(j,d)|0)){h=Me(a,b,f)|0;Y=e;return h|0}Wc(g,520)|0;c[g>>2]=c[j>>2];c[g+4>>2]=c[d>>2];c[g+8>>2]=c[l>>2];c[f>>2]=g;k=Me(a,b,f)|0;if(!k)n=Yc(g,j)|0;else n=k;Xc(g);h=n;Y=e;return h|0}while(0);h=i;Y=e;return h|0} - function Pe(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0;b=Y;Y=Y+16|0;d=b;do if(a>>>0<245){e=a>>>0<11?16:a+11&-8;f=3?e>>>3:e;g=c[2550]|0;h=f?g>>>f:g;if(h&3|0){i=(h&1^1)+f|0;j=10240+(i<<1<<2)|0;k=j+8|0;l=c[k>>2]|0;m=l+8|0;n=c[m>>2]|0;if((n|0)==(j|0))c[2550]=g&~(1<>2]=j;c[k>>2]=n}n=i<<3;c[l+4>>2]=n|3;i=l+n+4|0;c[i>>2]=c[i>>2]|1;o=m;Y=b;return o|0}m=c[2552]|0;if(e>>>0>m>>>0){if(h|0){i=2<>>12:i)&16;f=n?i>>>n:i;i=(5?f>>>5:f)&8;h=i?f>>>i:f;f=(2?h>>>2:h)&4;l=f?h>>>f:h;h=(1?l>>>1:l)&2;k=h?l>>>h:l;l=(1?k>>>1:k)&1;j=(i|n|f|h|l)+(l?k>>>l:k)|0;k=10240+(j<<1<<2)|0;l=k+8|0;h=c[l>>2]|0;f=h+8|0;n=c[f>>2]|0;if((n|0)==(k|0)){i=g&~(1<>2]=k;c[l>>2]=n;p=g}n=j<<3;j=n-e|0;c[h+4>>2]=e|3;l=h+e|0;c[l+4>>2]=j|1;c[h+n>>2]=j;if(m|0){n=c[2555]|0;h=3?m>>>3:m;k=10240+(h<<1<<2)|0;i=1<>2]|0;r=i}c[r>>2]=n;c[q+12>>2]=n;c[n+8>>2]=q;c[n+12>>2]=k}c[2552]=j;c[2555]=l;o=f;Y=b;return o|0}f=c[2551]|0;if(f){l=(f&0-f)+-1|0;j=(12?l>>>12:l)&16;k=j?l>>>j:l;l=(5?k>>>5:k)&8;n=l?k>>>l:k;k=(2?n>>>2:n)&4;i=k?n>>>k:n;n=(1?i>>>1:i)&2;h=n?i>>>n:i;i=(1?h>>>1:h)&1;s=c[10504+((l|j|k|n|i)+(i?h>>>i:h)<<2)>>2]|0;h=s;i=s;n=(c[s+4>>2]&-8)-e|0;while(1){s=c[h+16>>2]|0;if(!s){k=c[h+20>>2]|0;if(!k)break;else t=k}else t=s;s=(c[t+4>>2]&-8)-e|0;k=s>>>0>>0;h=t;i=k?t:i;n=k?s:n}h=i+e|0;if(h>>>0>i>>>0){s=c[i+24>>2]|0;k=c[i+12>>2]|0;do if((k|0)==(i|0)){j=i+20|0;l=c[j>>2]|0;if(!l){u=i+16|0;v=c[u>>2]|0;if(!v){w=0;break}else{x=v;y=u}}else{x=l;y=j}j=x;l=y;while(1){u=j+20|0;v=c[u>>2]|0;if(!v){z=j+16|0;A=c[z>>2]|0;if(!A)break;else{B=A;C=z}}else{B=v;C=u}j=B;l=C}c[l>>2]=0;w=j}else{u=c[i+8>>2]|0;c[u+12>>2]=k;c[k+8>>2]=u;w=k}while(0);do if(s|0){k=c[i+28>>2]|0;u=10504+(k<<2)|0;if((i|0)==(c[u>>2]|0)){c[u>>2]=w;if(!w){c[2551]=f&~(1<>2]|0)==(i|0)?k:s+20|0)>>2]=w;if(!w)break}c[w+24>>2]=s;k=c[i+16>>2]|0;if(k|0){c[w+16>>2]=k;c[k+24>>2]=w}k=c[i+20>>2]|0;if(k|0){c[w+20>>2]=k;c[k+24>>2]=w}}while(0);if(n>>>0<16){s=n+e|0;c[i+4>>2]=s|3;f=i+s+4|0;c[f>>2]=c[f>>2]|1}else{c[i+4>>2]=e|3;c[h+4>>2]=n|1;c[h+n>>2]=n;if(m|0){f=c[2555]|0;s=3?m>>>3:m;k=10240+(s<<1<<2)|0;u=1<>2]|0;E=u}c[E>>2]=f;c[D+12>>2]=f;c[f+8>>2]=D;c[f+12>>2]=k}c[2552]=n;c[2555]=h}o=i+8|0;Y=b;return o|0}else F=e}else F=e}else F=e}else if(a>>>0<=4294967231){k=a+11|0;f=k&-8;u=c[2551]|0;if(u){s=0-f|0;v=8?k>>>8:k;if(v)if(f>>>0>16777215)G=31;else{k=v+1048320|0;z=(16?k>>>16:k)&8;k=v<>>16:v)&4;v=k<>>16:k)&2;k=v<>>15:k)|0;k=v+7|0;G=(k?f>>>k:f)&1|v<<1}else G=0;v=c[10504+(G<<2)>>2]|0;a:do if(!v){I=0;J=0;K=s;L=61}else{k=0;H=s;z=v;A=f<<((G|0)==31?0:25-(1?G>>>1:G)|0);M=0;while(1){N=(c[z+4>>2]&-8)-f|0;if(N>>>0>>0)if(!N){O=z;P=0;Q=z;L=65;break a}else{R=z;S=N}else{R=k;S=H}N=c[z+20>>2]|0;z=c[z+16+((31?A>>>31:A)<<2)>>2]|0;T=(N|0)==0|(N|0)==(z|0)?M:N;if(!z){I=T;J=R;K=S;L=61;break}else{k=R;H=S;A=A<<1;M=T}}}while(0);if((L|0)==61){if((I|0)==0&(J|0)==0){v=2<>>12:v)&16;e=s?v>>>s:v;v=(5?e>>>5:e)&8;i=v?e>>>v:e;e=(2?i>>>2:i)&4;h=e?i>>>e:i;i=(1?h>>>1:h)&2;n=i?h>>>i:h;h=(1?n>>>1:n)&1;U=0;V=c[10504+((v|s|e|i|h)+(h?n>>>h:n)<<2)>>2]|0}else{U=J;V=I}if(!V){W=U;X=K}else{O=U;P=K;Q=V;L=65}}if((L|0)==65){n=O;h=P;i=Q;while(1){e=(c[i+4>>2]&-8)-f|0;s=e>>>0>>0;v=s?e:h;e=s?i:n;s=c[i+16>>2]|0;if(!s)Z=c[i+20>>2]|0;else Z=s;if(!Z){W=e;X=v;break}else{n=e;h=v;i=Z}}}if(((W|0)!=0?X>>>0<((c[2552]|0)-f|0)>>>0:0)?(i=W+f|0,i>>>0>W>>>0):0){h=c[W+24>>2]|0;n=c[W+12>>2]|0;do if((n|0)==(W|0)){v=W+20|0;e=c[v>>2]|0;if(!e){s=W+16|0;g=c[s>>2]|0;if(!g){_=0;break}else{$=g;aa=s}}else{$=e;aa=v}v=$;e=aa;while(1){s=v+20|0;g=c[s>>2]|0;if(!g){m=v+16|0;M=c[m>>2]|0;if(!M)break;else{ba=M;ca=m}}else{ba=g;ca=s}v=ba;e=ca}c[e>>2]=0;_=v}else{s=c[W+8>>2]|0;c[s+12>>2]=n;c[n+8>>2]=s;_=n}while(0);do if(h){n=c[W+28>>2]|0;s=10504+(n<<2)|0;if((W|0)==(c[s>>2]|0)){c[s>>2]=_;if(!_){s=u&~(1<>2]|0)==(W|0)?s:h+20|0)>>2]=_;if(!_){da=u;break}}c[_+24>>2]=h;s=c[W+16>>2]|0;if(s|0){c[_+16>>2]=s;c[s+24>>2]=_}s=c[W+20>>2]|0;if(s){c[_+20>>2]=s;c[s+24>>2]=_;da=u}else da=u}else da=u;while(0);b:do if(X>>>0<16){u=X+f|0;c[W+4>>2]=u|3;h=W+u+4|0;c[h>>2]=c[h>>2]|1}else{c[W+4>>2]=f|3;c[i+4>>2]=X|1;c[i+X>>2]=X;h=3?X>>>3:X;if(X>>>0<256){u=10240+(h<<1<<2)|0;s=c[2550]|0;n=1<>2]|0;fa=n}c[fa>>2]=i;c[ea+12>>2]=i;c[i+8>>2]=ea;c[i+12>>2]=u;break}u=8?X>>>8:X;if(u)if(X>>>0>16777215)ga=31;else{n=u+1048320|0;s=(16?n>>>16:n)&8;n=u<>>16:u)&4;u=n<>>16:n)&2;n=u<>>15:n)|0;n=u+7|0;ga=(n?X>>>n:X)&1|u<<1}else ga=0;u=10504+(ga<<2)|0;c[i+28>>2]=ga;n=i+16|0;c[n+4>>2]=0;c[n>>2]=0;n=1<>2]=i;c[i+24>>2]=u;c[i+12>>2]=i;c[i+8>>2]=i;break}n=c[u>>2]|0;c:do if((c[n+4>>2]&-8|0)==(X|0))ha=n;else{u=X<<((ga|0)==31?0:25-(1?ga>>>1:ga)|0);g=n;while(1){ia=g+16+((31?u>>>31:u)<<2)|0;s=c[ia>>2]|0;if(!s)break;if((c[s+4>>2]&-8|0)==(X|0)){ha=s;break c}else{u=u<<1;g=s}}c[ia>>2]=i;c[i+24>>2]=g;c[i+12>>2]=i;c[i+8>>2]=i;break b}while(0);n=ha+8|0;v=c[n>>2]|0;c[v+12>>2]=i;c[n>>2]=i;c[i+8>>2]=v;c[i+12>>2]=ha;c[i+24>>2]=0}while(0);o=W+8|0;Y=b;return o|0}else F=f}else F=f}else F=-1;while(0);W=c[2552]|0;if(W>>>0>=F>>>0){ha=W-F|0;ia=c[2555]|0;if(ha>>>0>15){X=ia+F|0;c[2555]=X;c[2552]=ha;c[X+4>>2]=ha|1;c[ia+W>>2]=ha;c[ia+4>>2]=F|3}else{c[2552]=0;c[2555]=0;c[ia+4>>2]=W|3;ha=ia+W+4|0;c[ha>>2]=c[ha>>2]|1}o=ia+8|0;Y=b;return o|0}ia=c[2553]|0;if(ia>>>0>F>>>0){ha=ia-F|0;c[2553]=ha;W=c[2556]|0;X=W+F|0;c[2556]=X;c[X+4>>2]=ha|1;c[W+4>>2]=F|3;o=W+8|0;Y=b;return o|0}if(!(c[2668]|0)){c[2670]=4096;c[2669]=4096;c[2671]=-1;c[2672]=-1;c[2673]=0;c[2661]=0;c[2668]=d&-16^1431655768;ja=4096}else ja=c[2670]|0;d=F+48|0;W=F+47|0;ha=ja+W|0;X=0-ja|0;ja=ha&X;if(ja>>>0<=F>>>0){o=0;Y=b;return o|0}ga=c[2660]|0;if(ga|0?(da=c[2658]|0,ea=da+ja|0,ea>>>0<=da>>>0|ea>>>0>ga>>>0):0){o=0;Y=b;return o|0}d:do if(!(c[2661]&4)){ga=c[2556]|0;e:do if(ga){ea=10648;while(1){da=c[ea>>2]|0;if(da>>>0<=ga>>>0?(da+(c[ea+4>>2]|0)|0)>>>0>ga>>>0:0)break;da=c[ea+8>>2]|0;if(!da){L=128;break e}else ea=da}da=ha-ia&X;if(da>>>0<2147483647){fa=Of(da|0)|0;if((fa|0)==((c[ea>>2]|0)+(c[ea+4>>2]|0)|0))if((fa|0)==(-1|0))ka=da;else{la=da;ma=fa;L=145;break d}else{na=fa;oa=da;L=136}}else ka=0}else L=128;while(0);do if((L|0)==128){ga=Of(0)|0;if((ga|0)!=(-1|0)?(f=ga,da=c[2669]|0,fa=da+-1|0,_=((fa&f|0)==0?0:(fa+f&0-da)-f|0)+ja|0,f=c[2658]|0,da=_+f|0,_>>>0>F>>>0&_>>>0<2147483647):0){fa=c[2660]|0;if(fa|0?da>>>0<=f>>>0|da>>>0>fa>>>0:0){ka=0;break}fa=Of(_|0)|0;if((fa|0)==(ga|0)){la=_;ma=ga;L=145;break d}else{na=fa;oa=_;L=136}}else ka=0}while(0);do if((L|0)==136){_=0-oa|0;if(!(d>>>0>oa>>>0&(oa>>>0<2147483647&(na|0)!=(-1|0))))if((na|0)==(-1|0)){ka=0;break}else{la=oa;ma=na;L=145;break d}fa=c[2670]|0;ga=W-oa+fa&0-fa;if(ga>>>0>=2147483647){la=oa;ma=na;L=145;break d}if((Of(ga|0)|0)==(-1|0)){Of(_|0)|0;ka=0;break}else{la=ga+oa|0;ma=na;L=145;break d}}while(0);c[2661]=c[2661]|4;pa=ka;L=143}else{pa=0;L=143}while(0);if(((L|0)==143?ja>>>0<2147483647:0)?(ka=Of(ja|0)|0,ja=Of(0)|0,na=ja-ka|0,oa=na>>>0>(F+40|0)>>>0,!((ka|0)==(-1|0)|oa^1|ka>>>0>>0&((ka|0)!=(-1|0)&(ja|0)!=(-1|0))^1)):0){la=oa?na:pa;ma=ka;L=145}if((L|0)==145){ka=(c[2658]|0)+la|0;c[2658]=ka;if(ka>>>0>(c[2659]|0)>>>0)c[2659]=ka;ka=c[2556]|0;f:do if(ka){pa=10648;while(1){qa=c[pa>>2]|0;ra=c[pa+4>>2]|0;if((ma|0)==(qa+ra|0)){L=154;break}na=c[pa+8>>2]|0;if(!na)break;else pa=na}if(((L|0)==154?(na=pa+4|0,(c[pa+12>>2]&8|0)==0):0)?ma>>>0>ka>>>0&qa>>>0<=ka>>>0:0){c[na>>2]=ra+la;na=(c[2553]|0)+la|0;oa=ka+8|0;ja=(oa&7|0)==0?0:0-oa&7;oa=ka+ja|0;W=na-ja|0;c[2556]=oa;c[2553]=W;c[oa+4>>2]=W|1;c[ka+na+4>>2]=40;c[2557]=c[2672];break}if(ma>>>0<(c[2554]|0)>>>0)c[2554]=ma;na=ma+la|0;W=10648;while(1){if((c[W>>2]|0)==(na|0)){L=162;break}oa=c[W+8>>2]|0;if(!oa)break;else W=oa}if((L|0)==162?(c[W+12>>2]&8|0)==0:0){c[W>>2]=ma;pa=W+4|0;c[pa>>2]=(c[pa>>2]|0)+la;pa=ma+8|0;oa=ma+((pa&7|0)==0?0:0-pa&7)|0;pa=na+8|0;ja=na+((pa&7|0)==0?0:0-pa&7)|0;pa=oa+F|0;d=ja-oa-F|0;c[oa+4>>2]=F|3;g:do if((ka|0)==(ja|0)){X=(c[2553]|0)+d|0;c[2553]=X;c[2556]=pa;c[pa+4>>2]=X|1}else{if((c[2555]|0)==(ja|0)){X=(c[2552]|0)+d|0;c[2552]=X;c[2555]=pa;c[pa+4>>2]=X|1;c[pa+X>>2]=X;break}X=c[ja+4>>2]|0;if((X&3|0)==1){ia=X&-8;ha=3?X>>>3:X;h:do if(X>>>0<256){ga=c[ja+8>>2]|0;_=c[ja+12>>2]|0;if((_|0)==(ga|0)){c[2550]=c[2550]&~(1<>2]=_;c[_+8>>2]=ga;break}}else{ga=c[ja+24>>2]|0;_=c[ja+12>>2]|0;do if((_|0)==(ja|0)){fa=ja+16|0;da=fa+4|0;f=c[da>>2]|0;if(!f){ca=c[fa>>2]|0;if(!ca){sa=0;break}else{ta=ca;ua=fa}}else{ta=f;ua=da}da=ta;f=ua;while(1){fa=da+20|0;ca=c[fa>>2]|0;if(!ca){ba=da+16|0;aa=c[ba>>2]|0;if(!aa)break;else{va=aa;wa=ba}}else{va=ca;wa=fa}da=va;f=wa}c[f>>2]=0;sa=da}else{fa=c[ja+8>>2]|0;c[fa+12>>2]=_;c[_+8>>2]=fa;sa=_}while(0);if(!ga)break;_=c[ja+28>>2]|0;g=10504+(_<<2)|0;do if((c[g>>2]|0)!=(ja|0)){fa=ga+16|0;c[((c[fa>>2]|0)==(ja|0)?fa:ga+20|0)>>2]=sa;if(!sa)break h}else{c[g>>2]=sa;if(sa|0)break;c[2551]=c[2551]&~(1<<_);break h}while(0);c[sa+24>>2]=ga;_=ja+16|0;g=c[_>>2]|0;if(g|0){c[sa+16>>2]=g;c[g+24>>2]=sa}g=c[_+4>>2]|0;if(!g)break;c[sa+20>>2]=g;c[g+24>>2]=sa}while(0);xa=ja+ia|0;ya=ia+d|0}else{xa=ja;ya=d}ha=xa+4|0;c[ha>>2]=c[ha>>2]&-2;c[pa+4>>2]=ya|1;c[pa+ya>>2]=ya;ha=3?ya>>>3:ya;if(ya>>>0<256){X=10240+(ha<<1<<2)|0;ea=c[2550]|0;g=1<>2]|0;Aa=g}c[Aa>>2]=pa;c[za+12>>2]=pa;c[pa+8>>2]=za;c[pa+12>>2]=X;break}X=8?ya>>>8:ya;do if(!X)Ba=0;else{if(ya>>>0>16777215){Ba=31;break}g=X+1048320|0;ea=(16?g>>>16:g)&8;g=X<>>16:ha)&4;ha=g<<_;g=ha+245760|0;fa=(16?g>>>16:g)&2;g=ha<>>15:g)|0;g=ha+7|0;Ba=(g?ya>>>g:ya)&1|ha<<1}while(0);X=10504+(Ba<<2)|0;c[pa+28>>2]=Ba;ia=pa+16|0;c[ia+4>>2]=0;c[ia>>2]=0;ia=c[2551]|0;ha=1<>2]=pa;c[pa+24>>2]=X;c[pa+12>>2]=pa;c[pa+8>>2]=pa;break}ha=c[X>>2]|0;i:do if((c[ha+4>>2]&-8|0)==(ya|0))Ca=ha;else{X=ya<<((Ba|0)==31?0:25-(1?Ba>>>1:Ba)|0);ia=ha;while(1){Da=ia+16+((31?X>>>31:X)<<2)|0;g=c[Da>>2]|0;if(!g)break;if((c[g+4>>2]&-8|0)==(ya|0)){Ca=g;break i}else{X=X<<1;ia=g}}c[Da>>2]=pa;c[pa+24>>2]=ia;c[pa+12>>2]=pa;c[pa+8>>2]=pa;break g}while(0);ha=Ca+8|0;X=c[ha>>2]|0;c[X+12>>2]=pa;c[ha>>2]=pa;c[pa+8>>2]=X;c[pa+12>>2]=Ca;c[pa+24>>2]=0}while(0);o=oa+8|0;Y=b;return o|0}pa=10648;while(1){d=c[pa>>2]|0;if(d>>>0<=ka>>>0?(Ea=d+(c[pa+4>>2]|0)|0,Ea>>>0>ka>>>0):0)break;pa=c[pa+8>>2]|0}pa=Ea+-47|0;oa=pa+8|0;d=pa+((oa&7|0)==0?0:0-oa&7)|0;oa=ka+16|0;pa=d>>>0>>0?ka:d;d=pa+8|0;ja=la+-40|0;na=ma+8|0;W=(na&7|0)==0?0:0-na&7;na=ma+W|0;X=ja-W|0;c[2556]=na;c[2553]=X;c[na+4>>2]=X|1;c[ma+ja+4>>2]=40;c[2557]=c[2672];ja=pa+4|0;c[ja>>2]=27;c[d>>2]=c[2662];c[d+4>>2]=c[2663];c[d+8>>2]=c[2664];c[d+12>>2]=c[2665];c[2662]=ma;c[2663]=la;c[2665]=0;c[2664]=d;d=pa+24|0;do{X=d;d=d+4|0;c[d>>2]=7}while((X+8|0)>>>0>>0);if((pa|0)!=(ka|0)){d=pa-ka|0;c[ja>>2]=c[ja>>2]&-2;c[ka+4>>2]=d|1;c[pa>>2]=d;X=3?d>>>3:d;if(d>>>0<256){na=10240+(X<<1<<2)|0;W=c[2550]|0;ha=1<>2]|0;Ga=ha}c[Ga>>2]=ka;c[Fa+12>>2]=ka;c[ka+8>>2]=Fa;c[ka+12>>2]=na;break}na=8?d>>>8:d;if(na)if(d>>>0>16777215)Ha=31;else{ha=na+1048320|0;W=(16?ha>>>16:ha)&8;ha=na<>>16:na)&4;na=ha<>>16:ha)&2;ha=na<>>15:ha)|0;ha=na+7|0;Ha=(ha?d>>>ha:d)&1|na<<1}else Ha=0;na=10504+(Ha<<2)|0;c[ka+28>>2]=Ha;c[ka+20>>2]=0;c[oa>>2]=0;ha=c[2551]|0;ga=1<>2]=ka;c[ka+24>>2]=na;c[ka+12>>2]=ka;c[ka+8>>2]=ka;break}ga=c[na>>2]|0;j:do if((c[ga+4>>2]&-8|0)==(d|0))Ia=ga;else{na=d<<((Ha|0)==31?0:25-(1?Ha>>>1:Ha)|0);ha=ga;while(1){Ja=ha+16+((31?na>>>31:na)<<2)|0;W=c[Ja>>2]|0;if(!W)break;if((c[W+4>>2]&-8|0)==(d|0)){Ia=W;break j}else{na=na<<1;ha=W}}c[Ja>>2]=ka;c[ka+24>>2]=ha;c[ka+12>>2]=ka;c[ka+8>>2]=ka;break f}while(0);d=Ia+8|0;ga=c[d>>2]|0;c[ga+12>>2]=ka;c[d>>2]=ka;c[ka+8>>2]=ga;c[ka+12>>2]=Ia;c[ka+24>>2]=0}}else{ga=c[2554]|0;if((ga|0)==0|ma>>>0>>0)c[2554]=ma;c[2662]=ma;c[2663]=la;c[2665]=0;c[2559]=c[2668];c[2558]=-1;c[2563]=10240;c[2562]=10240;c[2565]=10248;c[2564]=10248;c[2567]=10256;c[2566]=10256;c[2569]=10264;c[2568]=10264;c[2571]=10272;c[2570]=10272;c[2573]=10280;c[2572]=10280;c[2575]=10288;c[2574]=10288;c[2577]=10296;c[2576]=10296;c[2579]=10304;c[2578]=10304;c[2581]=10312;c[2580]=10312;c[2583]=10320;c[2582]=10320;c[2585]=10328;c[2584]=10328;c[2587]=10336;c[2586]=10336;c[2589]=10344;c[2588]=10344;c[2591]=10352;c[2590]=10352;c[2593]=10360;c[2592]=10360;c[2595]=10368;c[2594]=10368;c[2597]=10376;c[2596]=10376;c[2599]=10384;c[2598]=10384;c[2601]=10392;c[2600]=10392;c[2603]=10400;c[2602]=10400;c[2605]=10408;c[2604]=10408;c[2607]=10416;c[2606]=10416;c[2609]=10424;c[2608]=10424;c[2611]=10432;c[2610]=10432;c[2613]=10440;c[2612]=10440;c[2615]=10448;c[2614]=10448;c[2617]=10456;c[2616]=10456;c[2619]=10464;c[2618]=10464;c[2621]=10472;c[2620]=10472;c[2623]=10480;c[2622]=10480;c[2625]=10488;c[2624]=10488;ga=la+-40|0;d=ma+8|0;oa=(d&7|0)==0?0:0-d&7;d=ma+oa|0;pa=ga-oa|0;c[2556]=d;c[2553]=pa;c[d+4>>2]=pa|1;c[ma+ga+4>>2]=40;c[2557]=c[2672]}while(0);ma=c[2553]|0;if(ma>>>0>F>>>0){la=ma-F|0;c[2553]=la;ma=c[2556]|0;ka=ma+F|0;c[2556]=ka;c[ka+4>>2]=la|1;c[ma+4>>2]=F|3;o=ma+8|0;Y=b;return o|0}}ma=_e()|0;c[ma>>2]=12;o=0;Y=b;return o|0}function Qe(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;if(!a)return;b=a+-8|0;d=c[2554]|0;e=c[a+-4>>2]|0;a=e&-8;f=b+a|0;do if(!(e&1)){g=c[b>>2]|0;if(!(e&3))return;h=b+(0-g)|0;i=g+a|0;if(h>>>0>>0)return;if((c[2555]|0)==(h|0)){j=f+4|0;k=c[j>>2]|0;if((k&3|0)!=3){l=h;m=i;n=h;break}c[2552]=i;c[j>>2]=k&-2;c[h+4>>2]=i|1;c[h+i>>2]=i;return}k=3?g>>>3:g;if(g>>>0<256){g=c[h+8>>2]|0;j=c[h+12>>2]|0;if((j|0)==(g|0)){c[2550]=c[2550]&~(1<>2]=j;c[j+8>>2]=g;l=h;m=i;n=h;break}}g=c[h+24>>2]|0;j=c[h+12>>2]|0;do if((j|0)==(h|0)){k=h+16|0;o=k+4|0;p=c[o>>2]|0;if(!p){q=c[k>>2]|0;if(!q){r=0;break}else{s=q;t=k}}else{s=p;t=o}o=s;p=t;while(1){k=o+20|0;q=c[k>>2]|0;if(!q){u=o+16|0;v=c[u>>2]|0;if(!v)break;else{w=v;x=u}}else{w=q;x=k}o=w;p=x}c[p>>2]=0;r=o}else{k=c[h+8>>2]|0;c[k+12>>2]=j;c[j+8>>2]=k;r=j}while(0);if(g){j=c[h+28>>2]|0;k=10504+(j<<2)|0;if((c[k>>2]|0)==(h|0)){c[k>>2]=r;if(!r){c[2551]=c[2551]&~(1<>2]|0)==(h|0)?j:g+20|0)>>2]=r;if(!r){l=h;m=i;n=h;break}}c[r+24>>2]=g;j=h+16|0;k=c[j>>2]|0;if(k|0){c[r+16>>2]=k;c[k+24>>2]=r}k=c[j+4>>2]|0;if(k){c[r+20>>2]=k;c[k+24>>2]=r;l=h;m=i;n=h}else{l=h;m=i;n=h}}else{l=h;m=i;n=h}}else{l=b;m=a;n=b}while(0);if(n>>>0>=f>>>0)return;b=f+4|0;a=c[b>>2]|0;if(!(a&1))return;if(!(a&2)){if((c[2556]|0)==(f|0)){r=(c[2553]|0)+m|0;c[2553]=r;c[2556]=l;c[l+4>>2]=r|1;if((l|0)!=(c[2555]|0))return;c[2555]=0;c[2552]=0;return}if((c[2555]|0)==(f|0)){r=(c[2552]|0)+m|0;c[2552]=r;c[2555]=n;c[l+4>>2]=r|1;c[n+r>>2]=r;return}r=(a&-8)+m|0;x=3?a>>>3:a;do if(a>>>0<256){w=c[f+8>>2]|0;t=c[f+12>>2]|0;if((t|0)==(w|0)){c[2550]=c[2550]&~(1<>2]=t;c[t+8>>2]=w;break}}else{w=c[f+24>>2]|0;t=c[f+12>>2]|0;do if((t|0)==(f|0)){s=f+16|0;d=s+4|0;e=c[d>>2]|0;if(!e){k=c[s>>2]|0;if(!k){y=0;break}else{z=k;A=s}}else{z=e;A=d}d=z;e=A;while(1){s=d+20|0;k=c[s>>2]|0;if(!k){j=d+16|0;q=c[j>>2]|0;if(!q)break;else{B=q;C=j}}else{B=k;C=s}d=B;e=C}c[e>>2]=0;y=d}else{o=c[f+8>>2]|0;c[o+12>>2]=t;c[t+8>>2]=o;y=t}while(0);if(w|0){t=c[f+28>>2]|0;h=10504+(t<<2)|0;if((c[h>>2]|0)==(f|0)){c[h>>2]=y;if(!y){c[2551]=c[2551]&~(1<>2]|0)==(f|0)?t:w+20|0)>>2]=y;if(!y)break}c[y+24>>2]=w;t=f+16|0;h=c[t>>2]|0;if(h|0){c[y+16>>2]=h;c[h+24>>2]=y}h=c[t+4>>2]|0;if(h|0){c[y+20>>2]=h;c[h+24>>2]=y}}}while(0);c[l+4>>2]=r|1;c[n+r>>2]=r;if((l|0)==(c[2555]|0)){c[2552]=r;return}else D=r}else{c[b>>2]=a&-2;c[l+4>>2]=m|1;c[n+m>>2]=m;D=m}m=3?D>>>3:D;if(D>>>0<256){n=10240+(m<<1<<2)|0;a=c[2550]|0;b=1<>2]|0;F=b}c[F>>2]=l;c[E+12>>2]=l;c[l+8>>2]=E;c[l+12>>2]=n;return}n=8?D>>>8:D;if(n)if(D>>>0>16777215)G=31;else{E=n+1048320|0;F=(16?E>>>16:E)&8;E=n<>>16:n)&4;n=E<>>16:E)&2;E=n<>>15:E)|0;E=n+7|0;G=(E?D>>>E:D)&1|n<<1}else G=0;n=10504+(G<<2)|0;c[l+28>>2]=G;c[l+20>>2]=0;c[l+16>>2]=0;E=c[2551]|0;a=1<>2]=l;c[l+24>>2]=n;c[l+12>>2]=l;c[l+8>>2]=l}else{F=c[n>>2]|0;b:do if((c[F+4>>2]&-8|0)==(D|0))H=F;else{b=D<<((G|0)==31?0:25-(1?G>>>1:G)|0);m=F;while(1){I=m+16+((31?b>>>31:b)<<2)|0;r=c[I>>2]|0;if(!r)break;if((c[r+4>>2]&-8|0)==(D|0)){H=r;break b}else{b=b<<1;m=r}}c[I>>2]=l;c[l+24>>2]=m;c[l+12>>2]=l;c[l+8>>2]=l;break a}while(0);F=H+8|0;w=c[F>>2]|0;c[w+12>>2]=l;c[F>>2]=l;c[l+8>>2]=w;c[l+12>>2]=H;c[l+24>>2]=0}while(0);l=(c[2558]|0)+-1|0;c[2558]=l;if(l|0)return;l=10656;while(1){H=c[l>>2]|0;if(!H)break;else l=H+8|0}c[2558]=-1;return}function Re(a,b){a=a|0;b=b|0;var d=0,e=0;if(a){d=r(b,a)|0;if((b|a)>>>0>65535)e=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1;else e=d}else e=0;d=Pe(e)|0;if(!d)return d|0;if(!(c[d+-4>>2]&3))return d|0;Nf(d|0,0,e|0)|0;return d|0}function Se(a,b){a=a|0;b=b|0;return 0}function Te(a){a=a|0;return 0}function Ue(a){a=a|0;return 0}function Ve(a){a=a|0;return 0}function We(a){a=a|0;var b=0,d=0,e=0;b=Y;Y=Y+16|0;d=b;e=$e(c[a+60>>2]|0)|0;c[d>>2]=e;e=Ze(I(6,d|0)|0)|0;Y=b;return e|0}function Xe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;e=Y;Y=Y+48|0;f=e+32|0;g=e+16|0;h=e;i=a+28|0;j=c[i>>2]|0;c[h>>2]=j;k=a+20|0;l=(c[k>>2]|0)-j|0;c[h+4>>2]=l;c[h+8>>2]=b;c[h+12>>2]=d;b=l+d|0;l=a+60|0;c[g>>2]=c[l>>2];c[g+4>>2]=h;c[g+8>>2]=2;j=Ze(H(146,g|0)|0)|0;a:do if((b|0)!=(j|0)){g=2;m=b;n=h;o=j;while(1){if((o|0)<0)break;m=m-o|0;p=c[n+4>>2]|0;q=o>>>0>p>>>0;r=q?n+8|0:n;s=g+(q<<31>>31)|0;t=o-(q?p:0)|0;c[r>>2]=(c[r>>2]|0)+t;p=r+4|0;c[p>>2]=(c[p>>2]|0)-t;c[f>>2]=c[l>>2];c[f+4>>2]=r;c[f+8>>2]=s;o=Ze(H(146,f|0)|0)|0;if((m|0)==(o|0)){u=3;break a}else{g=s;n=r}}c[a+16>>2]=0;c[i>>2]=0;c[k>>2]=0;c[a>>2]=c[a>>2]|32;if((g|0)==2)v=0;else v=d-(c[n+4>>2]|0)|0}else u=3;while(0);if((u|0)==3){u=c[a+44>>2]|0;c[a+16>>2]=u+(c[a+48>>2]|0);a=u;c[i>>2]=a;c[k>>2]=a;v=d}Y=e;return v|0}function Ye(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=Y;Y=Y+32|0;f=e;g=e+20|0;c[f>>2]=c[a+60>>2];c[f+4>>2]=0;c[f+8>>2]=b;c[f+12>>2]=g;c[f+16>>2]=d;if((Ze(G(140,f|0)|0)|0)<0){c[g>>2]=-1;h=-1}else h=c[g>>2]|0;Y=e;return h|0}function Ze(a){a=a|0;var b=0,d=0;if(a>>>0>4294963200){b=_e()|0;c[b>>2]=0-a;d=-1}else d=a;return d|0}function _e(){return 10696}function $e(a){a=a|0;return a|0}function af(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;a:do if(!d)e=0;else{f=b;g=d;h=c;while(1){i=a[f>>0]|0;j=a[h>>0]|0;if(i<<24>>24!=j<<24>>24)break;g=g+-1|0;if(!g){e=0;break a}else{f=f+1|0;h=h+1|0}}e=(i&255)-(j&255)|0}while(0);return e|0}function bf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;f=d&255;g=(e|0)!=0;a:do if(g&(b&3|0)!=0){h=d&255;i=b;j=e;while(1){if((a[i>>0]|0)==h<<24>>24){k=i;l=j;m=6;break a}n=i+1|0;o=j+-1|0;p=(o|0)!=0;if(p&(n&3|0)!=0){i=n;j=o}else{q=n;s=o;t=p;m=5;break}}}else{q=b;s=e;t=g;m=5}while(0);if((m|0)==5)if(t){k=q;l=s;m=6}else m=16;b:do if((m|0)==6){s=d&255;if((a[k>>0]|0)==s<<24>>24)if(!l){m=16;break}else{u=k;break}q=r(f,16843009)|0;c:do if(l>>>0>3){t=k;g=l;while(1){e=c[t>>2]^q;if((e&-2139062144^-2139062144)&e+-16843009|0){v=g;w=t;break c}e=t+4|0;b=g+-4|0;if(b>>>0>3){t=e;g=b}else{x=e;y=b;m=11;break}}}else{x=k;y=l;m=11}while(0);if((m|0)==11)if(!y){m=16;break}else{v=y;w=x}q=w;g=v;while(1){if((a[q>>0]|0)==s<<24>>24){u=q;break b}g=g+-1|0;if(!g){m=16;break}else q=q+1|0}}while(0);if((m|0)==16)u=0;return u|0}function cf(){return 8300}function df(a){a=a|0;return (a+-48|0)>>>0<10|0}function ef(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=Y;Y=Y+224|0;g=f+208|0;h=f+160|0;i=f+80|0;j=f;k=h;l=k+40|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));c[g>>2]=c[e>>2];if((ff(0,d,g,i,h)|0)<0)m=-1;else{if((c[b+76>>2]|0)>-1)n=gf(b)|0;else n=0;e=c[b>>2]|0;k=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;e=b+48|0;if(!(c[e>>2]|0)){l=b+44|0;o=c[l>>2]|0;c[l>>2]=j;p=b+28|0;c[p>>2]=j;q=b+20|0;c[q>>2]=j;c[e>>2]=80;r=b+16|0;c[r>>2]=j+80;j=ff(b,d,g,i,h)|0;if(!o)s=j;else{ca[c[b+36>>2]&15](b,0,0)|0;t=(c[q>>2]|0)==0?-1:j;c[l>>2]=o;c[e>>2]=0;c[r>>2]=0;c[p>>2]=0;c[q>>2]=0;s=t}}else s=ff(b,d,g,i,h)|0;h=c[b>>2]|0;c[b>>2]=h|k;if(n|0)hf(b);m=(h&32|0)==0?s:-1}Y=f;return m|0}function ff(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0;j=Y;Y=Y+64|0;k=j+56|0;l=j+40|0;m=j;n=j+48|0;o=j+60|0;c[k>>2]=e;e=(d|0)!=0;p=m+40|0;q=p;r=m+39|0;m=n+4|0;s=0;t=0;u=0;a:while(1){w=s;x=t;while(1){do if((x|0)>-1)if((w|0)>(2147483647-x|0)){y=_e()|0;c[y>>2]=75;z=-1;break}else{z=w+x|0;break}else z=x;while(0);A=c[k>>2]|0;y=a[A>>0]|0;if(!(y<<24>>24)){B=92;break a}C=y;y=A;b:while(1){switch(C<<24>>24){case 37:{B=10;break b;break}case 0:{D=y;break b;break}default:{}}E=y+1|0;c[k>>2]=E;C=a[E>>0]|0;y=E}c:do if((B|0)==10){B=0;C=y;E=y;while(1){if((a[E+1>>0]|0)!=37){D=C;break c}F=C+1|0;E=E+2|0;c[k>>2]=E;if((a[E>>0]|0)!=37){D=F;break}else C=F}}while(0);w=D-A|0;if(e)jf(d,A,w);if(!w)break;else x=z}x=(df(a[(c[k>>2]|0)+1>>0]|0)|0)==0;w=c[k>>2]|0;if(!x?(a[w+2>>0]|0)==36:0){G=(a[w+1>>0]|0)+-48|0;H=1;I=3}else{G=-1;H=u;I=1}x=w+I|0;c[k>>2]=x;w=a[x>>0]|0;y=(w<<24>>24)+-32|0;if(y>>>0>31|(1<>2]=E;F=a[E>>0]|0;C=(F<<24>>24)+-32|0;if(C>>>0>31|(1<>24==42){if((df(a[L+1>>0]|0)|0)!=0?(y=c[k>>2]|0,(a[y+2>>0]|0)==36):0){w=y+1|0;c[i+((a[w>>0]|0)+-48<<2)>>2]=10;M=c[h+((a[w>>0]|0)+-48<<3)>>2]|0;N=1;O=y+3|0}else{if(H|0){P=-1;break}if(e){y=(c[f>>2]|0)+(4-1)&~(4-1);w=c[y>>2]|0;c[f>>2]=y+4;Q=w}else Q=0;M=Q;N=0;O=(c[k>>2]|0)+1|0}c[k>>2]=O;w=(M|0)<0;R=w?0-M|0:M;S=w?J|8192:J;T=N;U=O}else{w=kf(k)|0;if((w|0)<0){P=-1;break}R=w;S=J;T=H;U=c[k>>2]|0}do if((a[U>>0]|0)==46){w=U+1|0;if((a[w>>0]|0)!=42){c[k>>2]=w;w=kf(k)|0;V=w;W=c[k>>2]|0;break}if(df(a[U+2>>0]|0)|0?(w=c[k>>2]|0,(a[w+3>>0]|0)==36):0){y=w+2|0;c[i+((a[y>>0]|0)+-48<<2)>>2]=10;C=c[h+((a[y>>0]|0)+-48<<3)>>2]|0;y=w+4|0;c[k>>2]=y;V=C;W=y;break}if(T|0){P=-1;break a}if(e){y=(c[f>>2]|0)+(4-1)&~(4-1);C=c[y>>2]|0;c[f>>2]=y+4;X=C}else X=0;C=(c[k>>2]|0)+2|0;c[k>>2]=C;V=X;W=C}else{V=-1;W=U}while(0);C=0;y=W;while(1){if(((a[y>>0]|0)+-65|0)>>>0>57){P=-1;break a}w=y;y=y+1|0;c[k>>2]=y;Z=a[(a[w>>0]|0)+-65+(7616+(C*58|0))>>0]|0;_=Z&255;if((_+-1|0)>>>0>=8)break;else C=_}if(!(Z<<24>>24)){P=-1;break}w=(G|0)>-1;do if(Z<<24>>24==19)if(w){P=-1;break a}else B=54;else{if(w){c[i+(G<<2)>>2]=_;E=h+(G<<3)|0;x=c[E+4>>2]|0;F=l;c[F>>2]=c[E>>2];c[F+4>>2]=x;B=54;break}if(!e){P=0;break a}lf(l,_,f);$=c[k>>2]|0;B=55}while(0);if((B|0)==54){B=0;if(e){$=y;B=55}else aa=0}d:do if((B|0)==55){B=0;w=a[$+-1>>0]|0;x=(C|0)!=0&(w&15|0)==3?w&-33:w;w=S&-65537;F=(S&8192|0)==0?S:w;e:do switch(x|0){case 110:{switch((C&255)<<24>>24){case 0:{c[c[l>>2]>>2]=z;aa=0;break d;break}case 1:{c[c[l>>2]>>2]=z;aa=0;break d;break}case 2:{E=c[l>>2]|0;c[E>>2]=z;c[E+4>>2]=((z|0)<0)<<31>>31;aa=0;break d;break}case 3:{b[c[l>>2]>>1]=z;aa=0;break d;break}case 4:{a[c[l>>2]>>0]=z;aa=0;break d;break}case 6:{c[c[l>>2]>>2]=z;aa=0;break d;break}case 7:{E=c[l>>2]|0;c[E>>2]=z;c[E+4>>2]=((z|0)<0)<<31>>31;aa=0;break d;break}default:{aa=0;break d}}break}case 112:{ba=120;ca=V>>>0>8?V:8;da=F|8;B=67;break}case 88:case 120:{ba=x;ca=V;da=F;B=67;break}case 111:{E=l;ea=c[E>>2]|0;fa=c[E+4>>2]|0;E=nf(ea,fa,p)|0;ga=q-E|0;ha=E;ia=0;ja=9285;ka=(F&8|0)==0|(V|0)>(ga|0)?V:ga+1|0;la=F;ma=ea;na=fa;B=73;break}case 105:case 100:{fa=l;ea=c[fa>>2]|0;ga=c[fa+4>>2]|0;if((ga|0)<0){fa=Ef(0,0,ea|0,ga|0)|0;E=v()|0;oa=l;c[oa>>2]=fa;c[oa+4>>2]=E;pa=1;qa=9285;ra=fa;sa=E;B=72;break e}else{pa=(F&2049|0)!=0&1;qa=(F&2048|0)==0?((F&1|0)==0?9285:9287):9286;ra=ea;sa=ga;B=72;break e}break}case 117:{ga=l;pa=0;qa=9285;ra=c[ga>>2]|0;sa=c[ga+4>>2]|0;B=72;break}case 99:{a[r>>0]=c[l>>2];ta=r;ua=0;va=9285;wa=1;xa=w;ya=q;break}case 115:{ga=c[l>>2]|0;ea=(ga|0)==0?9295:ga;ga=bf(ea,0,V)|0;E=(ga|0)==0;ta=ea;ua=0;va=9285;wa=E?V:ga-ea|0;xa=w;ya=E?ea+V|0:ga;break}case 67:{c[n>>2]=c[l>>2];c[m>>2]=0;c[l>>2]=n;za=-1;B=79;break}case 83:{if(!V){pf(d,32,R,0,F);Aa=0;B=89}else{za=V;B=79}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{aa=rf(d,+g[l>>3],R,V,F,x)|0;break d;break}default:{ta=A;ua=0;va=9285;wa=V;xa=F;ya=q}}while(0);f:do if((B|0)==67){B=0;x=l;w=c[x>>2]|0;ga=c[x+4>>2]|0;x=mf(w,ga,p,ba&32)|0;ea=(da&8|0)==0|(w|0)==0&(ga|0)==0;ha=x;ia=ea?0:2;ja=ea?9285:9285+(4?ba>>>4:ba)|0;ka=ca;la=da;ma=w;na=ga;B=73}else if((B|0)==72){B=0;ha=of(ra,sa,p)|0;ia=pa;ja=qa;ka=V;la=F;ma=ra;na=sa;B=73}else if((B|0)==79){B=0;ga=c[l>>2]|0;w=0;while(1){ea=c[ga>>2]|0;if(!ea){Ba=w;break}x=qf(o,ea)|0;Ca=(x|0)<0;if(Ca|x>>>0>(za-w|0)>>>0){B=83;break}ea=x+w|0;if(za>>>0>ea>>>0){ga=ga+4|0;w=ea}else{Ba=ea;break}}if((B|0)==83){B=0;if(Ca){P=-1;break a}else Ba=w}pf(d,32,R,Ba,F);if(!Ba){Aa=0;B=89}else{ga=c[l>>2]|0;ea=0;while(1){x=c[ga>>2]|0;if(!x){Aa=Ba;B=89;break f}E=qf(o,x)|0;ea=E+ea|0;if((ea|0)>(Ba|0)){Aa=Ba;B=89;break f}jf(d,o,E);if(ea>>>0>=Ba>>>0){Aa=Ba;B=89;break}else ga=ga+4|0}}}while(0);if((B|0)==73){B=0;ga=(ma|0)!=0|(na|0)!=0;ea=(ka|0)!=0|ga;w=q-ha+((ga^1)&1)|0;ta=ea?ha:p;ua=ia;va=ja;wa=ea?((ka|0)>(w|0)?ka:w):0;xa=(ka|0)>-1?la&-65537:la;ya=q}else if((B|0)==89){B=0;pf(d,32,R,Aa,F^8192);aa=(R|0)>(Aa|0)?R:Aa;break}w=ya-ta|0;ea=(wa|0)<(w|0)?w:wa;ga=ea+ua|0;E=(R|0)<(ga|0)?ga:R;pf(d,32,E,ga,xa);jf(d,va,ua);pf(d,48,E,ga,xa^65536);pf(d,48,ea,w,0);jf(d,ta,w);pf(d,32,E,ga,xa^8192);aa=E}while(0);s=aa;t=z;u=T}g:do if((B|0)==92)if(!d)if(!u)P=0;else{T=1;while(1){t=c[i+(T<<2)>>2]|0;if(!t)break;lf(h+(T<<3)|0,t,f);t=T+1|0;if(t>>>0<10)T=t;else{P=1;break g}}t=T;while(1){if(c[i+(t<<2)>>2]|0){P=-1;break g}t=t+1|0;if(t>>>0>=10){P=1;break}}}else P=z;while(0);Y=j;return P|0}function gf(a){a=a|0;return 1}function hf(a){a=a|0;return}function jf(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))xf(b,d,a)|0;return}function kf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;if(!(df(a[c[b>>2]>>0]|0)|0))d=0;else{e=0;while(1){f=c[b>>2]|0;g=(e*10|0)+-48+(a[f>>0]|0)|0;h=f+1|0;c[b>>2]=h;if(!(df(a[h>>0]|0)|0)){d=g;break}else e=g}}return d|0}function lf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);f=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=f;break a;break}case 10:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a;break}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);f=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=f;c[e+4>>2]=0;break a;break}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);f=e;h=c[f>>2]|0;i=c[f+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=h;c[e+4>>2]=i;break a;break}case 13:{i=(c[d>>2]|0)+(4-1)&~(4-1);e=c[i>>2]|0;c[d>>2]=i+4;i=(e&65535)<<16>>16;e=a;c[e>>2]=i;c[e+4>>2]=((i|0)<0)<<31>>31;break a;break}case 14:{i=(c[d>>2]|0)+(4-1)&~(4-1);e=c[i>>2]|0;c[d>>2]=i+4;i=a;c[i>>2]=e&65535;c[i+4>>2]=0;break a;break}case 15:{i=(c[d>>2]|0)+(4-1)&~(4-1);e=c[i>>2]|0;c[d>>2]=i+4;i=(e&255)<<24>>24;e=a;c[e>>2]=i;c[e+4>>2]=((i|0)<0)<<31>>31;break a;break}case 16:{i=(c[d>>2]|0)+(4-1)&~(4-1);e=c[i>>2]|0;c[d>>2]=i+4;i=a;c[i>>2]=e&255;c[i+4>>2]=0;break a;break}case 17:{i=(c[d>>2]|0)+(8-1)&~(8-1);j=+g[i>>3];c[d>>2]=i+8;g[a>>3]=j;break a;break}case 18:{i=(c[d>>2]|0)+(8-1)&~(8-1);j=+g[i>>3];c[d>>2]=i+8;g[a>>3]=j;break a;break}default:break a}while(0);while(0);return}function mf(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0;if((b|0)==0&(c|0)==0)g=e;else{h=e;e=c;c=b;while(1){b=h+-1|0;a[b>>0]=d[8080+(c&15)>>0]|0|f;c=If(c|0,e|0,4)|0;e=v()|0;if((c|0)==0&(e|0)==0){g=b;break}else h=b}}return g|0}function nf(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;if((b|0)==0&(c|0)==0)e=d;else{f=d;d=c;c=b;while(1){b=f+-1|0;a[b>>0]=c&7|48;c=If(c|0,d|0,3)|0;d=v()|0;if((c|0)==0&(d|0)==0){e=b;break}else f=b}}return e|0}function of(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){e=d;f=b;g=c;do{c=f;f=Hf(f|0,g|0,10,0)|0;h=g;g=v()|0;i=Cf(f|0,g|0,10,0)|0;j=Ef(c|0,h|0,i|0,v()|0)|0;v()|0;e=e+-1|0;a[e>>0]=j&255|48}while(h>>>0>9|(h|0)==9&c>>>0>4294967295);k=f;l=e}else{k=b;l=d}if(!k)m=l;else{d=k;k=l;while(1){l=d;d=(d>>>0)/10|0;b=k+-1|0;a[b>>0]=l-(d*10|0)|48;if(l>>>0<10){m=b;break}else k=b}}return m|0}function pf(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;f=Y;Y=Y+256|0;g=f;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;Nf(g|0,b<<24>>24|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;d=e;do{jf(a,g,256);d=d+-256|0}while(d>>>0>255);h=b&255}else h=e;jf(a,g,h)}Y=f;return}function qf(a,b){a=a|0;b=b|0;var c=0;if(!a)c=0;else c=vf(a,b,0)|0;return c|0}function rf(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0.0,u=0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0.0,ja=0.0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0;j=Y;Y=Y+560|0;k=j+32|0;l=j+536|0;m=j;n=m;o=j+540|0;c[l>>2]=0;p=o+12|0;q=sf(e)|0;s=v()|0;if((s|0)<0){t=-e;u=sf(t)|0;w=t;x=1;y=9302;z=v()|0;A=u}else{w=e;x=(h&2049|0)!=0&1;y=(h&2048|0)==0?((h&1|0)==0?9303:9308):9305;z=s;A=q}do if(0==0&(z&2146435072|0)==2146435072){q=(i&32|0)!=0;A=x+3|0;pf(b,32,f,A,h&-65537);jf(b,y,x);jf(b,w!=w|0.0!=0.0?(q?9329:9333):q?9321:9325,3);pf(b,32,f,A,h^8192);B=A}else{e=+tf(w,l)*2.0;A=e!=0.0;if(A)c[l>>2]=(c[l>>2]|0)+-1;q=i|32;if((q|0)==97){s=i&32;u=(s|0)==0?y:y+9|0;C=x|2;D=12-g|0;do if(!(g>>>0>11|(D|0)==0)){t=8.0;E=D;do{E=E+-1|0;t=t*16.0}while((E|0)!=0);if((a[u>>0]|0)==45){F=-(t+(-e-t));break}else{F=e+t-t;break}}else F=e;while(0);D=c[l>>2]|0;E=(D|0)<0?0-D|0:D;G=of(E,((E|0)<0)<<31>>31,p)|0;if((G|0)==(p|0)){E=o+11|0;a[E>>0]=48;H=E}else H=G;a[H+-1>>0]=((31?D>>31:D)&2)+43;D=H+-2|0;a[D>>0]=i+15;G=(g|0)<1;E=(h&8|0)==0;I=m;J=F;while(1){K=~~J;L=I+1|0;a[I>>0]=s|d[8080+K>>0];J=(J-+(K|0))*16.0;if((L-n|0)==1?!(E&(G&J==0.0)):0){a[L>>0]=46;M=I+2|0}else M=L;if(!(J!=0.0))break;else I=M}I=M;if((g|0)!=0?(-2-n+I|0)<(g|0):0){G=p;E=D;N=g+2+G-E|0;O=G;P=E}else{E=p;G=D;N=E-n-G+I|0;O=E;P=G}G=N+C|0;pf(b,32,f,G,h);jf(b,u,C);pf(b,48,f,G,h^65536);E=I-n|0;jf(b,m,E);I=O-P|0;pf(b,48,N-(E+I)|0,0,0);jf(b,D,I);pf(b,32,f,G,h^8192);B=G;break}G=(g|0)<0?6:g;if(A){I=(c[l>>2]|0)+-28|0;c[l>>2]=I;Q=e*268435456.0;R=I}else{Q=e;R=c[l>>2]|0}I=(R|0)<0?k:k+288|0;E=I;J=Q;do{s=~~J>>>0;c[E>>2]=s;E=E+4|0;J=(J-+(s>>>0))*1.0e9}while(J!=0.0);A=I;if((R|0)>0){D=I;C=E;u=R;while(1){s=(u|0)<29?u:29;L=C+-4|0;if(L>>>0>=D>>>0){K=L;L=0;do{S=Jf(c[K>>2]|0,0,s|0)|0;T=Df(S|0,v()|0,L|0,0)|0;S=v()|0;L=Hf(T|0,S|0,1e9,0)|0;U=Cf(L|0,v()|0,1e9,0)|0;V=Ef(T|0,S|0,U|0,v()|0)|0;v()|0;c[K>>2]=V;K=K+-4|0}while(K>>>0>=D>>>0);if(L){K=D+-4|0;c[K>>2]=L;W=K}else W=D}else W=D;a:do if(C>>>0>W>>>0){K=C;while(1){V=K+-4|0;if(c[V>>2]|0){X=K;break a}if(V>>>0>W>>>0)K=V;else{X=V;break}}}else X=C;while(0);L=(c[l>>2]|0)-s|0;c[l>>2]=L;if((L|0)>0){D=W;C=X;u=L}else{Z=W;_=X;$=L;break}}}else{Z=I;_=E;$=R}if(($|0)<0){u=((G+25|0)/9|0)+1|0;C=(q|0)==102;D=Z;L=_;K=$;while(1){V=0-K|0;U=(V|0)<9?V:9;if(D>>>0>>0){V=(1<>>U:1e9;T=0;aa=D;do{ba=c[aa>>2]|0;c[aa>>2]=(U?ba>>>U:ba)+T;T=r(ba&V,S)|0;aa=aa+4|0}while(aa>>>0>>0);aa=(c[D>>2]|0)==0?D+4|0:D;if(!T){ca=L;da=aa}else{c[L>>2]=T;ca=L+4|0;da=aa}}else{ca=L;da=(c[D>>2]|0)==0?D+4|0:D}aa=C?I:da;S=ca-aa|0;V=((2?S>>2:S)|0)>(u|0)?aa+(u<<2)|0:ca;K=(c[l>>2]|0)+U|0;c[l>>2]=K;if((K|0)>=0){ea=da;fa=V;break}else{D=da;L=V}}}else{ea=Z;fa=_}if(ea>>>0>>0){L=A-ea|0;D=(2?L>>2:L)*9|0;L=c[ea>>2]|0;if(L>>>0<10)ga=D;else{K=D;D=10;while(1){D=D*10|0;u=K+1|0;if(L>>>0>>0){ga=u;break}else K=u}}}else ga=0;K=(q|0)==103;D=(G|0)!=0;L=G-((q|0)==102?0:ga)+((D&K)<<31>>31)|0;u=fa-A|0;if((L|0)<(((2?u>>2:u)*9|0)+-9|0)){u=L+9216|0;L=(u|0)/9|0;C=I+4+(L+-1024<<2)|0;E=u-(L*9|0)|0;if((E|0)<8){L=E;E=10;while(1){u=E*10|0;if((L|0)<7){L=L+1|0;E=u}else{ha=u;break}}}else ha=10;E=c[C>>2]|0;L=(E>>>0)/(ha>>>0)|0;q=E-(r(L,ha)|0)|0;u=(C+4|0)==(fa|0);if(!(u&(q|0)==0)){t=(L&1|0)==0?9007199254740992.0:9007199254740994.0;L=1?ha>>>1:ha;J=q>>>0>>0?.5:u&(q|0)==(L|0)?1.0:1.5;if(!x){ia=J;ja=t}else{L=(a[y>>0]|0)==45;ia=L?-J:J;ja=L?-t:t}L=E-q|0;c[C>>2]=L;if(ja+ia!=ja){q=L+ha|0;c[C>>2]=q;if(q>>>0>999999999){q=C;L=ea;while(1){E=q+-4|0;c[q>>2]=0;if(E>>>0>>0){u=L+-4|0;c[u>>2]=0;ka=u}else ka=L;u=(c[E>>2]|0)+1|0;c[E>>2]=u;if(u>>>0>999999999){q=E;L=ka}else{la=E;ma=ka;break}}}else{la=C;ma=ea}L=A-ma|0;q=(2?L>>2:L)*9|0;L=c[ma>>2]|0;if(L>>>0<10){na=la;oa=q;pa=ma}else{E=q;q=10;while(1){q=q*10|0;u=E+1|0;if(L>>>0>>0){na=la;oa=u;pa=ma;break}else E=u}}}else{na=C;oa=ga;pa=ea}}else{na=C;oa=ga;pa=ea}E=na+4|0;qa=oa;ra=fa>>>0>E>>>0?E:fa;sa=pa}else{qa=ga;ra=fa;sa=ea}E=0-qa|0;b:do if(ra>>>0>sa>>>0){q=ra;while(1){L=q+-4|0;if(c[L>>2]|0){ta=q;ua=1;break b}if(L>>>0>sa>>>0)q=L;else{ta=L;ua=0;break}}}else{ta=ra;ua=0}while(0);do if(K){C=G+((D^1)&1)|0;if((C|0)>(qa|0)&(qa|0)>-5){va=i+-1|0;wa=C+-1-qa|0}else{va=i+-2|0;wa=C+-1|0}if(!(h&8)){if(ua?(C=c[ta+-4>>2]|0,(C|0)!=0):0)if(!((C>>>0)%10|0)){q=0;U=10;while(1){U=U*10|0;T=q+1|0;if((C>>>0)%(U>>>0)|0|0){xa=T;break}else q=T}}else xa=0;else xa=9;q=ta-A|0;U=((2?q>>2:q)*9|0)+-9|0;if((va|32|0)==102){q=U-xa|0;C=(q|0)>0?q:0;ya=va;za=(wa|0)<(C|0)?wa:C;break}else{C=U+qa-xa|0;U=(C|0)>0?C:0;ya=va;za=(wa|0)<(U|0)?wa:U;break}}else{ya=va;za=wa}}else{ya=i;za=G}while(0);G=(za|0)!=0;A=G?1:(3?h>>>3:h)&1;D=(ya|32|0)==102;if(D){Aa=0;Ba=(qa|0)>0?qa:0}else{K=(qa|0)<0?E:qa;U=of(K,((K|0)<0)<<31>>31,p)|0;K=p;if((K-U|0)<2){C=U;while(1){q=C+-1|0;a[q>>0]=48;if((K-q|0)<2)C=q;else{Ca=q;break}}}else Ca=U;a[Ca+-1>>0]=((31?qa>>31:qa)&2)+43;C=Ca+-2|0;a[C>>0]=ya;Aa=C;Ba=K-C|0}C=x+1+za+A+Ba|0;pf(b,32,f,C,h);jf(b,y,x);pf(b,48,f,C,h^65536);if(D){E=sa>>>0>I>>>0?I:sa;q=m+9|0;T=q;L=m+8|0;u=E;do{V=of(c[u>>2]|0,0,q)|0;if((u|0)==(E|0))if((V|0)==(q|0)){a[L>>0]=48;Da=L}else Da=V;else if(V>>>0>m>>>0){Nf(m|0,48,V-n|0)|0;aa=V;while(1){S=aa+-1|0;if(S>>>0>m>>>0)aa=S;else{Da=S;break}}}else Da=V;jf(b,Da,T-Da|0);u=u+4|0}while(u>>>0<=I>>>0);if(!((h&8|0)==0&(G^1)))jf(b,9337,1);if(u>>>0>>0&(za|0)>0){I=za;T=u;while(1){L=of(c[T>>2]|0,0,q)|0;if(L>>>0>m>>>0){Nf(m|0,48,L-n|0)|0;E=L;while(1){D=E+-1|0;if(D>>>0>m>>>0)E=D;else{Ea=D;break}}}else Ea=L;jf(b,Ea,(I|0)<9?I:9);T=T+4|0;E=I+-9|0;if(!(T>>>0>>0&(I|0)>9)){Fa=E;break}else I=E}}else Fa=za;pf(b,48,Fa+9|0,9,0)}else{I=ua?ta:sa+4|0;if(sa>>>0>>0&(za|0)>-1){T=m+9|0;q=(h&8|0)==0;u=T;G=0-n|0;E=m+8|0;V=za;D=sa;while(1){A=of(c[D>>2]|0,0,T)|0;if((A|0)==(T|0)){a[E>>0]=48;Ga=E}else Ga=A;do if((D|0)==(sa|0)){A=Ga+1|0;jf(b,Ga,1);if(q&(V|0)<1){Ha=A;break}jf(b,9337,1);Ha=A}else{if(Ga>>>0<=m>>>0){Ha=Ga;break}Nf(m|0,48,Ga+G|0)|0;A=Ga;while(1){K=A+-1|0;if(K>>>0>m>>>0)A=K;else{Ha=K;break}}}while(0);L=u-Ha|0;jf(b,Ha,(V|0)>(L|0)?L:V);A=V-L|0;D=D+4|0;if(!(D>>>0>>0&(A|0)>-1)){Ia=A;break}else V=A}}else Ia=za;pf(b,48,Ia+18|0,18,0);jf(b,Aa,p-Aa|0)}pf(b,32,f,C,h^8192);B=C}while(0);Y=j;return ((B|0)<(f|0)?f:B)|0}function sf(a){a=+a;var b=0;g[h>>3]=a;b=c[h>>2]|0;u(c[h+4>>2]|0);return b|0}function tf(a,b){a=+a;b=b|0;return +(+uf(a,b))}function uf(a,b){a=+a;b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,l=0.0;g[h>>3]=a;d=c[h>>2]|0;e=c[h+4>>2]|0;f=If(d|0,e|0,52)|0;v()|0;switch(f&2047){case 0:{if(a!=0.0){i=+uf(a*18446744073709551616.0,b);j=i;k=(c[b>>2]|0)+-64|0}else{j=a;k=0}c[b>>2]=k;l=j;break}case 2047:{l=a;break}default:{c[b>>2]=(f&2047)+-1022;c[h>>2]=d;c[h+4>>2]=e&-2146435073|1071644672;l=+g[h>>3]}}return +l}function vf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;do if(b){if(d>>>0<128){a[b>>0]=d;f=1;break}e=(wf()|0)+188|0;if(!(c[c[e>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;f=1;break}else{e=_e()|0;c[e>>2]=84;f=-1;break}if(d>>>0<2048){a[b>>0]=(6?d>>>6:d)|192;a[b+1>>0]=d&63|128;f=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=(12?d>>>12:d)|224;a[b+1>>0]=(6?d>>>6:d)&63|128;a[b+2>>0]=d&63|128;f=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=(18?d>>>18:d)|240;a[b+1>>0]=(12?d>>>12:d)&63|128;a[b+2>>0]=(6?d>>>6:d)&63|128;a[b+3>>0]=d&63|128;f=4;break}else{e=_e()|0;c[e>>2]=84;f=-1;break}}else f=1;while(0);return f|0}function wf(){return cf()|0}function xf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(yf(e)|0)){h=c[f>>2]|0;i=5}else j=0;else{h=g;i=5}a:do if((i|0)==5){g=e+20|0;f=c[g>>2]|0;k=f;if((h-f|0)>>>0>>0){j=ca[c[e+36>>2]&15](e,b,d)|0;break}b:do if((a[e+75>>0]|0)<0|(d|0)==0){l=0;m=b;n=d;o=k}else{f=d;while(1){p=f+-1|0;if((a[b+p>>0]|0)==10)break;if(!p){l=0;m=b;n=d;o=k;break b}else f=p}p=ca[c[e+36>>2]&15](e,b,f)|0;if(p>>>0>>0){j=p;break a}l=f;m=b+f|0;n=d-f|0;o=c[g>>2]|0}while(0);Lf(o|0,m|0,n|0)|0;c[g>>2]=(c[g>>2]|0)+n;j=l+n|0}while(0);return j|0}function yf(b){b=b|0;var d=0,e=0,f=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;e=c[b>>2]|0;if(!(e&8)){c[b+8>>2]=0;c[b+4>>2]=0;d=c[b+44>>2]|0;c[b+28>>2]=d;c[b+20>>2]=d;c[b+16>>2]=d+(c[b+48>>2]|0);f=0}else{c[b>>2]=e|32;f=-1}return f|0}function zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=r(d,b)|0;g=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){d=(gf(e)|0)==0;h=xf(a,f,e)|0;if(d)i=h;else{hf(e);i=h}}else i=xf(a,f,e)|0;if((i|0)==(f|0))j=g;else j=(i>>>0)/(b>>>0)|0;return j|0}function Af(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Y;Y=Y+16|0;f=e;c[f>>2]=d;d=ef(a,b,f)|0;Y=e;return d|0}function Bf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a&65535;d=b&65535;e=r(d,c)|0;f=a>>>16;a=(e>>>16)+(r(d,f)|0)|0;d=b>>>16;b=r(d,c)|0;return (u((a>>>16)+(r(d,f)|0)+(((a&65535)+b|0)>>>16)|0),a+b<<16|e&65535|0)|0}function Cf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;a=c;c=Bf(e,a)|0;f=v()|0;return (u((r(b,a)|0)+(r(d,e)|0)+f|f&0|0),c|0|0)|0}function Df(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=a+c>>>0;return (u(b+d+(e>>>0>>0|0)>>>0|0),e|0)|0}function Ef(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=b-d>>>0;e=b-d-(c>>>0>a>>>0|0)>>>0;return (u(e|0),a-c>>>0|0)|0}function Ff(a){a=a|0;return (a?31-(s(a^a-1)|0)|0:32)|0}function Gf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,t=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;g=a;h=b;i=h;j=d;k=e;l=k;if(!i){m=(f|0)!=0;if(!l){if(m){c[f>>2]=(g>>>0)%(j>>>0);c[f+4>>2]=0}n=0;o=(g>>>0)/(j>>>0)>>>0;return (u(n|0),o)|0}else{if(!m){n=0;o=0;return (u(n|0),o)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;o=0;return (u(n|0),o)|0}}m=(l|0)==0;do if(j){if(!m){p=(s(l|0)|0)-(s(i|0)|0)|0;if(p>>>0<=31){q=p+1|0;r=31-p|0;t=p-31>>31;w=q;x=g>>>(q>>>0)&t|i<>>(q>>>0)&t;z=0;A=g<>2]=a|0;c[f+4>>2]=h|b&0;n=0;o=0;return (u(n|0),o)|0}r=j-1|0;if(r&j|0){t=(s(j|0)|0)+33-(s(i|0)|0)|0;q=64-t|0;p=32-t|0;B=p>>31;C=t-32|0;D=C>>31;w=t;x=p-1>>31&i>>>(C>>>0)|(i<>>(t>>>0))&D;y=D&i>>>(t>>>0);z=g<>>(C>>>0))&B|g<>31;break}if(f|0){c[f>>2]=r&g;c[f+4>>2]=0}if((j|0)==1){n=h|b&0;o=a|0|0;return (u(n|0),o)|0}else{r=Ff(j|0)|0;n=i>>>(r>>>0)|0;o=i<<32-r|g>>>(r>>>0)|0;return (u(n|0),o)|0}}else{if(m){if(f|0){c[f>>2]=(i>>>0)%(j>>>0);c[f+4>>2]=0}n=0;o=(i>>>0)/(j>>>0)>>>0;return (u(n|0),o)|0}if(!g){if(f|0){c[f>>2]=0;c[f+4>>2]=(i>>>0)%(l>>>0)}n=0;o=(i>>>0)/(l>>>0)>>>0;return (u(n|0),o)|0}r=l-1|0;if(!(r&l)){if(f|0){c[f>>2]=a|0;c[f+4>>2]=r&i|b&0}n=0;o=i>>>((Ff(l|0)|0)>>>0);return (u(n|0),o)|0}r=(s(l|0)|0)-(s(i|0)|0)|0;if(r>>>0<=30){t=r+1|0;p=31-r|0;w=t;x=i<>>(t>>>0);y=i>>>(t>>>0);z=0;A=g<>2]=a|0;c[f+4>>2]=h|b&0;n=0;o=0;return (u(n|0),o)|0}while(0);if(!w){E=A;F=z;G=y;H=x;I=0;J=0}else{b=d|0|0;d=k|e&0;e=Df(b|0,d|0,-1,-1)|0;k=v()|0;h=A;A=z;z=y;y=x;x=w;w=0;do{a=h;h=A>>>31|h<<1;A=w|A<<1;g=y<<1|a>>>31|0;a=y>>>31|z<<1|0;Ef(e|0,k|0,g|0,a|0)|0;i=v()|0;l=i>>31|((i|0)<0?-1:0)<<1;w=l&1;y=Ef(g|0,a|0,l&b|0,(((i|0)<0?-1:0)>>31|((i|0)<0?-1:0)<<1)&d|0)|0;z=v()|0;x=x-1|0}while((x|0)!=0);E=h;F=A;G=z;H=y;I=0;J=w}w=F;F=0;if(f|0){c[f>>2]=H;c[f+4>>2]=G}n=(w|0)>>>31|(E|F)<<1|(F<<1|w>>>31)&0|I;o=(w<<1|0>>>31)&-2|J;return (u(n|0),o)|0}function Hf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Gf(a,b,c,d,0)|0}function If(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){u(b>>>c|0);return a>>>c|(b&(1<>>c-32|0}function Jf(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){u(b<>>32-c|0);return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Lf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192){L(b|0,d|0,e|0)|0;return b|0}f=b|0;g=b+e|0;if((b&3)==(d&3)){while(b&3){if(!e)return f|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}h=g&-4|0;e=h-64|0;while((b|0)<=(e|0)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];c[b+20>>2]=c[d+20>>2];c[b+24>>2]=c[d+24>>2];c[b+28>>2]=c[d+28>>2];c[b+32>>2]=c[d+32>>2];c[b+36>>2]=c[d+36>>2];c[b+40>>2]=c[d+40>>2];c[b+44>>2]=c[d+44>>2];c[b+48>>2]=c[d+48>>2];c[b+52>>2]=c[d+52>>2];c[b+56>>2]=c[d+56>>2];c[b+60>>2]=c[d+60>>2];b=b+64|0;d=d+64|0}while((b|0)<(h|0)){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}}else{h=g-4|0;while((b|0)<(h|0)){a[b>>0]=a[d>>0]|0;a[b+1>>0]=a[d+1>>0]|0;a[b+2>>0]=a[d+2>>0]|0;a[b+3>>0]=a[d+3>>0]|0;b=b+4|0;d=d+4|0}}while((b|0)<(g|0)){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0}return f|0}function Mf(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else Lf(b,c,d)|0;return b|0}function Nf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=b+e|0;d=d&255;if((e|0)>=67){while(b&3){a[b>>0]=d;b=b+1|0}g=f&-4|0;h=d|d<<8|d<<16|d<<24;i=g-64|0;while((b|0)<=(i|0)){c[b>>2]=h;c[b+4>>2]=h;c[b+8>>2]=h;c[b+12>>2]=h;c[b+16>>2]=h;c[b+20>>2]=h;c[b+24>>2]=h;c[b+28>>2]=h;c[b+32>>2]=h;c[b+36>>2]=h;c[b+40>>2]=h;c[b+44>>2]=h;c[b+48>>2]=h;c[b+52>>2]=h;c[b+56>>2]=h;c[b+60>>2]=h;b=b+64|0}while((b|0)<(g|0)){c[b>>2]=h;b=b+4|0}}while((b|0)<(f|0)){a[b>>0]=d;b=b+1|0}return f-e|0}function Of(a){a=a|0;var b=0,d=0;b=c[i>>2]|0;d=b+a|0;if((a|0)>0&(d|0)<(b|0)|(d|0)<0){V(d|0)|0;F(12);return -1}if((d|0)>(J()|0)?(M(d|0)|0)==0:0){F(12);return -1}c[i>>2]=d;return b|0}function Pf(a,b){a=a|0;b=b|0;return aa[a&7](b|0)|0}function Qf(a,b,c){a=a|0;b=b|0;c=c|0;return ba[a&31](b|0,c|0)|0}function Rf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ca[a&15](b|0,c|0,d|0)|0}function Sf(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return da[a&1](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Tf(a,b){a=a|0;b=b|0;ea[a&31](b|0)}function Uf(a,b,c){a=a|0;b=b|0;c=c|0;fa[a&3](b|0,c|0)}function Vf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ga[a&31](b|0,c|0,d|0,e|0)}function Wf(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;ha[a&31](b|0,c|0,d|0,e|0,f|0)}function Xf(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;ia[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function Yf(a){a=a|0;t(0);return 0}function Zf(a,b){a=a|0;b=b|0;t(1);return 0}function _f(a,b,c){a=a|0;b=b|0;c=c|0;t(2);return 0}function $f(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;t(3);return 0}function ag(a){a=a|0;t(4)}function bg(a,b){a=a|0;b=b|0;t(5)}function cg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;t(6)}function dg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;t(7)}function eg(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;t(8)} - - // EMSCRIPTEN_END_FUNCS - var aa=[Yf,gd,hd,We,Rb,Sb,ld,Yf];var ba=[Zf,gb,hb,ib,jb,kb,lb,mb,nb,ob,pb,qb,rb,sb,tb,Xb,ac,dc,ec,fc,dd,Zf,Zf,Zf,Zf,Zf,Zf,Zf,Zf,Zf,Zf,Zf];var ca=[_f,Xe,Ye,Zb,bc,hc,gc,$b,_b,ic,_f,_f,_f,_f,_f,_f];var da=[$f,Je];var ea=[ag,fd,id,jd,kd,Tb,Md,Nd,Od,Pd,Qd,Rd,Sd,Td,Ud,Vd,Wd,Xd,Yd,Zd,_d,$d,ae,be,ce,de,ee,fe,ge,he,ag,ag];var fa=[bg,Ha,Ka,bg];var ga=[cg,Nc,Oc,Pc,ub,vb,wb,xb,yb,zb,Ab,Bb,Cb,Db,Eb,Fb,Gb,Hb,cg,cg,cg,cg,cg,cg,cg,cg,cg,cg,cg,cg,cg,cg];var ha=[dg,Qc,Rc,Sc,tc,uc,vc,wc,xc,yc,zc,kc,lc,mc,nc,oc,pc,qc,dg,dg,dg,dg,dg,dg,dg,dg,dg,dg,dg,dg,dg,dg];var ia=[eg,Fc,Gc,Hc,Ic,Jc,Kc,Lc];return{_WebpToSDL:na,___errno_location:_e,___muldi3:Cf,___udivdi3:Hf,_bitshift64Lshr:If,_bitshift64Shl:Jf,_emscripten_replace_memory:$,_free:Qe,_i64Add:Df,_i64Subtract:Ef,_llvm_bswap_i32:Kf,_malloc:Pe,_memcpy:Lf,_memmove:Mf,_memset:Nf,_sbrk:Of,dynCall_ii:Pf,dynCall_iii:Qf,dynCall_iiii:Rf,dynCall_iiiiiii:Sf,dynCall_vi:Tf,dynCall_vii:Uf,dynCall_viiii:Vf,dynCall_viiiii:Wf,dynCall_viiiiiiiii:Xf,establishStackSpace:ma,stackAlloc:ja,stackRestore:la,stackSave:ka}}) - - - // EMSCRIPTEN_END_ASM - (asmGlobalArg,asmLibraryArg,buffer);var _WebpToSDL=Module["_WebpToSDL"]=asm["_WebpToSDL"];var ___errno_location=Module["___errno_location"]=asm["___errno_location"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=asm["_emscripten_replace_memory"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];Module["asm"]=asm;Module["cwrap"]=cwrap;if(memoryInitializer){if(!isDataURI(memoryInitializer)){memoryInitializer=locateFile(memoryInitializer)}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module["readBinary"](memoryInitializer);HEAPU8.set(data,GLOBAL_BASE)}else{addRunDependency("memory initializer");var applyMemoryInitializer=function(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module["memoryInitializerRequest"])delete Module["memoryInitializerRequest"].response;removeRunDependency("memory initializer")};var doBrowserLoad=function(){Module["readAsync"](memoryInitializer,applyMemoryInitializer,function(){throw"could not load memory initializer "+memoryInitializer})};var memoryInitializerBytes=tryParseAsDataURI(memoryInitializer);if(memoryInitializerBytes){applyMemoryInitializer(memoryInitializerBytes.buffer)}else if(Module["memoryInitializerRequest"]){var useRequest=function(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)};if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run(); - - - this.Module = Module - this.webpToSdl = Module.cwrap("WebpToSDL", "number", ["array", "number"]) - this.setCanvas = function(canvas) { Module.canvas = canvas; SDL.canvasPool.push(canvas); } - - /* document.createElement = function() { - return Module.canvas; - }; */ - } - - export {Webp} - \ No newline at end of file diff --git a/src/lib/lottieLoader copy.ts b/src/lib/lottieLoader copy.ts deleted file mode 100644 index 399ca602..00000000 --- a/src/lib/lottieLoader copy.ts +++ /dev/null @@ -1,461 +0,0 @@ -import { isInDOM } from "./utils"; - -let convert = (value: number) => { - return Math.round(Math.min(Math.max(value, 0), 1) * 255); -}; - -type RLottiePlayerListeners = 'firstFrame' | 'enterFrame'; - -export class RLottiePlayer { - public static reqId = 0; - - public reqId = 0; - public curFrame: number; - public worker: QueryableWorker; - public el: HTMLElement; - public width: number; - public height: number; - - public listeners: Partial<{ - [k in RLottiePlayerListeners]: (res: any) => void - }> = {}; - public listenerResults: Partial<{ - [k in RLottiePlayerListeners]: any - }> = {}; - - public canvas: HTMLCanvasElement; - public context: CanvasRenderingContext2D; - - public paused = false; - public direction = 1; - public speed = 1; - public autoplay = true; - - constructor({el, width, height, worker}: { - el: HTMLElement, - width: number, - height: number, - worker: QueryableWorker - }) { - this.reqId = ++RLottiePlayer['reqId']; - this.el = el; - this.width = width; - this.height = height; - this.worker = worker; - } - - public addListener(name: RLottiePlayerListeners, callback: (res?: any) => void) { - if(this.listenerResults.hasOwnProperty(name)) return Promise.resolve(this.listenerResults[name]); - this.listeners[name] = callback; - } - - public setListenerResult(name: RLottiePlayerListeners, value?: any) { - this.listenerResults[name] = value; - if(this.listeners[name]) { - this.listeners[name](value); - } - } - - private sendQuery(methodName: string, ...args: any[]) { - this.worker.sendQuery(methodName, this.reqId, ...args); - } - - public loadFromData(json: any) { - this.sendQuery('loadFromData', json, this.width, this.height, { - paused: this.paused, - direction: this.direction, - speed: this.speed - }); - } - - public play() { - this.sendQuery('play'); - this.paused = false; - } - - public pause() { - this.sendQuery('pause'); - this.paused = true; - } - - public stop() { - this.sendQuery('stop'); - this.paused = true; - } - - public restart() { - this.sendQuery('restart'); - } - - public setSpeed(speed: number) { - this.sendQuery('setSpeed', speed); - } - - public setDirection(direction: number) { - this.direction = direction; - this.sendQuery('setDirection', direction); - } - - public destroy() { - lottieLoader.onDestroy(this.reqId); - this.sendQuery('destroy'); - } - - private attachPlayer() { - this.canvas = document.createElement('canvas'); - this.canvas.width = this.width; - this.canvas.height = this.height; - - //this.el.appendChild(this.canvas); - this.context = this.canvas.getContext('2d'); - } - - public renderFrame(frame: Uint8ClampedArray, frameNo: number) { - if(!this.listenerResults.hasOwnProperty('firstFrame')) { - this.attachPlayer(); - this.el.appendChild(this.canvas); - - this.setListenerResult('firstFrame'); - } - - this.context.putImageData(new ImageData(frame, this.width, this.height), 0, 0); - this.setListenerResult('enterFrame', frameNo); - } -} - -class QueryableWorker { - private worker: Worker; - private listeners: {[name: string]: (...args: any[]) => void} = {}; - - constructor(url: string, private defaultListener: (data: any) => void = () => {}, onError?: (error: any) => void) { - this.worker = new Worker(url); - if(onError) { - this.worker.onerror = onError; - } - - this.worker.onmessage = (event) => { - if(event.data instanceof Object && - event.data.hasOwnProperty('queryMethodListener') && - event.data.hasOwnProperty('queryMethodArguments')) { - this.listeners[event.data.queryMethodListener].apply(this, event.data.queryMethodArguments); - } else { - this.defaultListener.call(this, event.data); - } - } - } - - public postMessage(message: any) { - this.worker.postMessage(message); - } - - public terminate() { - this.worker.terminate(); - } - - public addListener(name: string, listener: (...args: any[]) => void) { - this.listeners[name] = listener; - } - - public removeListener(name: string) { - delete this.listeners[name]; - } - - public sendQuery(queryMethod: string, ...args: any[]) { - this.worker.postMessage({ - 'queryMethod': queryMethod, - 'queryMethodArguments': args - }); - } -} - -class LottieLoader { - public loadPromise: Promise; - public loaded = false; - - private static COLORREPLACEMENTS = [ - [ - [0xf77e41, 0xca907a], - [0xffb139, 0xedc5a5], - [0xffd140, 0xf7e3c3], - [0xffdf79, 0xfbefd6], - ], - - [ - [0xf77e41, 0xaa7c60], - [0xffb139, 0xc8a987], - [0xffd140, 0xddc89f], - [0xffdf79, 0xe6d6b2], - ], - - [ - [0xf77e41, 0x8c6148], - [0xffb139, 0xad8562], - [0xffd140, 0xc49e76], - [0xffdf79, 0xd4b188], - ], - - [ - [0xf77e41, 0x6e3c2c], - [0xffb139, 0x925a34], - [0xffd140, 0xa16e46], - [0xffdf79, 0xac7a52], - ] - ]; - - private workersLimit = 4; - private players: {[reqId: number]: RLottiePlayer} = {}; - private byGroups: {[group: string]: RLottiePlayer[]} = {}; - - private workers: QueryableWorker[] = []; - private curWorkerNum = 0; - - private observer: IntersectionObserver; - private visible: Set = new Set(); - - private debug = true; - - constructor() { - this.observer = new IntersectionObserver((entries) => { - for(const entry of entries) { - const target = entry.target; - - for(const group in this.byGroups) { - const player = this.byGroups[group].find(p => p.el == target); - if(player) { - if(entry.isIntersecting) { - this.visible.add(player); - - if(player.paused) { - player.play(); - } - } else { - this.visible.delete(player); - - if(!player.paused) { - player.pause(); - } - } - - break; - } - } - } - }); - } - - public loadLottieWorkers() { - if(this.loadPromise) return this.loadPromise; - - const onFrame = this.onFrame.bind(this); - - return this.loadPromise = new Promise((resolve, reject) => { - let remain = this.workersLimit; - for(let i = 0; i < this.workersLimit; ++i) { - const worker = this.workers[i] = new QueryableWorker('rlottie.worker.js'); - - worker.addListener('ready', () => { - console.log('worker #' + i + ' ready'); - - worker.addListener('frame', onFrame); - - --remain; - if(!remain) { - console.log('workers ready'); - resolve(); - this.loaded = true; - } - }); - } - }); - } - - private applyReplacements(object: any, toneIndex: number) { - const replacements = LottieLoader.COLORREPLACEMENTS[toneIndex - 2]; - - const iterateIt = (it: any) => { - for(let smth of it) { - switch(smth.ty) { - case 'st': - case 'fl': - let k = smth.c.k; - let color = convert(k[2]) | (convert(k[1]) << 8) | (convert(k[0]) << 16); - - let foundReplacement = replacements.find(p => p[0] == color); - if(foundReplacement) { - k[0] = ((foundReplacement[1] >> 16) & 255) / 255; - k[1] = ((foundReplacement[1] >> 8) & 255) / 255; - k[2] = (foundReplacement[1] & 255) / 255; - } - - //console.log('foundReplacement!', foundReplacement, color.toString(16), k); - break; - } - - if(smth.hasOwnProperty('it')) { - iterateIt(smth.it); - } - } - }; - - for(let layer of object.layers) { - if(!layer.shapes) continue; - - for(let shape of layer.shapes) { - iterateIt(shape.it); - } - } - } - - public async loadAnimationWorker(params: { - container: HTMLElement, - autoplay?: boolean, - animationData: any, - loop?: boolean, - renderer?: string, - width?: number, - height?: number - }, group = '', toneIndex = -1) { - //params.autoplay = false; - - if(toneIndex >= 1 && toneIndex <= 5) { - this.applyReplacements(params.animationData, toneIndex); - } - - if(!this.loaded) { - await this.loadLottieWorkers(); - } - - this.observer.observe(params.container); - - const width = params.width || parseInt(params.container.style.width); - const height = params.height || parseInt(params.container.style.height); - - const player = this.initPlayer(params.container, params.animationData, width, height); - for(let i in params) { - // @ts-ignore - if(player.hasOwnProperty(i)) { - // @ts-ignore - player[i] = params[i]; - } - } - - (this.byGroups[group] ?? (this.byGroups[group] = [])).push(player); - - return player; - } - - public checkAnimations(blurred?: boolean, group?: string, destroy = false) { - const groups = group && false ? [group] : Object.keys(this.byGroups); - - if(group && !this.byGroups[group]) { - console.warn('no animation group:', group); - this.byGroups[group] = []; - //return; - } - - for(const group of groups) { - const animations = this.byGroups[group]; - - const length = animations.length; - for(let i = length - 1; i >= 0; --i) { - const player = animations[i]; - - if(destroy || (!isInDOM(player.el) && player.listenerResults.hasOwnProperty('firstFrame'))) { - //console.log('destroy animation'); - player.destroy(); - continue; - } - - if(blurred) { - if(!player.paused) { - this.debug && console.log('pause animation', player); - player.pause(); - } - } else if(player.paused && this.visible.has(player)) { - this.debug && console.log('play animation', player); - player.play(); - } - - /* if(canvas) { - let c = container.firstElementChild as HTMLCanvasElement; - if(!c) { - console.warn('no canvas element for check!', container, animations[i]); - continue; - } - - if(!c.height && !c.width && isElementInViewport(container)) { - //console.log('lottie need resize'); - animation.resize(); - } - } */ - - //if(!autoplay) continue; - - /* if(blurred || !isElementInViewport(container)) { - if(!paused) { - this.debug && console.log('pause animation', isElementInViewport(container), container); - animation.pause(); - animations[i].paused = true; - } - } else if(paused) { - this.debug && console.log('play animation', container); - animation.play(); - animations[i].paused = false; - } */ - } - } - } - - private onFrame(reqId: number, frameNo: number, frame: Uint8ClampedArray, width: number, height: number) { - const rlPlayer = this.players[reqId]; - if(!rlPlayer) { - this.debug && console.warn('onFrame on destroyed player:', reqId, frameNo); - return; - } - - rlPlayer.renderFrame(frame, frameNo); - } - - public onDestroy(reqId: number) { - let player = this.players[reqId]; - for(let group in this.byGroups) { - this.byGroups[group].findAndSplice(p => p == player); - } - - delete this.players[player.reqId]; - this.observer.unobserve(player.el); - this.visible.delete(player); - } - - public destroyWorkers() { - this.workers.forEach((worker, idx) => { - worker.terminate(); - console.log('worker #' + idx + ' terminated'); - }); - - console.log('workers destroyed'); - this.workers.length = 0; - } - - private initPlayer(el: HTMLElement, json: any, width: number, height: number) { - const rlPlayer = new RLottiePlayer({ - el, - width, - height, - worker: this.workers[this.curWorkerNum++] - }); - - this.players[rlPlayer.reqId] = rlPlayer; - if(this.curWorkerNum >= this.workers.length) { - this.curWorkerNum = 0; - } - - rlPlayer.loadFromData(json); - - return rlPlayer; - } -} - -const lottieLoader = new LottieLoader(); -(window as any).LottieLoader = lottieLoader; -export default lottieLoader; diff --git a/src/lib/mediaPlayer.ts b/src/lib/mediaPlayer.ts index 61afaa98..ec643985 100644 --- a/src/lib/mediaPlayer.ts +++ b/src/lib/mediaPlayer.ts @@ -11,7 +11,7 @@ export class MediaProgressLine { public onSeek: (time: number) => void; - constructor(private media: HTMLAudioElement | HTMLVideoElement, streamable = false) { + constructor(private media: HTMLAudioElement | HTMLVideoElement, private streamable = false) { this.container = document.createElement('div'); this.container.classList.add('media-progress'); @@ -22,6 +22,7 @@ export class MediaProgressLine { this.filledLoad = document.createElement('div'); this.filledLoad.classList.add('media-progress__filled', 'media-progress__loaded'); this.container.append(this.filledLoad); + //this.setLoadProgress(); } let seek = this.seek = document.createElement('input'); @@ -62,6 +63,10 @@ export class MediaProgressLine { window.cancelAnimationFrame(this.progressRAF); } + if(this.streamable) { + this.setLoadProgress(); + } + this.progressRAF = window.requestAnimationFrame(r); }; @@ -96,7 +101,29 @@ export class MediaProgressLine { this.mousedown = false; }; - public setLoadProgress(percents: number) { + onProgress = (e: Event) => { + this.setLoadProgress(); + }; + + private setLoadProgress() { + const buf = this.media.buffered; + const numRanges = buf.length; + + const currentTime = this.media.currentTime; + let nearestStart = 0, end = 0; + for(let i = 0; i < numRanges; ++i) { + const start = buf.start(i); + if(currentTime >= start && start >= nearestStart) { + nearestStart = start; + end = buf.end(i); + } + + //console.log('onProgress range:', i, buf.start(i), buf.end(i), this.media); + } + + //console.log('onProgress correct range:', nearestStart, end, this.media); + + const percents = this.media.duration ? end / this.media.duration : 0; this.filledLoad.style.transform = 'scaleX(' + percents + ')'; } @@ -120,6 +147,7 @@ export class MediaProgressLine { private setListeners() { this.media.addEventListener('ended', this.onEnded); this.media.addEventListener('play', this.onPlay); + this.streamable && this.media.addEventListener('progress', this.onProgress); this.container.addEventListener('mousemove', this.onMouseMove); this.container.addEventListener('mousedown', this.onMouseDown); @@ -143,6 +171,7 @@ export class MediaProgressLine { this.media.removeEventListener('loadeddata', this.onLoadedData); this.media.removeEventListener('ended', this.onEnded); this.media.removeEventListener('play', this.onPlay); + this.streamable && this.media.removeEventListener('progress', this.onProgress); this.container.removeEventListener('mousemove', this.onMouseMove); this.container.removeEventListener('mousedown', this.onMouseDown); diff --git a/src/lib/mtproto/apiFileManager.ts b/src/lib/mtproto/apiFileManager.ts index d8b3e6d5..73b2e232 100644 --- a/src/lib/mtproto/apiFileManager.ts +++ b/src/lib/mtproto/apiFileManager.ts @@ -6,7 +6,7 @@ import apiManager from "./apiManager"; import { deferredPromise, CancellablePromise } from "../polyfill"; import appWebpManager from "../appManagers/appWebpManager"; import { logger } from "../logger"; -import { InputFileLocation, FileLocation } from "../../types"; +import { InputFileLocation, FileLocation, UploadFile } from "../../types"; type Delayed = { offset: number, @@ -14,18 +14,25 @@ type Delayed = { writeFileDeferred: CancellablePromise }; -type DownloadOptions = Partial<{ - -}>; +export type DownloadOptions = { + dcID: number, + location: InputFileLocation | FileLocation, + size: number, + fileName?: string, + mimeType?: string, + limitPart?: number, + stickerType?: number, + processPart?: (bytes: Uint8Array, offset?: number, queue?: Delayed[]) => Promise +}; export class ApiFileManager { public cachedDownloadPromises: { - [fileName: string]: Promise + [fileName: string]: CancellablePromise } = {}; public downloadPulls: { [x: string]: Array<{ - cb: () => Promise, + cb: () => Promise, deferred: { resolve: (...args: any[]) => void, reject: (...args: any[]) => void @@ -37,7 +44,9 @@ export class ApiFileManager { private log: ReturnType = logger('AFM'); - public downloadRequest(dcID: string | number, cb: () => Promise, activeDelta: number) { + public downloadRequest(dcID: 'upload', cb: () => Promise, activeDelta: number): Promise; + public downloadRequest(dcID: number, cb: () => Promise, activeDelta: number): Promise; + public downloadRequest(dcID: number | string, cb: () => Promise, activeDelta: number) { if(this.downloadPulls[dcID] === undefined) { this.downloadPulls[dcID] = []; this.downloadActives[dcID] = 0; @@ -45,9 +54,9 @@ export class ApiFileManager { const downloadPull = this.downloadPulls[dcID]; - const promise = new Promise((resolve, reject) => { - downloadPull.push({cb: cb, deferred: {resolve, reject}, activeDelta: activeDelta}); - })/* .catch(() => {}) */; + const promise = new Promise((resolve, reject) => { + downloadPull.push({cb, deferred: {resolve, reject}, activeDelta}); + }); setTimeout(() => { this.downloadCheck(dcID); @@ -60,7 +69,7 @@ export class ApiFileManager { const downloadPull = this.downloadPulls[dcID]; //const downloadLimit = dcID == 'upload' ? 11 : 5; //const downloadLimit = 24; - const downloadLimit = dcID == 'upload' ? 11 : 24; + const downloadLimit = dcID == 'upload' ? 11 : 50; if(this.downloadActives[dcID] >= downloadLimit || !downloadPull || !downloadPull.length) { return false; @@ -72,12 +81,12 @@ export class ApiFileManager { this.downloadActives[dcID] += activeDelta; data.cb() - .then((result: any) => { + .then((result) => { this.downloadActives[dcID] -= activeDelta; this.downloadCheck(dcID); data.deferred.resolve(result); - }, (error: any) => { + }, (error: Error) => { if(error) { this.log.error('downloadCheck error:', error); } @@ -93,16 +102,48 @@ export class ApiFileManager { return cacheStorage; } - public downloadFile(options: { - dcID: number, - location: InputFileLocation | FileLocation, - size: number, - mimeType?: string, - toFileEntry?: any, - limitPart?: number, - stickerType?: number, - processPart?: (bytes: Uint8Array, offset: number, queue: Delayed[]) => Promise - }): CancellablePromise { + public cancelDownload(fileName: string) { + const promise = this.cachedDownloadPromises[fileName]; + if(promise) { + promise.cancel(); + return true; + } + + return false; + } + + public requestFilePart(dcID: number, location: InputFileLocation | FileLocation, offset: number, limit: number, checkCancel?: () => void) { + const delta = limit / 1024 / 256; + return this.downloadRequest(dcID, async() => { + checkCancel && checkCancel(); + + return apiManager.invokeApi('upload.getFile', { + location, + offset, + limit + }, { + dcID, + fileDownload: true/* , + singleInRequest: 'safari' in window */ + }) as Promise; + }, delta); + } + + private convertBlobToBytes(blob: Blob) { + return blob.arrayBuffer().then(buffer => new Uint8Array(buffer)); + } + + private getLimitPart(size: number): number { + let bytes: number; + + if(size < 1e6 || !size) bytes = 512; + else if(size < 3e6) bytes = 256; + else bytes = 128; + + return bytes * 1024; + } + + public downloadFile(options: DownloadOptions): CancellablePromise { if(!FileManager.isAvailable()) { return Promise.reject({type: 'BROWSER_BLOB_NOT_SUPPORTED'}); } @@ -112,7 +153,7 @@ export class ApiFileManager { let processSticker = false; if(options.stickerType == 1 && !appWebpManager.isSupported()) { - if(options.toFileEntry || size > 524288) { + if(size > 524288) { delete options.stickerType; } else { processSticker = true; @@ -122,16 +163,18 @@ export class ApiFileManager { // this.log('Dload file', dcID, location, size) const fileName = getFileNameByLocation(location); - const toFileEntry = options.toFileEntry || null; const cachedPromise = this.cachedDownloadPromises[fileName]; const fileStorage = this.getFileStorage(); //this.log('downloadFile', fileName, fileName.length, location, arguments); if(cachedPromise) { - if(toFileEntry) { - return cachedPromise.then((blob: any) => { - return FileManager.copy(blob, toFileEntry); + if(options.processPart) { + return cachedPromise.then((blob) => { + return this.convertBlobToBytes(blob).then(bytes => { + options.processPart(bytes) + return blob; + }); }); } @@ -181,30 +224,28 @@ export class ApiFileManager { throw false; } - if(toFileEntry) { - FileManager.copy(blob, toFileEntry).then(deferred.resolve, errorHandler); - } else { - deferred.resolve(blob); + if(options.processPart) { + //FileManager.copy(blob, toFileEntry).then(deferred.resolve, errorHandler); + await this.convertBlobToBytes(blob).then(bytes => { + options.processPart(bytes); + }); } + + deferred.resolve(blob); }).catch(() => { //this.log('not cached', fileName); - //var fileWriterPromise = toFileEntry ? FileManager.getFileWriter(toFileEntry) : fileStorage.getFileWriter(fileName, mimeType); - const fileWriterPromise = toFileEntry ? Promise.resolve(toFileEntry) : fileStorage.getFileWriter(fileName, mimeType); + const fileWriterPromise = fileStorage.getFileWriter(fileName, mimeType); - fileWriterPromise.then((fileWriter: any) => { + fileWriterPromise.then((fileWriter) => { cacheFileWriter = fileWriter; - const limit = options.limitPart || 524288; + const limit = options.limitPart || this.getLimitPart(size); let offset: number; let startOffset = 0; let writeFilePromise: CancellablePromise = Promise.resolve(), writeFileDeferred: CancellablePromise; - const maxRequests = options.processPart ? 5 : 5; + const maxRequests = options.processPart ? 5 : 10; - if(!size) { - size = limit; - } - - if(fileWriter.length) { + /* if(fileWriter.length) { startOffset = fileWriter.length; if(startOffset >= size) { @@ -221,7 +262,7 @@ export class ApiFileManager { deferred.notify({done: startOffset, total: size}); /////this.log('deferred notify 1:', {done: startOffset, total: size}); - } + } */ const processDownloaded = async(bytes: Uint8Array, offset: number) => { if(options.processPart) { @@ -236,18 +277,20 @@ export class ApiFileManager { }; const delayed: Delayed[] = []; - for(offset = startOffset; offset < size; offset += limit) { + offset = startOffset; + do { + ////this.log('offset:', startOffset); writeFileDeferred = deferredPromise(); delayed.push({offset, writeFilePromise, writeFileDeferred}); writeFilePromise = writeFileDeferred; - ////this.log('offset:', startOffset); - } + offset += limit; + } while(offset < size); // для потокового видео нужно скачать первый и последний чанки - if(options.processPart && delayed.length > 2) { + /* if(options.processPart && delayed.length > 2) { const last = delayed.splice(delayed.length - 1, 1)[0]; delayed.splice(1, 0, last); - } + } */ // @ts-ignore //deferred.queue = delayed; @@ -258,21 +301,7 @@ export class ApiFileManager { const {offset, writeFilePromise, writeFileDeferred} = delayed.shift(); try { - const result: any = await this.downloadRequest(dcID, () => { - if(canceled) { - return Promise.resolve(); - } - - return apiManager.invokeApi('upload.getFile', { - location, - offset, - limit - }, { - dcID, - fileDownload: true/* , - singleInRequest: 'safari' in window */ - }); - }, 2); + const result = await this.requestFilePart(dcID, location, offset, limit, checkCancel); if(delayed.length) { superpuper(); @@ -280,11 +309,10 @@ export class ApiFileManager { ////////////////////////////////////////// const processedResult = await processDownloaded(result.bytes, offset); - if(canceled) { - return Promise.resolve(); - } + checkCancel(); - done += limit; + //done += limit; + done += processedResult.byteLength; const isFinal = offset + limit >= size; //if(!isFinal) { ////this.log('deferred notify 2:', {done: offset + limit, total: size}, deferred); @@ -292,9 +320,7 @@ export class ApiFileManager { //} await writeFilePromise; - if(canceled) { - return Promise.resolve(); - } + checkCancel(); await FileManager.write(fileWriter, processedResult); writeFileDeferred.resolve(); @@ -302,7 +328,7 @@ export class ApiFileManager { if(isFinal) { resolved = true; - if(toFileEntry) { + if(options.processPart) { deferred.resolve(); } else { deferred.resolve(fileWriter.finalize()); @@ -319,22 +345,21 @@ export class ApiFileManager { }); }); + const checkCancel = () => { + if(canceled) { + throw new Error('canceled'); + } + }; + deferred.cancel = () => { if(!canceled && !resolved) { canceled = true; delete this.cachedDownloadPromises[fileName]; errorHandler({type: 'DOWNLOAD_CANCELED'}); - if(toFileEntry) { - toFileEntry.abort(); - } } }; - //console.log(deferred, deferred.notify, deferred.cancel); - - if(!toFileEntry) { - this.cachedDownloadPromises[fileName] = deferred; - } + this.cachedDownloadPromises[fileName] = deferred; return deferred; } diff --git a/src/lib/mtproto/mtproto.service.ts b/src/lib/mtproto/mtproto.service.ts index f64176a9..95de09c7 100644 --- a/src/lib/mtproto/mtproto.service.ts +++ b/src/lib/mtproto/mtproto.service.ts @@ -6,7 +6,11 @@ import apiManager from "./apiManager"; import AppStorage from '../storage'; import cryptoWorker from "../crypto/cryptoworker"; import networkerFactory from "./networkerFactory"; -import apiFileManager from './apiFileManager'; +import apiFileManager, { DownloadOptions } from './apiFileManager'; +import { getFileNameByLocation } from '../bin_utils'; +import { logger, LogLevels } from '../logger'; + +const log = logger('SW'/* , LogLevels.error */); const ctx = self as any as ServiceWorkerGlobalScope; @@ -75,11 +79,10 @@ function respond(client: Client | ServiceWorker | MessagePort, ...args: any[]) { } */ } -networkerFactory.setUpdatesProcessor((obj, bool) => { - //console.log('updatesss'); - //ctx.postMessage({update: {obj, bool}}); - //respond({update: {obj, bool}}); - +/** + * Broadcast Notification + */ +function notify(...args: any[]) { ctx.clients.matchAll({ includeUncontrolled: false, type: 'window' }).then((listeners) => { if(!listeners.length) { //console.trace('no listeners?', self, listeners); @@ -87,15 +90,20 @@ networkerFactory.setUpdatesProcessor((obj, bool) => { } listeners.forEach(listener => { - listener.postMessage({update: {obj, bool}}); + // @ts-ignore + listener.postMessage(...args); }); }); +} + +networkerFactory.setUpdatesProcessor((obj, bool) => { + notify({update: {obj, bool}}); }); ctx.addEventListener('message', async(e) => { const taskID = e.data.taskID; - //console.log('[SW] Got message:', taskID, e, e.data); + log.debug('got message:', taskID, e, e.data); if(e.data.useLs) { AppStorage.finishTask(e.data.taskID, e.data.args); @@ -110,6 +118,7 @@ ctx.addEventListener('message', async(e) => { respond(e.source, {taskID: taskID, result: result}); }); + case 'cancelDownload': case 'downloadFile': { /* // @ts-ignore return apiFileManager.downloadFile(...e.data.args); */ @@ -151,7 +160,7 @@ ctx.addEventListener('message', async(e) => { * Service Worker Installation */ ctx.addEventListener('install', (event: ExtendableEvent) => { - //console.log('service worker is installing'); + log('installing'); /* initCache(); @@ -165,7 +174,7 @@ ctx.addEventListener('install', (event: ExtendableEvent) => { * Service Worker Activation */ ctx.addEventListener('activate', (event) => { - //console.log('service worker activating', ctx); + log('activating', ctx); /* if (!ctx.cache) initCache(); if (!ctx.network) initNetwork(); */ @@ -184,28 +193,168 @@ function timeout(delay: number): Promise { })); } +ctx.addEventListener('error', (error) => { + log.error('error:', error); +}); + /** * Fetch requests */ ctx.addEventListener('fetch', (event: FetchEvent): void => { - const [, url, scope, fileName] = /http[:s]+\/\/.*?(\/(.*?)(?:$|\/(.*)$))/.exec(event.request.url) || []; + const [, url, scope, params] = /http[:s]+\/\/.*?(\/(.*?)(?:$|\/(.*)$))/.exec(event.request.url) || []; - //console.log('[SW] fetch:', event, event.request, url, scope, fileName); + log.debug('[fetch]:', event); switch(scope) { + case 'download': case 'thumb': case 'document': case 'photo': { - const info = JSON.parse(decodeURIComponent(fileName)); + const info: DownloadOptions = JSON.parse(decodeURIComponent(params)); + const fileName = getFileNameByLocation(info.location); - //console.log('[SW] fetch cachedDownloadPromises:', info/* apiFileManager.cachedDownloadPromises, apiFileManager.cachedDownloadPromises.hasOwnProperty(fileName) */); + /* event.request.signal.addEventListener('abort', (e) => { + console.log('[SW] user aborted request:', fileName); + cancellablePromise.cancel(); + }); - const promise = apiFileManager.downloadFile(info).then(b => new Response(b)); - event.respondWith(promise); + event.request.signal.onabort = (e) => { + console.log('[SW] user aborted request:', fileName); + cancellablePromise.cancel(); + }; + + if(fileName == '5452060085729624717') { + setInterval(() => { + console.log('[SW] request status:', fileName, event.request.signal.aborted); + }, 1000); + } */ + + const cancellablePromise = apiFileManager.downloadFile(info); + cancellablePromise.notify = (progress: {done: number, total: number, offset: number}) => { + notify({progress: {fileName, ...progress}}); + }; + + log.debug('[fetch] file:', /* info, */fileName); + + const promise = cancellablePromise.then(b => new Response(b)); + event.respondWith(Promise.race([ + timeout(45 * 1000), + promise + ])); break; } + case 'stream': { + const [offset, end] = parseRange(event.request.headers.get('Range')); + + const info: DownloadOptions = JSON.parse(decodeURIComponent(params)); + //const fileName = getFileNameByLocation(info.location); + + log.debug('[stream]', url, offset, end); + + event.respondWith(new Promise((resolve, reject) => { + // safari workaround + if(offset === 0 && end === 1) { + resolve(new Response(new Uint8Array(2).buffer, { + status: 206, + statusText: 'Partial Content', + headers: { + 'Accept-Ranges': 'bytes', + 'Content-Range': `bytes 0-1/${info.size || '*'}`, + 'Content-Length': '2', + 'Content-Type': info.mimeType || 'video/mp4', + }, + })); + + return; + } + + const limit = end && end < STREAM_CHUNK_UPPER_LIMIT ? alignLimit(end - offset + 1) : STREAM_CHUNK_UPPER_LIMIT; + const alignedOffset = alignOffset(offset, limit); + + //log.debug('[stream] requestFilePart:', info.dcID, info.location, alignedOffset, limit); + + apiFileManager.requestFilePart(info.dcID, info.location, alignedOffset, limit).then(result => { + let ab = result.bytes; + + //log.debug('[stream] requestFilePart result:', result); + + const headers: Record = { + 'Accept-Ranges': 'bytes', + 'Content-Range': `bytes ${alignedOffset}-${alignedOffset + ab.byteLength - 1}/${info.size || '*'}`, + 'Content-Length': `${ab.byteLength}`, + }; + + if(info.mimeType) headers['Content-Type'] = info.mimeType; + + if(isSafari(ctx)) { + ab = ab.slice(offset - alignedOffset, end - alignedOffset + 1); + headers['Content-Range'] = `bytes ${offset}-${offset + ab.byteLength - 1}/${info.size || '*'}`; + headers['Content-Length'] = `${ab.byteLength}`; + } + + resolve(new Response(ab, { + status: 206, + statusText: 'Partial Content', + headers, + })); + }); + })); + break; + } + + /* case 'download': { + const info: DownloadOptions = JSON.parse(decodeURIComponent(params)); + + const promise = new Promise((resolve) => { + const headers: Record = { + 'Content-Disposition': `attachment; filename="${info.fileName}"`, + }; + + if(info.size) headers['Content-Length'] = info.size.toString(); + if(info.mimeType) headers['Content-Type'] = info.mimeType; + + log('[download] file:', info); + + const stream = new ReadableStream({ + start(controller: ReadableStreamDefaultController) { + const limitPart = DOWNLOAD_CHUNK_LIMIT; + + apiFileManager.downloadFile({ + ...info, + limitPart, + processPart: (bytes, offset) => { + log('[download] file processPart:', bytes, offset); + + controller.enqueue(new Uint8Array(bytes)); + + const isFinal = offset + limitPart >= info.size; + if(isFinal) { + controller.close(); + } + + return Promise.resolve(); + } + }).catch(err => { + log.error('[download] error:', err); + controller.error(err); + }); + }, + + cancel() { + log.error('[download] file canceled:', info); + } + }); + + resolve(new Response(stream, {headers})); + }); + + event.respondWith(promise); + + break; + } */ + case 'upload': { if(event.request.method == 'POST') { event.respondWith(event.request.blob().then(blob => { @@ -273,3 +422,24 @@ ctx.addEventListener('fetch', (event: FetchEvent): void => { else event.respondWith(fetch(event.request.url)); */ } }); + +const DOWNLOAD_CHUNK_LIMIT = 512 * 1024; +const STREAM_CHUNK_UPPER_LIMIT = 256 * 1024; +const SMALLEST_CHUNK_LIMIT = 256 * 4; + +function parseRange(header: string): [number, number] { + if(!header) return [0, 0]; + const [, chunks] = header.split('='); + const ranges = chunks.split(', '); + const [offset, end] = ranges[0].split('-'); + + return [+offset, +end || 0]; +} + +function alignOffset(offset: number, base = SMALLEST_CHUNK_LIMIT) { + return offset - (offset % base); +} + +function alignLimit(limit: number) { + return 2 ** Math.ceil(Math.log(limit) / Math.log(2)); +} diff --git a/src/lib/mtproto/mtprotoworker.ts b/src/lib/mtproto/mtprotoworker.ts index 4deec3d5..faac2599 100644 --- a/src/lib/mtproto/mtprotoworker.ts +++ b/src/lib/mtproto/mtprotoworker.ts @@ -1,8 +1,9 @@ -import {dT, isObject, $rootScope} from '../utils'; +import {isObject, $rootScope} from '../utils'; import AppStorage from '../storage'; import CryptoWorkerMethods from '../crypto/crypto_methods'; import runtime from 'serviceworker-webpack-plugin/lib/runtime'; import { InputFileLocation, FileLocation } from '../../types'; +import { logger } from '../logger'; type Task = { taskID: number, @@ -10,14 +11,6 @@ type Task = { args: any[] }; -/* let pending: any[] = []; -function resendPending() { - if(navigator.serviceWorker.controller) { - for(let i = 0; i < pending.length; i++) navigator.serviceWorker.controller.postMessage(pending[i]); - pending = []; - } -} */ - class ApiManagerProxy extends CryptoWorkerMethods { private taskID = 0; private awaiting: { @@ -28,30 +21,37 @@ class ApiManagerProxy extends CryptoWorkerMethods { } } = {} as any; private pending: Array = []; - private debug = false; public updatesProcessor: (obj: any, bool: boolean) => void = null; + private log = logger('API-PROXY'); + constructor() { super(); - console.log(dT(), 'ApiManagerProxy constructor'); + this.log('constructor'); /** * Service worker */ - runtime.register({ scope: '/' }); + (runtime.register({ scope: '/' }) as Promise).then(registration => { + + }, (err) => { + this.log.error('SW registration failed!', err); + }); navigator.serviceWorker.ready.then((registration) => { - console.info(dT(), 'ApiManagerProxy set SW'); + this.log('set SW'); this.releasePending(); + + //registration.update(); }); navigator.serviceWorker.addEventListener('controllerchange', () => { - console.warn(dT(), 'ApiManagerProxy controllerchange'); + this.log.warn('controllerchange'); this.releasePending(); navigator.serviceWorker.controller.addEventListener('error', (e) => { - console.error('controller error:', e); + this.log.error('controller error:', e); }); }); @@ -72,6 +72,8 @@ class ApiManagerProxy extends CryptoWorkerMethods { if(this.updatesProcessor) { this.updatesProcessor(e.data.update.obj, e.data.update.bool); } + } else if(e.data.progress) { + $rootScope.$broadcast('download_progress', e.data.progress); } else { this.finalizeTask(e.data.taskID, e.data.result, e.data.error); } @@ -81,14 +83,14 @@ class ApiManagerProxy extends CryptoWorkerMethods { private finalizeTask(taskID: number, result: any, error: any) { let deferred = this.awaiting[taskID]; if(deferred !== undefined) { - this.debug && console.log(dT(), 'ApiManagerProxy done', deferred.taskName, result, error); + this.log.debug('done', deferred.taskName, result, error); result === undefined ? deferred.reject(error) : deferred.resolve(result); delete this.awaiting[taskID]; } } public performTaskWorker(task: string, ...args: any[]) { - this.debug && console.log(dT(), 'ApiManagerProxy start', task, args); + this.log.debug('start', task, args); return new Promise((resolve, reject) => { this.awaiting[this.taskID] = {resolve, reject, taskName: task}; @@ -168,6 +170,10 @@ class ApiManagerProxy extends CryptoWorkerMethods { }> = {}): Promise { return this.performTaskWorker('downloadFile', dcID, location, size, options); } + + public cancelDownload(fileName: string) { + return this.performTaskWorker('cancelDownload', fileName); + } } const apiManagerProxy = new ApiManagerProxy(); diff --git a/src/lib/polyfill.ts b/src/lib/polyfill.ts index 782790d6..0b880ace 100644 --- a/src/lib/polyfill.ts +++ b/src/lib/polyfill.ts @@ -1,4 +1,4 @@ -import { bytesToHex, bytesFromHex, dT, bufferConcats } from "./bin_utils"; +import { bytesToHex, bytesFromHex, bufferConcats } from "./bin_utils"; // @ts-ignore import {SecureRandom} from 'jsbn'; @@ -77,16 +77,16 @@ Array.prototype.findAndSplice = function(verify: (value: T, index?: number, a }; String.prototype.toHHMMSS = function(leadZero = false) { - let sec_num = parseInt(this + '', 10); - let hours: any = Math.floor(sec_num / 3600); + const sec_num = parseInt(this + '', 10); + const hours = Math.floor(sec_num / 3600); let minutes: any = Math.floor((sec_num - (hours * 3600)) / 60); let seconds: any = sec_num - (hours * 3600) - (minutes * 60); - if(hours < 10) hours = "0" + hours; + if(hours) leadZero = true; if(minutes < 10) minutes = leadZero ? "0" + minutes : minutes; if(seconds < 10) seconds = "0" + seconds; - return minutes + ':' + seconds; -} + return (hours ? /* ('0' + hours).slice(-2) */hours + ':' : '') + minutes + ':' + seconds; +}; declare global { interface Uint8Array { diff --git a/src/lib/utils.ts b/src/lib/utils.ts index cd9e5d95..f3e688fb 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -151,8 +151,18 @@ export function getRichElementValue(node: any, lines: string[], line: string[], } } */ +type BroadcastKeys = 'download_progress' | 'user_update' | 'user_auth' | 'peer_changed' | + 'filter_delete' | 'filter_update' | 'message_edit' | 'dialog_draft' | 'messages_pending' | + 'history_append' | 'history_update' | 'dialogs_multiupdate' | 'dialog_unread' | 'dialog_flush' | + 'dialog_drop' | 'dialog_migrate' | 'dialog_top' | 'history_reply_markup' | 'history_multiappend' | + 'messages_read' | 'history_delete' | 'history_forbidden' | 'history_reload' | 'message_views' | + 'message_sent' | 'history_request' | 'messages_downloaded' | 'contacts_update' | 'avatar_update' | + 'stickers_installed' | 'stickers_deleted' | 'chat_full_update' | 'peer_pinned_message' | + 'poll_update' | 'dialogs_archived_unread' | 'audio_play' | 'audio_pause' | 'chat_update' | + 'apiUpdate' | 'stateSynchronized' | 'channel_settings' | 'webpage_updated' | 'draft_updated'; + export const $rootScope = { - $broadcast: (name: string, detail?: any) => { + $broadcast: (name: BroadcastKeys, detail?: any) => { if(name != 'user_update') { console.debug(dT(), 'Broadcasting ' + name + ' event, with args:', detail); } @@ -160,9 +170,14 @@ export const $rootScope = { let myCustomEvent = new CustomEvent(name, {detail}); document.dispatchEvent(myCustomEvent); }, - $on: (name: string, callback: any) => { + $on: (name: BroadcastKeys, callback: (e: CustomEvent) => any) => { + // @ts-ignore document.addEventListener(name, callback); }, + $off: (name: BroadcastKeys, callback: (e: CustomEvent) => any) => { + // @ts-ignore + document.removeEventListener(name, callback); + }, selectedPeerID: 0, myID: 0, @@ -523,11 +538,12 @@ export function getEmojiToneIndex(input: string) { return match ? 5 - (57343 - match[0].charCodeAt(0)) : 0; } -export function getFileURL(type: 'photo' | 'thumb' | 'document', options: { +export function getFileURL(type: 'photo' | 'thumb' | 'document' | 'stream' | 'download', options: { dcID: number, location: InputFileLocation | FileLocation, size?: number, - mimeType?: string + mimeType?: string, + fileName?: string }) { //console.log('getFileURL', location); //const perf = performance.now(); diff --git a/src/lib/webp_bad.js b/src/lib/webp_bad.js deleted file mode 100644 index 4181ccc0..00000000 --- a/src/lib/webp_bad.js +++ /dev/null @@ -1,24 +0,0 @@ -import insideWorker from 'offscreen-canvas/inside-worker'; - -console.log(self); - -import { Webp } from "./libwebp.js"; -let webp = new Webp(); -webp.Module.doNotCaptureKeyboard = true; -webp.Module.noImageDecoding = true; - -let canvas = null; - -const worker = insideWorker(e => { - if(e.data.canvas) { - canvas = e.data.canvas; - console.log(e, canvas); - webp.setCanvas(canvas); - //webp.webpToSdl() - // Draw on the canvas - } else if(e.data.message == 'webpBytes') { - webp.webpToSdl(e.data.bytes, e.data.bytes.length); - //console.log(canvas); - self.postMessage({converted: true}); - } -}); diff --git a/src/scss/partials/_ckin.scss b/src/scss/partials/_ckin.scss index ce6cce21..d8c7cc06 100644 --- a/src/scss/partials/_ckin.scss +++ b/src/scss/partials/_ckin.scss @@ -184,10 +184,8 @@ html.no-touch .default.is-playing:hover .default__controls { &__loaded { background: rgba(255, 255, 255, 0.38); - position: absolute; - width: calc(100% - 16px); - left: 0; - top: 0; + left: 11px; + width: calc(100% - 11px); } } } @@ -273,6 +271,13 @@ video::-webkit-media-controls-enclosure { cursor: pointer; margin: 0; } + + &__loaded { + position: absolute; + left: 12px; + top: 0; + width: calc(100% - 12px); + } } input[type=range] { diff --git a/src/types.d.ts b/src/types.d.ts index b71e49b7..b7c21f6b 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -89,6 +89,17 @@ export type AccountPassword = { secure_random: Uint8Array, }; +export type storageFileType = 'storage.fileUnknown' | 'storage.filePartial' | 'storage.fileJpeg' | + 'storage.fileGif' | 'storage.filePng' | 'storage.filePdf' | 'storage.fileMp3' | 'storage.fileMov' | + 'storage.fileMp4' | 'storage.fileWebp'; + +export type UploadFile = { + _: 'upload.file', + type: storageFileType, + mtime: number, + bytes: Uint8Array +}; + export type FileLocation = { _: 'fileLocationToBeDeprecated', volume_id: string, diff --git a/webpack.prod.js b/webpack.prod.js index 8f9a0225..49c9fc36 100644 --- a/webpack.prod.js +++ b/webpack.prod.js @@ -73,8 +73,7 @@ module.exports = merge(common, { || file.includes('pako') || file.includes('Worker.min.js') || file.includes('recorder.min.js') - || file.includes('.hbs') - || file.includes('mp4box')) return; + || file.includes('.hbs')) return; let p = path.resolve(buildDir + file); if(!newlyCreatedAssets[file] && ['.gz', '.js'].find(ext => file.endsWith(ext)) !== undefined) {