@pictx/gemini-veo-watermark-remover 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +313 -0
- package/assets/masks/bg_48.png +0 -0
- package/assets/masks/bg_96.png +0 -0
- package/assets/masks/bg_b_36.png +0 -0
- package/assets/masks/bg_b_96.png +0 -0
- package/assets/masks/veo_legacy_68x30.png +0 -0
- package/assets/masks/veo_legacy_99x43.png +0 -0
- package/bin/pictx.mjs +4 -0
- package/dist/browser.d.ts +65 -0
- package/dist/browser.js +1211 -0
- package/dist/browser.js.map +7 -0
- package/dist/cli.js +10633 -0
- package/dist/cli.js.map +7 -0
- package/dist/gemini.d.ts +1 -0
- package/dist/gemini.js +596 -0
- package/dist/gemini.js.map +7 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +9610 -0
- package/dist/index.js.map +7 -0
- package/dist/node.d.ts +1 -0
- package/dist/node.js +853 -0
- package/dist/node.js.map +7 -0
- package/dist/pictx-extension-v0.2.1.zip +0 -0
- package/package.json +82 -0
- package/skills/gemini-veo-watermark-remover/SKILL.md +76 -0
- package/skills/gemini-veo-watermark-remover/scripts/run.mjs +36 -0
- package/src/extension/background.js +57 -0
- package/src/extension/content.js +569 -0
- package/src/extension/icons/icon128.png +0 -0
- package/src/extension/icons/icon16.png +0 -0
- package/src/extension/icons/icon48.png +0 -0
- package/src/extension/manifest.json +37 -0
- package/src/extension/popup.html +266 -0
- package/src/extension/popup.js +31 -0
- package/src/userscript/gemini-veo-watermark-remover.user.js +594 -0
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/video/videoDecoder.base.js", "../node_modules/mp4box/dist/mp4box.all.js", "../src/video/videoDecoder.ffmpeg.js", "../src/video/videoEncoder.base.js", "../node_modules/mp4-muxer/build/mp4-muxer.mjs", "../src/video/videoEncoder.ffmpeg.js", "../src/core/blendModes.js", "../src/core/calibratedAlphaData.js", "../src/core/gemini/geminiConfig.js", "../src/core/gemini/geminiAlphaMaps.js", "../src/core/gemini/restorationMetrics.js", "../src/core/gemini/imageProcessor.js", "../src/cli/vwrCli.js", "../src/sdk/node.js", "../src/video/videoDecoder.webcodecs.js", "../src/video/videoDecoder.js", "../src/video/videoEncoder.webcodecs.js", "../src/video/videoEncoder.js", "../src/core/frameProcessor.js", "../src/core/veoConfig.js", "../src/core/embeddedAlphaMaps.js", "../src/video/pipeline.js"],
|
|
4
|
+
"sourcesContent": ["/**\n * Shared video decoder types and base class.\n */\n\n/**\n * @typedef {Object} VideoInfo\n * @property {number} width\n * @property {number} height\n * @property {number} frameCount\n * @property {number} duration\n * @property {number} fps\n * @property {string} codec\n */\n\n/**\n * @typedef {Object} DecodedFrame\n * @property {ImageData} imageData\n * @property {number} timestamp\n * @property {number} frameIndex\n */\n\nexport class VideoDecoderBase {\n async open(/* source */) {\n throw new Error('Not implemented');\n }\n\n async *decodeFrames() {\n throw new Error('Not implemented');\n }\n\n async extractAudio() {\n return null;\n }\n\n async close() {}\n}\n", "// file:src/log.js\n/* \n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar Log = (function (){\n\t\tvar start = new Date();\n\t\tvar LOG_LEVEL_ERROR \t= 4;\n\t\tvar LOG_LEVEL_WARNING \t= 3;\n\t\tvar LOG_LEVEL_INFO \t\t= 2;\n\t\tvar LOG_LEVEL_DEBUG\t\t= 1;\n\t\tvar log_level = LOG_LEVEL_ERROR;\n\t\tvar logObject = {\n\t\t\tsetLogLevel : function(level) {\n\t\t\t\tif (level == this.debug) log_level = LOG_LEVEL_DEBUG;\n\t\t\t\telse if (level == this.info) log_level = LOG_LEVEL_INFO;\n\t\t\t\telse if (level == this.warn) log_level = LOG_LEVEL_WARNING;\n\t\t\t\telse if (level == this.error) log_level = LOG_LEVEL_ERROR;\n\t\t\t\telse log_level = LOG_LEVEL_ERROR;\n\t\t\t},\n\t\t\tdebug : function(module, msg) {\n\t\t\t\tif (console.debug === undefined) {\n\t\t\t\t\tconsole.debug = console.log;\n\t\t\t\t}\n\t\t\t\tif (LOG_LEVEL_DEBUG >= log_level) {\n\t\t\t\t\tconsole.debug(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\tlog : function(module, msg) {\n\t\t\t\tthis.debug(module.msg)\n\t\t\t},\n\t\t\tinfo : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_INFO >= log_level) {\n\t\t\t\t\tconsole.info(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\twarn : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_WARNING >= log_level) {\n\t\t\t\t\tconsole.warn(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\terror : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_ERROR >= log_level) {\n\t\t\t\t\tconsole.error(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn logObject;\n\t})();\n\t\n/* Helper function to print a duration value in the form H:MM:SS.MS */\nLog.getDurationString = function(duration, _timescale) {\n\tvar neg;\n\t/* Helper function to print a number on a fixed number of digits */\n\tfunction pad(number, length) {\n\t\tvar str = '' + number;\n\t\tvar a = str.split('.');\t\t\n\t\twhile (a[0].length < length) {\n\t\t\ta[0] = '0' + a[0];\n\t\t}\n\t\treturn a.join('.');\n\t}\n\tif (duration < 0) {\n\t\tneg = true;\n\t\tduration = -duration;\n\t} else {\n\t\tneg = false;\t\n\t}\n\tvar timescale = _timescale || 1;\n\tvar duration_sec = duration/timescale;\n\tvar hours = Math.floor(duration_sec/3600);\n\tduration_sec -= hours * 3600;\n\tvar minutes = Math.floor(duration_sec/60);\n\tduration_sec -= minutes * 60;\t\t\n\tvar msec = duration_sec*1000;\n\tduration_sec = Math.floor(duration_sec);\n\tmsec -= duration_sec*1000;\n\tmsec = Math.floor(msec);\n\treturn (neg ? \"-\": \"\")+hours+\":\"+pad(minutes,2)+\":\"+pad(duration_sec,2)+\".\"+pad(msec,3);\n}\n\t\n/* Helper function to stringify HTML5 TimeRanges objects */\t\nLog.printRanges = function(ranges) {\n\tvar length = ranges.length;\n\tif (length > 0) {\n\t\tvar str = \"\";\n\t\tfor (var i = 0; i < length; i++) {\n\t\t if (i > 0) str += \",\";\n\t\t str += \"[\"+Log.getDurationString(ranges.start(i))+ \",\"+Log.getDurationString(ranges.end(i))+\"]\";\n\t\t}\n\t\treturn str;\n\t} else {\n\t\treturn \"(empty)\";\n\t}\n}\n\nif (typeof exports !== 'undefined') {\n\texports.Log = Log;\n}\n// file:src/stream.js\nvar MP4BoxStream = function(arrayBuffer) {\n if (arrayBuffer instanceof ArrayBuffer) {\n this.buffer = arrayBuffer;\n this.dataview = new DataView(arrayBuffer);\n } else {\n throw (\"Needs an array buffer\");\n }\n this.position = 0;\n};\n\n/*************************************************************************\n Common API between MultiBufferStream and SimpleStream\n *************************************************************************/\nMP4BoxStream.prototype.getPosition = function() {\n return this.position;\n}\n\nMP4BoxStream.prototype.getEndPosition = function() {\n return this.buffer.byteLength;\n}\n\nMP4BoxStream.prototype.getLength = function() {\n return this.buffer.byteLength;\n}\n\nMP4BoxStream.prototype.seek = function (pos) {\n var npos = Math.max(0, Math.min(this.buffer.byteLength, pos));\n this.position = (isNaN(npos) || !isFinite(npos)) ? 0 : npos;\n return true;\n}\n\nMP4BoxStream.prototype.isEos = function () {\n return this.getPosition() >= this.getEndPosition();\n}\n\n/*************************************************************************\n Read methods, simimar to DataStream but simpler\n *************************************************************************/\nMP4BoxStream.prototype.readAnyInt = function(size, signed) {\n var res = 0;\n if (this.position + size <= this.buffer.byteLength) {\n switch (size) {\n case 1:\n if (signed) {\n res = this.dataview.getInt8(this.position);\n } else {\n res = this.dataview.getUint8(this.position);\n }\n break;\n case 2:\n if (signed) {\n res = this.dataview.getInt16(this.position);\n } else {\n res = this.dataview.getUint16(this.position);\n }\n break;\n case 3:\n if (signed) {\n throw (\"No method for reading signed 24 bits values\");\n } else {\n res = this.dataview.getUint8(this.position) << 16;\n res |= this.dataview.getUint8(this.position+1) << 8;\n res |= this.dataview.getUint8(this.position+2);\n }\n break;\n case 4:\n if (signed) {\n res = this.dataview.getInt32(this.position);\n } else {\n res = this.dataview.getUint32(this.position);\n }\n break;\n case 8:\n if (signed) {\n throw (\"No method for reading signed 64 bits values\");\n } else {\n res = this.dataview.getUint32(this.position) << 32;\n res |= this.dataview.getUint32(this.position+4);\n }\n break;\n default:\n throw (\"readInt method not implemented for size: \"+size);\n }\n this.position+= size;\n return res;\n } else {\n throw (\"Not enough bytes in buffer\");\n }\n}\n\nMP4BoxStream.prototype.readUint8 = function() {\n return this.readAnyInt(1, false);\n}\n\nMP4BoxStream.prototype.readUint16 = function() {\n return this.readAnyInt(2, false);\n}\n\nMP4BoxStream.prototype.readUint24 = function() {\n return this.readAnyInt(3, false);\n}\n\nMP4BoxStream.prototype.readUint32 = function() {\n return this.readAnyInt(4, false);\n}\n\nMP4BoxStream.prototype.readUint64 = function() {\n return this.readAnyInt(8, false);\n}\n\nMP4BoxStream.prototype.readString = function(length) {\n if (this.position + length <= this.buffer.byteLength) {\n var s = \"\";\n for (var i = 0; i < length; i++) {\n s += String.fromCharCode(this.readUint8());\n }\n return s;\n } else {\n throw (\"Not enough bytes in buffer\");\n }\n}\n\nMP4BoxStream.prototype.readCString = function() {\n var arr = [];\n while(true) {\n var b = this.readUint8();\n if (b !== 0) {\n arr.push(b);\n } else {\n break;\n }\n }\n return String.fromCharCode.apply(null, arr); \n}\n\nMP4BoxStream.prototype.readInt8 = function() {\n return this.readAnyInt(1, true);\n}\n\nMP4BoxStream.prototype.readInt16 = function() {\n return this.readAnyInt(2, true);\n}\n\nMP4BoxStream.prototype.readInt32 = function() {\n return this.readAnyInt(4, true);\n}\n\nMP4BoxStream.prototype.readInt64 = function() {\n return this.readAnyInt(8, false);\n}\n\nMP4BoxStream.prototype.readUint8Array = function(length) {\n var arr = new Uint8Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint8();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readInt16Array = function(length) {\n var arr = new Int16Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readInt16();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readUint16Array = function(length) {\n var arr = new Int16Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint16();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readUint32Array = function(length) {\n var arr = new Uint32Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint32();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readInt32Array = function(length) {\n var arr = new Int32Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readInt32();\n }\n return arr;\n}\n\nif (typeof exports !== 'undefined') {\n exports.MP4BoxStream = MP4BoxStream;\n}// file:src/DataStream.js\n/**\n DataStream reads scalars, arrays and structs of data from an ArrayBuffer.\n It's like a file-like DataView on steroids.\n\n @param {ArrayBuffer} arrayBuffer ArrayBuffer to read from.\n @param {?Number} byteOffset Offset from arrayBuffer beginning for the DataStream.\n @param {?Boolean} endianness DataStream.BIG_ENDIAN or DataStream.LITTLE_ENDIAN (the default).\n */\nvar DataStream = function(arrayBuffer, byteOffset, endianness) {\n this._byteOffset = byteOffset || 0;\n if (arrayBuffer instanceof ArrayBuffer) {\n this.buffer = arrayBuffer;\n } else if (typeof arrayBuffer == \"object\") {\n this.dataView = arrayBuffer;\n if (byteOffset) {\n this._byteOffset += byteOffset;\n }\n } else {\n this.buffer = new ArrayBuffer(arrayBuffer || 0);\n }\n this.position = 0;\n this.endianness = endianness == null ? DataStream.LITTLE_ENDIAN : endianness;\n};\nDataStream.prototype = {};\n\nDataStream.prototype.getPosition = function() {\n return this.position;\n}\n\n/**\n Internal function to resize the DataStream buffer when required.\n @param {number} extra Number of bytes to add to the buffer allocation.\n @return {null}\n */\nDataStream.prototype._realloc = function(extra) {\n if (!this._dynamicSize) {\n return;\n }\n var req = this._byteOffset + this.position + extra;\n var blen = this._buffer.byteLength;\n if (req <= blen) {\n if (req > this._byteLength) {\n this._byteLength = req;\n }\n return;\n }\n if (blen < 1) {\n blen = 1;\n }\n while (req > blen) {\n blen *= 2;\n }\n var buf = new ArrayBuffer(blen);\n var src = new Uint8Array(this._buffer);\n var dst = new Uint8Array(buf, 0, src.length);\n dst.set(src);\n this.buffer = buf;\n this._byteLength = req;\n};\n\n/**\n Internal function to trim the DataStream buffer when required.\n Used for stripping out the extra bytes from the backing buffer when\n the virtual byteLength is smaller than the buffer byteLength (happens after\n growing the buffer with writes and not filling the extra space completely).\n\n @return {null}\n */\nDataStream.prototype._trimAlloc = function() {\n if (this._byteLength == this._buffer.byteLength) {\n return;\n }\n var buf = new ArrayBuffer(this._byteLength);\n var dst = new Uint8Array(buf);\n var src = new Uint8Array(this._buffer, 0, dst.length);\n dst.set(src);\n this.buffer = buf;\n};\n\n\n/**\n Big-endian const to use as default endianness.\n @type {boolean}\n */\nDataStream.BIG_ENDIAN = false;\n\n/**\n Little-endian const to use as default endianness.\n @type {boolean}\n */\nDataStream.LITTLE_ENDIAN = true;\n\n/**\n Virtual byte length of the DataStream backing buffer.\n Updated to be max of original buffer size and last written size.\n If dynamicSize is false is set to buffer size.\n @type {number}\n */\nDataStream.prototype._byteLength = 0;\n\n/**\n Returns the byte length of the DataStream object.\n @type {number}\n */\nObject.defineProperty(DataStream.prototype, 'byteLength',\n { get: function() {\n return this._byteLength - this._byteOffset;\n }});\n\n/**\n Set/get the backing ArrayBuffer of the DataStream object.\n The setter updates the DataView to point to the new buffer.\n @type {Object}\n */\nObject.defineProperty(DataStream.prototype, 'buffer',\n { get: function() {\n this._trimAlloc();\n return this._buffer;\n },\n set: function(v) {\n this._buffer = v;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._buffer.byteLength;\n } });\n\n/**\n Set/get the byteOffset of the DataStream object.\n The setter updates the DataView to point to the new byteOffset.\n @type {number}\n */\nObject.defineProperty(DataStream.prototype, 'byteOffset',\n { get: function() {\n return this._byteOffset;\n },\n set: function(v) {\n this._byteOffset = v;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._buffer.byteLength;\n } });\n\n/**\n Set/get the backing DataView of the DataStream object.\n The setter updates the buffer and byteOffset to point to the DataView values.\n @type {Object}\n */\nObject.defineProperty(DataStream.prototype, 'dataView',\n { get: function() {\n return this._dataView;\n },\n set: function(v) {\n this._byteOffset = v.byteOffset;\n this._buffer = v.buffer;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._byteOffset + v.byteLength;\n } });\n\n/**\n Sets the DataStream read/write position to given position.\n Clamps between 0 and DataStream length.\n\n @param {number} pos Position to seek to.\n @return {null}\n */\nDataStream.prototype.seek = function(pos) {\n var npos = Math.max(0, Math.min(this.byteLength, pos));\n this.position = (isNaN(npos) || !isFinite(npos)) ? 0 : npos;\n};\n\n/**\n Returns true if the DataStream seek pointer is at the end of buffer and\n there's no more data to read.\n\n @return {boolean} True if the seek pointer is at the end of the buffer.\n */\nDataStream.prototype.isEof = function() {\n return (this.position >= this._byteLength);\n};\n\n\n/**\n Maps a Uint8Array into the DataStream buffer.\n\n Nice for quickly reading in data.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint8Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint8Array = function(length) {\n this._realloc(length * 1);\n var arr = new Uint8Array(this._buffer, this.byteOffset+this.position, length);\n this.position += length * 1;\n return arr;\n};\n\n\n/**\n Reads an Int32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int32Array.\n */\nDataStream.prototype.readInt32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Int32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads an Int16Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int16Array.\n */\nDataStream.prototype.readInt16Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 2) : length;\n var arr = new Int16Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads an Int8Array of desired length from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int8Array.\n */\nDataStream.prototype.readInt8Array = function(length) {\n length = length == null ? (this.byteLength-this.position) : length;\n var arr = new Int8Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint32Array.\n */\nDataStream.prototype.readUint32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Uint32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint16Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint16Array.\n */\nDataStream.prototype.readUint16Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 2) : length;\n var arr = new Uint16Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint8Array of desired length from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint8Array.\n */\nDataStream.prototype.readUint8Array = function(length) {\n length = length == null ? (this.byteLength-this.position) : length;\n var arr = new Uint8Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Float64Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Float64Array.\n */\nDataStream.prototype.readFloat64Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 8) : length;\n var arr = new Float64Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Float32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Float32Array.\n */\nDataStream.prototype.readFloat32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Float32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n\n/**\n Reads a 32-bit int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readInt32 = function(e) {\n var v = this._dataView.getInt32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 16-bit int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readInt16 = function(e) {\n var v = this._dataView.getInt16(this.position, e == null ? this.endianness : e);\n this.position += 2;\n return v;\n};\n\n/**\n Reads an 8-bit int from the DataStream.\n\n @return {number} The read number.\n */\nDataStream.prototype.readInt8 = function() {\n var v = this._dataView.getInt8(this.position);\n this.position += 1;\n return v;\n};\n\n/**\n Reads a 32-bit unsigned int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readUint32 = function(e) {\n var v = this._dataView.getUint32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 16-bit unsigned int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readUint16 = function(e) {\n var v = this._dataView.getUint16(this.position, e == null ? this.endianness : e);\n this.position += 2;\n return v;\n};\n\n/**\n Reads an 8-bit unsigned int from the DataStream.\n\n @return {number} The read number.\n */\nDataStream.prototype.readUint8 = function() {\n var v = this._dataView.getUint8(this.position);\n this.position += 1;\n return v;\n};\n\n/**\n Reads a 32-bit float from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readFloat32 = function(e) {\n var v = this._dataView.getFloat32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 64-bit float from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readFloat64 = function(e) {\n var v = this._dataView.getFloat64(this.position, e == null ? this.endianness : e);\n this.position += 8;\n return v;\n};\n\n/**\n Native endianness. Either DataStream.BIG_ENDIAN or DataStream.LITTLE_ENDIAN\n depending on the platform endianness.\n\n @type {boolean}\n */\nDataStream.endianness = new Int8Array(new Int16Array([1]).buffer)[0] > 0;\n\n/**\n Copies byteLength bytes from the src buffer at srcOffset to the\n dst buffer at dstOffset.\n\n @param {Object} dst Destination ArrayBuffer to write to.\n @param {number} dstOffset Offset to the destination ArrayBuffer.\n @param {Object} src Source ArrayBuffer to read from.\n @param {number} srcOffset Offset to the source ArrayBuffer.\n @param {number} byteLength Number of bytes to copy.\n */\nDataStream.memcpy = function(dst, dstOffset, src, srcOffset, byteLength) {\n var dstU8 = new Uint8Array(dst, dstOffset, byteLength);\n var srcU8 = new Uint8Array(src, srcOffset, byteLength);\n dstU8.set(srcU8);\n};\n\n/**\n Converts array to native endianness in-place.\n\n @param {Object} array Typed array to convert.\n @param {boolean} arrayIsLittleEndian True if the data in the array is\n little-endian. Set false for big-endian.\n @return {Object} The converted typed array.\n */\nDataStream.arrayToNative = function(array, arrayIsLittleEndian) {\n if (arrayIsLittleEndian == this.endianness) {\n return array;\n } else {\n return this.flipArrayEndianness(array);\n }\n};\n\n/**\n Converts native endianness array to desired endianness in-place.\n\n @param {Object} array Typed array to convert.\n @param {boolean} littleEndian True if the converted array should be\n little-endian. Set false for big-endian.\n @return {Object} The converted typed array.\n */\nDataStream.nativeToEndian = function(array, littleEndian) {\n if (this.endianness == littleEndian) {\n return array;\n } else {\n return this.flipArrayEndianness(array);\n }\n};\n\n/**\n Flips typed array endianness in-place.\n\n @param {Object} array Typed array to flip.\n @return {Object} The converted typed array.\n */\nDataStream.flipArrayEndianness = function(array) {\n var u8 = new Uint8Array(array.buffer, array.byteOffset, array.byteLength);\n for (var i=0; i<array.byteLength; i+=array.BYTES_PER_ELEMENT) {\n for (var j=i+array.BYTES_PER_ELEMENT-1, k=i; j>k; j--, k++) {\n var tmp = u8[k];\n u8[k] = u8[j];\n u8[j] = tmp;\n }\n }\n return array;\n};\n\n/**\n Seek position where DataStream#readStruct ran into a problem.\n Useful for debugging struct parsing.\n\n @type {number}\n */\nDataStream.prototype.failurePosition = 0;\n\nString.fromCharCodeUint8 = function(uint8arr) {\n var arr = [];\n for (var i = 0; i < uint8arr.length; i++) {\n arr[i] = uint8arr[i];\n }\n return String.fromCharCode.apply(null, arr);\n}\n/**\n Read a string of desired length and encoding from the DataStream.\n\n @param {number} length The length of the string to read in bytes.\n @param {?string} encoding The encoding of the string data in the DataStream.\n Defaults to ASCII.\n @return {string} The read string.\n */\nDataStream.prototype.readString = function(length, encoding) {\n if (encoding == null || encoding == \"ASCII\") {\n return String.fromCharCodeUint8.apply(null, [this.mapUint8Array(length == null ? this.byteLength-this.position : length)]);\n } else {\n return (new TextDecoder(encoding)).decode(this.mapUint8Array(length));\n }\n};\n\n/**\n Read null-terminated string of desired length from the DataStream. Truncates\n the returned string so that the null byte is not a part of it.\n\n @param {?number} length The length of the string to read.\n @return {string} The read string.\n */\nDataStream.prototype.readCString = function(length) {\n var blen = this.byteLength-this.position;\n var u8 = new Uint8Array(this._buffer, this._byteOffset + this.position);\n var len = blen;\n if (length != null) {\n len = Math.min(length, blen);\n }\n for (var i = 0; i < len && u8[i] !== 0; i++); // find first zero byte\n var s = String.fromCharCodeUint8.apply(null, [this.mapUint8Array(i)]);\n if (length != null) {\n this.position += len-i;\n } else if (i != blen) {\n this.position += 1; // trailing zero if not at end of buffer\n }\n return s;\n};\n\n/* \n TODO: fix endianness for 24/64-bit fields\n TODO: check range/support for 64-bits numbers in JavaScript\n*/\nvar MAX_SIZE = Math.pow(2, 32);\n\nDataStream.prototype.readInt64 = function () {\n return (this.readInt32()*MAX_SIZE)+this.readUint32();\n}\nDataStream.prototype.readUint64 = function () {\n\treturn (this.readUint32()*MAX_SIZE)+this.readUint32();\n}\n\nDataStream.prototype.readInt64 = function () {\n return (this.readUint32()*MAX_SIZE)+this.readUint32();\n}\n\nDataStream.prototype.readUint24 = function () {\n\treturn (this.readUint8()<<16)+(this.readUint8()<<8)+this.readUint8();\n}\n\nif (typeof exports !== 'undefined') {\n exports.DataStream = DataStream; \n}\n// file:src/DataStream-write.js\n/**\n Saves the DataStream contents to the given filename.\n Uses Chrome's anchor download property to initiate download.\n \n @param {string} filename Filename to save as.\n @return {null}\n */\nDataStream.prototype.save = function(filename) {\n var blob = new Blob([this.buffer]);\n if (window.URL && URL.createObjectURL) {\n var url = window.URL.createObjectURL(blob);\n var a = document.createElement('a');\n // Required in Firefox:\n document.body.appendChild(a);\n a.setAttribute('href', url);\n a.setAttribute('download', filename);\n // Required in Firefox:\n a.setAttribute('target', '_self');\n a.click();\n window.URL.revokeObjectURL(url);\n } else {\n throw(\"DataStream.save: Can't create object URL.\");\n }\n};\n\n/**\n Whether to extend DataStream buffer when trying to write beyond its size.\n If set, the buffer is reallocated to twice its current size until the\n requested write fits the buffer.\n @type {boolean}\n */\nDataStream.prototype._dynamicSize = true;\nObject.defineProperty(DataStream.prototype, 'dynamicSize',\n { get: function() {\n return this._dynamicSize;\n },\n set: function(v) {\n if (!v) {\n this._trimAlloc();\n }\n this._dynamicSize = v;\n } });\n\n/**\n Internal function to trim the DataStream buffer when required.\n Used for stripping out the first bytes when not needed anymore.\n\n @return {null}\n */\nDataStream.prototype.shift = function(offset) {\n var buf = new ArrayBuffer(this._byteLength-offset);\n var dst = new Uint8Array(buf);\n var src = new Uint8Array(this._buffer, offset, dst.length);\n dst.set(src);\n this.buffer = buf;\n this.position -= offset;\n};\n\n/**\n Writes an Int32Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeInt32Array = function(arr, e) {\n this._realloc(arr.length * 4);\n if (arr instanceof Int32Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapInt32Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeInt32(arr[i], e);\n }\n }\n};\n\n/**\n Writes an Int16Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeInt16Array = function(arr, e) {\n this._realloc(arr.length * 2);\n if (arr instanceof Int16Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapInt16Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeInt16(arr[i], e);\n }\n }\n};\n\n/**\n Writes an Int8Array to the DataStream.\n\n @param {Object} arr The array to write.\n */\nDataStream.prototype.writeInt8Array = function(arr) {\n this._realloc(arr.length * 1);\n if (arr instanceof Int8Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapInt8Array(arr.length);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeInt8(arr[i]);\n }\n }\n};\n\n/**\n Writes a Uint32Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeUint32Array = function(arr, e) {\n this._realloc(arr.length * 4);\n if (arr instanceof Uint32Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapUint32Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeUint32(arr[i], e);\n }\n }\n};\n\n/**\n Writes a Uint16Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeUint16Array = function(arr, e) {\n this._realloc(arr.length * 2);\n if (arr instanceof Uint16Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapUint16Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeUint16(arr[i], e);\n }\n }\n};\n\n/**\n Writes a Uint8Array to the DataStream.\n\n @param {Object} arr The array to write.\n */\nDataStream.prototype.writeUint8Array = function(arr) {\n this._realloc(arr.length * 1);\n if (arr instanceof Uint8Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapUint8Array(arr.length);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeUint8(arr[i]);\n }\n }\n};\n\n/**\n Writes a Float64Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeFloat64Array = function(arr, e) {\n this._realloc(arr.length * 8);\n if (arr instanceof Float64Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapFloat64Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeFloat64(arr[i], e);\n }\n }\n};\n\n/**\n Writes a Float32Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeFloat32Array = function(arr, e) {\n this._realloc(arr.length * 4);\n if (arr instanceof Float32Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapFloat32Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeFloat32(arr[i], e);\n }\n }\n};\n\n\n/**\n Writes a 32-bit int to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeInt32 = function(v, e) {\n this._realloc(4);\n this._dataView.setInt32(this.position, v, e == null ? this.endianness : e);\n this.position += 4;\n};\n\n/**\n Writes a 16-bit int to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeInt16 = function(v, e) {\n this._realloc(2);\n this._dataView.setInt16(this.position, v, e == null ? this.endianness : e);\n this.position += 2;\n};\n\n/**\n Writes an 8-bit int to the DataStream.\n\n @param {number} v Number to write.\n */\nDataStream.prototype.writeInt8 = function(v) {\n this._realloc(1);\n this._dataView.setInt8(this.position, v);\n this.position += 1;\n};\n\n/**\n Writes a 32-bit unsigned int to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeUint32 = function(v, e) {\n this._realloc(4);\n this._dataView.setUint32(this.position, v, e == null ? this.endianness : e);\n this.position += 4;\n};\n\n/**\n Writes a 16-bit unsigned int to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeUint16 = function(v, e) {\n this._realloc(2);\n this._dataView.setUint16(this.position, v, e == null ? this.endianness : e);\n this.position += 2;\n};\n\n/**\n Writes an 8-bit unsigned int to the DataStream.\n\n @param {number} v Number to write.\n */\nDataStream.prototype.writeUint8 = function(v) {\n this._realloc(1);\n this._dataView.setUint8(this.position, v);\n this.position += 1;\n};\n\n/**\n Writes a 32-bit float to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeFloat32 = function(v, e) {\n this._realloc(4);\n this._dataView.setFloat32(this.position, v, e == null ? this.endianness : e);\n this.position += 4;\n};\n\n/**\n Writes a 64-bit float to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeFloat64 = function(v, e) {\n this._realloc(8);\n this._dataView.setFloat64(this.position, v, e == null ? this.endianness : e);\n this.position += 8;\n};\n\n/**\n Write a UCS-2 string of desired endianness to the DataStream. The\n lengthOverride argument lets you define the number of characters to write.\n If the string is shorter than lengthOverride, the extra space is padded with\n zeroes.\n\n @param {string} str The string to write.\n @param {?boolean} endianness The endianness to use for the written string data.\n @param {?number} lengthOverride The number of characters to write.\n */\nDataStream.prototype.writeUCS2String = function(str, endianness, lengthOverride) {\n if (lengthOverride == null) {\n lengthOverride = str.length;\n }\n for (var i = 0; i < str.length && i < lengthOverride; i++) {\n this.writeUint16(str.charCodeAt(i), endianness);\n }\n for (; i<lengthOverride; i++) {\n this.writeUint16(0);\n }\n};\n\n/**\n Writes a string of desired length and encoding to the DataStream.\n\n @param {string} s The string to write.\n @param {?string} encoding The encoding for the written string data.\n Defaults to ASCII.\n @param {?number} length The number of characters to write.\n */\nDataStream.prototype.writeString = function(s, encoding, length) {\n var i = 0;\n if (encoding == null || encoding == \"ASCII\") {\n if (length != null) {\n var len = Math.min(s.length, length);\n for (i=0; i<len; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n for (; i<length; i++) {\n this.writeUint8(0);\n }\n } else {\n for (i=0; i<s.length; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n }\n } else {\n this.writeUint8Array((new TextEncoder(encoding)).encode(s.substring(0, length)));\n }\n};\n\n/**\n Writes a null-terminated string to DataStream and zero-pads it to length\n bytes. If length is not given, writes the string followed by a zero.\n If string is longer than length, the written part of the string does not have\n a trailing zero.\n\n @param {string} s The string to write.\n @param {?number} length The number of characters to write.\n */\nDataStream.prototype.writeCString = function(s, length) {\n var i = 0;\n if (length != null) {\n var len = Math.min(s.length, length);\n for (i=0; i<len; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n for (; i<length; i++) {\n this.writeUint8(0);\n }\n } else {\n for (i=0; i<s.length; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n this.writeUint8(0);\n }\n};\n\n/**\n Writes a struct to the DataStream. Takes a structDefinition that gives the\n types and a struct object that gives the values. Refer to readStruct for the\n structure of structDefinition.\n\n @param {Object} structDefinition Type definition of the struct.\n @param {Object} struct The struct data object.\n */\nDataStream.prototype.writeStruct = function(structDefinition, struct) {\n for (var i = 0; i < structDefinition.length; i+=2) {\n var t = structDefinition[i+1];\n this.writeType(t, struct[structDefinition[i]], struct);\n }\n};\n\n/**\n Writes object v of type t to the DataStream.\n\n @param {Object} t Type of data to write.\n @param {Object} v Value of data to write.\n @param {Object} struct Struct to pass to write callback functions.\n */\nDataStream.prototype.writeType = function(t, v, struct) {\n var tp;\n if (typeof t == \"function\") {\n return t(this, v);\n } else if (typeof t == \"object\" && !(t instanceof Array)) {\n return t.set(this, v, struct);\n }\n var lengthOverride = null;\n var charset = \"ASCII\";\n var pos = this.position;\n if (typeof(t) == 'string' && /:/.test(t)) {\n tp = t.split(\":\");\n t = tp[0];\n lengthOverride = parseInt(tp[1]);\n }\n if (typeof t == 'string' && /,/.test(t)) {\n tp = t.split(\",\");\n t = tp[0];\n charset = parseInt(tp[1]);\n }\n\n switch(t) {\n case 'uint8':\n this.writeUint8(v);\n break;\n case 'int8':\n this.writeInt8(v);\n break;\n\n case 'uint16':\n this.writeUint16(v, this.endianness);\n break;\n case 'int16':\n this.writeInt16(v, this.endianness);\n break;\n case 'uint32':\n this.writeUint32(v, this.endianness);\n break;\n case 'int32':\n this.writeInt32(v, this.endianness);\n break;\n case 'float32':\n this.writeFloat32(v, this.endianness);\n break;\n case 'float64':\n this.writeFloat64(v, this.endianness);\n break;\n\n case 'uint16be':\n this.writeUint16(v, DataStream.BIG_ENDIAN);\n break;\n case 'int16be':\n this.writeInt16(v, DataStream.BIG_ENDIAN);\n break;\n case 'uint32be':\n this.writeUint32(v, DataStream.BIG_ENDIAN);\n break;\n case 'int32be':\n this.writeInt32(v, DataStream.BIG_ENDIAN);\n break;\n case 'float32be':\n this.writeFloat32(v, DataStream.BIG_ENDIAN);\n break;\n case 'float64be':\n this.writeFloat64(v, DataStream.BIG_ENDIAN);\n break;\n\n case 'uint16le':\n this.writeUint16(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'int16le':\n this.writeInt16(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'uint32le':\n this.writeUint32(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'int32le':\n this.writeInt32(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'float32le':\n this.writeFloat32(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'float64le':\n this.writeFloat64(v, DataStream.LITTLE_ENDIAN);\n break;\n\n case 'cstring':\n this.writeCString(v, lengthOverride);\n break;\n\n case 'string':\n this.writeString(v, charset, lengthOverride);\n break;\n\n case 'u16string':\n this.writeUCS2String(v, this.endianness, lengthOverride);\n break;\n\n case 'u16stringle':\n this.writeUCS2String(v, DataStream.LITTLE_ENDIAN, lengthOverride);\n break;\n\n case 'u16stringbe':\n this.writeUCS2String(v, DataStream.BIG_ENDIAN, lengthOverride);\n break;\n\n default:\n if (t.length == 3) {\n var ta = t[1];\n for (var i=0; i<v.length; i++) {\n this.writeType(ta, v[i]);\n }\n break;\n } else {\n this.writeStruct(t, v);\n break;\n }\n }\n if (lengthOverride != null) {\n this.position = pos;\n this._realloc(lengthOverride);\n this.position = pos + lengthOverride;\n }\n};\n\n\nDataStream.prototype.writeUint64 = function (v) {\n\tvar h = Math.floor(v / MAX_SIZE);\n\tthis.writeUint32(h);\n\tthis.writeUint32(v & 0xFFFFFFFF);\n}\n\nDataStream.prototype.writeUint24 = function (v) {\n\tthis.writeUint8((v & 0x00FF0000)>>16);\n\tthis.writeUint8((v & 0x0000FF00)>>8);\n\tthis.writeUint8((v & 0x000000FF));\n}\n\nDataStream.prototype.adjustUint32 = function(position, value) {\n\tvar pos = this.position;\n\tthis.seek(position);\n\tthis.writeUint32(value);\n\tthis.seek(pos);\n}\n// file:src/DataStream-map.js\n/**\n Maps an Int32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Int32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n\n/**\n Maps an Int16Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int16Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt16Array = function(length, e) {\n this._realloc(length * 2);\n var arr = new Int16Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 2;\n return arr;\n};\n\n/**\n Maps an Int8Array into the DataStream buffer.\n\n Nice for quickly reading in data.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int8Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt8Array = function(length) {\n this._realloc(length * 1);\n var arr = new Int8Array(this._buffer, this.byteOffset+this.position, length);\n this.position += length * 1;\n return arr;\n};\n\n/**\n Maps a Uint32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Uint32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n\n/**\n Maps a Uint16Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint16Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint16Array = function(length, e) {\n this._realloc(length * 2);\n var arr = new Uint16Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 2;\n return arr;\n};\n\n/**\n Maps a Float64Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Float64Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapFloat64Array = function(length, e) {\n this._realloc(length * 8);\n var arr = new Float64Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 8;\n return arr;\n};\n\n/**\n Maps a Float32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Float32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapFloat32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Float32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n// file:src/buffer.js\n/**\n * MultiBufferStream is a class that acts as a SimpleStream for parsing \n * It holds several, possibly non-contiguous ArrayBuffer objects, each with a fileStart property \n * containing the offset for the buffer data in an original/virtual file \n *\n * It inherits also from DataStream for all read/write/alloc operations\n */\n\n/**\n * Constructor\n */\nvar MultiBufferStream = function(buffer) {\n\t/* List of ArrayBuffers, with a fileStart property, sorted in fileStart order and non overlapping */\n\tthis.buffers = [];\t\n\tthis.bufferIndex = -1;\n\tif (buffer) {\n\t\tthis.insertBuffer(buffer);\n\t\tthis.bufferIndex = 0;\n\t}\n}\nMultiBufferStream.prototype = new DataStream(new ArrayBuffer(), 0, DataStream.BIG_ENDIAN);\n\n/************************************************************************************\n Methods for the managnement of the buffers (insertion, removal, concatenation, ...)\n ***********************************************************************************/\n\nMultiBufferStream.prototype.initialized = function() {\n\tvar firstBuffer;\n\tif (this.bufferIndex > -1) {\n\t\treturn true;\n\t} else if (this.buffers.length > 0) {\n\t\tfirstBuffer = this.buffers[0];\n\t\tif (firstBuffer.fileStart === 0) {\n\t\t\tthis.buffer = firstBuffer;\n\t\t\tthis.bufferIndex = 0;\n\t\t\tLog.debug(\"MultiBufferStream\", \"Stream ready for parsing\");\n\t\t\treturn true;\n\t\t} else {\n\t\t\tLog.warn(\"MultiBufferStream\", \"The first buffer should have a fileStart of 0\");\n\t\t\tthis.logBufferLevel();\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tLog.warn(\"MultiBufferStream\", \"No buffer to start parsing from\");\n\t\tthis.logBufferLevel();\n\t\treturn false;\n\t}\t\t\t\n}\n\n/**\n * helper functions to concatenate two ArrayBuffer objects\n * @param {ArrayBuffer} buffer1 \n * @param {ArrayBuffer} buffer2 \n * @return {ArrayBuffer} the concatenation of buffer1 and buffer2 in that order\n */\nArrayBuffer.concat = function(buffer1, buffer2) {\n Log.debug(\"ArrayBuffer\", \"Trying to create a new buffer of size: \"+(buffer1.byteLength + buffer2.byteLength));\n var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);\n tmp.set(new Uint8Array(buffer1), 0);\n tmp.set(new Uint8Array(buffer2), buffer1.byteLength);\n return tmp.buffer;\n};\n\n/**\n * Reduces the size of a given buffer, but taking the part between offset and offset+newlength\n * @param {ArrayBuffer} buffer \n * @param {Number} offset the start of new buffer\n * @param {Number} newLength the length of the new buffer\n * @return {ArrayBuffer} the new buffer\n */\nMultiBufferStream.prototype.reduceBuffer = function(buffer, offset, newLength) {\n\tvar smallB;\n\tsmallB = new Uint8Array(newLength);\n\tsmallB.set(new Uint8Array(buffer, offset, newLength));\n\tsmallB.buffer.fileStart = buffer.fileStart+offset;\n\tsmallB.buffer.usedBytes = 0;\n\treturn smallB.buffer;\t\n}\n\n/**\n * Inserts the new buffer in the sorted list of buffers,\n * making sure, it is not overlapping with existing ones (possibly reducing its size).\n * if the new buffer overrides/replaces the 0-th buffer (for instance because it is bigger), \n * updates the DataStream buffer for parsing \n*/\nMultiBufferStream.prototype.insertBuffer = function(ab) {\t\n\tvar to_add = true;\n\t/* TODO: improve insertion if many buffers */\n\tfor (var i = 0; i < this.buffers.length; i++) {\n\t\tvar b = this.buffers[i];\n\t\tif (ab.fileStart <= b.fileStart) {\n\t\t\t/* the insertion position is found */\n\t\t\tif (ab.fileStart === b.fileStart) {\n\t\t\t\t/* The new buffer overlaps with an existing buffer */\n\t\t\t\tif (ab.byteLength > b.byteLength) {\n\t\t\t\t\t/* the new buffer is bigger than the existing one\n\t\t\t\t\t remove the existing buffer and try again to insert \n\t\t\t\t\t the new buffer to check overlap with the next ones */\n\t\t\t\t\tthis.buffers.splice(i, 1);\n\t\t\t\t\ti--; \n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\t/* the new buffer is smaller than the existing one, just drop it */\n\t\t\t\t\tLog.warn(\"MultiBufferStream\", \"Buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\") already appended, ignoring\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t/* The beginning of the new buffer is not overlapping with an existing buffer\n\t\t\t\t let's check the end of it */\n\t\t\t\tif (ab.fileStart + ab.byteLength <= b.fileStart) {\n\t\t\t\t\t/* no overlap, we can add it as is */\n\t\t\t\t} else {\n\t\t\t\t\t/* There is some overlap, cut the new buffer short, and add it*/\n\t\t\t\t\tab = this.reduceBuffer(ab, 0, b.fileStart - ab.fileStart);\n\t\t\t\t}\n\t\t\t\tLog.debug(\"MultiBufferStream\", \"Appending new buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\")\");\n\t\t\t\tthis.buffers.splice(i, 0, ab);\n\t\t\t\t/* if this new buffer is inserted in the first place in the list of the buffer, \n\t\t\t\t and the DataStream is initialized, make it the buffer used for parsing */\n\t\t\t\tif (i === 0) {\n\t\t\t\t\tthis.buffer = ab;\n\t\t\t\t}\n\t\t\t}\n\t\t\tto_add = false;\n\t\t\tbreak;\n\t\t} else if (ab.fileStart < b.fileStart + b.byteLength) {\n\t\t\t/* the new buffer overlaps its beginning with the end of the current buffer */\n\t\t\tvar offset = b.fileStart + b.byteLength - ab.fileStart;\n\t\t\tvar newLength = ab.byteLength - offset;\n\t\t\tif (newLength > 0) {\n\t\t\t\t/* the new buffer is bigger than the current overlap, drop the overlapping part and try again inserting the remaining buffer */\n\t\t\t\tab = this.reduceBuffer(ab, offset, newLength);\n\t\t\t} else {\n\t\t\t\t/* the content of the new buffer is entirely contained in the existing buffer, drop it entirely */\n\t\t\t\tto_add = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t/* if the buffer has not been added, we can add it at the end */\n\tif (to_add) {\n\t\tLog.debug(\"MultiBufferStream\", \"Appending new buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\")\");\n\t\tthis.buffers.push(ab);\n\t\t/* if this new buffer is inserted in the first place in the list of the buffer, \n\t\t and the DataStream is initialized, make it the buffer used for parsing */\n\t\tif (i === 0) {\n\t\t\tthis.buffer = ab;\n\t\t}\n\t}\n}\n\n/**\n * Displays the status of the buffers (number and used bytes)\n * @param {Object} info callback method for display\n */\nMultiBufferStream.prototype.logBufferLevel = function(info) {\n\tvar i;\n\tvar buffer;\n\tvar used, total;\n\tvar ranges = [];\n\tvar range;\n\tvar bufferedString = \"\";\n\tused = 0;\n\ttotal = 0;\n\tfor (i = 0; i < this.buffers.length; i++) {\n\t\tbuffer = this.buffers[i];\n\t\tif (i === 0) {\n\t\t\trange = {};\n\t\t\tranges.push(range);\n\t\t\trange.start = buffer.fileStart;\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t\tbufferedString += \"[\"+range.start+\"-\";\n\t\t} else if (range.end === buffer.fileStart) {\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t} else {\n\t\t\trange = {};\n\t\t\trange.start = buffer.fileStart;\n\t\t\tbufferedString += (ranges[ranges.length-1].end-1)+\"], [\"+range.start+\"-\";\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t\tranges.push(range);\n\t\t}\n\t\tused += buffer.usedBytes;\n\t\ttotal += buffer.byteLength;\n\t}\n\tif (ranges.length > 0) {\n\t\tbufferedString += (range.end-1)+\"]\";\n\t}\n\tvar log = (info ? Log.info : Log.debug)\n\tif (this.buffers.length === 0) {\n\t\tlog(\"MultiBufferStream\", \"No more buffer in memory\");\n\t} else {\n\t\tlog(\"MultiBufferStream\", \"\"+this.buffers.length+\" stored buffer(s) (\"+used+\"/\"+total+\" bytes), continuous ranges: \"+bufferedString);\n\t}\n}\n\nMultiBufferStream.prototype.cleanBuffers = function () {\n\tvar i;\n\tvar buffer;\n\tfor (i = 0; i < this.buffers.length; i++) {\n\t\tbuffer = this.buffers[i];\n\t\tif (buffer.usedBytes === buffer.byteLength) {\n\t\t\tLog.debug(\"MultiBufferStream\", \"Removing buffer #\"+i);\n\t\t\tthis.buffers.splice(i, 1);\n\t\t\ti--;\n\t\t}\n\t}\n}\n\nMultiBufferStream.prototype.mergeNextBuffer = function() {\n\tvar next_buffer;\n\tif (this.bufferIndex+1 < this.buffers.length) {\n\t\tnext_buffer = this.buffers[this.bufferIndex+1];\n\t\tif (next_buffer.fileStart === this.buffer.fileStart + this.buffer.byteLength) {\n\t\t\tvar oldLength = this.buffer.byteLength;\n\t\t\tvar oldUsedBytes = this.buffer.usedBytes;\n\t\t\tvar oldFileStart = this.buffer.fileStart;\n\t\t\tthis.buffers[this.bufferIndex] = ArrayBuffer.concat(this.buffer, next_buffer);\n\t\t\tthis.buffer = this.buffers[this.bufferIndex];\n\t\t\tthis.buffers.splice(this.bufferIndex+1, 1);\n\t\t\tthis.buffer.usedBytes = oldUsedBytes; /* TODO: should it be += ? */\n\t\t\tthis.buffer.fileStart = oldFileStart;\n\t\t\tLog.debug(\"ISOFile\", \"Concatenating buffer for box parsing (length: \"+oldLength+\"->\"+this.buffer.byteLength+\")\");\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n}\n\n\n/*************************************************************************\n Seek-related functions\n *************************************************************************/\n\n/**\n * Finds the buffer that holds the given file position\n * @param {Boolean} fromStart indicates if the search should start from the current buffer (false) \n * or from the first buffer (true)\n * @param {Number} filePosition position in the file to seek to\n * @param {Boolean} markAsUsed indicates if the bytes in between the current position and the seek position \n * should be marked as used for garbage collection\n * @return {Number} the index of the buffer holding the seeked file position, -1 if not found.\n */\nMultiBufferStream.prototype.findPosition = function(fromStart, filePosition, markAsUsed) {\n\tvar i;\n\tvar abuffer = null;\n\tvar index = -1;\n\n\t/* find the buffer with the largest position smaller than the given position */\n\tif (fromStart === true) {\n\t /* the reposition can be in the past, we need to check from the beginning of the list of buffers */\n\t\ti = 0;\n\t} else {\n\t\ti = this.bufferIndex;\n\t}\n\n\twhile (i < this.buffers.length) {\n\t\tabuffer = this.buffers[i];\n\t\tif (abuffer.fileStart <= filePosition) {\n\t\t\tindex = i;\n\t\t\tif (markAsUsed) {\n\t\t\t\tif (abuffer.fileStart + abuffer.byteLength <= filePosition) {\n\t\t\t\t\tabuffer.usedBytes = abuffer.byteLength;\t\n\t\t\t\t} else {\n\t\t\t\t\tabuffer.usedBytes = filePosition - abuffer.fileStart;\n\t\t\t\t}\t\t\n\t\t\t\tthis.logBufferLevel();\t\n\t\t\t}\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t\ti++;\n\t}\n\n\tif (index !== -1) {\n\t\tabuffer = this.buffers[index];\n\t\tif (abuffer.fileStart + abuffer.byteLength >= filePosition) {\t\t\t\n\t\t\tLog.debug(\"MultiBufferStream\", \"Found position in existing buffer #\"+index);\n\t\t\treturn index;\n\t\t} else {\n\t\t\treturn -1;\n\t\t}\n\t} else {\n\t\treturn -1;\n\t}\n}\n\n/**\n * Finds the largest file position contained in a buffer or in the next buffers if they are contiguous (no gap)\n * starting from the given buffer index or from the current buffer if the index is not given\n *\n * @param {Number} inputindex Index of the buffer to start from\n * @return {Number} The largest file position found in the buffers\n */\nMultiBufferStream.prototype.findEndContiguousBuf = function(inputindex) {\n\tvar i;\n\tvar currentBuf;\n\tvar nextBuf;\n\tvar index = (inputindex !== undefined ? inputindex : this.bufferIndex);\n\tcurrentBuf = this.buffers[index];\n\t/* find the end of the contiguous range of data */\n\tif (this.buffers.length > index+1) {\n\t\tfor (i = index+1; i < this.buffers.length; i++) {\n\t\t\tnextBuf = this.buffers[i];\n\t\t\tif (nextBuf.fileStart === currentBuf.fileStart + currentBuf.byteLength) {\n\t\t\t\tcurrentBuf = nextBuf;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t/* return the position of last byte in the file that we have */\n\treturn currentBuf.fileStart + currentBuf.byteLength;\n}\n\n/**\n * Returns the largest file position contained in the buffers, larger than the given position\n * @param {Number} pos the file position to start from\n * @return {Number} the largest position in the current buffer or in the buffer and the next contiguous \n * buffer that holds the given position\n */\nMultiBufferStream.prototype.getEndFilePositionAfter = function(pos) {\n\tvar index = this.findPosition(true, pos, false);\n\tif (index !== -1) {\n\t\treturn this.findEndContiguousBuf(index);\n\t} else {\n\t\treturn pos;\n\t}\n}\n\n/*************************************************************************\n Garbage collection related functions\n *************************************************************************/\n\n/**\n * Marks a given number of bytes as used in the current buffer for garbage collection\n * @param {Number} nbBytes \n */\nMultiBufferStream.prototype.addUsedBytes = function(nbBytes) {\n\tthis.buffer.usedBytes += nbBytes;\n\tthis.logBufferLevel();\n}\n\n/**\n * Marks the entire current buffer as used, ready for garbage collection\n */\nMultiBufferStream.prototype.setAllUsedBytes = function() {\n\tthis.buffer.usedBytes = this.buffer.byteLength;\n\tthis.logBufferLevel();\n}\n\n/*************************************************************************\n Common API between MultiBufferStream and SimpleStream\n *************************************************************************/\n\n/**\n * Tries to seek to a given file position\n * if possible, repositions the parsing from there and returns true \n * if not possible, does not change anything and returns false \n * @param {Number} filePosition position in the file to seek to\n * @param {Boolean} fromStart indicates if the search should start from the current buffer (false) \n * or from the first buffer (true)\n * @param {Boolean} markAsUsed indicates if the bytes in between the current position and the seek position \n * should be marked as used for garbage collection\n * @return {Boolean} true if the seek succeeded, false otherwise\n */\nMultiBufferStream.prototype.seek = function(filePosition, fromStart, markAsUsed) {\n\tvar index;\n\tindex = this.findPosition(fromStart, filePosition, markAsUsed);\n\tif (index !== -1) {\n\t\tthis.buffer = this.buffers[index];\n\t\tthis.bufferIndex = index;\n\t\tthis.position = filePosition - this.buffer.fileStart;\n\t\tLog.debug(\"MultiBufferStream\", \"Repositioning parser at buffer position: \"+this.position);\n\t\treturn true;\n\t} else {\n\t\tLog.debug(\"MultiBufferStream\", \"Position \"+filePosition+\" not found in buffered data\");\n\t\treturn false;\n\t}\n}\n\n/**\n * Returns the current position in the file\n * @return {Number} the position in the file\n */\nMultiBufferStream.prototype.getPosition = function() {\n\tif (this.bufferIndex === -1 || this.buffers[this.bufferIndex] === null) {\n\t\tthrow \"Error accessing position in the MultiBufferStream\";\n\t}\n\treturn this.buffers[this.bufferIndex].fileStart+this.position;\n}\n\n/**\n * Returns the length of the current buffer\n * @return {Number} the length of the current buffer\n */\nMultiBufferStream.prototype.getLength = function() {\n\treturn this.byteLength;\n}\n\nMultiBufferStream.prototype.getEndPosition = function() {\n\tif (this.bufferIndex === -1 || this.buffers[this.bufferIndex] === null) {\n\t\tthrow \"Error accessing position in the MultiBufferStream\";\n\t}\n\treturn this.buffers[this.bufferIndex].fileStart+this.byteLength;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.MultiBufferStream = MultiBufferStream;\n}// file:src/descriptor.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar MPEG4DescriptorParser = function () {\n\tvar ES_DescrTag \t\t\t= 0x03;\n\tvar DecoderConfigDescrTag \t= 0x04;\n\tvar DecSpecificInfoTag \t\t= 0x05;\n\tvar SLConfigDescrTag \t\t= 0x06;\n\n\tvar descTagToName = [];\n\tdescTagToName[ES_DescrTag] \t\t\t\t= \"ES_Descriptor\";\n\tdescTagToName[DecoderConfigDescrTag] \t= \"DecoderConfigDescriptor\";\n\tdescTagToName[DecSpecificInfoTag] \t\t= \"DecoderSpecificInfo\";\n\tdescTagToName[SLConfigDescrTag] \t\t= \"SLConfigDescriptor\";\n\n\tthis.getDescriptorName = function(tag) {\n\t\treturn descTagToName[tag];\n\t}\n\n\tvar that = this;\n\tvar classes = {};\n\n\tthis.parseOneDescriptor = function (stream) {\n\t\tvar hdrSize = 0;\n\t\tvar size = 0;\n\t\tvar tag;\n\t\tvar desc;\n\t\tvar byteRead;\n\t\ttag = stream.readUint8();\n\t\thdrSize++;\n\t\tbyteRead = stream.readUint8();\n\t\thdrSize++;\n\t\twhile (byteRead & 0x80) {\n\t\t\tsize = (size << 7) + (byteRead & 0x7F);\n\t\t\tbyteRead = stream.readUint8();\n\t\t\thdrSize++;\n\t\t}\n\t\tsize = (size << 7) + (byteRead & 0x7F);\n\t\tLog.debug(\"MPEG4DescriptorParser\", \"Found \"+(descTagToName[tag] || \"Descriptor \"+tag)+\", size \"+size+\" at position \"+stream.getPosition());\n\t\tif (descTagToName[tag]) {\n\t\t\tdesc = new classes[descTagToName[tag]](size);\n\t\t} else {\n\t\t\tdesc = new classes.Descriptor(size);\n\t\t}\n\t\tdesc.parse(stream);\n\t\treturn desc;\n\t}\n\n\tclasses.Descriptor = function(_tag, _size) {\n\t\tthis.tag = _tag;\n\t\tthis.size = _size;\n\t\tthis.descs = [];\n\t}\n\n\tclasses.Descriptor.prototype.parse = function (stream) {\n\t\tthis.data = stream.readUint8Array(this.size);\n\t}\n\n\tclasses.Descriptor.prototype.findDescriptor = function (tag) {\n\t\tfor (var i = 0; i < this.descs.length; i++) {\n\t\t\tif (this.descs[i].tag == tag) {\n\t\t\t\treturn this.descs[i];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tclasses.Descriptor.prototype.parseRemainingDescriptors = function (stream) {\n\t\tvar start = stream.position;\n\t\twhile (stream.position < start+this.size) {\n\t\t\tvar desc = that.parseOneDescriptor(stream);\n\t\t\tthis.descs.push(desc);\n\t\t}\n\t}\n\n\tclasses.ES_Descriptor = function (size) {\n\t\tclasses.Descriptor.call(this, ES_DescrTag, size);\n\t}\n\n\tclasses.ES_Descriptor.prototype = new classes.Descriptor();\n\n\tclasses.ES_Descriptor.prototype.parse = function(stream) {\n\t\tthis.ES_ID = stream.readUint16();\n\t\tthis.flags = stream.readUint8();\n\t\tthis.size -= 3;\n\t\tif (this.flags & 0x80) {\n\t\t\tthis.dependsOn_ES_ID = stream.readUint16();\n\t\t\tthis.size -= 2;\n\t\t} else {\n\t\t\tthis.dependsOn_ES_ID = 0;\n\t\t}\n\t\tif (this.flags & 0x40) {\n\t\t\tvar l = stream.readUint8();\n\t\t\tthis.URL = stream.readString(l);\n\t\t\tthis.size -= l+1;\n\t\t} else {\n\t\t\tthis.URL = \"\";\n\t\t}\n\t\tif (this.flags & 0x20) {\n\t\t\tthis.OCR_ES_ID = stream.readUint16();\n\t\t\tthis.size -= 2;\n\t\t} else {\n\t\t\tthis.OCR_ES_ID = 0;\n\t\t}\n\t\tthis.parseRemainingDescriptors(stream);\n\t}\n\n\tclasses.ES_Descriptor.prototype.getOTI = function(stream) {\n\t\tvar dcd = this.findDescriptor(DecoderConfigDescrTag);\n\t\tif (dcd) {\n\t\t\treturn dcd.oti;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tclasses.ES_Descriptor.prototype.getAudioConfig = function(stream) {\n\t\tvar dcd = this.findDescriptor(DecoderConfigDescrTag);\n\t\tif (!dcd) return null;\n\t\tvar dsi = dcd.findDescriptor(DecSpecificInfoTag);\n\t\tif (dsi && dsi.data) {\n\t\t\tvar audioObjectType = (dsi.data[0]& 0xF8) >> 3;\n\t\t\tif (audioObjectType === 31 && dsi.data.length >= 2) {\n\t\t\t\taudioObjectType = 32 + ((dsi.data[0] & 0x7) << 3) + ((dsi.data[1] & 0xE0) >> 5);\n\t\t\t}\n\t\t\treturn audioObjectType;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tclasses.DecoderConfigDescriptor = function (size) {\n\t\tclasses.Descriptor.call(this, DecoderConfigDescrTag, size);\n\t}\n\tclasses.DecoderConfigDescriptor.prototype = new classes.Descriptor();\n\n\tclasses.DecoderConfigDescriptor.prototype.parse = function(stream) {\n\t\tthis.oti = stream.readUint8();\n\t\tthis.streamType = stream.readUint8();\n\t\tthis.upStream = ((this.streamType >> 1) & 1) !== 0;\n\t\tthis.streamType = this.streamType >>> 2;\n\t\tthis.bufferSize = stream.readUint24();\n\t\tthis.maxBitrate = stream.readUint32();\n\t\tthis.avgBitrate = stream.readUint32();\n\t\tthis.size -= 13;\n\t\tthis.parseRemainingDescriptors(stream);\n\t}\n\n\tclasses.DecoderSpecificInfo = function (size) {\n\t\tclasses.Descriptor.call(this, DecSpecificInfoTag, size);\n\t}\n\tclasses.DecoderSpecificInfo.prototype = new classes.Descriptor();\n\n\tclasses.SLConfigDescriptor = function (size) {\n\t\tclasses.Descriptor.call(this, SLConfigDescrTag, size);\n\t}\n\tclasses.SLConfigDescriptor.prototype = new classes.Descriptor();\n\n\treturn this;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.MPEG4DescriptorParser = MPEG4DescriptorParser;\n}\n// file:src/box.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar BoxParser = {\n\tERR_INVALID_DATA : -1,\n\tERR_NOT_ENOUGH_DATA : 0,\n\tOK : 1,\n\n\t// Boxes to be created with default parsing\n\tBASIC_BOXES: [\n\t\t{type: \"mdat\", name: \"MediaDataBox\"},\n\t\t{type: \"idat\", name: \"ItemDataBox\"},\n\t\t{type: \"free\", name: \"FreeSpaceBox\"},\n\t\t{type: \"skip\", name: \"FreeSpaceBox\"},\n\t\t{type: \"meco\", name: \"AdditionalMetadataContainerBox\"},\n\t\t{type: \"strk\", name: \"SubTrackBox\"}\n\t],\n\tFULL_BOXES: [\n\t\t{type: \"hmhd\", name: \"HintMediaHeaderBox\"},\n\t\t{type: \"nmhd\", name: \"NullMediaHeaderBox\"},\n\t\t{type: \"iods\", name: \"ObjectDescriptorBox\"},\n\t\t{type: \"xml \", name: \"XMLBox\"},\n\t\t{type: \"bxml\", name: \"BinaryXMLBox\"},\n\t\t{type: \"ipro\", name: \"ItemProtectionBox\"},\n\t\t{type: \"mere\", name: \"MetaboxRelationBox\"}\n\t],\n\tCONTAINER_BOXES: [\n\t\t[{type: \"moov\", name: \"CompressedMovieBox\"}, [\"trak\", \"pssh\"]],\n\t\t[{type: \"trak\", name: \"TrackBox\"}],\n\t\t[{type: \"edts\", name: \"EditBox\"}],\n\t\t[{type: \"mdia\", name: \"MediaBox\"}],\n\t\t[{type: \"minf\", name: \"MediaInformationBox\"}],\n\t\t[{type: \"dinf\", name: \"DataInformationBox\"}],\n\t\t[{type: \"stbl\", name: \"SampleTableBox\"}, [\"sgpd\", \"sbgp\"]],\n\t\t[{type: \"mvex\", name: \"MovieExtendsBox\"}, [\"trex\"]],\n\t\t[{type: \"moof\", name: \"CompressedMovieFragmentBox\"}, [\"traf\"]],\n\t\t[{type: \"traf\", name: \"TrackFragmentBox\"}, [\"trun\", \"sgpd\", \"sbgp\"]],\n\t\t[{type: \"vttc\", name: \"VTTCueBox\"}],\n\t\t[{type: \"tref\", name: \"TrackReferenceBox\"}],\n\t\t[{type: \"iref\", name: \"ItemReferenceBox\"}],\n\t\t[{type: \"mfra\", name: \"MovieFragmentRandomAccessBox\"}, [\"tfra\"]],\n\t\t[{type: \"meco\", name: \"AdditionalMetadataContainerBox\"}],\n\t\t[{type: \"hnti\", name: \"trackhintinformation\"}],\n\t\t[{type: \"hinf\", name: \"hintstatisticsbox\"}],\n\t\t[{type: \"strk\", name: \"SubTrackBox\"}],\n\t\t[{type: \"strd\", name: \"SubTrackDefinitionBox\"}],\n\t\t[{type: \"sinf\", name: \"ProtectionSchemeInfoBox\"}],\n\t\t[{type: \"rinf\", name: \"RestrictedSchemeInfoBox\"}],\n\t\t[{type: \"schi\", name: \"SchemeInformationBox\"}],\n\t\t[{type: \"trgr\", name: \"TrackGroupBox\"}],\n\t\t[{type: \"udta\", name: \"UserDataBox\"}, [\"kind\"]],\n\t\t[{type: \"iprp\", name: \"ItemPropertiesBox\"}, [\"ipma\"]],\n\t\t[{type: \"ipco\", name: \"ItemPropertyContainerBox\"}],\n\t\t[{type: \"grpl\", name: \"GroupsListBox\"}],\n\t\t[{type: \"j2kH\", name: \"J2KHeaderInfoBox\"}],\n\t\t[{type: \"etyp\", name: \"ExtendedTypeBox\"}, [\"tyco\"]]\n\t],\n\t// Boxes effectively created\n\tboxCodes : [],\n\tfullBoxCodes : [],\n\tcontainerBoxCodes : [],\n\tsampleEntryCodes : {},\n\tsampleGroupEntryCodes: [],\n\ttrackGroupTypes: [],\n\tUUIDBoxes: {},\n\tUUIDs: [],\n\tinitialize: function() {\n\t\tBoxParser.FullBox.prototype = new BoxParser.Box();\n\t\tBoxParser.ContainerBox.prototype = new BoxParser.Box();\n\t\tBoxParser.SampleEntry.prototype = new BoxParser.Box();\n\t\tBoxParser.TrackGroupTypeBox.prototype = new BoxParser.FullBox();\n\n\t\t/* creating constructors for simple boxes */\n\t\tBoxParser.BASIC_BOXES.forEach(function(box) {\n\t\t\tBoxParser.createBoxCtor(box.type, box.name)\n\t\t});\n\t\tBoxParser.FULL_BOXES.forEach(function(box) {\n\t\t\tBoxParser.createFullBoxCtor(box.type, box.name);\n\t\t});\n\t\tBoxParser.CONTAINER_BOXES.forEach(function(boxes) {\n\t\t\tBoxParser.createContainerBoxCtor(boxes[0].type, boxes[0].name, null, boxes[1]);\n\t\t});\n\t},\n\tBox: function(_type, _size, _name, _uuid) {\n\t\tthis.type = _type;\n\t\tthis.box_name = _name;\n\t\tthis.size = _size;\n\t\tthis.uuid = _uuid;\n\t},\n\tFullBox: function(type, size, name, uuid) {\n\t\tBoxParser.Box.call(this, type, size, name, uuid);\n\t\tthis.flags = 0;\n\t\tthis.version = 0;\n\t},\n\tContainerBox: function(type, size, name, uuid) {\n\t\tBoxParser.Box.call(this, type, size, name, uuid);\n\t\tthis.boxes = [];\n\t},\n\tSampleEntry: function(type, size, hdr_size, start) {\n\t\tBoxParser.ContainerBox.call(this, type, size);\n\t\tthis.hdr_size = hdr_size;\n\t\tthis.start = start;\n\t},\n\tSampleGroupEntry: function(type) {\n\t\tthis.grouping_type = type;\n\t},\n\tTrackGroupTypeBox: function(type, size) {\n\t\tBoxParser.FullBox.call(this, type, size);\n\t},\n\tcreateBoxCtor: function(type, name, parseMethod){\n\t\tBoxParser.boxCodes.push(type);\n\t\tBoxParser[type+\"Box\"] = function(size) {\n\t\t\tBoxParser.Box.call(this, type, size, name);\n\t\t}\n\t\tBoxParser[type+\"Box\"].prototype = new BoxParser.Box();\n\t\tif (parseMethod) BoxParser[type+\"Box\"].prototype.parse = parseMethod;\n\t},\n\tcreateFullBoxCtor: function(type, name, parseMethod) {\n\t\t//BoxParser.fullBoxCodes.push(type);\n\t\tBoxParser[type+\"Box\"] = function(size) {\n\t\t\tBoxParser.FullBox.call(this, type, size, name);\n\t\t}\n\t\tBoxParser[type+\"Box\"].prototype = new BoxParser.FullBox();\n\t\tBoxParser[type+\"Box\"].prototype.parse = function(stream) {\n\t\t\tthis.parseFullHeader(stream);\n\t\t\tif (parseMethod) {\n\t\t\t\tparseMethod.call(this, stream);\n\t\t\t}\n\t\t};\n\t},\n\taddSubBoxArrays: function(subBoxNames) {\n\t\tif (subBoxNames) {\n\t\t\tthis.subBoxNames = subBoxNames;\n\t\t\tvar nbSubBoxes = subBoxNames.length;\n\t\t\tfor (var k = 0; k<nbSubBoxes; k++) {\n\t\t\t\tthis[subBoxNames[k]+\"s\"] = [];\n\t\t\t}\n\t\t}\n\t},\n\tcreateContainerBoxCtor: function(type, name, parseMethod, subBoxNames) {\n\t\t//BoxParser.containerBoxCodes.push(type);\n\t\tBoxParser[type+\"Box\"] = function(size) {\n\t\t\tBoxParser.ContainerBox.call(this, type, size, name);\n\t\t\tBoxParser.addSubBoxArrays.call(this, subBoxNames);\n\t\t}\n\t\tBoxParser[type+\"Box\"].prototype = new BoxParser.ContainerBox();\n\t\tif (parseMethod) BoxParser[type+\"Box\"].prototype.parse = parseMethod;\n\t},\n\tcreateMediaSampleEntryCtor: function(mediaType, parseMethod, subBoxNames) {\n\t\tBoxParser.sampleEntryCodes[mediaType] = [];\n\t\tBoxParser[mediaType+\"SampleEntry\"] = function(type, size) {\n\t\t\tBoxParser.SampleEntry.call(this, type, size);\n\t\t\tBoxParser.addSubBoxArrays.call(this, subBoxNames);\n\t\t};\n\t\tBoxParser[mediaType+\"SampleEntry\"].prototype = new BoxParser.SampleEntry();\n\t\tif (parseMethod) BoxParser[mediaType+\"SampleEntry\"].prototype .parse = parseMethod;\n\t},\n\tcreateSampleEntryCtor: function(mediaType, type, parseMethod, subBoxNames) {\n\t\tBoxParser.sampleEntryCodes[mediaType].push(type);\n\t\tBoxParser[type+\"SampleEntry\"] = function(size) {\n\t\t\tBoxParser[mediaType+\"SampleEntry\"].call(this, type, size);\n\t\t\tBoxParser.addSubBoxArrays.call(this, subBoxNames);\n\t\t};\n\t\tBoxParser[type+\"SampleEntry\"].prototype = new BoxParser[mediaType+\"SampleEntry\"]();\n\t\tif (parseMethod) BoxParser[type+\"SampleEntry\"].prototype.parse = parseMethod;\n\t},\n\tcreateEncryptedSampleEntryCtor: function(mediaType, type, parseMethod) {\n\t\tBoxParser.createSampleEntryCtor.call(this, mediaType, type, parseMethod, [\"sinf\"]);\n\t},\n\tcreateSampleGroupCtor: function(type, parseMethod) {\n\t\t//BoxParser.sampleGroupEntryCodes.push(type);\n\t\tBoxParser[type+\"SampleGroupEntry\"] = function(size) {\n\t\t\tBoxParser.SampleGroupEntry.call(this, type, size);\n\t\t}\n\t\tBoxParser[type+\"SampleGroupEntry\"].prototype = new BoxParser.SampleGroupEntry();\n\t\tif (parseMethod) BoxParser[type+\"SampleGroupEntry\"].prototype.parse = parseMethod;\n\t},\n\tcreateTrackGroupCtor: function(type, parseMethod) {\n\t\t//BoxParser.trackGroupTypes.push(type);\n\t\tBoxParser[type+\"TrackGroupTypeBox\"] = function(size) {\n\t\t\tBoxParser.TrackGroupTypeBox.call(this, type, size);\n\t\t}\n\t\tBoxParser[type+\"TrackGroupTypeBox\"].prototype = new BoxParser.TrackGroupTypeBox();\n\t\tif (parseMethod) BoxParser[type+\"TrackGroupTypeBox\"].prototype.parse = parseMethod;\n\t},\n\tcreateUUIDBox: function(uuid, name, isFullBox, isContainerBox, parseMethod) {\n\t\tBoxParser.UUIDs.push(uuid);\n\t\tBoxParser.UUIDBoxes[uuid] = function(size) {\n\t\t\tif (isFullBox) {\n\t\t\t\tBoxParser.FullBox.call(this, \"uuid\", size, name, uuid);\n\t\t\t} else {\n\t\t\t\tif (isContainerBox) {\n\t\t\t\t\tBoxParser.ContainerBox.call(this, \"uuid\", size, name, uuid);\n\t\t\t\t} else {\n\t\t\t\t\tBoxParser.Box.call(this, \"uuid\", size, name, uuid);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tBoxParser.UUIDBoxes[uuid].prototype = (isFullBox ? new BoxParser.FullBox() : (isContainerBox ? new BoxParser.ContainerBox() : new BoxParser.Box()));\n\t\tif (parseMethod) {\n\t\t\tif (isFullBox) {\n\t\t\t\tBoxParser.UUIDBoxes[uuid].prototype.parse = function(stream) {\n\t\t\t\t\tthis.parseFullHeader(stream);\n\t\t\t\t\tif (parseMethod) {\n\t\t\t\t\t\tparseMethod.call(this, stream);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tBoxParser.UUIDBoxes[uuid].prototype.parse = parseMethod;\n\t\t\t}\n\t\t}\n\t}\n}\n\nBoxParser.initialize();\n\nBoxParser.TKHD_FLAG_ENABLED = 0x000001;\nBoxParser.TKHD_FLAG_IN_MOVIE = 0x000002;\nBoxParser.TKHD_FLAG_IN_PREVIEW = 0x000004;\n\nBoxParser.TFHD_FLAG_BASE_DATA_OFFSET\t= 0x01;\nBoxParser.TFHD_FLAG_SAMPLE_DESC\t\t\t= 0x02;\nBoxParser.TFHD_FLAG_SAMPLE_DUR\t\t\t= 0x08;\nBoxParser.TFHD_FLAG_SAMPLE_SIZE\t\t\t= 0x10;\nBoxParser.TFHD_FLAG_SAMPLE_FLAGS\t\t= 0x20;\nBoxParser.TFHD_FLAG_DUR_EMPTY\t\t\t= 0x10000;\nBoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF= 0x20000;\n\nBoxParser.TRUN_FLAGS_DATA_OFFSET= 0x01;\nBoxParser.TRUN_FLAGS_FIRST_FLAG\t= 0x04;\nBoxParser.TRUN_FLAGS_DURATION\t= 0x100;\nBoxParser.TRUN_FLAGS_SIZE\t\t= 0x200;\nBoxParser.TRUN_FLAGS_FLAGS\t\t= 0x400;\nBoxParser.TRUN_FLAGS_CTS_OFFSET\t= 0x800;\n\nBoxParser.Box.prototype.add = function(name) {\n\treturn this.addBox(new BoxParser[name+\"Box\"]());\n}\n\nBoxParser.Box.prototype.addBox = function(box) {\n\tthis.boxes.push(box);\n\tif (this[box.type+\"s\"]) {\n\t\tthis[box.type+\"s\"].push(box);\n\t} else {\n\t\tthis[box.type] = box;\n\t}\n\treturn box;\n}\n\nBoxParser.Box.prototype.set = function(prop, value) {\n\tthis[prop] = value;\n\treturn this;\n}\n\nBoxParser.Box.prototype.addEntry = function(value, _prop) {\n\tvar prop = _prop || \"entries\";\n\tif (!this[prop]) {\n\t\tthis[prop] = [];\n\t}\n\tthis[prop].push(value);\n\treturn this;\n}\n\nif (typeof exports !== \"undefined\") {\n\texports.BoxParser = BoxParser;\n}\n// file:src/box-parse.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.parseUUID = function(stream) {\n\treturn BoxParser.parseHex16(stream);\n}\n\nBoxParser.parseHex16 = function(stream) {\n\tvar hex16 = \"\"\n\tfor (var i = 0; i <16; i++) {\n\t\tvar hex = stream.readUint8().toString(16);\n\t\thex16 += (hex.length === 1 ? \"0\"+hex : hex);\n\t}\n\treturn hex16;\n}\n\nBoxParser.parseOneBox = function(stream, headerOnly, parentSize) {\n\tvar box;\n\tvar start = stream.getPosition();\n\tvar hdr_size = 0;\n\tvar diff;\n\tvar uuid;\n\tif (stream.getEndPosition() - start < 8) {\n\t\tLog.debug(\"BoxParser\", \"Not enough data in stream to parse the type and size of the box\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA };\n\t}\n\tif (parentSize && parentSize < 8) {\n\t\tLog.debug(\"BoxParser\", \"Not enough bytes left in the parent box to parse a new box\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA };\n\t}\n\tvar size = stream.readUint32();\n\tvar type = stream.readString(4);\n\tvar box_type = type;\n\tLog.debug(\"BoxParser\", \"Found box of type '\"+type+\"' and size \"+size+\" at position \"+start);\n\thdr_size = 8;\n\tif (type == \"uuid\") {\n\t\tif ((stream.getEndPosition() - stream.getPosition() < 16) || (parentSize -hdr_size < 16)) {\n\t\t\tstream.seek(start);\n\t\t\tLog.debug(\"BoxParser\", \"Not enough bytes left in the parent box to parse a UUID box\");\n\t\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA };\n\t\t}\n\t\tuuid = BoxParser.parseUUID(stream);\n\t\thdr_size += 16;\n\t\tbox_type = uuid;\n\t}\n\tif (size == 1) {\n\t\tif ((stream.getEndPosition() - stream.getPosition() < 8) || (parentSize && (parentSize - hdr_size) < 8)) {\n\t\t\tstream.seek(start);\n\t\t\tLog.warn(\"BoxParser\", \"Not enough data in stream to parse the extended size of the \\\"\"+type+\"\\\" box\");\n\t\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA };\n\t\t}\n\t\tsize = stream.readUint64();\n\t\thdr_size += 8;\n\t} else if (size === 0) {\n\t\t/* box extends till the end of file or invalid file */\n\t\tif (parentSize) {\n\t\t\tsize = parentSize;\n\t\t} else {\n\t\t\t/* box extends till the end of file */\n\t\t\tif (type !== \"mdat\") {\n\t\t\t\tLog.error(\"BoxParser\", \"Unlimited box size not supported for type: '\"+type+\"'\");\n\t\t\t\tbox = new BoxParser.Box(type, size);\n\t\t\t\treturn { code: BoxParser.OK, box: box, size: box.size };\n\t\t\t}\n\t\t}\n\t}\n\tif (size !== 0 && size < hdr_size) {\n\t\tLog.error(\"BoxParser\", \"Box of type \"+type+\" has an invalid size \"+size+\" (too small to be a box)\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA, type: type, size: size, hdr_size: hdr_size, start: start };\n\t}\n\tif (size !== 0 && parentSize && size > parentSize) {\n\t\tLog.error(\"BoxParser\", \"Box of type '\"+type+\"' has a size \"+size+\" greater than its container size \"+parentSize);\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA, type: type, size: size, hdr_size: hdr_size, start: start };\n\t}\n\tif (size !== 0 && start + size > stream.getEndPosition()) {\n\t\tstream.seek(start);\n\t\tLog.info(\"BoxParser\", \"Not enough data in stream to parse the entire '\"+type+\"' box\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA, type: type, size: size, hdr_size: hdr_size, start: start };\n\t}\n\tif (headerOnly) {\n\t\treturn { code: BoxParser.OK, type: type, size: size, hdr_size: hdr_size, start: start };\n\t} else {\n\t\tif (BoxParser[type+\"Box\"]) {\n\t\t\tbox = new BoxParser[type+\"Box\"](size);\n\t\t} else {\n\t\t\tif (type !== \"uuid\") {\n\t\t\t\tLog.warn(\"BoxParser\", \"Unknown box type: '\"+type+\"'\");\n\t\t\t\tbox = new BoxParser.Box(type, size);\n\t\t\t\tbox.has_unparsed_data = true;\n\t\t\t} else {\n\t\t\t\tif (BoxParser.UUIDBoxes[uuid]) {\n\t\t\t\t\tbox = new BoxParser.UUIDBoxes[uuid](size);\n\t\t\t\t} else {\n\t\t\t\t\tLog.warn(\"BoxParser\", \"Unknown uuid type: '\"+uuid+\"'\");\n\t\t\t\t\tbox = new BoxParser.Box(type, size);\n\t\t\t\t\tbox.uuid = uuid;\n\t\t\t\t\tbox.has_unparsed_data = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tbox.hdr_size = hdr_size;\n\t/* recording the position of the box in the input stream */\n\tbox.start = start;\n\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\tLog.info(\"BoxParser\", \"'\"+box_type+\"' box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\tbox.parseDataAndRewind(stream);\n\t}\n\tbox.parse(stream);\n\tdiff = stream.getPosition() - (box.start+box.size);\n\tif (diff < 0) {\n\t\tLog.warn(\"BoxParser\", \"Parsing of box '\"+box_type+\"' did not read the entire indicated box data size (missing \"+(-diff)+\" bytes), seeking forward\");\n\t\tstream.seek(box.start+box.size);\n\t} else if (diff > 0) {\n\t\tLog.error(\"BoxParser\", \"Parsing of box '\"+box_type+\"' read \"+diff+\" more bytes than the indicated box data size, seeking backwards\");\n\t\tif (box.size !== 0) stream.seek(box.start+box.size);\n\t}\n\treturn { code: BoxParser.OK, box: box, size: box.size };\n}\n\nBoxParser.Box.prototype.parse = function(stream) {\n\tif (this.type != \"mdat\") {\n\t\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t} else {\n\t\tif (this.size === 0) {\n\t\t\tstream.seek(stream.getEndPosition());\n\t\t} else {\n\t\t\tstream.seek(this.start+this.size);\n\t\t}\n\t}\n}\n\n/* Used to parse a box without consuming its data, to allow detailled parsing\n Useful for boxes for which a write method is not yet implemented */\nBoxParser.Box.prototype.parseDataAndRewind = function(stream) {\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.FullBox.prototype.parseDataAndRewind = function(stream) {\n\tthis.parseFullHeader(stream);\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t// restore the header size as if the full header had not been parsed\n\tthis.hdr_size -= 4;\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.FullBox.prototype.parseFullHeader = function (stream) {\n\tthis.version = stream.readUint8();\n\tthis.flags = stream.readUint24();\n\tthis.hdr_size += 4;\n}\n\nBoxParser.FullBox.prototype.parse = function (stream) {\n\tthis.parseFullHeader(stream);\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n}\n\nBoxParser.ContainerBox.prototype.parse = function(stream) {\n\tvar ret;\n\tvar box;\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\t/* store the box in the 'boxes' array to preserve box order (for offset) but also store box in a property for more direct access */\n\t\t\tthis.boxes.push(box);\n\t\t\tif (this.subBoxNames && this.subBoxNames.indexOf(box.type) != -1) {\n\t\t\t\tthis[this.subBoxNames[this.subBoxNames.indexOf(box.type)]+\"s\"].push(box);\n\t\t\t} else {\n\t\t\t\tvar box_type = box.type !== \"uuid\" ? box.type : box.uuid;\n\t\t\t\tif (this[box_type]) {\n\t\t\t\t\tLog.warn(\"Box of type \"+box_type+\" already stored in field of this type\");\n\t\t\t\t} else {\n\t\t\t\t\tthis[box_type] = box;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n}\n\nBoxParser.Box.prototype.parseLanguage = function(stream) {\n\tthis.language = stream.readUint16();\n\tvar chars = [];\n\tchars[0] = (this.language>>10)&0x1F;\n\tchars[1] = (this.language>>5)&0x1F;\n\tchars[2] = (this.language)&0x1F;\n\tthis.languageString = String.fromCharCode(chars[0]+0x60, chars[1]+0x60, chars[2]+0x60);\n}\n\n// file:src/parsing/sampleentries/sampleentry.js\nBoxParser.SAMPLE_ENTRY_TYPE_VISUAL \t\t= \"Visual\";\nBoxParser.SAMPLE_ENTRY_TYPE_AUDIO \t\t= \"Audio\";\nBoxParser.SAMPLE_ENTRY_TYPE_HINT \t\t= \"Hint\";\nBoxParser.SAMPLE_ENTRY_TYPE_METADATA \t= \"Metadata\";\nBoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE \t= \"Subtitle\";\nBoxParser.SAMPLE_ENTRY_TYPE_SYSTEM \t\t= \"System\";\nBoxParser.SAMPLE_ENTRY_TYPE_TEXT \t\t= \"Text\";\n\nBoxParser.SampleEntry.prototype.parseHeader = function(stream) {\n\tstream.readUint8Array(6);\n\tthis.data_reference_index = stream.readUint16();\n\tthis.hdr_size += 8;\n}\n\nBoxParser.SampleEntry.prototype.parse = function(stream) {\n\tthis.parseHeader(stream);\n\tthis.data = stream.readUint8Array(this.size - this.hdr_size);\n}\n\nBoxParser.SampleEntry.prototype.parseDataAndRewind = function(stream) {\n\tthis.parseHeader(stream);\n\tthis.data = stream.readUint8Array(this.size - this.hdr_size);\n\t// restore the header size as if the sample entry header had not been parsed\n\tthis.hdr_size -= 8;\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.SampleEntry.prototype.parseFooter = function(stream) {\n\tBoxParser.ContainerBox.prototype.parse.call(this, stream);\n}\n\n// Base SampleEntry types with default parsing\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_HINT);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SYSTEM);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_TEXT);\n\n//Base SampleEntry types for Audio and Video with specific parsing\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, function(stream) {\n\tvar compressorname_length;\n\tthis.parseHeader(stream);\n\tstream.readUint16();\n\tstream.readUint16();\n\tstream.readUint32Array(3);\n\tthis.width = stream.readUint16();\n\tthis.height = stream.readUint16();\n\tthis.horizresolution = stream.readUint32();\n\tthis.vertresolution = stream.readUint32();\n\tstream.readUint32();\n\tthis.frame_count = stream.readUint16();\n\tcompressorname_length = Math.min(31, stream.readUint8());\n\tthis.compressorname = stream.readString(compressorname_length);\n\tif (compressorname_length < 31) {\n\t\tstream.readString(31 - compressorname_length);\n\t}\n\tthis.depth = stream.readUint16();\n\tstream.readUint16();\n\tthis.parseFooter(stream);\n});\n\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, function(stream) {\n\tthis.parseHeader(stream);\n\tstream.readUint32Array(2);\n\tthis.channel_count = stream.readUint16();\n\tthis.samplesize = stream.readUint16();\n\tstream.readUint16();\n\tstream.readUint16();\n\tthis.samplerate = (stream.readUint32()/(1<<16));\n\tthis.parseFooter(stream);\n});\n\n// Sample entries inheriting from Audio and Video\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc4\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"av01\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dav1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hvc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hev1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hvt1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"lhe1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dvh1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dvhe\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvi1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvs1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvcN\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vp08\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vp09\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avs3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"j2ki\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"mjp2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"mjpg\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,\t\"uncv\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mp4a\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ac-3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ac-4\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ec-3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"Opus\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mha1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mha2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mhm1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mhm2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"fLaC\");\n\n// Encrypted sample entries\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \t\"encv\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"enca\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \t\"encu\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SYSTEM, \t\"encs\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_TEXT, \t\t\"enct\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \t\"encm\");\n// file:src/parsing/a1lx.js\nBoxParser.createBoxCtor(\"a1lx\", \"AV1LayeredImageIndexingProperty\", function(stream) {\n\tvar large_size = stream.readUint8() & 1;\n\tvar FieldLength = ((large_size & 1) + 1) * 16;\n\tthis.layer_size = [];\n\tfor (var i = 0; i < 3; i++) {\n\t\tif (FieldLength == 16) {\n\t\t\tthis.layer_size[i] = stream.readUint16();\n\t\t} else {\n\t\t\tthis.layer_size[i] = stream.readUint32();\n\t\t}\n\t}\n});// file:src/parsing/a1op.js\nBoxParser.createBoxCtor(\"a1op\", \"OperatingPointSelectorProperty\", function(stream) {\n\tthis.op_index = stream.readUint8();\n});// file:src/parsing/auxC.js\nBoxParser.createFullBoxCtor(\"auxC\", \"AuxiliaryTypeProperty\", function(stream) {\n\tthis.aux_type = stream.readCString();\n\tvar aux_subtype_length = this.size - this.hdr_size - (this.aux_type.length + 1);\n\tthis.aux_subtype = stream.readUint8Array(aux_subtype_length);\n});// file:src/parsing/av1C.js\nBoxParser.createBoxCtor(\"av1C\", \"AV1CodecConfigurationBox\", function(stream) {\n\tvar i;\n\tvar toparse;\n\tvar tmp = stream.readUint8();\n\tif ((tmp >> 7 & 0x1) !== 1) {\n\t\tLog.error(\"av1C marker problem\");\n\t\treturn;\n\t}\n\tthis.version = tmp & 0x7F;\n\tif (this.version !== 1) {\n\t\tLog.error(\"av1C version \"+this.version+\" not supported\");\n\t\treturn;\n\t}\n\ttmp = stream.readUint8();\n\tthis.seq_profile = (tmp >> 5) & 0x7;\n\tthis.seq_level_idx_0 = tmp & 0x1F;\n\ttmp = stream.readUint8();\n\tthis.seq_tier_0 = (tmp >> 7) & 0x1;\n\tthis.high_bitdepth = (tmp >> 6) & 0x1;\n\tthis.twelve_bit = (tmp >> 5) & 0x1;\n\tthis.monochrome = (tmp >> 4) & 0x1;\n\tthis.chroma_subsampling_x = (tmp >> 3) & 0x1;\n\tthis.chroma_subsampling_y = (tmp >> 2) & 0x1;\n\tthis.chroma_sample_position = (tmp & 0x3);\n\ttmp = stream.readUint8();\n\tthis.reserved_1 = (tmp >> 5) & 0x7;\n\tif (this.reserved_1 !== 0) {\n\t\tLog.error(\"av1C reserved_1 parsing problem\");\n\t\treturn;\n\t}\n\tthis.initial_presentation_delay_present = (tmp >> 4) & 0x1;\n\tif (this.initial_presentation_delay_present === 1) {\n\t\tthis.initial_presentation_delay_minus_one = (tmp & 0xF);\n\t} else {\n\t\tthis.reserved_2 = (tmp & 0xF);\n\t\tif (this.reserved_2 !== 0) {\n\t\t\tLog.error(\"av1C reserved_2 parsing problem\");\n\t\t\treturn;\n\t\t}\n\t}\n\n\tvar configOBUs_length = this.size - this.hdr_size - 4;\n\tthis.configOBUs = stream.readUint8Array(configOBUs_length);\n});\n\n// file:src/parsing/avcC.js\nfunction printPS(ps) {\n\tvar str = \"<table class='inner-table'>\";\n\tstr += \"<thead><tr><th>length</th><th>nalu_data</th></tr></thead>\";\n\tstr += \"<tbody>\";\n\n\tfor (var i=0; i < ps.length; i++) {\n\t\tvar nalu = ps[i];\n\t\tstr += \"<tr>\";\n\t\tstr += \"<td>\"+nalu.length+\"</td>\";\n\t\tstr += \"<td>\";\n\t\tstr += nalu.nalu.reduce(function(str, byte) {\n\t\t\treturn str + byte.toString(16).padStart(2, \"0\");\n\t\t}, \"0x\");\n\t\tstr += \"</td></tr>\";\n\t}\n\tstr += \"</tbody></table>\";\n\treturn str;\n}\n\nBoxParser.createBoxCtor(\"avcC\", \"AVCConfigurationBox\", function(stream) {\n\tvar i;\n\tvar toparse;\n\tthis.configurationVersion = stream.readUint8();\n\tthis.AVCProfileIndication = stream.readUint8();\n\tthis.profile_compatibility = stream.readUint8();\n\tthis.AVCLevelIndication = stream.readUint8();\n\tthis.lengthSizeMinusOne = (stream.readUint8() & 0x3);\n\tthis.nb_SPS_nalus = (stream.readUint8() & 0x1F);\n\ttoparse = this.size - this.hdr_size - 6;\n\tthis.SPS = [];\n\tthis.SPS.toString = function () {\n\t\treturn printPS(this);\n\t}\n\tfor (i = 0; i < this.nb_SPS_nalus; i++) {\n\t\tthis.SPS[i] = {};\n\t\tthis.SPS[i].length = stream.readUint16();\n\t\tthis.SPS[i].nalu = stream.readUint8Array(this.SPS[i].length);\n\t\ttoparse -= 2+this.SPS[i].length;\n\t}\n\tthis.nb_PPS_nalus = stream.readUint8();\n\ttoparse--;\n\tthis.PPS = [];\n\tthis.PPS.toString = function () {\n\t\treturn printPS(this);\n\t}\n\tfor (i = 0; i < this.nb_PPS_nalus; i++) {\n\t\tthis.PPS[i] = {};\n\t\tthis.PPS[i].length = stream.readUint16();\n\t\tthis.PPS[i].nalu = stream.readUint8Array(this.PPS[i].length);\n\t\ttoparse -= 2+this.PPS[i].length;\n\t}\n\tif (toparse>0) {\n\t\tthis.ext = stream.readUint8Array(toparse);\n\t}\n});\n\n// file:src/parsing/btrt.js\nBoxParser.createBoxCtor(\"btrt\", \"BitRateBox\", function(stream) {\n\tthis.bufferSizeDB = stream.readUint32();\n\tthis.maxBitrate = stream.readUint32();\n\tthis.avgBitrate = stream.readUint32();\n});\n\n// file:src/parsing/ccst.js\nBoxParser.createFullBoxCtor(\"ccst\", \"CodingConstraintsBox\", function(stream) {\n\tvar flags = stream.readUint8();\n\tthis.all_ref_pics_intra = ((flags & 0x80) == 0x80);\n\tthis.intra_pred_used = ((flags & 0x40) == 0x40);\n\tthis.max_ref_per_pic = ((flags & 0x3f) >> 2);\n\tstream.readUint24();\n});\n\n// file:src/parsing/cdef.js\nBoxParser.createBoxCtor(\"cdef\", \"ComponentDefinitionBox\", function(stream) {\n var i;\n this.channel_count = stream.readUint16();\n this.channel_indexes = [];\n this.channel_types = [];\n this.channel_associations = [];\n for (i = 0; i < this.channel_count; i++) {\n this.channel_indexes.push(stream.readUint16());\n this.channel_types.push(stream.readUint16());\n this.channel_associations.push(stream.readUint16());\n }\n});\n\n// file:src/parsing/clap.js\nBoxParser.createBoxCtor(\"clap\", \"CleanApertureBox\", function(stream) {\n\tthis.cleanApertureWidthN = stream.readUint32();\n\tthis.cleanApertureWidthD = stream.readUint32();\n\tthis.cleanApertureHeightN = stream.readUint32();\n\tthis.cleanApertureHeightD = stream.readUint32();\n\tthis.horizOffN = stream.readUint32();\n\tthis.horizOffD = stream.readUint32();\n\tthis.vertOffN = stream.readUint32();\n\tthis.vertOffD = stream.readUint32();\n});// file:src/parsing/clli.js\nBoxParser.createBoxCtor(\"clli\", \"ContentLightLevelBox\", function(stream) {\n\tthis.max_content_light_level = stream.readUint16();\n this.max_pic_average_light_level = stream.readUint16();\n});\n\n// file:src/parsing/cmex.js\nBoxParser.createFullBoxCtor(\"cmex\", \"CameraExtrinsicMatrixProperty\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.pos_x = stream.readInt32();\n\t}\n\tif (this.flags & 0x2) {\n\t\tthis.pos_y = stream.readInt32();\n\t}\n\tif (this.flags & 0x4) {\n\t\tthis.pos_z = stream.readInt32();\n\t}\n\tif (this.flags & 0x8) {\n\t\tif (this.version == 0) {\n\t\t\tif (this.flags & 0x10) {\n\t\t\t\tthis.quat_x = stream.readInt32();\n\t\t\t\tthis.quat_y = stream.readInt32();\n\t\t\t\tthis.quat_z = stream.readInt32();\n\t\t\t} else {\n\t\t\t\tthis.quat_x = stream.readInt16();\n\t\t\t\tthis.quat_y = stream.readInt16();\n\t\t\t\tthis.quat_z = stream.readInt16();\n\t\t\t}\n\t\t} else if (this.version == 1) {\n\t\t\t//ViewpointGlobalCoordinateSysRotationStruct rot;\n\t\t}\n\t}\n\tif (this.flags & 0x20) {\n\t\tthis.id = stream.readUint32();\n\t}\n});\n// file:src/parsing/cmin.js\nBoxParser.createFullBoxCtor(\"cmin\", \"CameraIntrinsicMatrixProperty\", function(stream) {\n\tthis.focal_length_x = stream.readInt32();\n\tthis.principal_point_x = stream.readInt32();\n\tthis.principal_point_y = stream.readInt32();\n\tif (this.flags & 0x1) {\n\t\tthis.focal_length_y = stream.readInt32();\n\t\tthis.skew_factor = stream.readInt32();\n\t}\n});// file:src/parsing/cmpd.js\nBoxParser.createBoxCtor(\"cmpd\", \"ComponentDefinitionBox\", function(stream) {\n\tthis.component_count = stream.readUint32();\n\tthis.component_types = [];\n\tthis.component_type_urls = [];\n\tfor (i = 0; i < this.component_count; i++) {\n\t\tvar component_type = stream.readUint16();\n\t\tthis.component_types.push(component_type);\n\t\tif (component_type >= 0x8000) {\n\t\t\tthis.component_type_urls.push(stream.readCString());\n\t\t}\n\t}\n});// file:src/parsing/co64.js\nBoxParser.createFullBoxCtor(\"co64\", \"ChunkLargeOffsetBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.chunk_offsets = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.chunk_offsets.push(stream.readUint64());\n\t\t}\n\t}\n});\n\n// file:src/parsing/CoLL.js\nBoxParser.createFullBoxCtor(\"CoLL\", \"ContentLightLevelBox\", function(stream) {\n\tthis.maxCLL = stream.readUint16();\n this.maxFALL = stream.readUint16();\n});\n\n// file:src/parsing/colr.js\nBoxParser.createBoxCtor(\"colr\", \"ColourInformationBox\", function(stream) {\n\tthis.colour_type = stream.readString(4);\n\tif (this.colour_type === 'nclx') {\n\t\tthis.colour_primaries = stream.readUint16();\n\t\tthis.transfer_characteristics = stream.readUint16();\n\t\tthis.matrix_coefficients = stream.readUint16();\n\t\tvar tmp = stream.readUint8();\n\t\tthis.full_range_flag = tmp >> 7;\n\t} else if (this.colour_type === 'rICC') {\n\t\tthis.ICC_profile = stream.readUint8Array(this.size - 4);\n\t} else if (this.colour_type === 'prof') {\n\t\tthis.ICC_profile = stream.readUint8Array(this.size - 4);\n\t}\n});// file:src/parsing/cprt.js\nBoxParser.createFullBoxCtor(\"cprt\", \"CopyrightBox\", function (stream) {\n\tthis.parseLanguage(stream);\n\tthis.notice = stream.readCString();\n});\n\n// file:src/parsing/cslg.js\nBoxParser.createFullBoxCtor(\"cslg\", \"CompositionToDecodeBox\", function(stream) {\n\tvar entry_count;\n\tif (this.version === 0) {\n\t\tthis.compositionToDTSShift = stream.readInt32(); /* signed */\n\t\tthis.leastDecodeToDisplayDelta = stream.readInt32(); /* signed */\n\t\tthis.greatestDecodeToDisplayDelta = stream.readInt32(); /* signed */\n\t\tthis.compositionStartTime = stream.readInt32(); /* signed */\n\t\tthis.compositionEndTime = stream.readInt32(); /* signed */\n\t}\n});\n\n// file:src/parsing/ctts.js\nBoxParser.createFullBoxCtor(\"ctts\", \"CompositionOffsetBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.sample_counts = [];\n\tthis.sample_offsets = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.sample_counts.push(stream.readUint32());\n\t\t\t/* some files are buggy and declare version=0 while using signed offsets.\n\t\t\t The likelyhood of using the most significant bit in a 32-bits time offset is very low,\n\t\t\t so using signed value here as well */\n\t\t\t var value = stream.readInt32();\n\t\t\t if (value < 0) {\n\t\t\t \t\tLog.warn(\"BoxParser\", \"ctts box uses negative values without using version 1\");\n\t\t\t }\n\t\t\tthis.sample_offsets.push(value);\n\t\t}\n\t} else if (this.version == 1) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.sample_counts.push(stream.readUint32());\n\t\t\tthis.sample_offsets.push(stream.readInt32()); /* signed */\n\t\t}\n\t}\n});\n\n// file:src/parsing/dac3.js\nBoxParser.createBoxCtor(\"dac3\", \"AC3SpecificBox\", function(stream) {\n\tvar tmp_byte1 = stream.readUint8();\n\tvar tmp_byte2 = stream.readUint8();\n\tvar tmp_byte3 = stream.readUint8();\n\tthis.fscod = tmp_byte1 >> 6;\n\tthis.bsid = ((tmp_byte1 >> 1) & 0x1F);\n\tthis.bsmod = ((tmp_byte1 & 0x1) << 2) | ((tmp_byte2 >> 6) & 0x3);\n\tthis.acmod = ((tmp_byte2 >> 3) & 0x7);\n\tthis.lfeon = ((tmp_byte2 >> 2) & 0x1);\n\tthis.bit_rate_code = (tmp_byte2 & 0x3) | ((tmp_byte3 >> 5) & 0x7);\n});\n\n// file:src/parsing/dec3.js\nBoxParser.createBoxCtor(\"dec3\", \"EC3SpecificBox\", function(stream) {\n\tvar tmp_16 = stream.readUint16();\n\tthis.data_rate = tmp_16 >> 3;\n\tthis.num_ind_sub = tmp_16 & 0x7;\n\tthis.ind_subs = [];\n\tfor (var i = 0; i < this.num_ind_sub+1; i++) {\n\t\tvar ind_sub = {};\n\t\tthis.ind_subs.push(ind_sub);\n\t\tvar tmp_byte1 = stream.readUint8();\n\t\tvar tmp_byte2 = stream.readUint8();\n\t\tvar tmp_byte3 = stream.readUint8();\n\t\tind_sub.fscod = tmp_byte1 >> 6;\n\t\tind_sub.bsid = ((tmp_byte1 >> 1) & 0x1F);\n\t\tind_sub.bsmod = ((tmp_byte1 & 0x1) << 4) | ((tmp_byte2 >> 4) & 0xF);\n\t\tind_sub.acmod = ((tmp_byte2 >> 1) & 0x7);\n\t\tind_sub.lfeon = (tmp_byte2 & 0x1);\n\t\tind_sub.num_dep_sub = ((tmp_byte3 >> 1) & 0xF);\n\t\tif (ind_sub.num_dep_sub > 0) {\n\t\t\tind_sub.chan_loc = ((tmp_byte3 & 0x1) << 8) | stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/dfLa.js\nBoxParser.createFullBoxCtor(\"dfLa\", \"FLACSpecificBox\", function(stream) {\n var BLOCKTYPE_MASK = 0x7F;\n var LASTMETADATABLOCKFLAG_MASK = 0x80;\n\n var boxesFound = [];\n var knownBlockTypes = [\n \"STREAMINFO\",\n \"PADDING\",\n \"APPLICATION\",\n \"SEEKTABLE\",\n \"VORBIS_COMMENT\",\n \"CUESHEET\",\n \"PICTURE\",\n \"RESERVED\"\n ];\n\n // for (i=0; ; i++) { // to end of box\n do {\n var flagAndType = stream.readUint8();\n\n var type = Math.min(\n (flagAndType & BLOCKTYPE_MASK),\n (knownBlockTypes.length - 1)\n );\n\n // if this is a STREAMINFO block, read the true samplerate since this\n // can be different to the AudioSampleEntry samplerate.\n if (!(type)) {\n // read past all the other stuff\n stream.readUint8Array(13);\n\n // extract samplerate\n this.samplerate = (stream.readUint32() >> 12);\n\n // read to end of STREAMINFO\n stream.readUint8Array(20);\n } else {\n // not interested in other block types so just discard length bytes\n stream.readUint8Array(stream.readUint24());\n }\n\n boxesFound.push(knownBlockTypes[type]);\n\n if (!!(flagAndType & LASTMETADATABLOCKFLAG_MASK)) {\n break;\n }\n } while (true);\n\n this.numMetadataBlocks =\n boxesFound.length + \" (\" + boxesFound.join(\", \") + \")\";\n});\n// file:src/parsing/dimm.js\nBoxParser.createBoxCtor(\"dimm\", \"hintimmediateBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/dmax.js\nBoxParser.createBoxCtor(\"dmax\", \"hintlongestpacket\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/dmed.js\nBoxParser.createBoxCtor(\"dmed\", \"hintmediaBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/dOps.js\nBoxParser.createBoxCtor(\"dOps\", \"OpusSpecificBox\", function(stream) {\n\tthis.Version = stream.readUint8();\n\tthis.OutputChannelCount = stream.readUint8();\n\tthis.PreSkip = stream.readUint16();\n\tthis.InputSampleRate = stream.readUint32();\n\tthis.OutputGain = stream.readInt16();\n\tthis.ChannelMappingFamily = stream.readUint8();\n\tif (this.ChannelMappingFamily !== 0) {\n\t\tthis.StreamCount = stream.readUint8();\n\t\tthis.CoupledCount = stream.readUint8();\n\t\tthis.ChannelMapping = [];\n\t\tfor (var i = 0; i < this.OutputChannelCount; i++) {\n\t\t\tthis.ChannelMapping[i] = stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/dref.js\nBoxParser.createFullBoxCtor(\"dref\", \"DataReferenceBox\", function(stream) {\n\tvar ret;\n\tvar box;\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\tthis.entries.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/drep.js\nBoxParser.createBoxCtor(\"drep\", \"hintrepeatedBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/elng.js\nBoxParser.createFullBoxCtor(\"elng\", \"ExtendedLanguageBox\", function(stream) {\n\tthis.extended_language = stream.readString(this.size-this.hdr_size);\n});\n\n// file:src/parsing/elst.js\nBoxParser.createFullBoxCtor(\"elst\", \"EditListBox\", function(stream) {\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry = {};\n\t\tthis.entries.push(entry);\n\t\tif (this.version === 1) {\n\t\t\tentry.segment_duration = stream.readUint64();\n\t\t\tentry.media_time = stream.readInt64();\n\t\t} else {\n\t\t\tentry.segment_duration = stream.readUint32();\n\t\t\tentry.media_time = stream.readInt32();\n\t\t}\n\t\tentry.media_rate_integer = stream.readInt16();\n\t\tentry.media_rate_fraction = stream.readInt16();\n\t}\n});\n\n// file:src/parsing/emsg.js\nBoxParser.createFullBoxCtor(\"emsg\", \"EventMessageBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.timescale \t\t\t\t\t= stream.readUint32();\n\t\tthis.presentation_time \t\t\t= stream.readUint64();\n\t\tthis.event_duration\t\t\t \t= stream.readUint32();\n\t\tthis.id \t\t\t\t\t\t= stream.readUint32();\n\t\tthis.scheme_id_uri \t\t\t\t= stream.readCString();\n\t\tthis.value \t\t\t\t\t\t= stream.readCString();\n\t} else {\n\t\tthis.scheme_id_uri \t\t\t\t= stream.readCString();\n\t\tthis.value \t\t\t\t\t\t= stream.readCString();\n\t\tthis.timescale \t\t\t\t\t= stream.readUint32();\n\t\tthis.presentation_time_delta \t= stream.readUint32();\n\t\tthis.event_duration\t\t\t \t= stream.readUint32();\n\t\tthis.id \t\t\t\t\t\t= stream.readUint32();\n\t}\n\tvar message_size = this.size - this.hdr_size - (4*4 + (this.scheme_id_uri.length+1) + (this.value.length+1));\n\tif (this.version == 1) {\n\t\tmessage_size -= 4;\n\t}\n\tthis.message_data = stream.readUint8Array(message_size);\n});\n\n// file:src/parsing/EntityToGroup.js\n// ISO/IEC 14496-12:2022 Section 8.18.3 Entity to group box\nBoxParser.createEntityToGroupCtor = function(type, parseMethod) {\n BoxParser[type+\"Box\"] = function(size) {\n BoxParser.FullBox.call(this, type, size);\n }\n BoxParser[type+\"Box\"].prototype = new BoxParser.FullBox();\n BoxParser[type+\"Box\"].prototype.parse = function(stream) {\n this.parseFullHeader(stream);\n if (parseMethod) {\n parseMethod.call(this, stream);\n } else {\n this.group_id = stream.readUint32();\n this.num_entities_in_group = stream.readUint32();\n this.entity_ids = [];\n for (i = 0; i < this.num_entities_in_group; i++) {\n var entity_id = stream.readUint32();\n this.entity_ids.push(entity_id);\n }\n }\n };\n};\n\n// Auto exposure bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.2.1)\nBoxParser.createEntityToGroupCtor(\"aebr\");\n\n// Flash exposure bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.5.1)\nBoxParser.createEntityToGroupCtor(\"afbr\");\n\n// Album collection (ISO/IEC 23008-12:2022 Section 6.8.7.1)\nBoxParser.createEntityToGroupCtor(\"albc\");\n\n// Alternative entity (ISO/IEC 14496-12:2022 Section 8.18.3.1)\nBoxParser.createEntityToGroupCtor(\"altr\");\n\n// Burst image entity group (ISO/IEC 23008-12:2022 Section 6.8.2.2)\nBoxParser.createEntityToGroupCtor(\"brst\");\n\n// Depth of field bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.6.1)\nBoxParser.createEntityToGroupCtor(\"dobr\");\n\n// Equivalent entity (ISO/IEC 23008-12:2022 Section 6.8.1.1)\nBoxParser.createEntityToGroupCtor(\"eqiv\");\n\n// Favourites collection (ISO/IEC 23008-12:2022 Section 6.8.7.2)\nBoxParser.createEntityToGroupCtor(\"favc\");\n\n// Focus bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.4.1)\nBoxParser.createEntityToGroupCtor(\"fobr\");\n\n// Audio to image entity group (ISO/IEC 23008-12:2022 Section 6.8.4)\nBoxParser.createEntityToGroupCtor(\"iaug\");\n\n// Panorama (ISO/IEC 23008-12:2022 Section 6.8.8.1)\nBoxParser.createEntityToGroupCtor(\"pano\");\n\n// Slideshow (ISO/IEC 23008-12:2022 Section 6.8.9.1)\nBoxParser.createEntityToGroupCtor(\"slid\");\n\n// Stereo pair (ISO/IEC 23008-12:2022 Section 6.8.5)\nBoxParser.createEntityToGroupCtor(\"ster\");\n\n// Time-synchronised capture entity group (ISO/IEC 23008-12:2022 Section 6.8.3)\nBoxParser.createEntityToGroupCtor(\"tsyn\");\n\n// White balance bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.3.1)\nBoxParser.createEntityToGroupCtor(\"wbbr\");\n\n// Alternative entity (ISO/IEC 23008-12:2022 AMD1 Section 6.8.10)\nBoxParser.createEntityToGroupCtor(\"prgr\");\n\n// Image Pyramid entity group (ISO/IEC 23008-12:20xx Section 6.8.11)\nBoxParser.createEntityToGroupCtor(\"pymd\", function(stream) {\n this.group_id = stream.readUint32();\n this.num_entities_in_group = stream.readUint32();\n this.entity_ids = [];\n for (var i = 0; i < this.num_entities_in_group; i++) {\n var entity_id = stream.readUint32();\n this.entity_ids.push(entity_id);\n }\n \n this.tile_size_x = stream.readUint16();\n this.tile_size_y = stream.readUint16();\n this.layer_binning = [];\n this.tiles_in_layer_column_minus1 = [];\n this.tiles_in_layer_row_minus1 = [];\n for (i = 0; i < this.num_entities_in_group; i++) {\n this.layer_binning[i] = stream.readUint16();\n this.tiles_in_layer_row_minus1[i] = stream.readUint16();\n this.tiles_in_layer_column_minus1[i] = stream.readUint16();\n }\n});\n\n// file:src/parsing/esds.js\nBoxParser.createFullBoxCtor(\"esds\", \"ElementaryStreamDescriptorBox\", function(stream) {\n\tvar esd_data = stream.readUint8Array(this.size-this.hdr_size);\n\tif (typeof MPEG4DescriptorParser !== \"undefined\") {\n\t\tvar esd_parser = new MPEG4DescriptorParser();\n\t\tthis.esd = esd_parser.parseOneDescriptor(new DataStream(esd_data.buffer, 0, DataStream.BIG_ENDIAN));\n\t}\n});\n\n// file:src/parsing/fiel.js\nBoxParser.createBoxCtor(\"fiel\", \"FieldHandlingBox\", function(stream) {\n\tthis.fieldCount = stream.readUint8();\n\tthis.fieldOrdering = stream.readUint8();\n});\n\n// file:src/parsing/frma.js\nBoxParser.createBoxCtor(\"frma\", \"OriginalFormatBox\", function(stream) {\n\tthis.data_format = stream.readString(4);\n});\n\n// file:src/parsing/ftyp.js\nBoxParser.createBoxCtor(\"ftyp\", \"FileTypeBox\", function(stream) {\n\tvar toparse = this.size - this.hdr_size;\n\tthis.major_brand = stream.readString(4);\n\tthis.minor_version = stream.readUint32();\n\ttoparse -= 8;\n\tthis.compatible_brands = [];\n\tvar i = 0;\n\twhile (toparse>=4) {\n\t\tthis.compatible_brands[i] = stream.readString(4);\n\t\ttoparse -= 4;\n\t\ti++;\n\t}\n});\n\n// file:src/parsing/hdlr.js\nBoxParser.createFullBoxCtor(\"hdlr\", \"HandlerBox\", function(stream) {\n\tif (this.version === 0) {\n\t\tstream.readUint32();\n\t\tthis.handler = stream.readString(4);\n\t\tstream.readUint32Array(3);\n\t\tthis.name = stream.readString(this.size-this.hdr_size-20);\n\t\tif (this.name[this.name.length-1]==='\\0') {\n\t\t\tthis.name = this.name.slice(0,-1);\n\t\t}\n\t}\n});\n\n// file:src/parsing/hvcC.js\nBoxParser.createBoxCtor(\"hvcC\", \"HEVCConfigurationBox\", function(stream) {\n\tvar i, j;\n\tvar nb_nalus;\n\tvar length;\n\tvar tmp_byte;\n\tthis.configurationVersion = stream.readUint8();\n\ttmp_byte = stream.readUint8();\n\tthis.general_profile_space = tmp_byte >> 6;\n\tthis.general_tier_flag = (tmp_byte & 0x20) >> 5;\n\tthis.general_profile_idc = (tmp_byte & 0x1F);\n\tthis.general_profile_compatibility = stream.readUint32();\n\tthis.general_constraint_indicator = stream.readUint8Array(6);\n\tthis.general_level_idc = stream.readUint8();\n\tthis.min_spatial_segmentation_idc = stream.readUint16() & 0xFFF;\n\tthis.parallelismType = (stream.readUint8() & 0x3);\n\tthis.chroma_format_idc = (stream.readUint8() & 0x3);\n\tthis.bit_depth_luma_minus8 = (stream.readUint8() & 0x7);\n\tthis.bit_depth_chroma_minus8 = (stream.readUint8() & 0x7);\n\tthis.avgFrameRate = stream.readUint16();\n\ttmp_byte = stream.readUint8();\n\tthis.constantFrameRate = (tmp_byte >> 6);\n\tthis.numTemporalLayers = (tmp_byte & 0XD) >> 3;\n\tthis.temporalIdNested = (tmp_byte & 0X4) >> 2;\n\tthis.lengthSizeMinusOne = (tmp_byte & 0X3);\n\n\tthis.nalu_arrays = [];\n\tthis.nalu_arrays.toString = function () {\n\t\tvar str = \"<table class='inner-table'>\";\n\t\tstr += \"<thead><tr><th>completeness</th><th>nalu_type</th><th>nalu_data</th></tr></thead>\";\n\t\tstr += \"<tbody>\";\n\n\t\tfor (var i=0; i<this.length; i++) {\n\t\t\tvar nalu_array = this[i];\n\t\t\tstr += \"<tr>\";\n\t\t\tstr += \"<td rowspan='\"+nalu_array.length+\"'>\"+nalu_array.completeness+\"</td>\";\n\t\t\tstr += \"<td rowspan='\"+nalu_array.length+\"'>\"+nalu_array.nalu_type+\"</td>\";\n\t\t\tfor (var j=0; j<nalu_array.length; j++) {\n\t\t\t\tvar nalu = nalu_array[j];\n\t\t\t\tif (j !== 0) str += \"<tr>\";\n\t\t\t\tstr += \"<td>\";\n\t\t\t\tstr += nalu.data.reduce(function(str, byte) {\n\t\t\t\t\treturn str + byte.toString(16).padStart(2, \"0\");\n\t\t\t\t}, \"0x\");\n\t\t\t\tstr += \"</td></tr>\";\n\t\t\t}\n\t\t}\n\t\tstr += \"</tbody></table>\";\n\t\treturn str;\n\t}\n\tvar numOfArrays = stream.readUint8();\n\tfor (i = 0; i < numOfArrays; i++) {\n\t\tvar nalu_array = [];\n\t\tthis.nalu_arrays.push(nalu_array);\n\t\ttmp_byte = stream.readUint8()\n\t\tnalu_array.completeness = (tmp_byte & 0x80) >> 7;\n\t\tnalu_array.nalu_type = tmp_byte & 0x3F;\n\t\tvar numNalus = stream.readUint16();\n\t\tfor (j = 0; j < numNalus; j++) {\n\t\t\tvar nalu = {}\n\t\t\tnalu_array.push(nalu);\n\t\t\tlength = stream.readUint16();\n\t\t\tnalu.data = stream.readUint8Array(length);\n\t\t}\n\t}\n});\n\n// file:src/parsing/iinf.js\nBoxParser.createFullBoxCtor(\"iinf\", \"ItemInfoBox\", function(stream) {\n\tvar ret;\n\tif (this.version === 0) {\n\t\tthis.entry_count = stream.readUint16();\n\t} else {\n\t\tthis.entry_count = stream.readUint32();\n\t}\n\tthis.item_infos = [];\n\tfor (var i = 0; i < this.entry_count; i++) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tif (ret.box.type !== \"infe\") {\n\t\t\t\tLog.error(\"BoxParser\", \"Expected 'infe' box, got \"+ret.box.type);\n\t\t\t}\n\t\t\tthis.item_infos[i] = ret.box;\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/iloc.js\nBoxParser.createFullBoxCtor(\"iloc\", \"ItemLocationBox\", function(stream) {\n\tvar byte;\n\tbyte = stream.readUint8();\n\tthis.offset_size = (byte >> 4) & 0xF;\n\tthis.length_size = byte & 0xF;\n\tbyte = stream.readUint8();\n\tthis.base_offset_size = (byte >> 4) & 0xF;\n\tif (this.version === 1 || this.version === 2) {\n\t\tthis.index_size = byte & 0xF;\n\t} else {\n\t\tthis.index_size = 0;\n\t\t// reserved = byte & 0xF;\n\t}\n\tthis.items = [];\n\tvar item_count = 0;\n\tif (this.version < 2) {\n\t\titem_count = stream.readUint16();\n\t} else if (this.version === 2) {\n\t\titem_count = stream.readUint32();\n\t} else {\n\t\tthrow \"version of iloc box not supported\";\n\t}\n\tfor (var i = 0; i < item_count; i++) {\n\t\tvar item = {};\n\t\tthis.items.push(item);\n\t\tif (this.version < 2) {\n\t\t\titem.item_ID = stream.readUint16();\n\t\t} else if (this.version === 2) {\n\t\t\titem.item_ID = stream.readUint32();\n\t\t} else {\n\t\t\tthrow \"version of iloc box not supported\";\n\t\t}\n\t\tif (this.version === 1 || this.version === 2) {\n\t\t\titem.construction_method = (stream.readUint16() & 0xF);\n\t\t} else {\n\t\t\titem.construction_method = 0;\n\t\t}\n\t\titem.data_reference_index = stream.readUint16();\n\t\tswitch(this.base_offset_size) {\n\t\t\tcase 0:\n\t\t\t\titem.base_offset = 0;\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\titem.base_offset = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tcase 8:\n\t\t\t\titem.base_offset = stream.readUint64();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow \"Error reading base offset size\";\n\t\t}\n\t\tvar extent_count = stream.readUint16();\n\t\titem.extents = [];\n\t\tfor (var j=0; j < extent_count; j++) {\n\t\t\tvar extent = {};\n\t\t\titem.extents.push(extent);\n\t\t\tif (this.version === 1 || this.version === 2) {\n\t\t\t\tswitch(this.index_size) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\textent.extent_index = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\textent.extent_index = stream.readUint32();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 8:\n\t\t\t\t\t\textent.extent_index = stream.readUint64();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch(this.offset_size) {\n\t\t\t\tcase 0:\n\t\t\t\t\textent.extent_offset = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\textent.extent_offset = stream.readUint32();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\textent.extent_offset = stream.readUint64();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t}\n\t\t\tswitch(this.length_size) {\n\t\t\t\tcase 0:\n\t\t\t\t\textent.extent_length = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\textent.extent_length = stream.readUint32();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\textent.extent_length = stream.readUint64();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/imir.js\nBoxParser.createBoxCtor(\"imir\", \"ImageMirror\", function(stream) {\n\tvar tmp = stream.readUint8();\n\tthis.reserved = tmp >> 7;\n\tthis.axis = tmp & 1;\n});// file:src/parsing/infe.js\nBoxParser.createFullBoxCtor(\"infe\", \"ItemInfoEntry\", function(stream) {\n\tif (this.version === 0 || this.version === 1) {\n\t\tthis.item_ID = stream.readUint16();\n\t\tthis.item_protection_index = stream.readUint16();\n\t\tthis.item_name = stream.readCString();\n\t\tthis.content_type = stream.readCString();\n\t\tthis.content_encoding = stream.readCString();\n\t}\n\tif (this.version === 1) {\n\t\tthis.extension_type = stream.readString(4);\n\t\tLog.warn(\"BoxParser\", \"Cannot parse extension type\");\n\t\tstream.seek(this.start+this.size);\n\t\treturn;\n\t}\n\tif (this.version >= 2) {\n\t\tif (this.version === 2) {\n\t\t\tthis.item_ID = stream.readUint16();\n\t\t} else if (this.version === 3) {\n\t\t\tthis.item_ID = stream.readUint32();\n\t\t}\n\t\tthis.item_protection_index = stream.readUint16();\n\t\tthis.item_type = stream.readString(4);\n\t\tthis.item_name = stream.readCString();\n\t\tif (this.item_type === \"mime\") {\n\t\t\tthis.content_type = stream.readCString();\n\t\t\tthis.content_encoding = stream.readCString();\n\t\t} else if (this.item_type === \"uri \") {\n\t\t\tthis.item_uri_type = stream.readCString();\n\t\t}\n\t}\n});\n// file:src/parsing/ipma.js\nBoxParser.createFullBoxCtor(\"ipma\", \"ItemPropertyAssociationBox\", function(stream) {\n\tvar i, j;\n\tentry_count = stream.readUint32();\n\tthis.associations = [];\n\tfor(i=0; i<entry_count; i++) {\n\t\tvar item_assoc = {};\n\t\tthis.associations.push(item_assoc);\n\t\tif (this.version < 1) {\n\t\t\titem_assoc.id = stream.readUint16();\n\t\t} else {\n\t\t\titem_assoc.id = stream.readUint32();\n\t\t}\n\t\tvar association_count = stream.readUint8();\n\t\titem_assoc.props = [];\n\t\tfor (j = 0; j < association_count; j++) {\n\t\t\tvar tmp = stream.readUint8();\n\t\t\tvar p = {};\n\t\t\titem_assoc.props.push(p);\n\t\t\tp.essential = ((tmp & 0x80) >> 7) === 1;\n\t\t\tif (this.flags & 0x1) {\n\t\t\t\tp.property_index = (tmp & 0x7F) << 8 | stream.readUint8();\n\t\t\t} else {\n\t\t\t\tp.property_index = (tmp & 0x7F);\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/iref.js\nBoxParser.createFullBoxCtor(\"iref\", \"ItemReferenceBox\", function(stream) {\n\tvar ret;\n\tvar entryCount;\n\tvar box;\n\tthis.references = [];\n\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, true, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tif (this.version === 0) {\n\t\t\t\tbox = new BoxParser.SingleItemTypeReferenceBox(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\t} else {\n\t\t\t\tbox = new BoxParser.SingleItemTypeReferenceBoxLarge(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\t}\n\t\t\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\t\t\tLog.warn(\"BoxParser\", box.type+\" box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t\tbox.parseDataAndRewind(stream);\n\t\t\t}\n\t\t\tbox.parse(stream);\n\t\t\tthis.references.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n// file:src/parsing/irot.js\nBoxParser.createBoxCtor(\"irot\", \"ImageRotation\", function(stream) {\n\tthis.angle = stream.readUint8() & 0x3;\n});\n\n// file:src/parsing/ispe.js\nBoxParser.createFullBoxCtor(\"ispe\", \"ImageSpatialExtentsProperty\", function(stream) {\n\tthis.image_width = stream.readUint32();\n\tthis.image_height = stream.readUint32();\n});// file:src/parsing/kind.js\nBoxParser.createFullBoxCtor(\"kind\", \"KindBox\", function(stream) {\n\tthis.schemeURI = stream.readCString();\n\tthis.value = stream.readCString();\n});\n// file:src/parsing/leva.js\nBoxParser.createFullBoxCtor(\"leva\", \"LevelAssignmentBox\", function(stream) {\n\tvar count = stream.readUint8();\n\tthis.levels = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tvar level = {};\n\t\tthis.levels[i] = level;\n\t\tlevel.track_ID = stream.readUint32();\n\t\tvar tmp_byte = stream.readUint8();\n\t\tlevel.padding_flag = tmp_byte >> 7;\n\t\tlevel.assignment_type = tmp_byte & 0x7F;\n\t\tswitch (level.assignment_type) {\n\t\t\tcase 0:\n\t\t\t\tlevel.grouping_type = stream.readString(4);\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tlevel.grouping_type = stream.readString(4);\n\t\t\t\tlevel.grouping_type_parameter = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\tlevel.sub_track_id = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tLog.warn(\"BoxParser\", \"Unknown leva assignement type\");\n\t\t}\n\t}\n});\n\n// file:src/parsing/lhvC.js\nBoxParser.createBoxCtor(\"lhvC\", \"LHEVCConfigurationBox\", function(stream) {\n\tvar i, j;\n\tvar tmp_byte;\n\tthis.configurationVersion = stream.readUint8();\n\tthis.min_spatial_segmentation_idc = stream.readUint16() & 0xFFF;\n\tthis.parallelismType = (stream.readUint8() & 0x3);\n\ttmp_byte = stream.readUint8();\n\tthis.numTemporalLayers = (tmp_byte & 0XD) >> 3;\n\tthis.temporalIdNested = (tmp_byte & 0X4) >> 2;\n\tthis.lengthSizeMinusOne = (tmp_byte & 0X3);\n\n\tthis.nalu_arrays = [];\n\tthis.nalu_arrays.toString = function () {\n\t\tvar str = \"<table class='inner-table'>\";\n\t\tstr += \"<thead><tr><th>completeness</th><th>nalu_type</th><th>nalu_data</th></tr></thead>\";\n\t\tstr += \"<tbody>\";\n\n\t\tfor (var i=0; i<this.length; i++) {\n\t\t\tvar nalu_array = this[i];\n\t\t\tstr += \"<tr>\";\n\t\t\tstr += \"<td rowspan='\"+nalu_array.length+\"'>\"+nalu_array.completeness+\"</td>\";\n\t\t\tstr += \"<td rowspan='\"+nalu_array.length+\"'>\"+nalu_array.nalu_type+\"</td>\";\n\t\t\tfor (var j=0; j<nalu_array.length; j++) {\n\t\t\t\tvar nalu = nalu_array[j];\n\t\t\t\tif (j !== 0) str += \"<tr>\";\n\t\t\t\tstr += \"<td>\";\n\t\t\t\tstr += nalu.data.reduce(function(str, byte) {\n\t\t\t\t\treturn str + byte.toString(16).padStart(2, \"0\");\n\t\t\t\t}, \"0x\");\n\t\t\t\tstr += \"</td></tr>\";\n\t\t\t}\n\t\t}\n\t\tstr += \"</tbody></table>\";\n\t\treturn str;\n\t}\n\tvar numOfArrays = stream.readUint8();\n\tfor (i = 0; i < numOfArrays; i++) {\n\t\tvar nalu_array = [];\n\t\tthis.nalu_arrays.push(nalu_array);\n\t\ttmp_byte = stream.readUint8()\n\t\tnalu_array.completeness = (tmp_byte & 0x80) >> 7;\n\t\tnalu_array.nalu_type = tmp_byte & 0x3F;\n\t\tvar numNalus = stream.readUint16();\n\t\tfor (j = 0; j < numNalus; j++) {\n\t\t\tvar nalu = {}\n\t\t\tnalu_array.push(nalu);\n\t\t\tvar length = stream.readUint16();\n\t\t\tnalu.data = stream.readUint8Array(length);\n\t\t}\n\t}\n});\n\n// file:src/parsing/lsel.js\nBoxParser.createBoxCtor(\"lsel\", \"LayerSelectorProperty\", function(stream) {\n\tthis.layer_id = stream.readUint16();\n});// file:src/parsing/maxr.js\nBoxParser.createBoxCtor(\"maxr\", \"hintmaxrate\", function(stream) {\n\tthis.period = stream.readUint32();\n\tthis.bytes = stream.readUint32();\n});\n\n// file:src/parsing/mdcv.js\nfunction ColorPoint(x, y) {\n this.x = x;\n this.y = y;\n}\n\nColorPoint.prototype.toString = function() {\n return \"(\"+this.x+\",\"+this.y+\")\";\n}\n\nBoxParser.createBoxCtor(\"mdcv\", \"MasteringDisplayColourVolumeBox\", function(stream) {\n this.display_primaries = [];\n this.display_primaries[0] = new ColorPoint(stream.readUint16(),stream.readUint16());\n this.display_primaries[1] = new ColorPoint(stream.readUint16(),stream.readUint16());\n this.display_primaries[2] = new ColorPoint(stream.readUint16(),stream.readUint16());\n this.white_point = new ColorPoint(stream.readUint16(),stream.readUint16());\n this.max_display_mastering_luminance = stream.readUint32();\n this.min_display_mastering_luminance = stream.readUint32();\n});\n\n// file:src/parsing/mdhd.js\nBoxParser.createFullBoxCtor(\"mdhd\", \"MediaHeaderBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tthis.parseLanguage(stream);\n\tstream.readUint16();\n});\n\n// file:src/parsing/mehd.js\nBoxParser.createFullBoxCtor(\"mehd\", \"MovieExtendsHeaderBox\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tLog.warn(\"BoxParser\", \"mehd box incorrectly uses flags set to 1, converting version to 1\");\n\t\tthis.version = 1;\n\t}\n\tif (this.version == 1) {\n\t\tthis.fragment_duration = stream.readUint64();\n\t} else {\n\t\tthis.fragment_duration = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/meta.js\nBoxParser.createFullBoxCtor(\"meta\", \"MetaBox\", function(stream) {\n\tthis.boxes = [];\n\tBoxParser.ContainerBox.prototype.parse.call(this, stream);\n});\n// file:src/parsing/mfhd.js\nBoxParser.createFullBoxCtor(\"mfhd\", \"MovieFragmentHeaderBox\", function(stream) {\n\tthis.sequence_number = stream.readUint32();\n});\n\n// file:src/parsing/mfro.js\nBoxParser.createFullBoxCtor(\"mfro\", \"MovieFragmentRandomAccessOffsetBox\", function(stream) {\n\tthis._size = stream.readUint32();\n});\n\n// file:src/parsing/mskC.js\nBoxParser.createFullBoxCtor(\"mskC\", \"MaskConfigurationProperty\", function(stream) {\n this.bits_per_pixel = stream.readUint8();\n});\n\n// file:src/parsing/mvhd.js\nBoxParser.createFullBoxCtor(\"mvhd\", \"MovieHeaderBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tthis.rate = stream.readUint32();\n\tthis.volume = stream.readUint16()>>8;\n\tstream.readUint16();\n\tstream.readUint32Array(2);\n\tthis.matrix = stream.readUint32Array(9);\n\tstream.readUint32Array(6);\n\tthis.next_track_id = stream.readUint32();\n});\n// file:src/parsing/npck.js\nBoxParser.createBoxCtor(\"npck\", \"hintPacketsSent\", function(stream) {\n\tthis.packetssent = stream.readUint32();\n});\n\n// file:src/parsing/nump.js\nBoxParser.createBoxCtor(\"nump\", \"hintPacketsSent\", function(stream) {\n\tthis.packetssent = stream.readUint64();\n});\n\n// file:src/parsing/padb.js\nBoxParser.createFullBoxCtor(\"padb\", \"PaddingBitsBox\", function(stream) {\n\tvar sample_count = stream.readUint32();\n\tthis.padbits = [];\n\tfor (var i = 0; i < Math.floor((sample_count+1)/2); i++) {\n\t\tthis.padbits = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/pasp.js\nBoxParser.createBoxCtor(\"pasp\", \"PixelAspectRatioBox\", function(stream) {\n\tthis.hSpacing = stream.readUint32();\n\tthis.vSpacing = stream.readUint32();\n});// file:src/parsing/payl.js\nBoxParser.createBoxCtor(\"payl\", \"CuePayloadBox\", function(stream) {\n\tthis.text = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/payt.js\nBoxParser.createBoxCtor(\"payt\", \"hintpayloadID\", function(stream) {\n\tthis.payloadID = stream.readUint32();\n\tvar count = stream.readUint8();\n\tthis.rtpmap_string = stream.readString(count);\n});\n\n// file:src/parsing/pdin.js\nBoxParser.createFullBoxCtor(\"pdin\", \"ProgressiveDownloadInfoBox\", function(stream) {\n\tvar count = (this.size - this.hdr_size)/8;\n\tthis.rate = [];\n\tthis.initial_delay = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.rate[i] = stream.readUint32();\n\t\tthis.initial_delay[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/pitm.js\nBoxParser.createFullBoxCtor(\"pitm\", \"PrimaryItemBox\", function(stream) {\n\tif (this.version === 0) {\n\t\tthis.item_id = stream.readUint16();\n\t} else {\n\t\tthis.item_id = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/pixi.js\nBoxParser.createFullBoxCtor(\"pixi\", \"PixelInformationProperty\", function(stream) {\n\tvar i;\n\tthis.num_channels = stream.readUint8();\n\tthis.bits_per_channels = [];\n\tfor (i = 0; i < this.num_channels; i++) {\n\t\tthis.bits_per_channels[i] = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/pmax.js\nBoxParser.createBoxCtor(\"pmax\", \"hintlargestpacket\", function(stream) {\n\tthis.bytes = stream.readUint32();\n});\n\n// file:src/parsing/prdi.js\nBoxParser.createFullBoxCtor(\"prdi\", \"ProgressiveDerivedImageItemInformationProperty\", function(stream) {\n\tthis.step_count = stream.readUint16();\n\tthis.item_count = [];\n\tif (this.flags & 0x2) {\n\t\tfor (var i = 0; i < this.step_count; i++) {\n\t\t\tthis.item_count[i] = stream.readUint16();\n\t\t}\n\t}\n});// file:src/parsing/prft.js\nBoxParser.createFullBoxCtor(\"prft\", \"ProducerReferenceTimeBox\", function(stream) {\n\tthis.ref_track_id = stream.readUint32();\n\tthis.ntp_timestamp = stream.readUint64();\n\tif (this.version === 0) {\n\t\tthis.media_time = stream.readUint32();\n\t} else {\n\t\tthis.media_time = stream.readUint64();\n\t}\n});\n\n// file:src/parsing/pssh.js\nBoxParser.createFullBoxCtor(\"pssh\", \"ProtectionSystemSpecificHeaderBox\", function(stream) {\n\tthis.system_id = BoxParser.parseHex16(stream);\n\tif (this.version > 0) {\n\t\tvar count = stream.readUint32();\n\t\tthis.kid = [];\n\t\tfor (var i = 0; i < count; i++) {\n\t\t\tthis.kid[i] = BoxParser.parseHex16(stream);\n\t\t}\n\t}\n\tvar datasize = stream.readUint32();\n\tif (datasize > 0) {\n\t\tthis.data = stream.readUint8Array(datasize);\n\t}\n});\n\n// file:src/parsing/qt/clef.js\nBoxParser.createFullBoxCtor(\"clef\", \"TrackCleanApertureDimensionsBox\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/enof.js\nBoxParser.createFullBoxCtor(\"enof\", \"TrackEncodedPixelsDimensionsBox\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/prof.js\nBoxParser.createFullBoxCtor(\"prof\", \"TrackProductionApertureDimensionsBox\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/tapt.js\nBoxParser.createContainerBoxCtor(\"tapt\", \"TrackApertureModeDimensionsBox\", null, [ \"clef\", \"prof\", \"enof\"]);// file:src/parsing/rtp.js\nBoxParser.createBoxCtor(\"rtp \", \"rtpmoviehintinformation\", function(stream) {\n\tthis.descriptionformat = stream.readString(4);\n\tthis.sdptext = stream.readString(this.size - this.hdr_size - 4);\n});\n\n// file:src/parsing/saio.js\nBoxParser.createFullBoxCtor(\"saio\", \"SampleAuxiliaryInformationOffsetsBox\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.aux_info_type = stream.readString(4);\n\t\tthis.aux_info_type_parameter = stream.readUint32();\n\t}\n\tvar count = stream.readUint32();\n\tthis.offset = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tif (this.version === 0) {\n\t\t\tthis.offset[i] = stream.readUint32();\n\t\t} else {\n\t\t\tthis.offset[i] = stream.readUint64();\n\t\t}\n\t}\n});\n// file:src/parsing/saiz.js\nBoxParser.createFullBoxCtor(\"saiz\", \"SampleAuxiliaryInformationSizesBox\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.aux_info_type = stream.readString(4);\n\t\tthis.aux_info_type_parameter = stream.readUint32();\n\t}\n\tthis.default_sample_info_size = stream.readUint8();\n\tthis.sample_count = stream.readUint32();\n\tthis.sample_info_size = [];\n\tif (this.default_sample_info_size === 0) {\n\t\tfor (var i = 0; i < this.sample_count; i++) {\n\t\t\tthis.sample_info_size[i] = stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/sampleentries/mett.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"mett\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/metx.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"metx\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.namespace = stream.readCString();\n\tthis.schema_location = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/sbtt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"sbtt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/stpp.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"stpp\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.namespace = stream.readCString();\n\tthis.schema_location = stream.readCString();\n\tthis.auxiliary_mime_types = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/stxt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"stxt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/tx3g.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"tx3g\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.displayFlags = stream.readUint32();\n\tthis.horizontal_justification = stream.readInt8();\n\tthis.vertical_justification = stream.readInt8();\n\tthis.bg_color_rgba = stream.readUint8Array(4);\n\tthis.box_record = stream.readInt16Array(4);\n\tthis.style_record = stream.readUint8Array(12);\n\tthis.parseFooter(stream);\n});\n// file:src/parsing/sampleentries/wvtt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"wvtt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/samplegroups/alst.js\nBoxParser.createSampleGroupCtor(\"alst\", function(stream) {\n\tvar i;\n\tvar roll_count = stream.readUint16();\n\tthis.first_output_sample = stream.readUint16();\n\tthis.sample_offset = [];\n\tfor (i = 0; i < roll_count; i++) {\n\t\tthis.sample_offset[i] = stream.readUint32();\n\t}\n\tvar remaining = this.description_length - 4 - 4*roll_count;\n\tthis.num_output_samples = [];\n\tthis.num_total_samples = [];\n\tfor (i = 0; i < remaining/4; i++) {\n\t\tthis.num_output_samples[i] = stream.readUint16();\n\t\tthis.num_total_samples[i] = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/samplegroups/avll.js\nBoxParser.createSampleGroupCtor(\"avll\", function(stream) {\n\tthis.layerNumber = stream.readUint8();\n\tthis.accurateStatisticsFlag = stream.readUint8();\n\tthis.avgBitRate = stream.readUint16();\n\tthis.avgFrameRate = stream.readUint16();\n});\n\n// file:src/parsing/samplegroups/avss.js\nBoxParser.createSampleGroupCtor(\"avss\", function(stream) {\n\tthis.subSequenceIdentifier = stream.readUint16();\n\tthis.layerNumber = stream.readUint8();\n\tvar tmp_byte = stream.readUint8();\n\tthis.durationFlag = tmp_byte >> 7;\n\tthis.avgRateFlag = (tmp_byte >> 6) & 0x1;\n\tif (this.durationFlag) {\n\t\tthis.duration = stream.readUint32();\n\t}\n\tif (this.avgRateFlag) {\n\t\tthis.accurateStatisticsFlag = stream.readUint8();\n\t\tthis.avgBitRate = stream.readUint16();\n\t\tthis.avgFrameRate = stream.readUint16();\n\t}\n\tthis.dependency = [];\n\tvar numReferences = stream.readUint8();\n\tfor (var i = 0; i < numReferences; i++) {\n\t\tvar dependencyInfo = {};\n\t\tthis.dependency.push(dependencyInfo);\n\t\tdependencyInfo.subSeqDirectionFlag = stream.readUint8();\n\t\tdependencyInfo.layerNumber = stream.readUint8();\n\t\tdependencyInfo.subSequenceIdentifier = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/samplegroups/dtrt.js\nBoxParser.createSampleGroupCtor(\"dtrt\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/mvif.js\nBoxParser.createSampleGroupCtor(\"mvif\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/prol.js\nBoxParser.createSampleGroupCtor(\"prol\", function(stream) {\n\tthis.roll_distance = stream.readInt16();\n});\n\n// file:src/parsing/samplegroups/rap.js\nBoxParser.createSampleGroupCtor(\"rap \", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.num_leading_samples_known = tmp_byte >> 7;\n\tthis.num_leading_samples = tmp_byte & 0x7F;\n});\n\n// file:src/parsing/samplegroups/rash.js\nBoxParser.createSampleGroupCtor(\"rash\", function(stream) {\n\tthis.operation_point_count = stream.readUint16();\n\tif (this.description_length !== 2+(this.operation_point_count === 1?2:this.operation_point_count*6)+9) {\n\t\tLog.warn(\"BoxParser\", \"Mismatch in \"+this.grouping_type+\" sample group length\");\n\t\tthis.data = stream.readUint8Array(this.description_length-2);\n\t} else {\n\t\tif (this.operation_point_count === 1) {\n\t\t\tthis.target_rate_share = stream.readUint16();\n\t\t} else {\n\t\t\tthis.target_rate_share = [];\n\t\t\tthis.available_bitrate = [];\n\t\t\tfor (var i = 0; i < this.operation_point_count; i++) {\n\t\t\t\tthis.available_bitrate[i] = stream.readUint32();\n\t\t\t\tthis.target_rate_share[i] = stream.readUint16();\n\t\t\t}\n\t\t}\n\t\tthis.maximum_bitrate = stream.readUint32();\n\t\tthis.minimum_bitrate = stream.readUint32();\n\t\tthis.discard_priority = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/samplegroups/roll.js\nBoxParser.createSampleGroupCtor(\"roll\", function(stream) {\n\tthis.roll_distance = stream.readInt16();\n});\n\n// file:src/parsing/samplegroups/samplegroup.js\nBoxParser.SampleGroupEntry.prototype.parse = function(stream) {\n\tLog.warn(\"BoxParser\", \"Unknown Sample Group type: \"+this.grouping_type);\n\tthis.data = stream.readUint8Array(this.description_length);\n}\n\n// file:src/parsing/samplegroups/scif.js\nBoxParser.createSampleGroupCtor(\"scif\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/scnm.js\nBoxParser.createSampleGroupCtor(\"scnm\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/seig.js\nBoxParser.createSampleGroupCtor(\"seig\", function(stream) {\n\tthis.reserved = stream.readUint8();\n\tvar tmp = stream.readUint8();\n\tthis.crypt_byte_block = tmp >> 4;\n\tthis.skip_byte_block = tmp & 0xF;\n\tthis.isProtected = stream.readUint8();\n\tthis.Per_Sample_IV_Size = stream.readUint8();\n\tthis.KID = BoxParser.parseHex16(stream);\n\tthis.constant_IV_size = 0;\n\tthis.constant_IV = 0;\n\tif (this.isProtected === 1 && this.Per_Sample_IV_Size === 0) {\n\t\tthis.constant_IV_size = stream.readUint8();\n\t\tthis.constant_IV = stream.readUint8Array(this.constant_IV_size);\n\t}\n});\n\n// file:src/parsing/samplegroups/stsa.js\nBoxParser.createSampleGroupCtor(\"stsa\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/sync.js\nBoxParser.createSampleGroupCtor(\"sync\", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.NAL_unit_type = tmp_byte & 0x3F;\n});\n\n// file:src/parsing/samplegroups/tele.js\nBoxParser.createSampleGroupCtor(\"tele\", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.level_independently_decodable = tmp_byte >> 7;\n});\n\n// file:src/parsing/samplegroups/tsas.js\nBoxParser.createSampleGroupCtor(\"tsas\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/tscl.js\nBoxParser.createSampleGroupCtor(\"tscl\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/vipr.js\nBoxParser.createSampleGroupCtor(\"vipr\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/sbgp.js\nBoxParser.createFullBoxCtor(\"sbgp\", \"SampleToGroupBox\", function(stream) {\n\tthis.grouping_type = stream.readString(4);\n\tif (this.version === 1) {\n\t\tthis.grouping_type_parameter = stream.readUint32();\n\t} else {\n\t\tthis.grouping_type_parameter = 0;\n\t}\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry = {};\n\t\tthis.entries.push(entry);\n\t\tentry.sample_count = stream.readInt32();\n\t\tentry.group_description_index = stream.readInt32();\n\t}\n});\n\n// file:src/parsing/sbpm.js\nfunction Pixel(row, col) {\n\tthis.bad_pixel_row = row;\n\tthis.bad_pixel_column = col;\n}\n\nPixel.prototype.toString = function pixelToString() {\n\treturn \"[row: \" + this.bad_pixel_row + \", column: \" + this.bad_pixel_column + \"]\";\n}\n\nBoxParser.createFullBoxCtor(\"sbpm\", \"SensorBadPixelsMapBox\", function(stream) {\n\tvar i;\n\tthis.component_count = stream.readUint16();\n this.component_index = [];\n for (i = 0; i < this.component_count; i++) {\n this.component_index.push(stream.readUint16());\n }\n\tvar flags = stream.readUint8();\n\tthis.correction_applied = (0x80 == (flags & 0x80));\n\tthis.num_bad_rows = stream.readUint32();\n\tthis.num_bad_cols = stream.readUint32();\n\tthis.num_bad_pixels = stream.readUint32();\n\tthis.bad_rows = [];\n\tthis.bad_columns = [];\n\tthis.bad_pixels = [];\n\tfor (i = 0; i < this.num_bad_rows; i++) {\n\t\tthis.bad_rows.push(stream.readUint32());\n\t}\n\tfor (i = 0; i < this.num_bad_cols; i++) {\n\t\tthis.bad_columns.push(stream.readUint32());\n\t}\n\tfor (i = 0; i < this.num_bad_pixels; i++) {\n\t\tvar row = stream.readUint32();\n\t\tvar col = stream.readUint32();\n\t\tthis.bad_pixels.push(new Pixel(row, col));\n\t}\n});\n\n// file:src/parsing/schm.js\nBoxParser.createFullBoxCtor(\"schm\", \"SchemeTypeBox\", function(stream) {\n\tthis.scheme_type = stream.readString(4);\n\tthis.scheme_version = stream.readUint32();\n\tif (this.flags & 0x000001) {\n\t\tthis.scheme_uri = stream.readString(this.size - this.hdr_size - 8);\n\t}\n});\n\n// file:src/parsing/sdp.js\nBoxParser.createBoxCtor(\"sdp \", \"rtptracksdphintinformation\", function(stream) {\n\tthis.sdptext = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/sdtp.js\nBoxParser.createFullBoxCtor(\"sdtp\", \"SampleDependencyTypeBox\", function(stream) {\n\tvar tmp_byte;\n\tvar count = (this.size - this.hdr_size);\n\tthis.is_leading = [];\n\tthis.sample_depends_on = [];\n\tthis.sample_is_depended_on = [];\n\tthis.sample_has_redundancy = [];\n\tfor (var i = 0; i < count; i++) {\n\t\ttmp_byte = stream.readUint8();\n\t\tthis.is_leading[i] = tmp_byte >> 6;\n\t\tthis.sample_depends_on[i] = (tmp_byte >> 4) & 0x3;\n\t\tthis.sample_is_depended_on[i] = (tmp_byte >> 2) & 0x3;\n\t\tthis.sample_has_redundancy[i] = tmp_byte & 0x3;\n\t}\n});\n\n// file:src/parsing/senc.js\n// Cannot be fully parsed because Per_Sample_IV_Size needs to be known\r\nBoxParser.createFullBoxCtor(\"senc\", \"SampleEncryptionBox\" /*, function(stream) {\r\n\tthis.parseFullHeader(stream);\r\n\tvar sample_count = stream.readUint32();\r\n\tthis.samples = [];\r\n\tfor (var i = 0; i < sample_count; i++) {\r\n\t\tvar sample = {};\r\n\t\t// tenc.default_Per_Sample_IV_Size or seig.Per_Sample_IV_Size\r\n\t\tsample.InitializationVector = this.readUint8Array(Per_Sample_IV_Size*8);\r\n\t\tif (this.flags & 0x2) {\r\n\t\t\tsample.subsamples = [];\r\n\t\t\tsubsample_count = stream.readUint16();\r\n\t\t\tfor (var j = 0; j < subsample_count; j++) {\r\n\t\t\t\tvar subsample = {};\r\n\t\t\t\tsubsample.BytesOfClearData = stream.readUint16();\r\n\t\t\t\tsubsample.BytesOfProtectedData = stream.readUint32();\r\n\t\t\t\tsample.subsamples.push(subsample);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// TODO\r\n\t\tthis.samples.push(sample);\r\n\t}\r\n}*/);\r\n// file:src/parsing/sgpd.js\nBoxParser.createFullBoxCtor(\"sgpd\", \"SampleGroupDescriptionBox\", function(stream) {\n\tthis.grouping_type = stream.readString(4);\n\tLog.debug(\"BoxParser\", \"Found Sample Groups of type \"+this.grouping_type);\n\tif (this.version === 1) {\n\t\tthis.default_length = stream.readUint32();\n\t} else {\n\t\tthis.default_length = 0;\n\t}\n\tif (this.version >= 2) {\n\t\tthis.default_group_description_index = stream.readUint32();\n\t}\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry;\n\t\tif (BoxParser[this.grouping_type+\"SampleGroupEntry\"]) {\n\t\t\tentry = new BoxParser[this.grouping_type+\"SampleGroupEntry\"](this.grouping_type);\n\t\t} else {\n\t\t\tentry = new BoxParser.SampleGroupEntry(this.grouping_type);\n\t\t}\n\t\tthis.entries.push(entry);\n\t\tif (this.version === 1) {\n\t\t\tif (this.default_length === 0) {\n\t\t\t\tentry.description_length = stream.readUint32();\n\t\t\t} else {\n\t\t\t\tentry.description_length = this.default_length;\n\t\t\t}\n\t\t} else {\n\t\t\tentry.description_length = this.default_length;\n\t\t}\n\t\tif (entry.write === BoxParser.SampleGroupEntry.prototype.write) {\n\t\t\tLog.info(\"BoxParser\", \"SampleGroup for type \"+this.grouping_type+\" writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t// storing data\n\t\t\tentry.data = stream.readUint8Array(entry.description_length);\n\t\t\t// rewinding\n\t\t\tstream.position -= entry.description_length;\n\t\t}\n\t\tentry.parse(stream);\n\t}\n});\n\n// file:src/parsing/sidx.js\nBoxParser.createFullBoxCtor(\"sidx\", \"CompressedSegmentIndexBox\", function(stream) {\n\tthis.reference_ID = stream.readUint32();\n\tthis.timescale = stream.readUint32();\n\tif (this.version === 0) {\n\t\tthis.earliest_presentation_time = stream.readUint32();\n\t\tthis.first_offset = stream.readUint32();\n\t} else {\n\t\tthis.earliest_presentation_time = stream.readUint64();\n\t\tthis.first_offset = stream.readUint64();\n\t}\n\tstream.readUint16();\n\tthis.references = [];\n\tvar count = stream.readUint16();\n\tfor (var i = 0; i < count; i++) {\n\t\tvar ref = {};\n\t\tthis.references.push(ref);\n\t\tvar tmp_32 = stream.readUint32();\n\t\tref.reference_type = (tmp_32 >> 31) & 0x1;\n\t\tref.referenced_size = tmp_32 & 0x7FFFFFFF;\n\t\tref.subsegment_duration = stream.readUint32();\n\t\ttmp_32 = stream.readUint32();\n\t\tref.starts_with_SAP = (tmp_32 >> 31) & 0x1;\n\t\tref.SAP_type = (tmp_32 >> 28) & 0x7;\n\t\tref.SAP_delta_time = tmp_32 & 0xFFFFFFF;\n\t}\n});\n\n// file:src/parsing/singleitemtypereference.js\nBoxParser.SingleItemTypeReferenceBox = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.SingleItemTypeReferenceBox.prototype = new BoxParser.Box();\nBoxParser.SingleItemTypeReferenceBox.prototype.parse = function(stream) {\n\tthis.from_item_ID = stream.readUint16();\n\tvar count = stream.readUint16();\n\tthis.references = [];\n\tfor(var i = 0; i < count; i++) {\n\t\tthis.references[i] = {};\n\t\tthis.references[i].to_item_ID = stream.readUint16();\n\t}\n}\n\n// file:src/parsing/singleitemtypereferencelarge.js\nBoxParser.SingleItemTypeReferenceBoxLarge = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.SingleItemTypeReferenceBoxLarge.prototype = new BoxParser.Box();\nBoxParser.SingleItemTypeReferenceBoxLarge.prototype.parse = function(stream) {\n\tthis.from_item_ID = stream.readUint32();\n\tvar count = stream.readUint16();\n\tthis.references = [];\n\tfor(var i = 0; i < count; i++) {\n\t\tthis.references[i] = {};\n\t\tthis.references[i].to_item_ID = stream.readUint32();\n\t}\n}\n\n// file:src/parsing/SmDm.js\nBoxParser.createFullBoxCtor(\"SmDm\", \"SMPTE2086MasteringDisplayMetadataBox\", function(stream) {\n\tthis.primaryRChromaticity_x = stream.readUint16();\n this.primaryRChromaticity_y = stream.readUint16();\n this.primaryGChromaticity_x = stream.readUint16();\n this.primaryGChromaticity_y = stream.readUint16();\n this.primaryBChromaticity_x = stream.readUint16();\n this.primaryBChromaticity_y = stream.readUint16();\n this.whitePointChromaticity_x = stream.readUint16();\n this.whitePointChromaticity_y = stream.readUint16();\n this.luminanceMax = stream.readUint32();\n this.luminanceMin = stream.readUint32();\n});\n\n// file:src/parsing/smhd.js\nBoxParser.createFullBoxCtor(\"smhd\", \"SoundMediaHeaderBox\", function(stream) {\n\tthis.balance = stream.readUint16();\n\tstream.readUint16();\n});\n\n// file:src/parsing/ssix.js\nBoxParser.createFullBoxCtor(\"ssix\", \"CompressedSubsegmentIndexBox\", function(stream) {\n\tthis.subsegments = [];\n\tvar subsegment_count = stream.readUint32();\n\tfor (var i = 0; i < subsegment_count; i++) {\n\t\tvar subsegment = {};\n\t\tthis.subsegments.push(subsegment);\n\t\tsubsegment.ranges = [];\n\t\tvar range_count = stream.readUint32();\n\t\tfor (var j = 0; j < range_count; j++) {\n\t\t\tvar range = {};\n\t\t\tsubsegment.ranges.push(range);\n\t\t\trange.level = stream.readUint8();\n\t\t\trange.range_size = stream.readUint24();\n\t\t}\n\t}\n});\n\n// file:src/parsing/stco.js\nBoxParser.createFullBoxCtor(\"stco\", \"ChunkOffsetBox\", function(stream) {\n\tvar entry_count;\n\tentry_count = stream.readUint32();\n\tthis.chunk_offsets = [];\n\tif (this.version === 0) {\n\t\tfor (var i = 0; i < entry_count; i++) {\n\t\t\tthis.chunk_offsets.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stdp.js\nBoxParser.createFullBoxCtor(\"stdp\", \"DegradationPriorityBox\", function(stream) {\n\tvar count = (this.size - this.hdr_size)/2;\n\tthis.priority = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.priority[i] = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/sthd.js\nBoxParser.createFullBoxCtor(\"sthd\", \"SubtitleMediaHeaderBox\");\n\n// file:src/parsing/stri.js\nBoxParser.createFullBoxCtor(\"stri\", \"SubTrackInformationBox\", function(stream) {\n\tthis.switch_group = stream.readUint16();\n\tthis.alternate_group = stream.readUint16();\n\tthis.sub_track_id = stream.readUint32();\n\tvar count = (this.size - this.hdr_size - 8)/4;\n\tthis.attribute_list = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.attribute_list[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/stsc.js\nBoxParser.createFullBoxCtor(\"stsc\", \"SampleToChunkBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.first_chunk = [];\n\tthis.samples_per_chunk = [];\n\tthis.sample_description_index = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.first_chunk.push(stream.readUint32());\n\t\t\tthis.samples_per_chunk.push(stream.readUint32());\n\t\t\tthis.sample_description_index.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stsd.js\nBoxParser.createFullBoxCtor(\"stsd\", \"SampleDescriptionBox\", function(stream) {\n\tvar i;\n\tvar ret;\n\tvar entryCount;\n\tvar box;\n\tthis.entries = [];\n\tentryCount = stream.readUint32();\n\tfor (i = 1; i <= entryCount; i++) {\n\t\tret = BoxParser.parseOneBox(stream, true, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tif (BoxParser[ret.type+\"SampleEntry\"]) {\n\t\t\t\tbox = new BoxParser[ret.type+\"SampleEntry\"](ret.size);\n\t\t\t\tbox.hdr_size = ret.hdr_size;\n\t\t\t\tbox.start = ret.start;\n\t\t\t} else {\n\t\t\t\tLog.warn(\"BoxParser\", \"Unknown sample entry type: \"+ret.type);\n\t\t\t\tbox = new BoxParser.SampleEntry(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\t}\n\t\t\tif (box.write === BoxParser.SampleEntry.prototype.write) {\n\t\t\t\tLog.info(\"BoxParser\", \"SampleEntry \"+box.type+\" box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t\tbox.parseDataAndRewind(stream);\n\t\t\t}\n\t\t\tbox.parse(stream);\n\t\t\tthis.entries.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/stsg.js\nBoxParser.createFullBoxCtor(\"stsg\", \"SubTrackSampleGroupBox\", function(stream) {\n\tthis.grouping_type = stream.readUint32();\n\tvar count = stream.readUint16();\n\tthis.group_description_index = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.group_description_index[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/stsh.js\nBoxParser.createFullBoxCtor(\"stsh\", \"ShadowSyncSampleBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.shadowed_sample_numbers = [];\n\tthis.sync_sample_numbers = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.shadowed_sample_numbers.push(stream.readUint32());\n\t\t\tthis.sync_sample_numbers.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stss.js\nBoxParser.createFullBoxCtor(\"stss\", \"SyncSampleBox\", function(stream) {\n\tvar i;\n\tvar entry_count;\n\tentry_count = stream.readUint32();\n\tif (this.version === 0) {\n\t\tthis.sample_numbers = [];\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.sample_numbers.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stsz.js\nBoxParser.createFullBoxCtor(\"stsz\", \"SampleSizeBox\", function(stream) {\n\tvar i;\n\tthis.sample_sizes = [];\n\tif (this.version === 0) {\n\t\tthis.sample_size = stream.readUint32();\n\t\tthis.sample_count = stream.readUint32();\n\t\tfor (i = 0; i < this.sample_count; i++) {\n\t\t\tif (this.sample_size === 0) {\n\t\t\t\tthis.sample_sizes.push(stream.readUint32());\n\t\t\t} else {\n\t\t\t\tthis.sample_sizes[i] = this.sample_size;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/stts.js\nBoxParser.createFullBoxCtor(\"stts\", \"TimeToSampleBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tvar delta;\n\tentry_count = stream.readUint32();\n\tthis.sample_counts = [];\n\tthis.sample_deltas = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.sample_counts.push(stream.readUint32());\n\t\t\tdelta = stream.readInt32();\n\t\t\tif (delta < 0) {\n\t\t\t\tLog.warn(\"BoxParser\", \"File uses negative stts sample delta, using value 1 instead, sync may be lost!\");\n\t\t\t\tdelta = 1;\n\t\t\t}\n\t\t\tthis.sample_deltas.push(delta);\n\t\t}\n\t}\n});\n\n// file:src/parsing/stvi.js\nBoxParser.createFullBoxCtor(\"stvi\", \"StereoVideoBox\", function(stream) {\n\tvar tmp32 = stream.readUint32();\n\tthis.single_view_allowed = tmp32 & 0x3;\n\tthis.stereo_scheme = stream.readUint32();\n\tvar length = stream.readUint32();\n\tthis.stereo_indication_type = stream.readString(length);\n\tvar ret;\n\tvar box;\n\tthis.boxes = [];\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\tthis.boxes.push(box);\n\t\t\tthis[box.type] = box;\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/styp.js\nBoxParser.createBoxCtor(\"styp\", \"SegmentTypeBox\", function(stream) {\n\tBoxParser.ftypBox.prototype.parse.call(this, stream);\n});\n\n// file:src/parsing/stz2.js\nBoxParser.createFullBoxCtor(\"stz2\", \"CompactSampleSizeBox\", function(stream) {\n\tvar i;\n\tvar sample_size;\n\tvar sample_count;\n\tthis.sample_sizes = [];\n\tif (this.version === 0) {\n\t\tthis.reserved = stream.readUint24();\n\t\tthis.field_size = stream.readUint8();\n\t\tsample_count = stream.readUint32();\n\t\tif (this.field_size === 4) {\n\t\t\tfor (i = 0; i < sample_count; i+=2) {\n\t\t\t\tvar tmp = stream.readUint8();\n\t\t\t\tthis.sample_sizes[i] = (tmp >> 4) & 0xF;\n\t\t\t\tthis.sample_sizes[i+1] = tmp & 0xF;\n\t\t\t}\n\t\t} else if (this.field_size === 8) {\n\t\t\tfor (i = 0; i < sample_count; i++) {\n\t\t\t\tthis.sample_sizes[i] = stream.readUint8();\n\t\t\t}\n\t\t} else if (this.field_size === 16) {\n\t\t\tfor (i = 0; i < sample_count; i++) {\n\t\t\t\tthis.sample_sizes[i] = stream.readUint16();\n\t\t\t}\n\t\t} else {\n\t\t\tLog.error(\"BoxParser\", \"Error in length field in stz2 box\");\n\t\t}\n\t}\n});\n\n// file:src/parsing/subs.js\nBoxParser.createFullBoxCtor(\"subs\", \"SubSampleInformationBox\", function(stream) {\n\tvar i,j;\n\tvar entry_count;\n\tvar subsample_count;\n\tentry_count = stream.readUint32();\n\tthis.entries = [];\n\tfor (i = 0; i < entry_count; i++) {\n\t\tvar sampleInfo = {};\n\t\tthis.entries[i] = sampleInfo;\n\t\tsampleInfo.sample_delta = stream.readUint32();\n\t\tsampleInfo.subsamples = [];\n\t\tsubsample_count = stream.readUint16();\n\t\tif (subsample_count>0) {\n\t\t\tfor (j = 0; j < subsample_count; j++) {\n\t\t\t\tvar subsample = {};\n\t\t\t\tsampleInfo.subsamples.push(subsample);\n\t\t\t\tif (this.version == 1) {\n\t\t\t\t\tsubsample.size = stream.readUint32();\n\t\t\t\t} else {\n\t\t\t\t\tsubsample.size = stream.readUint16();\n\t\t\t\t}\n\t\t\t\tsubsample.priority = stream.readUint8();\n\t\t\t\tsubsample.discardable = stream.readUint8();\n\t\t\t\tsubsample.codec_specific_parameters = stream.readUint32();\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/tenc.js\nBoxParser.createFullBoxCtor(\"tenc\", \"TrackEncryptionBox\", function(stream) {\n\tstream.readUint8(); // reserved\n\tif (this.version === 0) {\n\t\tstream.readUint8();\n\t} else {\n\t\tvar tmp = stream.readUint8();\n\t\tthis.default_crypt_byte_block = (tmp >> 4) & 0xF;\n\t\tthis.default_skip_byte_block = tmp & 0xF;\n\t}\n\tthis.default_isProtected = stream.readUint8();\n\tthis.default_Per_Sample_IV_Size = stream.readUint8();\n\tthis.default_KID = BoxParser.parseHex16(stream);\n\tif (this.default_isProtected === 1 && this.default_Per_Sample_IV_Size === 0) {\n\t\tthis.default_constant_IV_size = stream.readUint8();\n\t\tthis.default_constant_IV = stream.readUint8Array(this.default_constant_IV_size);\n\t}\n});// file:src/parsing/tfdt.js\nBoxParser.createFullBoxCtor(\"tfdt\", \"TrackFragmentBaseMediaDecodeTimeBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.baseMediaDecodeTime = stream.readUint64();\n\t} else {\n\t\tthis.baseMediaDecodeTime = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/tfhd.js\nBoxParser.createFullBoxCtor(\"tfhd\", \"TrackFragmentHeaderBox\", function(stream) {\n\tvar readBytes = 0;\n\tthis.track_id = stream.readUint32();\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET)) {\n\t\tthis.base_data_offset = stream.readUint64();\n\t\treadBytes += 8;\n\t} else {\n\t\tthis.base_data_offset = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC)) {\n\t\tthis.default_sample_description_index = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_description_index = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR)) {\n\t\tthis.default_sample_duration = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_duration = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE)) {\n\t\tthis.default_sample_size = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_size = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS)) {\n\t\tthis.default_sample_flags = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_flags = 0;\n\t}\n});\n\n// file:src/parsing/tfra.js\nBoxParser.createFullBoxCtor(\"tfra\", \"TrackFragmentRandomAccessBox\", function(stream) {\n\tthis.track_ID = stream.readUint32();\n\tstream.readUint24();\n\tvar tmp_byte = stream.readUint8();\n\tthis.length_size_of_traf_num = (tmp_byte >> 4) & 0x3;\n\tthis.length_size_of_trun_num = (tmp_byte >> 2) & 0x3;\n\tthis.length_size_of_sample_num = (tmp_byte) & 0x3;\n\tthis.entries = [];\n\tvar number_of_entries = stream.readUint32();\n\tfor (var i = 0; i < number_of_entries; i++) {\n\t\tif (this.version === 1) {\n\t\t\tthis.time = stream.readUint64();\n\t\t\tthis.moof_offset = stream.readUint64();\n\t\t} else {\n\t\t\tthis.time = stream.readUint32();\n\t\t\tthis.moof_offset = stream.readUint32();\n\t\t}\n\t\tthis.traf_number = stream[\"readUint\"+(8*(this.length_size_of_traf_num+1))]();\n\t\tthis.trun_number = stream[\"readUint\"+(8*(this.length_size_of_trun_num+1))]();\n\t\tthis.sample_number = stream[\"readUint\"+(8*(this.length_size_of_sample_num+1))]();\n\t}\n});\n\n// file:src/parsing/tkhd.js\nBoxParser.createFullBoxCtor(\"tkhd\", \"TrackHeaderBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.track_id = stream.readUint32();\n\t\tstream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.track_id = stream.readUint32();\n\t\tstream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tstream.readUint32Array(2);\n\tthis.layer = stream.readInt16();\n\tthis.alternate_group = stream.readInt16();\n\tthis.volume = stream.readInt16()>>8;\n\tstream.readUint16();\n\tthis.matrix = stream.readInt32Array(9);\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});\n\n// file:src/parsing/tmax.js\nBoxParser.createBoxCtor(\"tmax\", \"hintmaxrelativetime\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/tmin.js\nBoxParser.createBoxCtor(\"tmin\", \"hintminrelativetime\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/totl.js\nBoxParser.createBoxCtor(\"totl\", \"hintBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint32();\n});\n\n// file:src/parsing/tpay.js\nBoxParser.createBoxCtor(\"tpay\", \"hintBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint32();\n});\n\n// file:src/parsing/tpyl.js\nBoxParser.createBoxCtor(\"tpyl\", \"hintBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/TrackGroup.js\nBoxParser.TrackGroupTypeBox.prototype.parse = function(stream) {\n\tthis.parseFullHeader(stream);\n\tthis.track_group_id = stream.readUint32();\n}\n\n// file:src/parsing/trackgroups/msrc.js\nBoxParser.createTrackGroupCtor(\"msrc\");// file:src/parsing/TrakReference.js\nBoxParser.TrackReferenceTypeBox = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.TrackReferenceTypeBox.prototype = new BoxParser.Box();\nBoxParser.TrackReferenceTypeBox.prototype.parse = function(stream) {\n\tthis.track_ids = stream.readUint32Array((this.size-this.hdr_size)/4);\n}\n\n// file:src/parsing/tref.js\nBoxParser.trefBox.prototype.parse = function(stream) {\n\tvar ret;\n\tvar box;\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, true, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = new BoxParser.TrackReferenceTypeBox(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\t\t\tLog.info(\"BoxParser\", \"TrackReference \"+box.type+\" box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t\tbox.parseDataAndRewind(stream);\n\t\t\t}\n\t\t\tbox.parse(stream);\n\t\t\tthis.boxes.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n}\n\n// file:src/parsing/trep.js\nBoxParser.createFullBoxCtor(\"trep\", \"TrackExtensionPropertiesBox\", function(stream) {\n\tthis.track_ID = stream.readUint32();\n\tthis.boxes = [];\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\tthis.boxes.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/trex.js\nBoxParser.createFullBoxCtor(\"trex\", \"TrackExtendsBox\", function(stream) {\n\tthis.track_id = stream.readUint32();\n\tthis.default_sample_description_index = stream.readUint32();\n\tthis.default_sample_duration = stream.readUint32();\n\tthis.default_sample_size = stream.readUint32();\n\tthis.default_sample_flags = stream.readUint32();\n});\n\n// file:src/parsing/trpy.js\nBoxParser.createBoxCtor(\"trpy\", \"hintBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/trun.js\nBoxParser.createFullBoxCtor(\"trun\", \"TrackRunBox\", function(stream) {\n\tvar readBytes = 0;\n\tthis.sample_count = stream.readUint32();\n\treadBytes+= 4;\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) ) {\n\t\tthis.data_offset = stream.readInt32(); //signed\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.data_offset = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) ) {\n\t\tthis.first_sample_flags = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.first_sample_flags = 0;\n\t}\n\tthis.sample_duration = [];\n\tthis.sample_size = [];\n\tthis.sample_flags = [];\n\tthis.sample_composition_time_offset = [];\n\tif (this.size - this.hdr_size > readBytes) {\n\t\tfor (var i = 0; i < this.sample_count; i++) {\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\t\tthis.sample_duration[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\t\tthis.sample_size[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\t\tthis.sample_flags[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\t\tif (this.version === 0) {\n\t\t\t\t\tthis.sample_composition_time_offset[i] = stream.readUint32();\n\t\t\t\t} else {\n\t\t\t\t\tthis.sample_composition_time_offset[i] = stream.readInt32(); //signed\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/tsel.js\nBoxParser.createFullBoxCtor(\"tsel\", \"TrackSelectionBox\", function(stream) {\n\tthis.switch_group = stream.readUint32();\n\tvar count = (this.size - this.hdr_size - 4)/4;\n\tthis.attribute_list = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.attribute_list[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/txtC.js\nBoxParser.createFullBoxCtor(\"txtC\", \"TextConfigBox\", function(stream) {\n\tthis.config = stream.readCString();\n});\n\n// file:src/parsing/tyco.js\nBoxParser.createBoxCtor(\"tyco\", \"TypeCombinationBox\", function(stream) {\n\tvar count = (this.size - this.hdr_size) / 4;\n\tthis.compatible_brands = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.compatible_brands[i] = stream.readString(4);\n\t}\n});\n\n// file:src/parsing/udes.js\nBoxParser.createFullBoxCtor(\"udes\", \"UserDescriptionProperty\", function(stream) {\n\tthis.lang = stream.readCString();\n\tthis.name = stream.readCString();\n\tthis.description = stream.readCString();\n\tthis.tags = stream.readCString();\n});\n\n// file:src/parsing/uncC.js\nBoxParser.createFullBoxCtor(\"uncC\", \"UncompressedFrameConfigBox\", function(stream) {\n var i;\n this.profile = stream.readString(4);\n if (this.version == 1) {\n // Nothing - just the profile\n } else if (this.version == 0) {\n this.component_count = stream.readUint32();\n this.component_index = [];\n this.component_bit_depth_minus_one = [];\n this.component_format = [];\n this.component_align_size = [];\n for (i = 0; i < this.component_count; i++) {\n this.component_index.push(stream.readUint16());\n this.component_bit_depth_minus_one.push(stream.readUint8());\n this.component_format.push(stream.readUint8());\n this.component_align_size.push(stream.readUint8());\n }\n this.sampling_type = stream.readUint8();\n this.interleave_type = stream.readUint8();\n this.block_size = stream.readUint8();\n var flags = stream.readUint8();\n this.component_little_endian = (flags >> 7) & 0x1;\n this.block_pad_lsb = (flags >> 6) & 0x1;\n this.block_little_endian = (flags >> 5) & 0x1;\n this.block_reversed = (flags >> 4) & 0x1;\n this.pad_unknown = (flags >> 3) & 0x1;\n this.pixel_size = stream.readUint32();\n this.row_align_size = stream.readUint32();\n this.tile_align_size = stream.readUint32();\n this.num_tile_cols_minus_one = stream.readUint32();\n this.num_tile_rows_minus_one = stream.readUint32();\n }\n});\n\n// file:src/parsing/url.js\nBoxParser.createFullBoxCtor(\"url \", \"DataEntryUrlBox\", function(stream) {\n\tif (this.flags !== 0x000001) {\n\t\tthis.location = stream.readCString();\n\t}\n});\n\n// file:src/parsing/urn.js\nBoxParser.createFullBoxCtor(\"urn \", \"DataEntryUrnBox\", function(stream) {\n\tthis.name = stream.readCString();\n\tif (this.size - this.hdr_size - this.name.length - 1 > 0) {\n\t\tthis.location = stream.readCString();\n\t}\n});\n\n// file:src/parsing/uuid/piff/piffLsm.js\nBoxParser.createUUIDBox(\"a5d40b30e81411ddba2f0800200c9a66\", \"LiveServerManifestBox\", true, false, function(stream) {\n this.LiveServerManifest = stream.readString(this.size - this.hdr_size)\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n});// file:src/parsing/uuid/piff/piffPssh.js\nBoxParser.createUUIDBox(\"d08a4f1810f34a82b6c832d8aba183d3\", \"PiffProtectionSystemSpecificHeaderBox\", true, false, function(stream) {\n\tthis.system_id = BoxParser.parseHex16(stream);\n\tvar datasize = stream.readUint32();\n\tif (datasize > 0) {\n\t\tthis.data = stream.readUint8Array(datasize);\n\t}\n});\n\n// file:src/parsing/uuid/piff/piffSenc.js\nBoxParser.createUUIDBox(\"a2394f525a9b4f14a2446c427c648df4\", \"PiffSampleEncryptionBox\", true, false /*, function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.AlgorithmID = stream.readUint24();\n\t\tthis.IV_size = stream.readUint8();\n\t\tthis.KID = BoxParser.parseHex16(stream);\n\t}\n\tvar sample_count = stream.readUint32();\n\tthis.samples = [];\n\tfor (var i = 0; i < sample_count; i++) {\n\t\tvar sample = {};\n\t\tsample.InitializationVector = this.readUint8Array(this.IV_size*8);\n\t\tif (this.flags & 0x2) {\n\t\t\tsample.subsamples = [];\n\t\t\tsample.NumberOfEntries = stream.readUint16();\n\t\t\tfor (var j = 0; j < sample.NumberOfEntries; j++) {\n\t\t\t\tvar subsample = {};\n\t\t\t\tsubsample.BytesOfClearData = stream.readUint16();\n\t\t\t\tsubsample.BytesOfProtectedData = stream.readUint32();\n\t\t\t\tsample.subsamples.push(subsample);\n\t\t\t}\n\t\t}\n\t\tthis.samples.push(sample);\n\t}\n}*/);\n// file:src/parsing/uuid/piff/piffTenc.js\nBoxParser.createUUIDBox(\"8974dbce7be74c5184f97148f9882554\", \"PiffTrackEncryptionBox\", true, false, function(stream) {\n\tthis.default_AlgorithmID = stream.readUint24();\n\tthis.default_IV_size = stream.readUint8();\n\tthis.default_KID = BoxParser.parseHex16(stream);\n});// file:src/parsing/uuid/piff/piffTfrf.js\nBoxParser.createUUIDBox(\"d4807ef2ca3946958e5426cb9e46a79f\", \"TfrfBox\", true, false, function(stream) {\n this.fragment_count = stream.readUint8();\n this.entries = [];\n\n for (var i = 0; i < this.fragment_count; i++) {\n var entry = {};\n var absolute_time = 0;\n var absolute_duration = 0;\n\n if (this.version === 1) {\n absolute_time = stream.readUint64();\n absolute_duration = stream.readUint64();\n } else {\n absolute_time = stream.readUint32();\n absolute_duration = stream.readUint32();\n }\n\n entry.absolute_time = absolute_time;\n entry.absolute_duration = absolute_duration;\n\n this.entries.push(entry);\n }\n});// file:src/parsing/uuid/piff/piffTfxd.js\nBoxParser.createUUIDBox(\"6d1d9b0542d544e680e2141daff757b2\", \"TfxdBox\", true, false, function(stream) {\n if (this.version === 1) {\n this.absolute_time = stream.readUint64();\n this.duration = stream.readUint64();\n } else {\n this.absolute_time = stream.readUint32();\n this.duration = stream.readUint32();\n }\n});// file:src/parsing/vmhd.js\nBoxParser.createFullBoxCtor(\"vmhd\", \"VideoMediaHeaderBox\", function(stream) {\n\tthis.graphicsmode = stream.readUint16();\n\tthis.opcolor = stream.readUint16Array(3);\n});\n\n// file:src/parsing/vpcC.js\nBoxParser.createFullBoxCtor(\"vpcC\", \"VPCodecConfigurationRecord\", function (stream) {\n\tvar tmp;\n\tif (this.version === 1) {\n\t\tthis.profile = stream.readUint8();\n\t\tthis.level = stream.readUint8();\n\t\ttmp = stream.readUint8();\n\t\tthis.bitDepth = tmp >> 4;\n\t\tthis.chromaSubsampling = (tmp >> 1) & 0x7;\n\t\tthis.videoFullRangeFlag = tmp & 0x1;\n\t\tthis.colourPrimaries = stream.readUint8();\n\t\tthis.transferCharacteristics = stream.readUint8();\n\t\tthis.matrixCoefficients = stream.readUint8();\n\t\tthis.codecIntializationDataSize = stream.readUint16();\n\t\tthis.codecIntializationData = stream.readUint8Array(this.codecIntializationDataSize);\n\t} else {\n\t\tthis.profile = stream.readUint8();\n\t\tthis.level = stream.readUint8();\n\t\ttmp = stream.readUint8();\n\t\tthis.bitDepth = (tmp >> 4) & 0xF;\n\t\tthis.colorSpace = tmp & 0xF;\n\t\ttmp = stream.readUint8();\n\t\tthis.chromaSubsampling = (tmp >> 4) & 0xF;\n\t\tthis.transferFunction = (tmp >> 1) & 0x7;\n\t\tthis.videoFullRangeFlag = tmp & 0x1;\n\t\tthis.codecIntializationDataSize = stream.readUint16();\n\t\tthis.codecIntializationData = stream.readUint8Array(this.codecIntializationDataSize);\n\t}\n});// file:src/parsing/vttC.js\nBoxParser.createBoxCtor(\"vttC\", \"WebVTTConfigurationBox\", function(stream) {\n\tthis.text = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/vvcC.js\nBoxParser.createFullBoxCtor(\"vvcC\", \"VvcConfigurationBox\", function (stream) {\n var i, j;\n\n // helper object to simplify extracting individual bits\n var bitReader = {\n held_bits: undefined,\n num_held_bits: 0,\n\n stream_read_1_bytes: function (strm) {\n this.held_bits = strm.readUint8();\n this.num_held_bits = 1 * 8;\n },\n stream_read_2_bytes: function (strm) {\n this.held_bits = strm.readUint16();\n this.num_held_bits = 2 * 8;\n },\n\n extract_bits: function (num_bits) {\n var ret = (this.held_bits >> (this.num_held_bits - num_bits)) & ((1 << num_bits) - 1);\n this.num_held_bits -= num_bits;\n return ret;\n }\n };\n\n // VvcDecoderConfigurationRecord\n bitReader.stream_read_1_bytes(stream);\n bitReader.extract_bits(5); // reserved\n this.lengthSizeMinusOne = bitReader.extract_bits(2);\n this.ptl_present_flag = bitReader.extract_bits(1);\n\n if (this.ptl_present_flag) {\n bitReader.stream_read_2_bytes(stream);\n this.ols_idx = bitReader.extract_bits(9);\n this.num_sublayers = bitReader.extract_bits(3);\n this.constant_frame_rate = bitReader.extract_bits(2);\n this.chroma_format_idc = bitReader.extract_bits(2);\n\n bitReader.stream_read_1_bytes(stream);\n this.bit_depth_minus8 = bitReader.extract_bits(3);\n bitReader.extract_bits(5); // reserved\n\n // VvcPTLRecord\n {\n bitReader.stream_read_2_bytes(stream);\n bitReader.extract_bits(2); // reserved\n this.num_bytes_constraint_info = bitReader.extract_bits(6);\n this.general_profile_idc = bitReader.extract_bits(7);\n this.general_tier_flag = bitReader.extract_bits(1);\n\n this.general_level_idc = stream.readUint8();\n\n bitReader.stream_read_1_bytes(stream);\n this.ptl_frame_only_constraint_flag = bitReader.extract_bits(1);\n this.ptl_multilayer_enabled_flag = bitReader.extract_bits(1);\n\n this.general_constraint_info = new Uint8Array(this.num_bytes_constraint_info);\n if (this.num_bytes_constraint_info) {\n for (i = 0; i < this.num_bytes_constraint_info - 1; i++) {\n var cnstr1 = bitReader.extract_bits(6);\n bitReader.stream_read_1_bytes(stream);\n var cnstr2 = bitReader.extract_bits(2);\n\n this.general_constraint_info[i] = ((cnstr1 << 2) | cnstr2);\n }\n this.general_constraint_info[this.num_bytes_constraint_info - 1] = bitReader.extract_bits(6);\n } else {\n //forbidden in spec!\n bitReader.extract_bits(6);\n }\n\n if (this.num_sublayers > 1) {\n bitReader.stream_read_1_bytes(stream);\n this.ptl_sublayer_present_mask = 0;\n for (j = this.num_sublayers - 2; j >= 0; --j) {\n var val = bitReader.extract_bits(1);\n this.ptl_sublayer_present_mask |= val << j;\n }\n for (j = this.num_sublayers; j <= 8 && this.num_sublayers > 1; ++j) {\n bitReader.extract_bits(1); // ptl_reserved_zero_bit\n }\n\n this.sublayer_level_idc = [];\n for (j = this.num_sublayers - 2; j >= 0; --j) {\n if (this.ptl_sublayer_present_mask & (1 << j)) {\n this.sublayer_level_idc[j] = stream.readUint8();\n }\n }\n }\n\n this.ptl_num_sub_profiles = stream.readUint8();\n this.general_sub_profile_idc = [];\n if (this.ptl_num_sub_profiles) {\n for (i = 0; i < this.ptl_num_sub_profiles; i++) {\n this.general_sub_profile_idc.push(stream.readUint32());\n }\n }\n } // end VvcPTLRecord\n\n this.max_picture_width = stream.readUint16();\n this.max_picture_height = stream.readUint16();\n this.avg_frame_rate = stream.readUint16();\n }\n\n var VVC_NALU_OPI = 12;\n var VVC_NALU_DEC_PARAM = 13;\n\n this.nalu_arrays = [];\n var num_of_arrays = stream.readUint8();\n for (i = 0; i < num_of_arrays; i++) {\n var nalu_array = [];\n this.nalu_arrays.push(nalu_array);\n\n bitReader.stream_read_1_bytes(stream);\n nalu_array.completeness = bitReader.extract_bits(1);\n bitReader.extract_bits(2); // reserved\n nalu_array.nalu_type = bitReader.extract_bits(5);\n\n var numNalus = 1;\n if (nalu_array.nalu_type != VVC_NALU_DEC_PARAM && nalu_array.nalu_type != VVC_NALU_OPI) {\n numNalus = stream.readUint16();\n }\n\n for (j = 0; j < numNalus; j++) {\n var len = stream.readUint16();\n nalu_array.push({\n data: stream.readUint8Array(len),\n length: len\n });\n }\n }\n});\n// file:src/parsing/vvnC.js\nBoxParser.createFullBoxCtor(\"vvnC\", \"VvcNALUConfigBox\", function (stream) {\n // VvcNALUConfigBox\n var tmp = strm.readUint8();\n this.lengthSizeMinusOne = (tmp & 0x3);\n});\n// file:src/box-codecs.js\nBoxParser.SampleEntry.prototype.isVideo = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isAudio = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isSubtitle = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isMetadata = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isHint = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.getCodec = function() {\n\treturn this.type.replace('.','');\n}\n\nBoxParser.SampleEntry.prototype.getWidth = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getHeight = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getChannelCount = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getSampleRate = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getSampleSize = function() {\n\treturn \"\";\n}\n\nBoxParser.VisualSampleEntry.prototype.isVideo = function() {\n\treturn true;\n}\n\nBoxParser.VisualSampleEntry.prototype.getWidth = function() {\n\treturn this.width;\n}\n\nBoxParser.VisualSampleEntry.prototype.getHeight = function() {\n\treturn this.height;\n}\n\nBoxParser.AudioSampleEntry.prototype.isAudio = function() {\n\treturn true;\n}\n\nBoxParser.AudioSampleEntry.prototype.getChannelCount = function() {\n\treturn this.channel_count;\n}\n\nBoxParser.AudioSampleEntry.prototype.getSampleRate = function() {\n\treturn this.samplerate;\n}\n\nBoxParser.AudioSampleEntry.prototype.getSampleSize = function() {\n\treturn this.samplesize;\n}\n\nBoxParser.SubtitleSampleEntry.prototype.isSubtitle = function() {\n\treturn true;\n}\n\nBoxParser.MetadataSampleEntry.prototype.isMetadata = function() {\n\treturn true;\n}\n\n\nBoxParser.decimalToHex = function(d, padding) {\n\tvar hex = Number(d).toString(16);\n\tpadding = typeof (padding) === \"undefined\" || padding === null ? padding = 2 : padding;\n\twhile (hex.length < padding) {\n\t\thex = \"0\" + hex;\n\t}\n\treturn hex;\n}\n\nBoxParser.avc1SampleEntry.prototype.getCodec =\nBoxParser.avc2SampleEntry.prototype.getCodec =\nBoxParser.avc3SampleEntry.prototype.getCodec =\nBoxParser.avc4SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.avcC) {\n\t\treturn baseCodec+\".\"+BoxParser.decimalToHex(this.avcC.AVCProfileIndication)+\n\t\t\t\t\t\t \"\"+BoxParser.decimalToHex(this.avcC.profile_compatibility)+\n\t\t\t\t\t\t \"\"+BoxParser.decimalToHex(this.avcC.AVCLevelIndication);\n\t} else {\n\t\treturn baseCodec;\n\t}\n}\n\nBoxParser.hev1SampleEntry.prototype.getCodec =\nBoxParser.hvc1SampleEntry.prototype.getCodec = function() {\n\tvar i;\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.hvcC) {\n\t\tbaseCodec += '.';\n\t\tswitch (this.hvcC.general_profile_space) {\n\t\t\tcase 0:\n\t\t\t\tbaseCodec += '';\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tbaseCodec += 'A';\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tbaseCodec += 'B';\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tbaseCodec += 'C';\n\t\t\t\tbreak;\n\t\t}\n\t\tbaseCodec += this.hvcC.general_profile_idc;\n\t\tbaseCodec += '.';\n\t\tvar val = this.hvcC.general_profile_compatibility;\n\t\tvar reversed = 0;\n\t\tfor (i=0; i<32; i++) {\n\t\t\treversed |= val & 1;\n\t\t\tif (i==31) break;\n\t\t\treversed <<= 1;\n\t\t\tval >>=1;\n\t\t}\n\t\tbaseCodec += BoxParser.decimalToHex(reversed, 0);\n\t\tbaseCodec += '.';\n\t\tif (this.hvcC.general_tier_flag === 0) {\n\t\t\tbaseCodec += 'L';\n\t\t} else {\n\t\t\tbaseCodec += 'H';\n\t\t}\n\t\tbaseCodec += this.hvcC.general_level_idc;\n\t\tvar hasByte = false;\n\t\tvar constraint_string = \"\";\n\t\tfor (i = 5; i >= 0; i--) {\n\t\t\tif (this.hvcC.general_constraint_indicator[i] || hasByte) {\n\t\t\t\tconstraint_string = \".\"+BoxParser.decimalToHex(this.hvcC.general_constraint_indicator[i], 0)+constraint_string;\n\t\t\t\thasByte = true;\n\t\t\t}\n\t\t}\n\t\tbaseCodec += constraint_string;\n\t}\n\treturn baseCodec;\n}\n\nBoxParser.vvc1SampleEntry.prototype.getCodec =\nBoxParser.vvi1SampleEntry.prototype.getCodec = function () {\n\tvar i;\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.vvcC) {\n\t\tbaseCodec += '.' + this.vvcC.general_profile_idc;\n\t\tif (this.vvcC.general_tier_flag) {\n\t\t\tbaseCodec += '.H';\n\t\t} else {\n\t\t\tbaseCodec += '.L';\n\t\t}\n\t\tbaseCodec += this.vvcC.general_level_idc;\n\n\t\tvar constraint_string = \"\";\n\t\tif (this.vvcC.general_constraint_info) {\n\t\t\tvar bytes = [];\n\t\t\tvar byte = 0;\n\t\t\tbyte |= this.vvcC.ptl_frame_only_constraint << 7;\n\t\t\tbyte |= this.vvcC.ptl_multilayer_enabled << 6;\n\t\t\tvar last_nonzero;\n\t\t\tfor (i = 0; i < this.vvcC.general_constraint_info.length; ++i) {\n\t\t\t\tbyte |= (this.vvcC.general_constraint_info[i] >> 2) & 0x3f;\n\t\t\t\tbytes.push(byte);\n\t\t\t\tif (byte) {\n\t\t\t\t\tlast_nonzero = i;\n\t\t\t\t}\n\n\t\t\t\tbyte = (this.vvcC.general_constraint_info[i] >> 2) & 0x03;\n\t\t\t}\n\n\t\t\tif (last_nonzero === undefined) {\n\t\t\t\tconstraint_string = \".CA\";\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconstraint_string = \".C\"\n\t\t\t\tvar base32_chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\n\t\t\t\tvar held_bits = 0;\n\t\t\t\tvar num_held_bits = 0;\n\t\t\t\tfor (i = 0; i <= last_nonzero; ++i) {\n\t\t\t\t\theld_bits = (held_bits << 8) | bytes[i];\n\t\t\t\t\tnum_held_bits += 8;\n\n\t\t\t\t\twhile (num_held_bits >= 5) {\n\t\t\t\t\t\tvar val = (held_bits >> (num_held_bits - 5)) & 0x1f;\n\t\t\t\t\t\tconstraint_string += base32_chars[val];\n\n\t\t\t\t\t\tnum_held_bits -= 5;\n\t\t\t\t\t\theld_bits &= (1 << num_held_bits) - 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (num_held_bits) {\n\t\t\t\t\theld_bits <<= (5 - num_held_bits); // right-pad with zeros to 5 bits (is this correct?)\n\t\t\t\t\tconstraint_string += base32_chars[held_bits & 0x1f];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tbaseCodec += constraint_string;\n\t}\n\treturn baseCodec;\n}\n\nBoxParser.mp4aSampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.esds && this.esds.esd) {\n\t\tvar oti = this.esds.esd.getOTI();\n\t\tvar dsi = this.esds.esd.getAudioConfig();\n\t\treturn baseCodec+\".\"+BoxParser.decimalToHex(oti)+(dsi ? \".\"+dsi: \"\");\n\t} else {\n\t\treturn baseCodec;\n\t}\n}\n\nBoxParser.stxtSampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif(this.mime_format) {\n\t\treturn baseCodec + \".\" + this.mime_format;\n\t} else {\n\t\treturn baseCodec\n\t}\n}\n\nBoxParser.vp08SampleEntry.prototype.getCodec =\nBoxParser.vp09SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tvar level = this.vpcC.level;\n\tif (level == 0) {\n\t\tlevel = \"00\";\n\t}\n\tvar bitDepth = this.vpcC.bitDepth;\n\tif (bitDepth == 8) {\n\t\tbitDepth = \"08\";\n\t}\n\treturn baseCodec + \".0\" + this.vpcC.profile + \".\" + level + \".\" + bitDepth;\n}\n\nBoxParser.av01SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tvar level = this.av1C.seq_level_idx_0;\n\tif (level < 10) {\n\t\tlevel = \"0\" + level;\n\t}\n\tvar bitdepth;\n\tif (this.av1C.seq_profile === 2 && this.av1C.high_bitdepth === 1) {\n\t\tbitdepth = (this.av1C.twelve_bit === 1) ? \"12\" : \"10\";\n\t} else if ( this.av1C.seq_profile <= 2 ) {\n\t\tbitdepth = (this.av1C.high_bitdepth === 1) ? \"10\" : \"08\";\n\t}\n\t// TODO need to parse the SH to find color config\n\treturn baseCodec+\".\"+this.av1C.seq_profile+\".\"+level+(this.av1C.seq_tier_0?\"H\":\"M\")+\".\"+bitdepth;//+\".\"+this.av1C.monochrome+\".\"+this.av1C.chroma_subsampling_x+\"\"+this.av1C.chroma_subsampling_y+\"\"+this.av1C.chroma_sample_position;\n}\n// file:src/box-write.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.Box.prototype.writeHeader = function(stream, msg) {\n\tthis.size += 8;\n\tif (this.size > MAX_SIZE) {\n\t\tthis.size += 8;\n\t}\n\tif (this.type === \"uuid\") {\n\t\tthis.size += 16;\n\t}\n\tLog.debug(\"BoxWriter\", \"Writing box \"+this.type+\" of size: \"+this.size+\" at position \"+stream.getPosition()+(msg || \"\"));\n\tif (this.size > MAX_SIZE) {\n\t\tstream.writeUint32(1);\n\t} else {\n\t\tthis.sizePosition = stream.getPosition();\n\t\tstream.writeUint32(this.size);\n\t}\n\tstream.writeString(this.type, null, 4);\n\tif (this.type === \"uuid\") {\n\t\tstream.writeUint8Array(this.uuid);\n\t}\n\tif (this.size > MAX_SIZE) {\n\t\tstream.writeUint64(this.size);\n\t} \n}\n\nBoxParser.FullBox.prototype.writeHeader = function(stream) {\n\tthis.size += 4;\n\tBoxParser.Box.prototype.writeHeader.call(this, stream, \" v=\"+this.version+\" f=\"+this.flags);\n\tstream.writeUint8(this.version);\n\tstream.writeUint24(this.flags);\n}\n\nBoxParser.Box.prototype.write = function(stream) {\n\tif (this.type === \"mdat\") {\n\t\t/* TODO: fix this */\n\t\tif (this.data) {\n\t\t\tthis.size = this.data.length;\n\t\t\tthis.writeHeader(stream);\n\t\t\tstream.writeUint8Array(this.data);\n\t\t}\n\t} else {\n\t\tthis.size = (this.data ? this.data.length : 0);\n\t\tthis.writeHeader(stream);\n\t\tif (this.data) {\n\t\t\tstream.writeUint8Array(this.data);\n\t\t}\n\t}\n}\n\nBoxParser.ContainerBox.prototype.write = function(stream) {\n\tthis.size = 0;\n\tthis.writeHeader(stream);\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tif (this.boxes[i]) {\n\t\t\tthis.boxes[i].write(stream);\n\t\t\tthis.size += this.boxes[i].size;\n\t\t}\n\t}\n\t/* adjusting the size, now that all sub-boxes are known */\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\n}\n\nBoxParser.TrackReferenceTypeBox.prototype.write = function(stream) {\n\tthis.size = this.track_ids.length*4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32Array(this.track_ids);\n}\n\n// file:src/writing/avcC.js\nBoxParser.avcCBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.size = 7;\n\tfor (i = 0; i < this.SPS.length; i++) {\n\t\tthis.size += 2+this.SPS[i].length;\n\t}\n\tfor (i = 0; i < this.PPS.length; i++) {\n\t\tthis.size += 2+this.PPS[i].length;\n\t}\n\tif (this.ext) {\n\t\tthis.size += this.ext.length;\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeUint8(this.configurationVersion);\n\tstream.writeUint8(this.AVCProfileIndication);\n\tstream.writeUint8(this.profile_compatibility);\n\tstream.writeUint8(this.AVCLevelIndication);\n\tstream.writeUint8(this.lengthSizeMinusOne + (63<<2));\n\tstream.writeUint8(this.SPS.length + (7<<5));\n\tfor (i = 0; i < this.SPS.length; i++) {\n\t\tstream.writeUint16(this.SPS[i].length);\n\t\tstream.writeUint8Array(this.SPS[i].nalu);\n\t}\n\tstream.writeUint8(this.PPS.length);\n\tfor (i = 0; i < this.PPS.length; i++) {\n\t\tstream.writeUint16(this.PPS[i].length);\n\t\tstream.writeUint8Array(this.PPS[i].nalu);\n\t}\n\tif (this.ext) {\n\t\tstream.writeUint8Array(this.ext);\n\t}\n}\n\n// file:src/writing/co64.js\nBoxParser.co64Box.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.chunk_offsets.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.chunk_offsets.length);\n\tfor(i=0; i<this.chunk_offsets.length; i++) {\n\t\tstream.writeUint64(this.chunk_offsets[i]);\n\t}\n}\n\n// file:src/writing/cslg.js\nBoxParser.cslgBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4*5;\n\tthis.writeHeader(stream);\n\tstream.writeInt32(this.compositionToDTSShift);\n\tstream.writeInt32(this.leastDecodeToDisplayDelta);\n\tstream.writeInt32(this.greatestDecodeToDisplayDelta);\n\tstream.writeInt32(this.compositionStartTime);\n\tstream.writeInt32(this.compositionEndTime);\n}\n\n// file:src/writing/ctts.js\nBoxParser.cttsBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.sample_counts.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_counts.length);\n\tfor(i=0; i<this.sample_counts.length; i++) {\n\t\tstream.writeUint32(this.sample_counts[i]);\n\t\tif (this.version === 1) {\n\t\t\tstream.writeInt32(this.sample_offsets[i]); /* signed */\n\t\t} else {\t\t\t\n\t\t\tstream.writeUint32(this.sample_offsets[i]); /* unsigned */\n\t\t}\n\t}\n}\n\n// file:src/writing/dref.js\nBoxParser.drefBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4; //\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.entries.length);\n\tfor (var i = 0; i < this.entries.length; i++) {\n\t\tthis.entries[i].write(stream);\n\t\tthis.size += this.entries[i].size;\n\t}\t\n\t/* adjusting the size, now that all sub-boxes are known */\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\n}\n\n// file:src/writing/elng.js\nBoxParser.elngBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = this.extended_language.length;\n\tthis.writeHeader(stream);\n\tstream.writeString(this.extended_language);\n}\n\n// file:src/writing/elst.js\nBoxParser.elstBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = 4+12*this.entries.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.entries.length);\n\tfor (var i = 0; i < this.entries.length; i++) {\n\t\tvar entry = this.entries[i];\n\t\tstream.writeUint32(entry.segment_duration);\n\t\tstream.writeInt32(entry.media_time);\n\t\tstream.writeInt16(entry.media_rate_integer);\n\t\tstream.writeInt16(entry.media_rate_fraction);\n\t}\n}\n\n// file:src/writing/emsg.js\nBoxParser.emsgBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = 4*4+this.message_data.length+(this.scheme_id_uri.length+1)+(this.value.length+1);\n\tthis.writeHeader(stream);\n\tstream.writeCString(this.scheme_id_uri);\n\tstream.writeCString(this.value);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.presentation_time_delta);\n\tstream.writeUint32(this.event_duration);\n\tstream.writeUint32(this.id);\n\tstream.writeUint8Array(this.message_data);\n}\n\n// file:src/writing/ftyp.js\nBoxParser.ftypBox.prototype.write = function(stream) {\n\tthis.size = 8+4*this.compatible_brands.length;\n\tthis.writeHeader(stream);\n\tstream.writeString(this.major_brand, null, 4);\n\tstream.writeUint32(this.minor_version);\n\tfor (var i = 0; i < this.compatible_brands.length; i++) {\n\t\tstream.writeString(this.compatible_brands[i], null, 4);\n\t}\n}\n\n// file:src/writing/hdlr.js\nBoxParser.hdlrBox.prototype.write = function(stream) {\n\tthis.size = 5*4+this.name.length+1;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(0);\n\tstream.writeString(this.handler, null, 4);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeCString(this.name);\n}\n\n// file:src/writing/hvcC.js\nBoxParser.hvcCBox.prototype.write = function(stream) {\n var i,j;\n this.size = 23;\n\n for (i = 0; i < this.nalu_arrays.length; i++) {\n this.size += 3;\n for (j = 0; j < this.nalu_arrays[i].length; j++) {\n this.size += 2 + this.nalu_arrays[i][j].data.length;\n }\n }\n\n this.writeHeader(stream);\n\n stream.writeUint8(this.configurationVersion);\n stream.writeUint8((this.general_profile_space << 6) +\n (this.general_tier_flag << 5) +\n this.general_profile_idc);\n stream.writeUint32(this.general_profile_compatibility);\n stream.writeUint8Array(this.general_constraint_indicator);\n stream.writeUint8(this.general_level_idc);\n stream.writeUint16(this.min_spatial_segmentation_idc + (15<<24));\n stream.writeUint8(this.parallelismType + (63<<2));\n stream.writeUint8(this.chroma_format_idc + (63<<2));\n stream.writeUint8(this.bit_depth_luma_minus8 + (31<<3));\n stream.writeUint8(this.bit_depth_chroma_minus8 + (31<<3));\n stream.writeUint16(this.avgFrameRate);\n stream.writeUint8((this.constantFrameRate<<6) +\n (this.numTemporalLayers<<3) +\n (this.temporalIdNested<<2) +\n this.lengthSizeMinusOne);\n stream.writeUint8(this.nalu_arrays.length);\n for (i = 0; i < this.nalu_arrays.length; i++) {\n // bit(1) array_completeness + bit(1) reserved = 0 + bit(6) nal_unit_type\n stream.writeUint8((this.nalu_arrays[i].completeness<<7) +\n this.nalu_arrays[i].nalu_type);\n stream.writeUint16(this.nalu_arrays[i].length);\n for (j = 0; j < this.nalu_arrays[i].length; j++) {\n stream.writeUint16(this.nalu_arrays[i][j].data.length);\n stream.writeUint8Array(this.nalu_arrays[i][j].data);\n }\n }\n}\n// file:src/writing/kind.js\nBoxParser.kindBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = (this.schemeURI.length+1)+(this.value.length+1);\n\tthis.writeHeader(stream);\n\tstream.writeCString(this.schemeURI);\n\tstream.writeCString(this.value);\n}\n\n// file:src/writing/mdhd.js\nBoxParser.mdhdBox.prototype.write = function(stream) {\n\tthis.size = 4*4+2*2;\n\tthis.flags = 0;\n\tthis.version = 0;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.creation_time);\n\tstream.writeUint32(this.modification_time);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.duration);\n\tstream.writeUint16(this.language);\n\tstream.writeUint16(0);\n}\n\n// file:src/writing/mehd.js\nBoxParser.mehdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.fragment_duration);\n}\n\n// file:src/writing/mfhd.js\nBoxParser.mfhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sequence_number);\n}\n\n// file:src/writing/mvhd.js\nBoxParser.mvhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 23*4+2*2;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.creation_time);\n\tstream.writeUint32(this.modification_time);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.duration);\n\tstream.writeUint32(this.rate);\n\tstream.writeUint16(this.volume<<8);\n\tstream.writeUint16(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32Array(this.matrix);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(this.next_track_id);\n}\n\n// file:src/writing/sampleentry.js\nBoxParser.SampleEntry.prototype.writeHeader = function(stream) {\n\tthis.size = 8;\n\tBoxParser.Box.prototype.writeHeader.call(this, stream);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint16(this.data_reference_index);\n}\n\nBoxParser.SampleEntry.prototype.writeFooter = function(stream) {\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tthis.boxes[i].write(stream);\n\t\tthis.size += this.boxes[i].size;\n\t}\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\t\n}\n\nBoxParser.SampleEntry.prototype.write = function(stream) {\n\tthis.writeHeader(stream);\n\tstream.writeUint8Array(this.data);\n\tthis.size += this.data.length;\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\t\n}\n\nBoxParser.VisualSampleEntry.prototype.write = function(stream) {\n\tthis.writeHeader(stream);\n\tthis.size += 2*7+6*4+32;\n\tstream.writeUint16(0); \n\tstream.writeUint16(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint16(this.width);\n\tstream.writeUint16(this.height);\n\tstream.writeUint32(this.horizresolution);\n\tstream.writeUint32(this.vertresolution);\n\tstream.writeUint32(0);\n\tstream.writeUint16(this.frame_count);\n\tstream.writeUint8(Math.min(31, this.compressorname.length));\n\tstream.writeString(this.compressorname, null, 31);\n\tstream.writeUint16(this.depth);\n\tstream.writeInt16(-1);\n\tthis.writeFooter(stream);\n}\n\nBoxParser.AudioSampleEntry.prototype.write = function(stream) {\n\tthis.writeHeader(stream);\n\tthis.size += 2*4+3*4;\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint16(this.channel_count);\n\tstream.writeUint16(this.samplesize);\n\tstream.writeUint16(0);\n\tstream.writeUint16(0);\n\tstream.writeUint32(this.samplerate<<16);\n\tthis.writeFooter(stream);\n}\n\nBoxParser.stppSampleEntry.prototype.write = function(stream) {\n\tthis.writeHeader(stream);\n\tthis.size += this.namespace.length+1+\n\t\t\t\t this.schema_location.length+1+\n\t\t\t\t this.auxiliary_mime_types.length+1;\n\tstream.writeCString(this.namespace);\n\tstream.writeCString(this.schema_location);\n\tstream.writeCString(this.auxiliary_mime_types);\n\tthis.writeFooter(stream);\n}\n\n// file:src/writing/samplegroups/samplegroup.js\nBoxParser.SampleGroupEntry.prototype.write = function(stream) {\n\tstream.writeUint8Array(this.data);\n}\n\n// file:src/writing/sbgp.js\nBoxParser.sbgpBox.prototype.write = function(stream) {\n\tthis.version = 1;\t\n\tthis.flags = 0;\n\tthis.size = 12+8*this.entries.length;\n\tthis.writeHeader(stream);\n\tstream.writeString(this.grouping_type, null, 4);\n\tstream.writeUint32(this.grouping_type_parameter);\n\tstream.writeUint32(this.entries.length);\n\tfor (var i = 0; i < this.entries.length; i++) {\n\t\tvar entry = this.entries[i];\n\t\tstream.writeInt32(entry.sample_count);\n\t\tstream.writeInt32(entry.group_description_index);\n\t}\n}\n\n// file:src/writing/sgpd.js\nBoxParser.sgpdBox.prototype.write = function(stream) {\n\tvar i;\n\tvar entry;\n\t// leave version as read\n\t// this.version;\n\tthis.flags = 0;\n\tthis.size = 12;\n\tfor (i = 0; i < this.entries.length; i++) {\n\t\tentry = this.entries[i];\n\t\tif (this.version === 1) {\n\t\t\tif (this.default_length === 0) {\n\t\t\t\tthis.size += 4;\n\t\t\t}\n\t\t\tthis.size += entry.data.length;\n\t\t}\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeString(this.grouping_type, null, 4);\n\tif (this.version === 1) {\n\t\tstream.writeUint32(this.default_length);\n\t}\n\tif (this.version >= 2) {\n\t\tstream.writeUint32(this.default_sample_description_index);\n\t}\n\tstream.writeUint32(this.entries.length);\n\tfor (i = 0; i < this.entries.length; i++) {\n\t\tentry = this.entries[i];\n\t\tif (this.version === 1) {\n\t\t\tif (this.default_length === 0) {\n\t\t\t\tstream.writeUint32(entry.description_length);\n\t\t\t}\n\t\t}\n\t\tentry.write(stream);\n\t}\n}\n\n\n// file:src/writing/sidx.js\nBoxParser.sidxBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = 4*4+2+2+12*this.references.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.reference_ID);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.earliest_presentation_time);\n\tstream.writeUint32(this.first_offset);\n\tstream.writeUint16(0);\n\tstream.writeUint16(this.references.length);\n\tfor (var i = 0; i < this.references.length; i++) {\n\t\tvar ref = this.references[i];\n\t\tstream.writeUint32(ref.reference_type << 31 | ref.referenced_size);\n\t\tstream.writeUint32(ref.subsegment_duration);\n\t\tstream.writeUint32(ref.starts_with_SAP << 31 | ref.SAP_type << 28 | ref.SAP_delta_time);\n\t}\n}\n\n// file:src/writing/smhd.js\nBoxParser.smhdBox.prototype.write = function(stream) {\n var i;\n this.version = 0;\n this.flags = 1;\n this.size = 4;\n this.writeHeader(stream);\n stream.writeUint16(this.balance);\n stream.writeUint16(0);\n}\n// file:src/writing/stco.js\nBoxParser.stcoBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+4*this.chunk_offsets.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.chunk_offsets.length);\n\tstream.writeUint32Array(this.chunk_offsets);\n}\n\n// file:src/writing/stsc.js\nBoxParser.stscBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+12*this.first_chunk.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.first_chunk.length);\n\tfor(i=0; i<this.first_chunk.length; i++) {\n\t\tstream.writeUint32(this.first_chunk[i]);\n\t\tstream.writeUint32(this.samples_per_chunk[i]);\n\t\tstream.writeUint32(this.sample_description_index[i]);\n\t}\n}\n\n// file:src/writing/stsd.js\nBoxParser.stsdBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 0;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.entries.length);\n\tthis.size += 4;\n\tfor (i = 0; i < this.entries.length; i++) {\n\t\tthis.entries[i].write(stream);\n\t\tthis.size += this.entries[i].size;\n\t}\n\t/* adjusting the size, now that all sub-boxes are known */\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\n}\n\n// file:src/writing/stsh.js\nBoxParser.stshBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.shadowed_sample_numbers.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.shadowed_sample_numbers.length);\n\tfor(i=0; i<this.shadowed_sample_numbers.length; i++) {\n\t\tstream.writeUint32(this.shadowed_sample_numbers[i]);\n\t\tstream.writeUint32(this.sync_sample_numbers[i]);\n\t}\n}\n\n// file:src/writing/stss.js\nBoxParser.stssBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+4*this.sample_numbers.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_numbers.length);\n\tstream.writeUint32Array(this.sample_numbers);\n}\n\n// file:src/writing/stsz.js\nBoxParser.stszBox.prototype.write = function(stream) {\n\tvar i;\n\tvar constant = true;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tif (this.sample_sizes.length > 0) {\n\t\ti = 0;\n\t\twhile (i+1 < this.sample_sizes.length) {\n\t\t\tif (this.sample_sizes[i+1] !== this.sample_sizes[0]) {\n\t\t\t\tconstant = false;\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tconstant = false;\n\t}\n\tthis.size = 8;\n\tif (!constant) {\n\t\tthis.size += 4*this.sample_sizes.length;\n\t}\n\tthis.writeHeader(stream);\n\tif (!constant) {\n\t\tstream.writeUint32(0);\n\t} else {\n\t\tstream.writeUint32(this.sample_sizes[0]);\n\t}\n\tstream.writeUint32(this.sample_sizes.length);\n\tif (!constant) {\n\t\tstream.writeUint32Array(this.sample_sizes);\n\t}\t\n}\n\n// file:src/writing/stts.js\nBoxParser.sttsBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.sample_counts.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_counts.length);\n\tfor(i=0; i<this.sample_counts.length; i++) {\n\t\tstream.writeUint32(this.sample_counts[i]);\n\t\tstream.writeUint32(this.sample_deltas[i]);\n\t}\n}\n\n// file:src/writing/tfdt.js\nBoxParser.tfdtBox.prototype.write = function(stream) {\n\tvar UINT32_MAX = Math.pow(2, 32) - 1;\n\t// use version 1 if baseMediaDecodeTime does not fit 32 bits\n\tthis.version = this.baseMediaDecodeTime > UINT32_MAX ? 1 : 0;\n\tthis.flags = 0;\n\tthis.size = 4;\n\tif (this.version === 1) {\n\t\tthis.size += 4;\n\t}\n\tthis.writeHeader(stream);\n\tif (this.version === 1) {\n\t\tstream.writeUint64(this.baseMediaDecodeTime);\n\t} else {\n\t\tstream.writeUint32(this.baseMediaDecodeTime);\n\t}\n}\n\n// file:src/writing/tfhd.js\nBoxParser.tfhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.size = 4;\n\tif (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) {\n\t\tthis.size += 8;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\tthis.size += 4;\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.track_id);\n\tif (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) {\n\t\tstream.writeUint64(this.base_data_offset);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\tstream.writeUint32(this.default_sample_description_index);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\tstream.writeUint32(this.default_sample_duration);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\tstream.writeUint32(this.default_sample_size);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\tstream.writeUint32(this.default_sample_flags);\n\t}\n}\n\n// file:src/writing/tkhd.js\nBoxParser.tkhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\t//this.flags = 0;\n\tthis.size = 4*18+2*4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.creation_time);\n\tstream.writeUint32(this.modification_time);\n\tstream.writeUint32(this.track_id);\n\tstream.writeUint32(0);\n\tstream.writeUint32(this.duration);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeInt16(this.layer);\n\tstream.writeInt16(this.alternate_group);\n\tstream.writeInt16(this.volume<<8);\n\tstream.writeUint16(0);\n\tstream.writeInt32Array(this.matrix);\n\tstream.writeUint32(this.width);\n\tstream.writeUint32(this.height);\n}\n\n// file:src/writing/trex.js\nBoxParser.trexBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4*5;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.track_id);\n\tstream.writeUint32(this.default_sample_description_index);\n\tstream.writeUint32(this.default_sample_duration);\n\tstream.writeUint32(this.default_sample_size);\n\tstream.writeUint32(this.default_sample_flags);\n}\n\n// file:src/writing/trun.js\nBoxParser.trunBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.size = 4;\n\tif (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\tthis.size += 4*this.sample_duration.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\tthis.size += 4*this.sample_size.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\tthis.size += 4*this.sample_flags.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\tthis.size += 4*this.sample_composition_time_offset.length;\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_count);\n\tif (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) {\n\t\tthis.data_offset_position = stream.getPosition();\n\t\tstream.writeInt32(this.data_offset); //signed\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) {\n\t\tstream.writeUint32(this.first_sample_flags);\n\t}\n\tfor (var i = 0; i < this.sample_count; i++) {\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\tstream.writeUint32(this.sample_duration[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\tstream.writeUint32(this.sample_size[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\tstream.writeUint32(this.sample_flags[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\tif (this.version === 0) {\n\t\t\t\tstream.writeUint32(this.sample_composition_time_offset[i]);\n\t\t\t} else {\n\t\t\t\tstream.writeInt32(this.sample_composition_time_offset[i]); //signed\n\t\t\t}\n\t\t}\n\t}\t\t\n}\n\n// file:src/writing/url.js\nBoxParser[\"url Box\"].prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tif (this.location) {\n\t\tthis.flags = 0;\n\t\tthis.size = this.location.length+1;\n\t} else {\n\t\tthis.flags = 0x000001;\n\t\tthis.size = 0;\n\t}\n\tthis.writeHeader(stream);\n\tif (this.location) {\n\t\tstream.writeCString(this.location);\n\t}\n}\n\n// file:src/writing/urn.js\nBoxParser[\"urn Box\"].prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = this.name.length+1+(this.location ? this.location.length+1 : 0);\n\tthis.writeHeader(stream);\n\tstream.writeCString(this.name);\n\tif (this.location) {\n\t\tstream.writeCString(this.location);\n\t}\n}\n\n// file:src/writing/vmhd.js\nBoxParser.vmhdBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 1;\n\tthis.size = 8;\n\tthis.writeHeader(stream);\n\tstream.writeUint16(this.graphicsmode);\n\tstream.writeUint16Array(this.opcolor);\n}\n\n// file:src/box-unpack.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.cttsBox.prototype.unpack = function(samples) {\n\tvar i, j, k;\n\tk = 0;\n\tfor (i = 0; i < this.sample_counts.length; i++) {\n\t\tfor (j = 0; j < this.sample_counts[i]; j++) {\n\t\t\tsamples[k].pts = samples[k].dts + this.sample_offsets[i];\n\t\t\tk++;\n\t\t}\n\t}\n}\n\nBoxParser.sttsBox.prototype.unpack = function(samples) {\n\tvar i, j, k;\n\tk = 0;\n\tfor (i = 0; i < this.sample_counts.length; i++) {\n\t\tfor (j = 0; j < this.sample_counts[i]; j++) {\n\t\t\tif (k === 0) {\n\t\t\t\tsamples[k].dts = 0;\n\t\t\t} else {\n\t\t\t\tsamples[k].dts = samples[k-1].dts + this.sample_deltas[i];\n\t\t\t}\n\t\t\tk++;\n\t\t}\n\t}\n}\n\nBoxParser.stcoBox.prototype.unpack = function(samples) {\n\tvar i;\n\tfor (i = 0; i < this.chunk_offsets.length; i++) {\n\t\tsamples[i].offset = this.chunk_offsets[i];\n\t}\n}\n\nBoxParser.stscBox.prototype.unpack = function(samples) {\n\tvar i, j, k, l, m;\n\tl = 0;\n\tm = 0;\n\tfor (i = 0; i < this.first_chunk.length; i++) {\n\t\tfor (j = 0; j < (i+1 < this.first_chunk.length ? this.first_chunk[i+1] : Infinity); j++) {\n\t\t\tm++;\n\t\t\tfor (k = 0; k < this.samples_per_chunk[i]; k++) {\n\t\t\t\tif (samples[l]) {\n\t\t\t\t\tsamples[l].description_index = this.sample_description_index[i];\n\t\t\t\t\tsamples[l].chunk_index = m;\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tl++;\n\t\t\t}\t\t\t\n\t\t}\n\t}\n}\n\nBoxParser.stszBox.prototype.unpack = function(samples) {\n\tvar i;\n\tfor (i = 0; i < this.sample_sizes.length; i++) {\n\t\tsamples[i].size = this.sample_sizes[i];\n\t}\n}\n// file:src/box-diff.js\n\nBoxParser.DIFF_BOXES_PROP_NAMES = [ \"boxes\", \"entries\", \"references\", \"subsamples\",\n\t\t\t\t\t \t \"items\", \"item_infos\", \"extents\", \"associations\",\n\t\t\t\t\t \t \"subsegments\", \"ranges\", \"seekLists\", \"seekPoints\",\n\t\t\t\t\t \t \"esd\", \"levels\"];\n\nBoxParser.DIFF_PRIMITIVE_ARRAY_PROP_NAMES = [ \"compatible_brands\", \"matrix\", \"opcolor\", \"sample_counts\", \"sample_deltas\",\n\"first_chunk\", \"samples_per_chunk\", \"sample_sizes\", \"chunk_offsets\", \"sample_offsets\", \"sample_description_index\", \"sample_duration\" ];\n\nBoxParser.boxEqualFields = function(box_a, box_b) {\n\tif (box_a && !box_b) return false;\n\tvar prop;\n\tfor (prop in box_a) {\n\t\tif (BoxParser.DIFF_BOXES_PROP_NAMES.indexOf(prop) > -1) {\n\t\t\tcontinue;\n\t\t// } else if (excluded_fields && excluded_fields.indexOf(prop) > -1) {\n\t\t// \tcontinue;\n\t\t} else if (box_a[prop] instanceof BoxParser.Box || box_b[prop] instanceof BoxParser.Box) {\n\t\t\tcontinue;\n\t\t} else if (typeof box_a[prop] === \"undefined\" || typeof box_b[prop] === \"undefined\") {\n\t\t\tcontinue;\n\t\t} else if (typeof box_a[prop] === \"function\" || typeof box_b[prop] === \"function\") {\n\t\t\tcontinue;\n\t\t} else if (\n\t\t\t(box_a.subBoxNames && box_a.subBoxNames.indexOf(prop.slice(0,4)) > -1) ||\n\t\t\t(box_b.subBoxNames && box_b.subBoxNames.indexOf(prop.slice(0,4)) > -1)) {\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tif (prop === \"data\" || prop === \"start\" || prop === \"size\" || prop === \"creation_time\" || prop === \"modification_time\") {\n\t\t\t\tcontinue;\n\t\t\t} else if (BoxParser.DIFF_PRIMITIVE_ARRAY_PROP_NAMES.indexOf(prop) > -1) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tif (box_a[prop] !== box_b[prop]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}\n\nBoxParser.boxEqual = function(box_a, box_b) {\n\tif (!BoxParser.boxEqualFields(box_a, box_b)) {\n\t\treturn false;\n\t}\n\tfor (var j = 0; j < BoxParser.DIFF_BOXES_PROP_NAMES.length; j++) {\n\t\tvar name = BoxParser.DIFF_BOXES_PROP_NAMES[j];\n\t\tif (box_a[name] && box_b[name]) {\n\t\t\tif (!BoxParser.boxEqual(box_a[name], box_b[name])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}\n// file:src/text-mp4.js\n/* \n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar VTTin4Parser = function() {\t\n}\n\nVTTin4Parser.prototype.parseSample = function(data) {\n\tvar cues, cue;\n\tvar stream = new MP4BoxStream(data.buffer);\n\tcues = [];\n\twhile (!stream.isEos()) {\n\t\tcue = BoxParser.parseOneBox(stream, false);\n\t\tif (cue.code === BoxParser.OK && cue.box.type === \"vttc\") {\n\t\t\tcues.push(cue.box);\n\t\t}\t\t\n\t}\n\treturn cues;\n}\n\nVTTin4Parser.prototype.getText = function (startTime, endTime, data) {\n\tfunction pad(n, width, z) {\n\t z = z || '0';\n\t n = n + '';\n\t return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n\t}\n\tfunction secToTimestamp(insec) {\n\t\tvar h = Math.floor(insec/3600);\n\t\tvar m = Math.floor((insec - h*3600)/60);\n\t\tvar s = Math.floor(insec - h*3600 - m*60);\n\t\tvar ms = Math.floor((insec - h*3600 - m*60 - s)*1000);\n\t\treturn \"\"+pad(h, 2)+\":\"+pad(m,2)+\":\"+pad(s, 2)+\".\"+pad(ms, 3);\n\t}\n\tvar cues = this.parseSample(data);\n\tvar string = \"\";\n\tfor (var i = 0; i < cues.length; i++) {\n\t\tvar cueIn4 = cues[i];\n\t\tstring += secToTimestamp(startTime)+\" --> \"+secToTimestamp(endTime)+\"\\r\\n\";\n\t\tstring += cueIn4.payl.text;\n\t}\n\treturn string;\n}\n\nvar XMLSubtitlein4Parser = function() {\t\n}\n\nXMLSubtitlein4Parser.prototype.parseSample = function(sample) {\n\tvar res = {};\t\n\tvar i;\n\tres.resources = [];\n\tvar stream = new MP4BoxStream(sample.data.buffer);\n\tif (!sample.subsamples || sample.subsamples.length === 0) {\n\t\tres.documentString = stream.readString(sample.data.length);\n\t} else {\n\t\tres.documentString = stream.readString(sample.subsamples[0].size);\n\t\tif (sample.subsamples.length > 1) {\n\t\t\tfor (i = 1; i < sample.subsamples.length; i++) {\n\t\t\t\tres.resources[i] = stream.readUint8Array(sample.subsamples[i].size);\n\t\t\t}\n\t\t}\n\t}\n\tif (typeof (DOMParser) !== \"undefined\") {\n\t\tres.document = (new DOMParser()).parseFromString(res.documentString, \"application/xml\");\n\t}\n\treturn res;\n}\n\nvar Textin4Parser = function() {\t\n}\n\nTextin4Parser.prototype.parseSample = function(sample) {\n\tvar textString;\n\tvar stream = new MP4BoxStream(sample.data.buffer);\n\ttextString = stream.readString(sample.data.length);\n\treturn textString;\n}\n\nTextin4Parser.prototype.parseConfig = function(data) {\n\tvar textString;\n\tvar stream = new MP4BoxStream(data.buffer);\n\tstream.readUint32(); // version & flags\n\ttextString = stream.readCString();\n\treturn textString;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.VTTin4Parser = VTTin4Parser;\n\texports.XMLSubtitlein4Parser = XMLSubtitlein4Parser;\n\texports.Textin4Parser = Textin4Parser;\n}\n// file:src/isofile.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar ISOFile = function (stream) {\n\t/* MutiBufferStream object used to parse boxes */\n\tthis.stream = stream || new MultiBufferStream();\n\t/* Array of all boxes (in order) found in the file */\n\tthis.boxes = [];\n\t/* Array of all mdats */\n\tthis.mdats = [];\n\t/* Array of all moofs */\n\tthis.moofs = [];\n\t/* Boolean indicating if the file is compatible with progressive parsing (moov first) */\n\tthis.isProgressive = false;\n\t/* Boolean used to fire moov start event only once */\n\tthis.moovStartFound = false;\n\t/* Callback called when the moov parsing starts */\n\tthis.onMoovStart = null;\n\t/* Boolean keeping track of the call to onMoovStart, to avoid double calls */\n\tthis.moovStartSent = false;\n\t/* Callback called when the moov is entirely parsed */\n\tthis.onReady = null;\n\t/* Boolean keeping track of the call to onReady, to avoid double calls */\n\tthis.readySent = false;\n\t/* Callback to call when segments are ready */\n\tthis.onSegment = null;\n\t/* Callback to call when samples are ready */\n\tthis.onSamples = null;\n\t/* Callback to call when there is an error in the parsing or processing of samples */\n\tthis.onError = null;\n\t/* Boolean indicating if the moov box run-length encoded tables of sample information have been processed */\n\tthis.sampleListBuilt = false;\n\t/* Array of Track objects for which fragmentation of samples is requested */\n\tthis.fragmentedTracks = [];\n\t/* Array of Track objects for which extraction of samples is requested */\n\tthis.extractedTracks = [];\n\t/* Boolean indicating that fragmention is ready */\n\tthis.isFragmentationInitialized = false;\n\t/* Boolean indicating that fragmented has started */\n\tthis.sampleProcessingStarted = false;\n\t/* Number of the next 'moof' to generate when fragmenting */\n\tthis.nextMoofNumber = 0;\n\t/* Boolean indicating if the initial list of items has been produced */\n\tthis.itemListBuilt = false;\n\t/* Array of items */\n\tthis.items = [];\n\t/* Array of entity groups */\n\tthis.entity_groups = [];\n\t/* Callback called when the sidx box is entirely parsed */\n\tthis.onSidx = null;\n\t/* Boolean keeping track of the call to onSidx, to avoid double calls */\n\tthis.sidxSent = false;\n}\n\nISOFile.prototype.setSegmentOptions = function(id, user, options) {\n\tvar trak = this.getTrackById(id);\n\tif (trak) {\n\t\tvar fragTrack = {};\n\t\tthis.fragmentedTracks.push(fragTrack);\n\t\tfragTrack.id = id;\n\t\tfragTrack.user = user;\n\t\tfragTrack.trak = trak;\n\t\ttrak.nextSample = 0;\n\t\tfragTrack.segmentStream = null;\n\t\tfragTrack.nb_samples = 1000;\n\t\tfragTrack.rapAlignement = true;\n\t\tif (options) {\n\t\t\tif (options.nbSamples) fragTrack.nb_samples = options.nbSamples;\n\t\t\tif (options.rapAlignement) fragTrack.rapAlignement = options.rapAlignement;\n\t\t}\n\t}\n}\n\nISOFile.prototype.unsetSegmentOptions = function(id) {\n\tvar index = -1;\n\tfor (var i = 0; i < this.fragmentedTracks.length; i++) {\n\t\tvar fragTrack = this.fragmentedTracks[i];\n\t\tif (fragTrack.id == id) {\n\t\t\tindex = i;\n\t\t}\n\t}\n\tif (index > -1) {\n\t\tthis.fragmentedTracks.splice(index, 1);\n\t}\n}\n\nISOFile.prototype.setExtractionOptions = function(id, user, options) {\n\tvar trak = this.getTrackById(id);\n\tif (trak) {\n\t\tvar extractTrack = {};\n\t\tthis.extractedTracks.push(extractTrack);\n\t\textractTrack.id = id;\n\t\textractTrack.user = user;\n\t\textractTrack.trak = trak;\n\t\ttrak.nextSample = 0;\n\t\textractTrack.nb_samples = 1000;\n\t\textractTrack.samples = [];\n\t\tif (options) {\n\t\t\tif (options.nbSamples) extractTrack.nb_samples = options.nbSamples;\n\t\t}\n\t}\n}\n\nISOFile.prototype.unsetExtractionOptions = function(id) {\n\tvar index = -1;\n\tfor (var i = 0; i < this.extractedTracks.length; i++) {\n\t\tvar extractTrack = this.extractedTracks[i];\n\t\tif (extractTrack.id == id) {\n\t\t\tindex = i;\n\t\t}\n\t}\n\tif (index > -1) {\n\t\tthis.extractedTracks.splice(index, 1);\n\t}\n}\n\nISOFile.prototype.parse = function() {\n\tvar found;\n\tvar ret;\n\tvar box;\n\tvar parseBoxHeadersOnly = false;\n\n\tif (this.restoreParsePosition)\t{\n\t\tif (!this.restoreParsePosition()) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\twhile (true) {\n\n\t\tif (this.hasIncompleteMdat && this.hasIncompleteMdat()) {\n\t\t\tif (this.processIncompleteMdat()) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.saveParsePosition)\t{\n\t\t\t\tthis.saveParsePosition();\n\t\t\t}\n\t\t\tret = BoxParser.parseOneBox(this.stream, parseBoxHeadersOnly);\n\t\t\tif (ret.code === BoxParser.ERR_NOT_ENOUGH_DATA) {\n\t\t\t\tif (this.processIncompleteBox) {\n\t\t\t\t\tif (this.processIncompleteBox(ret)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar box_type;\n\t\t\t\t/* the box is entirely parsed */\n\t\t\t\tbox = ret.box;\n\t\t\t\tbox_type = (box.type !== \"uuid\" ? box.type : box.uuid);\n\t\t\t\t/* store the box in the 'boxes' array to preserve box order (for file rewrite if needed) */\n\t\t\t\tthis.boxes.push(box);\n\t\t\t\t/* but also store box in a property for more direct access */\n\t\t\t\tswitch (box_type) {\n\t\t\t\t\tcase \"mdat\":\n\t\t\t\t\t\tthis.mdats.push(box);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"moof\":\n\t\t\t\t\t\tthis.moofs.push(box);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"moov\":\n\t\t\t\t\t\tthis.moovStartFound = true;\n\t\t\t\t\t\tif (this.mdats.length === 0) {\n\t\t\t\t\t\t\tthis.isProgressive = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t/* no break */\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (this[box_type] !== undefined) {\n\t\t\t\t\t\t\tLog.warn(\"ISOFile\", \"Duplicate Box of type: \"+box_type+\", overriding previous occurrence\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis[box_type] = box;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (this.updateUsedBytes) {\n\t\t\t\t\tthis.updateUsedBytes(box, ret);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.prototype.checkBuffer = function (ab) {\n\tif (ab === null || ab === undefined) {\n\t\tthrow(\"Buffer must be defined and non empty\");\n\t}\n\tif (ab.fileStart === undefined) {\n\t\tthrow(\"Buffer must have a fileStart property\");\n\t}\n\tif (ab.byteLength === 0) {\n\t\tLog.warn(\"ISOFile\", \"Ignoring empty buffer (fileStart: \"+ab.fileStart+\")\");\n\t\tthis.stream.logBufferLevel();\n\t\treturn false;\n\t}\n\tLog.info(\"ISOFile\", \"Processing buffer (fileStart: \"+ab.fileStart+\")\");\n\n\t/* mark the bytes in the buffer as not being used yet */\n\tab.usedBytes = 0;\n\tthis.stream.insertBuffer(ab);\n\tthis.stream.logBufferLevel();\n\n\tif (!this.stream.initialized()) {\n\t\tLog.warn(\"ISOFile\", \"Not ready to start parsing\");\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n/* Processes a new ArrayBuffer (with a fileStart property)\n Returns the next expected file position, or undefined if not ready to parse */\nISOFile.prototype.appendBuffer = function(ab, last) {\n\tvar nextFileStart;\n\tif (!this.checkBuffer(ab)) {\n\t\treturn;\n\t}\n\n\t/* Parse whatever is in the existing buffers */\n\tthis.parse();\n\n\t/* Check if the moovStart callback needs to be called */\n\tif (this.moovStartFound && !this.moovStartSent) {\n\t\tthis.moovStartSent = true;\n\t\tif (this.onMoovStart) this.onMoovStart();\n\t}\n\n\tif (this.moov) {\n\t\t/* A moov box has been entirely parsed */\n\n\t\t/* if this is the first call after the moov is found we initialize the list of samples (may be empty in fragmented files) */\n\t\tif (!this.sampleListBuilt) {\n\t\t\tthis.buildSampleLists();\n\t\t\tthis.sampleListBuilt = true;\n\t\t}\n\n\t\t/* We update the sample information if there are any new moof boxes */\n\t\tthis.updateSampleLists();\n\n\t\t/* If the application needs to be informed that the 'moov' has been found,\n\t\t we create the information object and callback the application */\n\t\tif (this.onReady && !this.readySent) {\n\t\t\tthis.readySent = true;\n\t\t\tthis.onReady(this.getInfo());\n\t\t}\n\n\t\t/* See if any sample extraction or segment creation needs to be done with the available samples */\n\t\tthis.processSamples(last);\n\n\t\t/* Inform about the best range to fetch next */\n\t\tif (this.nextSeekPosition) {\n\t\t\tnextFileStart = this.nextSeekPosition;\n\t\t\tthis.nextSeekPosition = undefined;\n\t\t} else {\n\t\t\tnextFileStart = this.nextParsePosition;\n\t\t}\n\t\tif (this.stream.getEndFilePositionAfter) {\n\t\t\tnextFileStart = this.stream.getEndFilePositionAfter(nextFileStart);\n\t\t}\n\t} else {\n\t\tif (this.nextParsePosition) {\n\t\t\t/* moov has not been parsed but the first buffer was received,\n\t\t\t the next fetch should probably be the next box start */\n\t\t\tnextFileStart = this.nextParsePosition;\n\t\t} else {\n\t\t\t/* No valid buffer has been parsed yet, we cannot know what to parse next */\n\t\t\tnextFileStart = 0;\n\t\t}\n\t}\n\tif (this.sidx) {\n\t\tif (this.onSidx && !this.sidxSent) {\n\t\t\tthis.onSidx(this.sidx);\n\t\t\tthis.sidxSent = true;\n\t\t}\n\t}\n\tif (this.meta) {\n\t\tif (this.flattenItemInfo && !this.itemListBuilt) {\n\t\t\tthis.flattenItemInfo();\n\t\t\tthis.itemListBuilt = true;\n\t\t}\n\t\tif (this.processItems) {\n\t\t\tthis.processItems(this.onItem);\n\t\t}\n\t}\n\n\tif (this.stream.cleanBuffers) {\n\t\tLog.info(\"ISOFile\", \"Done processing buffer (fileStart: \"+ab.fileStart+\") - next buffer to fetch should have a fileStart position of \"+nextFileStart);\n\t\tthis.stream.logBufferLevel();\n\t\tthis.stream.cleanBuffers();\n\t\tthis.stream.logBufferLevel(true);\n\t\tLog.info(\"ISOFile\", \"Sample data size in memory: \"+this.getAllocatedSampleDataSize());\n\t}\n\treturn nextFileStart;\n}\n\nISOFile.prototype.getInfo = function() {\n\tvar i, j;\n\tvar movie = {};\n\tvar trak;\n\tvar track;\n\tvar ref;\n\tvar sample_desc;\n\tvar _1904 = (new Date('1904-01-01T00:00:00Z').getTime());\n\n\tif (this.moov) {\n\t\tmovie.hasMoov = true;\n\t\tmovie.duration = this.moov.mvhd.duration;\n\t\tmovie.timescale = this.moov.mvhd.timescale;\n\t\tmovie.isFragmented = (this.moov.mvex != null);\n\t\tif (movie.isFragmented && this.moov.mvex.mehd) {\n\t\t\tmovie.fragment_duration = this.moov.mvex.mehd.fragment_duration;\n\t\t}\n\t\tmovie.isProgressive = this.isProgressive;\n\t\tmovie.hasIOD = (this.moov.iods != null);\n\t\tmovie.brands = [];\n\t\tmovie.brands.push(this.ftyp.major_brand);\n\t\tmovie.brands = movie.brands.concat(this.ftyp.compatible_brands);\n\t\tmovie.created = new Date(_1904+this.moov.mvhd.creation_time*1000);\n\t\tmovie.modified = new Date(_1904+this.moov.mvhd.modification_time*1000);\n\t\tmovie.tracks = [];\n\t\tmovie.audioTracks = [];\n\t\tmovie.videoTracks = [];\n\t\tmovie.subtitleTracks = [];\n\t\tmovie.metadataTracks = [];\n\t\tmovie.hintTracks = [];\n\t\tmovie.otherTracks = [];\n\t\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\t\ttrak = this.moov.traks[i];\n\t\t\tsample_desc = trak.mdia.minf.stbl.stsd.entries[0];\n\t\t\ttrack = {};\n\t\t\tmovie.tracks.push(track);\n\t\t\ttrack.id = trak.tkhd.track_id;\n\t\t\ttrack.name = trak.mdia.hdlr.name;\n\t\t\ttrack.references = [];\n\t\t\tif (trak.tref) {\n\t\t\t\tfor (j = 0; j < trak.tref.boxes.length; j++) {\n\t\t\t\t\tref = {};\n\t\t\t\t\ttrack.references.push(ref);\n\t\t\t\t\tref.type = trak.tref.boxes[j].type;\n\t\t\t\t\tref.track_ids = trak.tref.boxes[j].track_ids;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (trak.edts) {\n\t\t\t\ttrack.edits = trak.edts.elst.entries;\n\t\t\t}\n\t\t\ttrack.created = new Date(_1904+trak.tkhd.creation_time*1000);\n\t\t\ttrack.modified = new Date(_1904+trak.tkhd.modification_time*1000);\n\t\t\ttrack.movie_duration = trak.tkhd.duration;\n\t\t\ttrack.movie_timescale = movie.timescale;\n\t\t\ttrack.layer = trak.tkhd.layer;\n\t\t\ttrack.alternate_group = trak.tkhd.alternate_group;\n\t\t\ttrack.volume = trak.tkhd.volume;\n\t\t\ttrack.matrix = trak.tkhd.matrix;\n\t\t\ttrack.track_width = trak.tkhd.width/(1<<16);\n\t\t\ttrack.track_height = trak.tkhd.height/(1<<16);\n\t\t\ttrack.timescale = trak.mdia.mdhd.timescale;\n\t\t\ttrack.cts_shift = trak.mdia.minf.stbl.cslg;\n\t\t\ttrack.duration = trak.mdia.mdhd.duration;\n\t\t\ttrack.samples_duration = trak.samples_duration;\n\t\t\ttrack.codec = sample_desc.getCodec();\n\t\t\ttrack.kind = (trak.udta && trak.udta.kinds.length ? trak.udta.kinds[0] : { schemeURI: \"\", value: \"\"});\n\t\t\ttrack.language = (trak.mdia.elng ? trak.mdia.elng.extended_language : trak.mdia.mdhd.languageString);\n\t\t\ttrack.nb_samples = trak.samples.length;\n\t\t\ttrack.size = trak.samples_size;\n\t\t\ttrack.bitrate = (track.size*8*track.timescale)/track.samples_duration;\n\t\t\tif (sample_desc.isAudio()) {\n\t\t\t\ttrack.type = \"audio\";\n\t\t\t\tmovie.audioTracks.push(track);\n\t\t\t\ttrack.audio = {};\n\t\t\t\ttrack.audio.sample_rate = sample_desc.getSampleRate();\n\t\t\t\ttrack.audio.channel_count = sample_desc.getChannelCount();\n\t\t\t\ttrack.audio.sample_size = sample_desc.getSampleSize();\n\t\t\t} else if (sample_desc.isVideo()) {\n\t\t\t\ttrack.type = \"video\";\n\t\t\t\tmovie.videoTracks.push(track);\n\t\t\t\ttrack.video = {};\n\t\t\t\ttrack.video.width = sample_desc.getWidth();\n\t\t\t\ttrack.video.height = sample_desc.getHeight();\n\t\t\t} else if (sample_desc.isSubtitle()) {\n\t\t\t\ttrack.type = \"subtitles\";\n\t\t\t\tmovie.subtitleTracks.push(track);\n\t\t\t} else if (sample_desc.isHint()) {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.hintTracks.push(track);\n\t\t\t} else if (sample_desc.isMetadata()) {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.metadataTracks.push(track);\n\t\t\t} else {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.otherTracks.push(track);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tmovie.hasMoov = false;\n\t}\n\tmovie.mime = \"\";\n\tif (movie.hasMoov && movie.tracks) {\n\t\tif (movie.videoTracks && movie.videoTracks.length > 0) {\n\t\t\tmovie.mime += 'video/mp4; codecs=\\\"';\n\t\t} else if (movie.audioTracks && movie.audioTracks.length > 0) {\n\t\t\tmovie.mime += 'audio/mp4; codecs=\\\"';\n\t\t} else {\n\t\t\tmovie.mime += 'application/mp4; codecs=\\\"';\n\t\t}\n\t\tfor (i = 0; i < movie.tracks.length; i++) {\n\t\t\tif (i !== 0) movie.mime += ',';\n\t\t\tmovie.mime+= movie.tracks[i].codec;\n\t\t}\n\t\tmovie.mime += '\\\"; profiles=\\\"';\n\t\tmovie.mime += this.ftyp.compatible_brands.join();\n\t\tmovie.mime += '\\\"';\n\t}\n\treturn movie;\n}\n\nISOFile.prototype.setNextSeekPositionFromSample = function (sample) {\n\tif (!sample) {\n\t\treturn;\n\t}\n\tif (this.nextSeekPosition) {\n\t\tthis.nextSeekPosition = Math.min(sample.offset+sample.alreadyRead,this.nextSeekPosition);\n\t} else {\n\t\tthis.nextSeekPosition = sample.offset+sample.alreadyRead;\n\t}\n}\n\nISOFile.prototype.processSamples = function(last) {\n\tvar i;\n\tvar trak;\n\tif (!this.sampleProcessingStarted) return;\n\n\t/* For each track marked for fragmentation,\n\t check if the next sample is there (i.e. if the sample information is known (i.e. moof has arrived) and if it has been downloaded)\n\t and create a fragment with it */\n\tif (this.isFragmentationInitialized && this.onSegment !== null) {\n\t\tfor (i = 0; i < this.fragmentedTracks.length; i++) {\n\t\t\tvar fragTrak = this.fragmentedTracks[i];\n\t\t\ttrak = fragTrak.trak;\n\t\t\twhile (trak.nextSample < trak.samples.length && this.sampleProcessingStarted) {\n\t\t\t\t/* The sample information is there (either because the file is not fragmented and this is not the last sample,\n\t\t\t\tor because the file is fragmented and the moof for that sample has been received */\n\t\t\t\tLog.debug(\"ISOFile\", \"Creating media fragment on track #\"+fragTrak.id +\" for sample \"+trak.nextSample);\n\t\t\t\tvar result = this.createFragment(fragTrak.id, trak.nextSample, fragTrak.segmentStream);\n\t\t\t\tif (result) {\n\t\t\t\t\tfragTrak.segmentStream = result;\n\t\t\t\t\ttrak.nextSample++;\n\t\t\t\t} else {\n\t\t\t\t\t/* The fragment could not be created because the media data is not there (not downloaded), wait for it */\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t/* A fragment is created by sample, but the segment is the accumulation in the buffer of these fragments.\n\t\t\t\t It is flushed only as requested by the application (nb_samples) to avoid too many callbacks */\n\t\t\t\tif (trak.nextSample % fragTrak.nb_samples === 0 || (last || trak.nextSample >= trak.samples.length)) {\n\t\t\t\t\tLog.info(\"ISOFile\", \"Sending fragmented data on track #\"+fragTrak.id+\" for samples [\"+Math.max(0,trak.nextSample-fragTrak.nb_samples)+\",\"+(trak.nextSample-1)+\"]\");\n\t\t\t\t\tLog.info(\"ISOFile\", \"Sample data size in memory: \"+this.getAllocatedSampleDataSize());\n\t\t\t\t\tif (this.onSegment) {\n\t\t\t\t\t\tthis.onSegment(fragTrak.id, fragTrak.user, fragTrak.segmentStream.buffer, trak.nextSample, (last || trak.nextSample >= trak.samples.length));\n\t\t\t\t\t}\n\t\t\t\t\t/* force the creation of a new buffer */\n\t\t\t\t\tfragTrak.segmentStream = null;\n\t\t\t\t\tif (fragTrak !== this.fragmentedTracks[i]) {\n\t\t\t\t\t\t/* make sure we can stop fragmentation if needed */\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (this.onSamples !== null) {\n\t\t/* For each track marked for data export,\n\t\t check if the next sample is there (i.e. has been downloaded) and send it */\n\t\tfor (i = 0; i < this.extractedTracks.length; i++) {\n\t\t\tvar extractTrak = this.extractedTracks[i];\n\t\t\ttrak = extractTrak.trak;\n\t\t\twhile (trak.nextSample < trak.samples.length && this.sampleProcessingStarted) {\n\t\t\t\tLog.debug(\"ISOFile\", \"Exporting on track #\"+extractTrak.id +\" sample #\"+trak.nextSample);\n\t\t\t\tvar sample = this.getSample(trak, trak.nextSample);\n\t\t\t\tif (sample) {\n\t\t\t\t\ttrak.nextSample++;\n\t\t\t\t\textractTrak.samples.push(sample);\n\t\t\t\t} else {\n\t\t\t\t\tthis.setNextSeekPositionFromSample(trak.samples[trak.nextSample]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (trak.nextSample % extractTrak.nb_samples === 0 || trak.nextSample >= trak.samples.length) {\n\t\t\t\t\tLog.debug(\"ISOFile\", \"Sending samples on track #\"+extractTrak.id+\" for sample \"+trak.nextSample);\n\t\t\t\t\tif (this.onSamples) {\n\t\t\t\t\t\tthis.onSamples(extractTrak.id, extractTrak.user, extractTrak.samples);\n\t\t\t\t\t}\n\t\t\t\t\textractTrak.samples = [];\n\t\t\t\t\tif (extractTrak !== this.extractedTracks[i]) {\n\t\t\t\t\t\t/* check if the extraction needs to be stopped */\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/* Find and return specific boxes using recursion and early return */\nISOFile.prototype.getBox = function(type) {\n var result = this.getBoxes(type, true);\n return (result.length ? result[0] : null);\n}\n\nISOFile.prototype.getBoxes = function(type, returnEarly) {\n var result = [];\n ISOFile._sweep.call(this, type, result, returnEarly);\n return result;\n}\n\nISOFile._sweep = function(type, result, returnEarly) {\n if (this.type && this.type == type) result.push(this);\n for (var box in this.boxes) {\n if (result.length && returnEarly) return;\n ISOFile._sweep.call(this.boxes[box], type, result, returnEarly);\n }\n}\n\nISOFile.prototype.getTrackSamplesInfo = function(track_id) {\n\tvar track = this.getTrackById(track_id);\n\tif (track) {\n\t\treturn track.samples;\n\t} else {\n\t\treturn;\n\t}\n}\n\nISOFile.prototype.getTrackSample = function(track_id, number) {\n\tvar track = this.getTrackById(track_id);\n\tvar sample = this.getSample(track, number);\n\treturn sample;\n}\n\n/* Called by the application to release the resources associated to samples already forwarded to the application */\nISOFile.prototype.releaseUsedSamples = function (id, sampleNum) {\n\tvar size = 0;\n\tvar trak = this.getTrackById(id);\n\tif (!trak.lastValidSample) trak.lastValidSample = 0;\n\tfor (var i = trak.lastValidSample; i < sampleNum; i++) {\n\t\tsize+=this.releaseSample(trak, i);\n\t}\n\tLog.info(\"ISOFile\", \"Track #\"+id+\" released samples up to \"+sampleNum+\" (released size: \"+size+\", remaining: \"+this.samplesDataSize+\")\");\n\ttrak.lastValidSample = sampleNum;\n}\n\nISOFile.prototype.start = function() {\n\tthis.sampleProcessingStarted = true;\n\tthis.processSamples(false);\n}\n\nISOFile.prototype.stop = function() {\n\tthis.sampleProcessingStarted = false;\n}\n\n/* Called by the application to flush the remaining samples (e.g. once the download is finished or when no more samples will be added) */\nISOFile.prototype.flush = function() {\n\tLog.info(\"ISOFile\", \"Flushing remaining samples\");\n\tthis.updateSampleLists();\n\tthis.processSamples(true);\n\tthis.stream.cleanBuffers();\n\tthis.stream.logBufferLevel(true);\n}\n\n/* Finds the byte offset for a given time on a given track\n also returns the time of the previous rap */\nISOFile.prototype.seekTrack = function(time, useRap, trak) {\n\tvar j;\n\tvar sample;\n\tvar seek_offset = Infinity;\n\tvar rap_seek_sample_num = 0;\n\tvar seek_sample_num = 0;\n\tvar timescale;\n\n\tif (trak.samples.length === 0) {\n\t\tLog.info(\"ISOFile\", \"No sample in track, cannot seek! Using time \"+Log.getDurationString(0, 1) +\" and offset: \"+0);\n\t\treturn { offset: 0, time: 0 };\n\t}\n\n\tfor (j = 0; j < trak.samples.length; j++) {\n\t\tsample = trak.samples[j];\n\t\tif (j === 0) {\n\t\t\tseek_sample_num = 0;\n\t\t\ttimescale = sample.timescale;\n\t\t} else if (sample.cts > time * sample.timescale) {\n\t\t\tseek_sample_num = j-1;\n\t\t\tbreak;\n\t\t}\n\t\tif (useRap && sample.is_sync) {\n\t\t\trap_seek_sample_num = j;\n\t\t}\n\t}\n\tif (useRap) {\n\t\tseek_sample_num = rap_seek_sample_num;\n\t}\n\ttime = trak.samples[seek_sample_num].cts;\n\ttrak.nextSample = seek_sample_num;\n\twhile (trak.samples[seek_sample_num].alreadyRead === trak.samples[seek_sample_num].size) {\n\t\t// No remaining samples to look for, all are downloaded.\n\t\tif (!trak.samples[seek_sample_num + 1]) {\n\t\t\tbreak;\n\t\t}\n\t\tseek_sample_num++;\n\t}\n\tseek_offset = trak.samples[seek_sample_num].offset+trak.samples[seek_sample_num].alreadyRead;\n\tLog.info(\"ISOFile\", \"Seeking to \"+(useRap ? \"RAP\": \"\")+\" sample #\"+trak.nextSample+\" on track \"+trak.tkhd.track_id+\", time \"+Log.getDurationString(time, timescale) +\" and offset: \"+seek_offset);\n\treturn { offset: seek_offset, time: time/timescale };\n}\n\nISOFile.prototype.getTrackDuration = function (trak) {\n\tvar sample;\n\n\tif (!trak.samples) {\n\t\treturn Infinity;\n\t}\n\tsample = trak.samples[trak.samples.length - 1];\n\treturn (sample.cts + sample.duration) / sample.timescale;\n}\n\n/* Finds the byte offset in the file corresponding to the given time or to the time of the previous RAP */\nISOFile.prototype.seek = function(time, useRap) {\n\tvar moov = this.moov;\n\tvar trak;\n\tvar trak_seek_info;\n\tvar i;\n\tvar seek_info = { offset: Infinity, time: Infinity };\n\tif (!this.moov) {\n\t\tthrow \"Cannot seek: moov not received!\";\n\t} else {\n\t\tfor (i = 0; i<moov.traks.length; i++) {\n\t\t\ttrak = moov.traks[i];\n\t\t\tif (time > this.getTrackDuration(trak)) { // skip tracks that already ended\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttrak_seek_info = this.seekTrack(time, useRap, trak);\n\t\t\tif (trak_seek_info.offset < seek_info.offset) {\n\t\t\t\tseek_info.offset = trak_seek_info.offset;\n\t\t\t}\n\t\t\tif (trak_seek_info.time < seek_info.time) {\n\t\t\t\tseek_info.time = trak_seek_info.time;\n\t\t\t}\n\t\t}\n\t\tLog.info(\"ISOFile\", \"Seeking at time \"+Log.getDurationString(seek_info.time, 1)+\" needs a buffer with a fileStart position of \"+seek_info.offset);\n\t\tif (seek_info.offset === Infinity) {\n\t\t\t/* No sample info, in all tracks, cannot seek */\n\t\t\tseek_info = { offset: this.nextParsePosition, time: 0 };\n\t\t} else {\n\t\t\t/* check if the seek position is already in some buffer and\n\t\t\t in that case return the end of that buffer (or of the last contiguous buffer) */\n\t\t\t/* TODO: Should wait until append operations are done */\n\t\t\tseek_info.offset = this.stream.getEndFilePositionAfter(seek_info.offset);\n\t\t}\n\t\tLog.info(\"ISOFile\", \"Adjusted seek position (after checking data already in buffer): \"+seek_info.offset);\n\t\treturn seek_info;\n\t}\n}\n\nISOFile.prototype.equal = function(b) {\n\tvar box_index = 0;\n\twhile (box_index < this.boxes.length && box_index < b.boxes.length) {\n\t\tvar a_box = this.boxes[box_index];\n\t\tvar b_box = b.boxes[box_index];\n\t\tif (!BoxParser.boxEqual(a_box, b_box)) {\n\t\t\treturn false;\n\t\t}\n\t\tbox_index++;\n\t}\n\treturn true;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.ISOFile = ISOFile;\n}\n// file:src/isofile-advanced-parsing.js\n/* position in the current buffer of the beginning of the last box parsed */\nISOFile.prototype.lastBoxStartPosition = 0;\n/* indicator if the parsing is stuck in the middle of an mdat box */\nISOFile.prototype.parsingMdat = null;\n/* next file position that the parser needs:\n - 0 until the first buffer (i.e. fileStart ===0) has been received \n - otherwise, the next box start until the moov box has been parsed\n - otherwise, the position of the next sample to fetch\n */\nISOFile.prototype.nextParsePosition = 0;\n/* keep mdat data */\nISOFile.prototype.discardMdatData = false;\n\nISOFile.prototype.processIncompleteBox = function(ret) {\n\tvar box;\n\tvar merged;\n\tvar found;\n\t\n\t/* we did not have enough bytes in the current buffer to parse the entire box */\n\tif (ret.type === \"mdat\") { \n\t\t/* we had enough bytes to get its type and size and it's an 'mdat' */\n\t\t\n\t\t/* special handling for mdat boxes, since we don't actually need to parse it linearly \n\t\t we create the box */\n\t\tbox = new BoxParser[ret.type+\"Box\"](ret.size);\t\n\t\tthis.parsingMdat = box;\n\t\tthis.boxes.push(box);\n\t\tthis.mdats.push(box);\t\t\t\n\t\tbox.start = ret.start;\n\t\tbox.hdr_size = ret.hdr_size;\n\t\tthis.stream.addUsedBytes(box.hdr_size);\n\n\t\t/* indicate that the parsing should start from the end of the box */\n\t\tthis.lastBoxStartPosition = box.start + box.size;\n \t\t/* let's see if we have the end of the box in the other buffers */\n\t\tfound = this.stream.seek(box.start + box.size, false, this.discardMdatData);\n\t\tif (found) {\n\t\t\t/* found the end of the box */\n\t\t\tthis.parsingMdat = null;\n\t\t\t/* let's see if we can parse more in this buffer */\n\t\t\treturn true;\n\t\t} else {\n\t\t\t/* 'mdat' end not found in the existing buffers */\n\t\t\t/* determine the next position in the file to start parsing from */\n\t\t\tif (!this.moovStartFound) {\n\t\t\t\t/* moov not find yet, \n\t\t\t\t the file probably has 'mdat' at the beginning, and 'moov' at the end, \n\t\t\t\t indicate that the downloader should not try to download those bytes now */\n\t\t\t\tthis.nextParsePosition = box.start + box.size;\n\t\t\t} else {\n\t\t\t\t/* we have the start of the moov box, \n\t\t\t\t the next bytes should try to complete the current 'mdat' */\n\t\t\t\tthis.nextParsePosition = this.stream.findEndContiguousBuf();\n\t\t\t}\n\t\t\t/* not much we can do, wait for more buffers to arrive */\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\t/* box is incomplete, we may not even know its type */\n\t\tif (ret.type === \"moov\") { \n\t\t\t/* the incomplete box is a 'moov' box */\n\t\t\tthis.moovStartFound = true;\n\t\t\tif (this.mdats.length === 0) {\n\t\t\t\tthis.isProgressive = true;\n\t\t\t}\n\t\t}\n\t\t/* either it's not an mdat box (and we need to parse it, we cannot skip it)\n\t\t (TODO: we could skip 'free' boxes ...)\n\t\t\t or we did not have enough data to parse the type and size of the box, \n\t\t we try to concatenate the current buffer with the next buffer to restart parsing */\n\t\tmerged = (this.stream.mergeNextBuffer ? this.stream.mergeNextBuffer() : false);\n\t\tif (merged) {\n\t\t\t/* The next buffer was contiguous, the merging succeeded,\n\t\t\t we can now continue parsing, \n\t\t\t the next best position to parse is at the end of this new buffer */\n\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\treturn true;\n\t\t} else {\n\t\t\t/* we cannot concatenate existing buffers because they are not contiguous or because there is no additional buffer */\n\t\t\t/* The next best position to parse is still at the end of this old buffer */\n\t\t\tif (!ret.type) {\n\t\t\t\t/* There were not enough bytes in the buffer to parse the box type and length,\n\t\t\t\t the next fetch should retrieve those missing bytes, i.e. the next bytes after this buffer */\n\t\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\t} else {\n\t\t\t\t/* we had enough bytes to parse size and type of the incomplete box\n\t\t\t\t if we haven't found yet the moov box, skip this one and try the next one \n\t\t\t\t if we have found the moov box, let's continue linear parsing */\n\t\t\t\tif (this.moovStartFound) {\n\t\t\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\t\t} else {\n\t\t\t\t\tthis.nextParsePosition = this.stream.getPosition() + ret.size;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n}\n\nISOFile.prototype.hasIncompleteMdat = function () {\n\treturn (this.parsingMdat !== null);\n}\n\nISOFile.prototype.processIncompleteMdat = function () {\n\tvar box;\n\tvar found;\n\t\n\t/* we are in the parsing of an incomplete mdat box */\n\tbox = this.parsingMdat;\n\n\tfound = this.stream.seek(box.start + box.size, false, this.discardMdatData);\n\tif (found) {\n\t\tLog.debug(\"ISOFile\", \"Found 'mdat' end in buffered data\");\n\t\t/* the end of the mdat has been found */ \n\t\tthis.parsingMdat = null;\n\t\t/* we can parse more in this buffer */\n\t\treturn true;\n\t} else {\n\t\t/* we don't have the end of this mdat yet, \n\t\t indicate that the next byte to fetch is the end of the buffers we have so far, \n\t\t return and wait for more buffer to come */\n\t\tthis.nextParsePosition = this.stream.findEndContiguousBuf();\n\t\treturn false;\n\t}\n}\n\nISOFile.prototype.restoreParsePosition = function() {\n\t/* Reposition at the start position of the previous box not entirely parsed */\n\treturn this.stream.seek(this.lastBoxStartPosition, true, this.discardMdatData);\n}\n\nISOFile.prototype.saveParsePosition = function() {\n\t/* remember the position of the box start in case we need to roll back (if the box is incomplete) */\n\tthis.lastBoxStartPosition = this.stream.getPosition();\t\n}\n\nISOFile.prototype.updateUsedBytes = function(box, ret) {\n\tif (this.stream.addUsedBytes) {\n\t\tif (box.type === \"mdat\") {\n\t\t\t/* for an mdat box, only its header is considered used, other bytes will be used when sample data is requested */\n\t\t\tthis.stream.addUsedBytes(box.hdr_size);\n\t\t\tif (this.discardMdatData) {\n\t\t\t\tthis.stream.addUsedBytes(box.size-box.hdr_size);\n\t\t\t}\n\t\t} else {\n\t\t\t/* for all other boxes, the entire box data is considered used */\n\t\t\tthis.stream.addUsedBytes(box.size);\n\t\t}\t\n\t}\n}\n// file:src/isofile-advanced-creation.js\nISOFile.prototype.add = BoxParser.Box.prototype.add;\nISOFile.prototype.addBox = BoxParser.Box.prototype.addBox;\n\nISOFile.prototype.init = function (_options) {\n\tvar options = _options || {}; \n\tvar ftyp = this.add(\"ftyp\").set(\"major_brand\", (options.brands && options.brands[0]) || \"iso4\")\n\t\t\t\t\t\t\t .set(\"minor_version\", 0)\n\t\t\t\t\t\t\t .set(\"compatible_brands\", options.brands || [\"iso4\"]);\n\tvar moov = this.add(\"moov\");\n\tmoov.add(\"mvhd\").set(\"timescale\", options.timescale || 600)\n\t\t\t\t\t.set(\"rate\", options.rate || 1<<16)\n\t\t\t\t\t.set(\"creation_time\", 0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"duration\", options.duration || 0)\n\t\t\t\t\t.set(\"volume\", (options.width) ? 0 : 0x0100)\n\t\t\t\t\t.set(\"matrix\", [ 1<<16, 0, 0, 0, 1<<16, 0, 0, 0, 0x40000000])\n\t\t\t\t\t.set(\"next_track_id\", 1);\n\tmoov.add(\"mvex\");\n\treturn this;\n}\n\nISOFile.prototype.addTrack = function (_options) {\n\tif (!this.moov) {\n\t\tthis.init(_options);\n\t}\n\n\tvar options = _options || {}; \n\toptions.width = options.width || 320;\n\toptions.height = options.height || 320;\n\toptions.id = options.id || this.moov.mvhd.next_track_id;\n\toptions.type = options.type || \"avc1\";\n\n\tvar trak = this.moov.add(\"trak\");\n\tthis.moov.mvhd.next_track_id = options.id+1;\n\ttrak.add(\"tkhd\").set(\"flags\",BoxParser.TKHD_FLAG_ENABLED | \n\t\t\t\t\t\t\t\t BoxParser.TKHD_FLAG_IN_MOVIE | \n\t\t\t\t\t\t\t\t BoxParser.TKHD_FLAG_IN_PREVIEW)\n\t\t\t\t\t.set(\"creation_time\",0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"track_id\", options.id)\n\t\t\t\t\t.set(\"duration\", options.duration || 0)\n\t\t\t\t\t.set(\"layer\", options.layer || 0)\n\t\t\t\t\t.set(\"alternate_group\", 0)\n\t\t\t\t\t.set(\"volume\", 1)\n\t\t\t\t\t.set(\"matrix\", [ 1<<16, 0, 0, 0, 1<<16, 0, 0, 0, 0x40000000 ])\n\t\t\t\t\t.set(\"width\", options.width << 16)\n\t\t\t\t\t.set(\"height\", options.height << 16);\n\n\tvar mdia = trak.add(\"mdia\");\n\tmdia.add(\"mdhd\").set(\"creation_time\", 0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"timescale\", options.timescale || 1)\n\t\t\t\t\t.set(\"duration\", options.media_duration || 0)\n\t\t\t\t\t.set(\"language\", options.language || \"und\");\n\n\tmdia.add(\"hdlr\").set(\"handler\", options.hdlr || \"vide\")\n\t\t\t\t\t.set(\"name\", options.name || \"Track created with MP4Box.js\");\n\n\tmdia.add(\"elng\").set(\"extended_language\", options.language || \"fr-FR\");\n\n\tvar minf = mdia.add(\"minf\");\n\tif (BoxParser[options.type+\"SampleEntry\"] === undefined) return;\n\tvar sample_description_entry = new BoxParser[options.type+\"SampleEntry\"]();\n\tsample_description_entry.data_reference_index = 1;\n\tvar media_type = \"\";\n\tfor (var mediaType in BoxParser.sampleEntryCodes) {\n\t\tvar codes = BoxParser.sampleEntryCodes[mediaType];\n\t\tfor (var i = 0; i < codes.length; i++) {\n\t\t\tif (codes.indexOf(options.type) > -1) {\n\t\t\t\tmedia_type = mediaType;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tswitch(media_type) {\n\t\tcase \"Visual\":\n\t\t\tminf.add(\"vmhd\").set(\"graphicsmode\",0).set(\"opcolor\", [ 0, 0, 0 ]);\n\t\t\tsample_description_entry.set(\"width\", options.width)\n\t\t\t\t\t\t.set(\"height\", options.height)\n\t\t\t\t\t\t.set(\"horizresolution\", 0x48<<16)\n\t\t\t\t\t\t.set(\"vertresolution\", 0x48<<16)\n\t\t\t\t\t\t.set(\"frame_count\", 1)\n\t\t\t\t\t\t.set(\"compressorname\", options.type+\" Compressor\")\n\t\t\t\t\t\t.set(\"depth\", 0x18);\n\t\t\tif (options.avcDecoderConfigRecord) {\n\t\t\t\tvar avcC = new BoxParser.avcCBox();\n\t\t\t\tavcC.parse(new MP4BoxStream(options.avcDecoderConfigRecord));\n\t\t\t\tsample_description_entry.addBox(avcC);\n\t\t\t} else if (options.hevcDecoderConfigRecord) {\n\t\t\t\tvar hvcC = new BoxParser.hvcCBox();\n\t\t\t\thvcC.parse(new MP4BoxStream(options.hevcDecoderConfigRecord));\n\t\t\t\tsample_description_entry.addBox(hvcC);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"Audio\":\n\t\t\tminf.add(\"smhd\").set(\"balance\", options.balance || 0);\n\t\t\tsample_description_entry.set(\"channel_count\", options.channel_count || 2)\n\t\t\t\t\t\t.set(\"samplesize\", options.samplesize || 16)\n\t\t\t\t\t\t.set(\"samplerate\", options.samplerate || 1<<16);\n\t\t\tbreak;\n\t\tcase \"Hint\":\n\t\t\tminf.add(\"hmhd\"); // TODO: add properties\n\t\t\tbreak;\n\t\tcase \"Subtitle\":\n\t\t\tminf.add(\"sthd\");\n\t\t\tswitch (options.type) {\n\t\t\t\tcase \"stpp\":\n\t\t\t\t\tsample_description_entry.set(\"namespace\", options.namespace || \"nonamespace\")\n\t\t\t\t\t\t\t\t.set(\"schema_location\", options.schema_location || \"\")\n\t\t\t\t\t\t\t\t.set(\"auxiliary_mime_types\", options.auxiliary_mime_types || \"\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"Metadata\":\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t\tcase \"System\":\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t}\n\tif (options.description) {\n\t\tsample_description_entry.addBox(options.description);\n\t}\n\tif (options.description_boxes) {\n\t\toptions.description_boxes.forEach(function (b) {\n\t\t\tsample_description_entry.addBox(b);\n\t\t});\n\t}\n\tminf.add(\"dinf\").add(\"dref\").addEntry((new BoxParser[\"url Box\"]()).set(\"flags\", 0x1));\n\tvar stbl = minf.add(\"stbl\");\n\tstbl.add(\"stsd\").addEntry(sample_description_entry);\n\tstbl.add(\"stts\").set(\"sample_counts\", [])\n\t\t\t\t\t.set(\"sample_deltas\", []);\n\tstbl.add(\"stsc\").set(\"first_chunk\", [])\n\t\t\t\t\t.set(\"samples_per_chunk\", [])\n\t\t\t\t\t.set(\"sample_description_index\", []);\n\tstbl.add(\"stco\").set(\"chunk_offsets\", []);\n\tstbl.add(\"stsz\").set(\"sample_sizes\", []);\n\n\tthis.moov.mvex.add(\"trex\").set(\"track_id\", options.id)\n\t\t\t\t\t\t\t .set(\"default_sample_description_index\", options.default_sample_description_index || 1)\n\t\t\t\t\t\t\t .set(\"default_sample_duration\", options.default_sample_duration || 0)\n\t\t\t\t\t\t\t .set(\"default_sample_size\", options.default_sample_size || 0)\n\t\t\t\t\t\t\t .set(\"default_sample_flags\", options.default_sample_flags || 0);\n\tthis.buildTrakSampleLists(trak);\n\treturn options.id;\n}\n\nBoxParser.Box.prototype.computeSize = function(stream_) {\n\tvar stream = stream_ || new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tthis.write(stream);\n}\n\nISOFile.prototype.addSample = function (track_id, data, _options) {\n\tvar options = _options || {};\n\tvar sample = {};\n\tvar trak = this.getTrackById(track_id);\n\tif (trak === null) return;\n sample.number = trak.samples.length;\n\tsample.track_id = trak.tkhd.track_id;\n\tsample.timescale = trak.mdia.mdhd.timescale;\n\tsample.description_index = (options.sample_description_index ? options.sample_description_index - 1: 0);\n\tsample.description = trak.mdia.minf.stbl.stsd.entries[sample.description_index];\n\tsample.data = data;\n\tsample.size = data.byteLength;\n\tsample.alreadyRead = sample.size;\n\tsample.duration = options.duration || 1;\n\tsample.cts = options.cts || 0;\n\tsample.dts = options.dts || 0;\n\tsample.is_sync = options.is_sync || false;\n\tsample.is_leading = options.is_leading || 0;\n\tsample.depends_on = options.depends_on || 0;\n\tsample.is_depended_on = options.is_depended_on || 0;\n\tsample.has_redundancy = options.has_redundancy || 0;\n\tsample.degradation_priority = options.degradation_priority || 0;\n\tsample.offset = 0;\n\tsample.subsamples = options.subsamples;\n\ttrak.samples.push(sample);\n\ttrak.samples_size += sample.size;\n\ttrak.samples_duration += sample.duration;\n\tif (trak.first_dts === undefined) {\n\t\ttrak.first_dts = options.dts;\n\t}\n\n\tthis.processSamples();\n\t\n\tvar moof = this.createSingleSampleMoof(sample);\n\tthis.addBox(moof);\n\tmoof.computeSize();\n\t/* adjusting the data_offset now that the moof size is known*/\n\tmoof.trafs[0].truns[0].data_offset = moof.size+8; //8 is mdat header\n\tthis.add(\"mdat\").data = new Uint8Array(data);\n\treturn sample;\n}\n\nISOFile.prototype.createSingleSampleMoof = function(sample) {\n\tvar sample_flags = 0;\n\tif (sample.is_sync)\n\t\tsample_flags = (1 << 25); // sample_depends_on_none (I picture)\n\telse\n\t\tsample_flags = (1 << 16); // non-sync\n\n\tvar moof = new BoxParser.moofBox();\n\tmoof.add(\"mfhd\").set(\"sequence_number\", this.nextMoofNumber);\n\tthis.nextMoofNumber++;\n\tvar traf = moof.add(\"traf\");\n\tvar trak = this.getTrackById(sample.track_id);\n\ttraf.add(\"tfhd\").set(\"track_id\", sample.track_id)\n\t\t\t\t\t.set(\"flags\", BoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF);\n\ttraf.add(\"tfdt\").set(\"baseMediaDecodeTime\", (sample.dts - (trak.first_dts || 0)));\n\ttraf.add(\"trun\").set(\"flags\", BoxParser.TRUN_FLAGS_DATA_OFFSET | BoxParser.TRUN_FLAGS_DURATION | \n\t\t\t\t \t\t\t\t BoxParser.TRUN_FLAGS_SIZE | BoxParser.TRUN_FLAGS_FLAGS | \n\t\t\t\t \t\t\t\t BoxParser.TRUN_FLAGS_CTS_OFFSET)\n\t\t\t\t\t.set(\"data_offset\",0)\n\t\t\t\t\t.set(\"first_sample_flags\",0)\n\t\t\t\t\t.set(\"sample_count\",1)\n\t\t\t\t\t.set(\"sample_duration\",[sample.duration])\n\t\t\t\t\t.set(\"sample_size\",[sample.size])\n\t\t\t\t\t.set(\"sample_flags\",[sample_flags])\n\t\t\t\t\t.set(\"sample_composition_time_offset\", [sample.cts - sample.dts]);\n\treturn moof;\n}\n\n// file:src/isofile-sample-processing.js\n/* Index of the last moof box received */\nISOFile.prototype.lastMoofIndex = 0;\n\n/* size of the buffers allocated for samples */\nISOFile.prototype.samplesDataSize = 0;\n\n/* Resets all sample tables */\nISOFile.prototype.resetTables = function () {\n\tvar i;\n\tvar trak, stco, stsc, stsz, stts, ctts, stss;\n\tthis.initial_duration = this.moov.mvhd.duration;\n\tthis.moov.mvhd.duration = 0;\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\ttrak = this.moov.traks[i];\n\t\ttrak.tkhd.duration = 0;\n\t\ttrak.mdia.mdhd.duration = 0;\n\t\tstco = trak.mdia.minf.stbl.stco || trak.mdia.minf.stbl.co64;\n\t\tstco.chunk_offsets = [];\n\t\tstsc = trak.mdia.minf.stbl.stsc;\n\t\tstsc.first_chunk = [];\n\t\tstsc.samples_per_chunk = [];\n\t\tstsc.sample_description_index = [];\n\t\tstsz = trak.mdia.minf.stbl.stsz || trak.mdia.minf.stbl.stz2;\n\t\tstsz.sample_sizes = [];\n\t\tstts = trak.mdia.minf.stbl.stts;\n\t\tstts.sample_counts = [];\n\t\tstts.sample_deltas = [];\n\t\tctts = trak.mdia.minf.stbl.ctts;\n\t\tif (ctts) {\n\t\t\tctts.sample_counts = [];\n\t\t\tctts.sample_offsets = [];\n\t\t}\n\t\tstss = trak.mdia.minf.stbl.stss;\n\t\tvar k = trak.mdia.minf.stbl.boxes.indexOf(stss);\n\t\tif (k != -1) trak.mdia.minf.stbl.boxes[k] = null;\n\t}\n}\n\nISOFile.initSampleGroups = function(trak, traf, sbgps, trak_sgpds, traf_sgpds) {\n\tvar l;\n\tvar k;\n\tvar sample_groups_info;\n\tvar sample_group_info;\n\tvar sample_group_key;\n\tfunction SampleGroupInfo(_type, _parameter, _sbgp) {\n\t\tthis.grouping_type = _type;\n\t\tthis.grouping_type_parameter = _parameter;\n\t\tthis.sbgp = _sbgp;\n\t\tthis.last_sample_in_run = -1;\n\t\tthis.entry_index = -1;\t\t\n\t}\n\tif (traf) {\n\t\ttraf.sample_groups_info = [];\n\t} \n\tif (!trak.sample_groups_info) {\n\t\ttrak.sample_groups_info = [];\n\t}\n\tfor (k = 0; k < sbgps.length; k++) {\n\t\tsample_group_key = sbgps[k].grouping_type +\"/\"+ sbgps[k].grouping_type_parameter;\n\t\tsample_group_info = new SampleGroupInfo(sbgps[k].grouping_type, sbgps[k].grouping_type_parameter, sbgps[k]);\n\t\tif (traf) {\n\t\t\ttraf.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t}\n\t\tif (!trak.sample_groups_info[sample_group_key]) {\n\t\t\ttrak.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t}\n\t\tfor (l=0; l <trak_sgpds.length; l++) {\n\t\t\tif (trak_sgpds[l].grouping_type === sbgps[k].grouping_type) {\n\t\t\t\tsample_group_info.description = trak_sgpds[l];\n\t\t\t\tsample_group_info.description.used = true;\n\t\t\t}\n\t\t}\n\t\tif (traf_sgpds) {\n\t\t\tfor (l=0; l <traf_sgpds.length; l++) {\n\t\t\t\tif (traf_sgpds[l].grouping_type === sbgps[k].grouping_type) {\n\t\t\t\t\tsample_group_info.fragment_description = traf_sgpds[l];\n\t\t\t\t\tsample_group_info.fragment_description.used = true;\n\t\t\t\t\tsample_group_info.is_fragment = true;\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t}\n\t}\n\tif (!traf) {\n\t\tfor (k = 0; k < trak_sgpds.length; k++) {\n\t\t\tif (!trak_sgpds[k].used && trak_sgpds[k].version >= 2) {\n\t\t\t\tsample_group_key = trak_sgpds[k].grouping_type +\"/0\";\n\t\t\t\tsample_group_info = new SampleGroupInfo(trak_sgpds[k].grouping_type, 0);\n\t\t\t\tif (!trak.sample_groups_info[sample_group_key]) {\n\t\t\t\t\ttrak.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (traf_sgpds) {\n\t\t\tfor (k = 0; k < traf_sgpds.length; k++) {\n\t\t\t\tif (!traf_sgpds[k].used && traf_sgpds[k].version >= 2) {\n\t\t\t\t\tsample_group_key = traf_sgpds[k].grouping_type +\"/0\";\n\t\t\t\t\tsample_group_info = new SampleGroupInfo(traf_sgpds[k].grouping_type, 0);\n\t\t\t\t\tsample_group_info.is_fragment = true;\n\t\t\t\t\tif (!traf.sample_groups_info[sample_group_key]) {\n\t\t\t\t\t\ttraf.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.setSampleGroupProperties = function(trak, sample, sample_number, sample_groups_info) {\n\tvar k;\n\tvar index;\n\tsample.sample_groups = [];\n\tfor (k in sample_groups_info) {\n\t\tsample.sample_groups[k] = {};\n\t\tsample.sample_groups[k].grouping_type = sample_groups_info[k].grouping_type;\n\t\tsample.sample_groups[k].grouping_type_parameter = sample_groups_info[k].grouping_type_parameter;\n\t\tif (sample_number >= sample_groups_info[k].last_sample_in_run) {\n\t\t\tif (sample_groups_info[k].last_sample_in_run < 0) {\n\t\t\t\tsample_groups_info[k].last_sample_in_run = 0;\n\t\t\t}\n\t\t\tsample_groups_info[k].entry_index++;\t\n\t\t\tif (sample_groups_info[k].entry_index <= sample_groups_info[k].sbgp.entries.length - 1) {\n\t\t\t\tsample_groups_info[k].last_sample_in_run += sample_groups_info[k].sbgp.entries[sample_groups_info[k].entry_index].sample_count;\n\t\t\t}\n\t\t}\n\t\tif (sample_groups_info[k].entry_index <= sample_groups_info[k].sbgp.entries.length - 1) {\n\t\t\tsample.sample_groups[k].group_description_index = sample_groups_info[k].sbgp.entries[sample_groups_info[k].entry_index].group_description_index;\n\t\t} else {\n\t\t\tsample.sample_groups[k].group_description_index = -1; // special value for not defined\n\t\t}\n\t\tif (sample.sample_groups[k].group_description_index !== 0) {\n\t\t\tvar description;\n\t\t\tif (sample_groups_info[k].fragment_description) {\n\t\t\t\tdescription = sample_groups_info[k].fragment_description;\n\t\t\t} else {\n\t\t\t\tdescription = sample_groups_info[k].description;\n\t\t\t}\n\t\t\tif (sample.sample_groups[k].group_description_index > 0) {\n\t\t\t\tif (sample.sample_groups[k].group_description_index > 65535) {\n\t\t\t\t\tindex = (sample.sample_groups[k].group_description_index >> 16)-1;\n\t\t\t\t} else {\n\t\t\t\t\tindex = sample.sample_groups[k].group_description_index-1;\n\t\t\t\t}\n\t\t\t\tif (description && index >= 0) {\n\t\t\t\t\tsample.sample_groups[k].description = description.entries[index];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (description && description.version >= 2) {\n\t\t\t\t\tif (description.default_group_description_index > 0) {\t\t\t\t\t\t\t\t\n\t\t\t\t\t\tsample.sample_groups[k].description = description.entries[description.default_group_description_index-1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.process_sdtp = function (sdtp, sample, number) {\n\tif (!sample) {\n\t\treturn;\n\t}\n\tif (sdtp) {\n\t\tsample.is_leading = sdtp.is_leading[number];\n\t\tsample.depends_on = sdtp.sample_depends_on[number];\n\t\tsample.is_depended_on = sdtp.sample_is_depended_on[number];\n\t\tsample.has_redundancy = sdtp.sample_has_redundancy[number];\n\t} else {\n\t\tsample.is_leading = 0;\n\t\tsample.depends_on = 0;\n\t\tsample.is_depended_on = 0\n\t\tsample.has_redundancy = 0;\n\t}\t\n}\n\n/* Build initial sample list from sample tables */\nISOFile.prototype.buildSampleLists = function() {\t\n\tvar i;\n\tvar trak;\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\ttrak = this.moov.traks[i];\n\t\tthis.buildTrakSampleLists(trak);\n\t}\n}\n\nISOFile.prototype.buildTrakSampleLists = function(trak) {\t\n\tvar j, k;\n\tvar stco, stsc, stsz, stts, ctts, stss, stsd, subs, sbgps, sgpds, stdp;\n\tvar chunk_run_index, chunk_index, last_chunk_in_run, offset_in_chunk, last_sample_in_chunk;\n\tvar last_sample_in_stts_run, stts_run_index, last_sample_in_ctts_run, ctts_run_index, last_stss_index, last_subs_index, subs_entry_index, last_subs_sample_index;\n\n\ttrak.samples = [];\n\ttrak.samples_duration = 0;\n\ttrak.samples_size = 0;\n\tstco = trak.mdia.minf.stbl.stco || trak.mdia.minf.stbl.co64;\n\tstsc = trak.mdia.minf.stbl.stsc;\n\tstsz = trak.mdia.minf.stbl.stsz || trak.mdia.minf.stbl.stz2;\n\tstts = trak.mdia.minf.stbl.stts;\n\tctts = trak.mdia.minf.stbl.ctts;\n\tstss = trak.mdia.minf.stbl.stss;\n\tstsd = trak.mdia.minf.stbl.stsd;\n\tsubs = trak.mdia.minf.stbl.subs;\n\tstdp = trak.mdia.minf.stbl.stdp;\n\tsbgps = trak.mdia.minf.stbl.sbgps;\n\tsgpds = trak.mdia.minf.stbl.sgpds;\n\t\n\tlast_sample_in_stts_run = -1;\n\tstts_run_index = -1;\n\tlast_sample_in_ctts_run = -1;\n\tctts_run_index = -1;\n\tlast_stss_index = 0;\n\tsubs_entry_index = 0;\n\tlast_subs_sample_index = 0;\t\t\n\n\tISOFile.initSampleGroups(trak, null, sbgps, sgpds);\n\n\tif (typeof stsz === \"undefined\") {\n\t\treturn;\n\t}\n\n\t/* we build the samples one by one and compute their properties */\n\tfor (j = 0; j < stsz.sample_sizes.length; j++) {\n\t\tvar sample = {};\n\t\tsample.number = j;\n\t\tsample.track_id = trak.tkhd.track_id;\n\t\tsample.timescale = trak.mdia.mdhd.timescale;\n\t\tsample.alreadyRead = 0;\n\t\ttrak.samples[j] = sample;\n\t\t/* size can be known directly */\n\t\tsample.size = stsz.sample_sizes[j];\n\t\ttrak.samples_size += sample.size;\n\t\t/* computing chunk-based properties (offset, sample description index)*/\n\t\tif (j === 0) {\t\t\t\t\n\t\t\tchunk_index = 1; /* the first sample is in the first chunk (chunk indexes are 1-based) */\n\t\t\tchunk_run_index = 0; /* the first chunk is the first entry in the first_chunk table */\n\t\t\tsample.chunk_index = chunk_index;\n\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\tlast_sample_in_chunk = stsc.samples_per_chunk[chunk_run_index];\n\t\t\toffset_in_chunk = 0;\n\n\t\t\t/* Is there another entry in the first_chunk table ? */\n\t\t\tif (chunk_run_index + 1 < stsc.first_chunk.length) {\n\t\t\t\t/* The last chunk in the run is the chunk before the next first chunk */\n\t\t\t\tlast_chunk_in_run = stsc.first_chunk[chunk_run_index+1]-1; \t\n\t\t\t} else {\n\t\t\t\t/* There is only one entry in the table, it is valid for all future chunks*/\n\t\t\t\tlast_chunk_in_run = Infinity;\n\t\t\t}\n\t\t} else {\n\t\t\tif (j < last_sample_in_chunk) {\n\t\t\t\t/* the sample is still in the current chunk */\n\t\t\t\tsample.chunk_index = chunk_index;\n\t\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\t} else {\n\t\t\t\t/* the sample is in the next chunk */\n\t\t\t\tchunk_index++;\n\t\t\t\tsample.chunk_index = chunk_index;\n\t\t\t\t/* reset the accumulated offset in the chunk */\n\t\t\t\toffset_in_chunk = 0;\n\t\t\t\tif (chunk_index <= last_chunk_in_run) {\n\t\t\t\t\t/* stay in the same entry of the first_chunk table */\n\t\t\t\t\t/* chunk_run_index unmodified */\n\t\t\t\t} else {\n\t\t\t\t\tchunk_run_index++;\n\t\t\t\t\t/* Is there another entry in the first_chunk table ? */\n\t\t\t\t\tif (chunk_run_index + 1 < stsc.first_chunk.length) {\n\t\t\t\t\t\t/* The last chunk in the run is the chunk before the next first chunk */\n\t\t\t\t\t\tlast_chunk_in_run = stsc.first_chunk[chunk_run_index+1]-1; \t\n\t\t\t\t\t} else {\n\t\t\t\t\t\t/* There is only one entry in the table, it is valid for all future chunks*/\n\t\t\t\t\t\tlast_chunk_in_run = Infinity;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\t\tlast_sample_in_chunk += stsc.samples_per_chunk[chunk_run_index];\n\t\t\t}\n\t\t}\n\n\t\tsample.description_index = stsc.sample_description_index[sample.chunk_run_index]-1;\n\t\tsample.description = stsd.entries[sample.description_index];\n\t\tsample.offset = stco.chunk_offsets[sample.chunk_index-1] + offset_in_chunk; /* chunk indexes are 1-based */\n\t\toffset_in_chunk += sample.size;\n\n\t\t/* setting dts, cts, duration and rap flags */\n\t\tif (j > last_sample_in_stts_run) {\n\t\t\tstts_run_index++;\n\t\t\tif (last_sample_in_stts_run < 0) {\n\t\t\t\tlast_sample_in_stts_run = 0;\n\t\t\t}\n\t\t\tlast_sample_in_stts_run += stts.sample_counts[stts_run_index];\t\t\t\t\n\t\t}\n\t\tif (j > 0) {\n\t\t\ttrak.samples[j-1].duration = stts.sample_deltas[stts_run_index];\n\t\t\ttrak.samples_duration += trak.samples[j-1].duration;\n\t\t\tsample.dts = trak.samples[j-1].dts + trak.samples[j-1].duration;\n\t\t} else {\n\t\t\tsample.dts = 0;\n\t\t}\n\t\tif (ctts) {\n\t\t\tif (j >= last_sample_in_ctts_run) {\n\t\t\t\tctts_run_index++;\n\t\t\t\tif (last_sample_in_ctts_run < 0) {\n\t\t\t\t\tlast_sample_in_ctts_run = 0;\n\t\t\t\t}\n\t\t\t\tlast_sample_in_ctts_run += ctts.sample_counts[ctts_run_index];\t\t\t\t\n\t\t\t}\n\t\t\tsample.cts = trak.samples[j].dts + ctts.sample_offsets[ctts_run_index];\n\t\t} else {\n\t\t\tsample.cts = sample.dts;\n\t\t}\n\t\tif (stss) {\n\t\t\tif (j == stss.sample_numbers[last_stss_index] - 1) { // sample numbers are 1-based\n\t\t\t\tsample.is_sync = true;\n\t\t\t\tlast_stss_index++;\n\t\t\t} else {\n\t\t\t\tsample.is_sync = false;\t\t\t\t\n\t\t\t\tsample.degradation_priority = 0;\n\t\t\t}\n\t\t\tif (subs) {\n\t\t\t\tif (subs.entries[subs_entry_index].sample_delta + last_subs_sample_index == j+1) {\n\t\t\t\t\tsample.subsamples = subs.entries[subs_entry_index].subsamples;\n\t\t\t\t\tlast_subs_sample_index += subs.entries[subs_entry_index].sample_delta;\n\t\t\t\t\tsubs_entry_index++;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tsample.is_sync = true;\n\t\t}\n\t\tISOFile.process_sdtp(trak.mdia.minf.stbl.sdtp, sample, sample.number);\n\t\tif (stdp) {\n\t\t\tsample.degradation_priority = stdp.priority[j];\n\t\t} else {\n\t\t\tsample.degradation_priority = 0;\n\t\t}\n\t\tif (subs) {\n\t\t\tif (subs.entries[subs_entry_index].sample_delta + last_subs_sample_index == j) {\n\t\t\t\tsample.subsamples = subs.entries[subs_entry_index].subsamples;\n\t\t\t\tlast_subs_sample_index += subs.entries[subs_entry_index].sample_delta;\n\t\t\t}\n\t\t}\n\t\tif (sbgps.length > 0 || sgpds.length > 0) {\n\t\t\tISOFile.setSampleGroupProperties(trak, sample, j, trak.sample_groups_info);\n\t\t}\n\t}\n\tif (j>0) {\n\t\ttrak.samples[j-1].duration = Math.max(trak.mdia.mdhd.duration - trak.samples[j-1].dts, 0);\n\t\ttrak.samples_duration += trak.samples[j-1].duration;\n\t}\n}\n\n/* Update sample list when new 'moof' boxes are received */\nISOFile.prototype.updateSampleLists = function() {\t\n\tvar i, j, k;\n\tvar default_sample_description_index, default_sample_duration, default_sample_size, default_sample_flags;\n\tvar last_run_position;\n\tvar box, moof, traf, trak, trex;\n\tvar sample;\n\tvar sample_flags;\n\t\n\tif (this.moov === undefined) {\n\t\treturn;\n\t}\n\t/* if the input file is fragmented and fetched in multiple downloads, we need to update the list of samples */\n\twhile (this.lastMoofIndex < this.moofs.length) {\n\t\tbox = this.moofs[this.lastMoofIndex];\n\t\tthis.lastMoofIndex++;\n\t\tif (box.type == \"moof\") {\n\t\t\tmoof = box;\n\t\t\tfor (i = 0; i < moof.trafs.length; i++) {\n\t\t\t\ttraf = moof.trafs[i];\n\t\t\t\ttrak = this.getTrackById(traf.tfhd.track_id);\n\t\t\t\ttrex = this.getTrexById(traf.tfhd.track_id);\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\t\t\t\tdefault_sample_description_index = traf.tfhd.default_sample_description_index;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_description_index = (trex ? trex.default_sample_description_index: 1);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\t\t\t\tdefault_sample_duration = traf.tfhd.default_sample_duration;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_duration = (trex ? trex.default_sample_duration : 0);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\t\t\t\tdefault_sample_size = traf.tfhd.default_sample_size;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_size = (trex ? trex.default_sample_size : 0);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\t\t\t\tdefault_sample_flags = traf.tfhd.default_sample_flags;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_flags = (trex ? trex.default_sample_flags : 0);\n\t\t\t\t}\n\t\t\t\ttraf.sample_number = 0;\n\t\t\t\t/* process sample groups */\n\t\t\t\tif (traf.sbgps.length > 0) {\n\t\t\t\t\tISOFile.initSampleGroups(trak, traf, traf.sbgps, trak.mdia.minf.stbl.sgpds, traf.sgpds);\n\t\t\t\t}\n\t\t\t\tfor (j = 0; j < traf.truns.length; j++) {\n\t\t\t\t\tvar trun = traf.truns[j];\n\t\t\t\t\tfor (k = 0; k < trun.sample_count; k++) {\n\t\t\t\t\t\tsample = {};\n\t\t\t\t\t\tsample.moof_number = this.lastMoofIndex;\n\t\t\t\t\t\tsample.number_in_traf = traf.sample_number;\n\t\t\t\t\t\ttraf.sample_number++;\n\t\t\t sample.number = trak.samples.length;\n\t\t\t\t\t\ttraf.first_sample_index = trak.samples.length;\n\t\t\t\t\t\ttrak.samples.push(sample);\n\t\t\t\t\t\tsample.track_id = trak.tkhd.track_id;\n\t\t\t\t\t\tsample.timescale = trak.mdia.mdhd.timescale;\n\t\t\t\t\t\tsample.description_index = default_sample_description_index-1;\n\t\t\t\t\t\tsample.description = trak.mdia.minf.stbl.stsd.entries[sample.description_index];\n\t\t\t\t\t\tsample.size = default_sample_size;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\t\t\t\t\tsample.size = trun.sample_size[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttrak.samples_size += sample.size;\n\t\t\t\t\t\tsample.duration = default_sample_duration;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\t\t\t\t\tsample.duration = trun.sample_duration[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttrak.samples_duration += sample.duration;\n\t\t\t\t\t\tif (trak.first_traf_merged || k > 0) {\n\t\t\t\t\t\t\tsample.dts = trak.samples[trak.samples.length-2].dts+trak.samples[trak.samples.length-2].duration;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (traf.tfdt) {\n\t\t\t\t\t\t\t\tsample.dts = traf.tfdt.baseMediaDecodeTime;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsample.dts = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttrak.first_traf_merged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample.cts = sample.dts;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\t\t\t\t\tsample.cts = sample.dts + trun.sample_composition_time_offset[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample_flags = default_sample_flags;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\t\t\t\t\tsample_flags = trun.sample_flags[k];\n\t\t\t\t\t\t} else if (k === 0 && (trun.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG)) {\n\t\t\t\t\t\t\tsample_flags = trun.first_sample_flags;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample.is_sync = ((sample_flags >> 16 & 0x1) ? false : true);\n\t\t\t\t\t\tsample.is_leading = (sample_flags >> 26 & 0x3);\n\t\t\t\t\t\tsample.depends_on = (sample_flags >> 24 & 0x3);\n\t\t\t\t\t\tsample.is_depended_on = (sample_flags >> 22 & 0x3);\n\t\t\t\t\t\tsample.has_redundancy = (sample_flags >> 20 & 0x3);\n\t\t\t\t\t\tsample.degradation_priority = (sample_flags & 0xFFFF);\n\t\t\t\t\t\t//ISOFile.process_sdtp(traf.sdtp, sample, sample.number_in_traf);\n\t\t\t\t\t\tvar bdop = (traf.tfhd.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) ? true : false;\n\t\t\t\t\t\tvar dbim = (traf.tfhd.flags & BoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF) ? true : false;\n\t\t\t\t\t\tvar dop = (trun.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) ? true : false;\n\t\t\t\t\t\tvar bdo = 0;\n\t\t\t\t\t\tif (!bdop) {\n\t\t\t\t\t\t\tif (!dbim) {\n\t\t\t\t\t\t\t\tif (j === 0) { // the first track in the movie fragment\n\t\t\t\t\t\t\t\t\tbdo = moof.start; // the position of the first byte of the enclosing Movie Fragment Box\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tbdo = last_run_position; // end of the data defined by the preceding *track* (irrespective of the track id) fragment in the moof\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbdo = moof.start;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbdo = traf.tfhd.base_data_offset;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (j === 0 && k === 0) {\n\t\t\t\t\t\t\tif (dop) {\n\t\t\t\t\t\t\t\tsample.offset = bdo + trun.data_offset; // If the data-offset is present, it is relative to the base-data-offset established in the track fragment header\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsample.offset = bdo; // the data for this run starts the base-data-offset defined by the track fragment header\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsample.offset = last_run_position; // this run starts immediately after the data of the previous run\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlast_run_position = sample.offset + sample.size;\n\t\t\t\t\t\tif (traf.sbgps.length > 0 || traf.sgpds.length > 0 ||\n\t\t\t\t\t\t\ttrak.mdia.minf.stbl.sbgps.length > 0 || trak.mdia.minf.stbl.sgpds.length > 0) {\n\t\t\t\t\t\t\tISOFile.setSampleGroupProperties(trak, sample, sample.number_in_traf, traf.sample_groups_info);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (traf.subs) {\n\t\t\t\t\ttrak.has_fragment_subsamples = true;\n\t\t\t\t\tvar sample_index = traf.first_sample_index;\n\t\t\t\t\tfor (j = 0; j < traf.subs.entries.length; j++) {\n\t\t\t\t\t\tsample_index += traf.subs.entries[j].sample_delta;\n\t\t\t\t\t\tsample = trak.samples[sample_index-1];\n\t\t\t\t\t\tsample.subsamples = traf.subs.entries[j].subsamples;\n\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\t\n}\n\n/* Try to get sample data for a given sample:\n returns null if not found\n returns the same sample if already requested\n */\nISOFile.prototype.getSample = function(trak, sampleNum) {\t\n\tvar buffer;\n\tvar sample = trak.samples[sampleNum];\n\t\n\tif (!this.moov) {\n\t\treturn null;\n\t}\n\n\tif (!sample.data) {\n\t\t/* Not yet fetched */\n\t\tsample.data = new Uint8Array(sample.size);\n\t\tsample.alreadyRead = 0;\n\t\tthis.samplesDataSize += sample.size;\n\t\tLog.debug(\"ISOFile\", \"Allocating sample #\"+sampleNum+\" on track #\"+trak.tkhd.track_id+\" of size \"+sample.size+\" (total: \"+this.samplesDataSize+\")\");\n\t} else if (sample.alreadyRead == sample.size) {\n\t\t/* Already fetched entirely */\n\t\treturn sample;\n\t}\n\n\t/* The sample has only been partially fetched, we need to check in all buffers */\n\twhile(true) {\n\t\tvar index =\tthis.stream.findPosition(true, sample.offset + sample.alreadyRead, false);\n\t\tif (index > -1) {\n\t\t\tbuffer = this.stream.buffers[index];\n\t\t\tvar lengthAfterStart = buffer.byteLength - (sample.offset + sample.alreadyRead - buffer.fileStart);\n\t\t\tif (sample.size - sample.alreadyRead <= lengthAfterStart) {\n\t\t\t\t/* the (rest of the) sample is entirely contained in this buffer */\n\n\t\t\t\tLog.debug(\"ISOFile\",\"Getting sample #\"+sampleNum+\" data (alreadyRead: \"+sample.alreadyRead+\" offset: \"+\n\t\t\t\t\t(sample.offset+sample.alreadyRead - buffer.fileStart)+\" read size: \"+(sample.size - sample.alreadyRead)+\" full size: \"+sample.size+\")\");\n\n\t\t\t\tDataStream.memcpy(sample.data.buffer, sample.alreadyRead,\n\t\t\t\t buffer, sample.offset+sample.alreadyRead - buffer.fileStart, sample.size - sample.alreadyRead);\n\n\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\tbuffer.usedBytes += sample.size - sample.alreadyRead;\n\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\tsample.alreadyRead = sample.size;\n\n\t\t\t\treturn sample;\n\t\t\t} else {\n\t\t\t\t/* the sample does not end in this buffer */\n\n\t\t\t\tif (lengthAfterStart === 0) return null;\n\n\t\t\t\tLog.debug(\"ISOFile\",\"Getting sample #\"+sampleNum+\" partial data (alreadyRead: \"+sample.alreadyRead+\" offset: \"+\n\t\t\t\t\t(sample.offset+sample.alreadyRead - buffer.fileStart)+\" read size: \"+lengthAfterStart+\" full size: \"+sample.size+\")\");\n\n\t\t\t\tDataStream.memcpy(sample.data.buffer, sample.alreadyRead,\n\t\t\t\t buffer, sample.offset+sample.alreadyRead - buffer.fileStart, lengthAfterStart);\n\t\t\t\tsample.alreadyRead += lengthAfterStart;\n\n\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\tbuffer.usedBytes += lengthAfterStart;\n\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\t/* keep looking in the next buffer */\n\t\t\t}\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n}\n\n/* Release the memory used to store the data of the sample */\nISOFile.prototype.releaseSample = function(trak, sampleNum) {\t\n\tvar sample = trak.samples[sampleNum];\n\tif (sample.data) {\n\t\tthis.samplesDataSize -= sample.size;\n\t\tsample.data = null;\n\t\tsample.alreadyRead = 0;\n\t\treturn sample.size;\n\t} else {\n\t\treturn 0;\n\t}\n}\n\nISOFile.prototype.getAllocatedSampleDataSize = function() {\n\treturn this.samplesDataSize;\n}\n\n/* Builds the MIME Type 'codecs' sub-parameters for the whole file */\nISOFile.prototype.getCodecs = function() {\t\n\tvar i;\n\tvar codecs = \"\";\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\tvar trak = this.moov.traks[i];\n\t\tif (i>0) {\n\t\t\tcodecs+=\",\"; \n\t\t}\n\t\tcodecs += trak.mdia.minf.stbl.stsd.entries[0].getCodec();\t\t\n\t}\n\treturn codecs;\n}\n\n/* Helper function */\nISOFile.prototype.getTrexById = function(id) {\t\n\tvar i;\n\tif (!this.moov || !this.moov.mvex) return null;\n\tfor (i = 0; i < this.moov.mvex.trexs.length; i++) {\n\t\tvar trex = this.moov.mvex.trexs[i];\n\t\tif (trex.track_id == id) return trex;\n\t}\n\treturn null;\n}\n\n/* Helper function */\nISOFile.prototype.getTrackById = function(id) {\n\tif (this.moov === undefined) {\n\t\treturn null;\n\t}\n\tfor (var j = 0; j < this.moov.traks.length; j++) {\n\t\tvar trak = this.moov.traks[j];\n\t\tif (trak.tkhd.track_id == id) return trak;\n\t}\n\treturn null;\n}\n// file:src/isofile-item-processing.js\n/* size of the buffers allocated for samples */\nISOFile.prototype.itemsDataSize = 0;\n\nISOFile.prototype.flattenItemInfo = function() {\t\n\tvar items = this.items;\n\tvar entity_groups = this.entity_groups;\n\tvar i, j;\n\tvar item;\n\tvar meta = this.meta;\n\tif (meta === null || meta === undefined) return;\n\tif (meta.hdlr === undefined) return;\n\tif (meta.iinf === undefined) return;\n\tfor (i = 0; i < meta.iinf.item_infos.length; i++) {\n\t\titem = {};\n\t\titem.id = meta.iinf.item_infos[i].item_ID;\n\t\titems[item.id] = item;\n\t\titem.ref_to = [];\n\t\titem.name = meta.iinf.item_infos[i].item_name;\n\t\tif (meta.iinf.item_infos[i].protection_index > 0) {\n\t\t\titem.protection = meta.ipro.protections[meta.iinf.item_infos[i].protection_index-1];\n\t\t}\n\t\tif (meta.iinf.item_infos[i].item_type) {\n\t\t\titem.type = meta.iinf.item_infos[i].item_type;\n\t\t} else {\n\t\t\titem.type = \"mime\";\n\t\t}\n\t\titem.content_type = meta.iinf.item_infos[i].content_type;\n\t\titem.content_encoding = meta.iinf.item_infos[i].content_encoding;\n\t\titem.item_uri_type = meta.iinf.item_infos[i].item_uri_type;\n\t}\n\tif (meta.grpl) {\n\t\tfor (i = 0; i < meta.grpl.boxes.length; i++) {\n\t\t\tentity_group = {};\n\t\t\tentity_group.id = meta.grpl.boxes[i].group_id;\n\t\t\tentity_group.entity_ids = meta.grpl.boxes[i].entity_ids;\n\t\t\tentity_group.type = meta.grpl.boxes[i].type;\n\t\t\tentity_groups[entity_group.id] = entity_group;\n\t\t}\n\t}\n\tif (meta.iloc) {\n\t\tfor(i = 0; i < meta.iloc.items.length; i++) {\n\t\t\tvar offset;\n\t\t\tvar itemloc = meta.iloc.items[i];\n\t\t\titem = items[itemloc.item_ID];\n\t\t\tif (itemloc.data_reference_index !== 0) {\n\t\t\t\tLog.warn(\"Item storage with reference to other files: not supported\");\n\t\t\t\titem.source = meta.dinf.boxes[itemloc.data_reference_index-1];\n\t\t\t}\n\t\t\tswitch(itemloc.construction_method) {\n\t\t\t\tcase 0: // offset into the file referenced by the data reference index\n\t\t\t\tbreak;\n\t\t\t\tcase 1: // offset into the idat box of this meta box\n\t\t\t\tbreak;\n\t\t\t\tcase 2: // offset into another item\n\t\t\t\tLog.warn(\"Item storage with construction_method : not supported\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\titem.extents = [];\n\t\t\titem.size = 0;\n\t\t\tfor (j = 0; j < itemloc.extents.length; j++) {\n\t\t\t\titem.extents[j] = {};\n\t\t\t\titem.extents[j].offset = itemloc.extents[j].extent_offset + itemloc.base_offset;\n\t\t\t\tif (itemloc.construction_method == 1) {\n\t\t\t\t\titem.extents[j].offset += meta.idat.start + meta.idat.hdr_size;\n\t\t\t\t}\n\t\t\t\titem.extents[j].length = itemloc.extents[j].extent_length;\n\t\t\t\titem.extents[j].alreadyRead = 0;\n\t\t\t\titem.size += item.extents[j].length;\n\t\t\t}\n\t\t}\n\t}\n\tif (meta.pitm) {\n\t\titems[meta.pitm.item_id].primary = true;\n\t}\n\tif (meta.iref) {\n\t\tfor (i=0; i <meta.iref.references.length; i++) {\n\t\t\tvar ref = meta.iref.references[i];\n\t\t\tfor (j=0; j<ref.references.length; j++) {\n\t\t\t\titems[ref.from_item_ID].ref_to.push({type: ref.type, id: ref.references[j]});\n\t\t\t}\n\t\t}\n\t}\n\tif (meta.iprp) {\n\t\tfor (var k = 0; k < meta.iprp.ipmas.length; k++) {\n\t\t\tvar ipma = meta.iprp.ipmas[k];\n\t\t\tfor (i = 0; i < ipma.associations.length; i++) {\n\t\t\t\tvar association = ipma.associations[i];\n\t\t\t\titem = items[association.id];\n\t\t\t\tif (!item) {\n\t\t\t\t\titem = entity_groups[association.id];\n\t\t\t\t}\n\t\t\t\tif (item) {\n\t\t\t\t\tif (item.properties === undefined) {\n\t\t\t\t\t\titem.properties = {};\n\t\t\t\t\t\titem.properties.boxes = [];\n\t\t\t\t\t}\n\t\t\t\t\tfor (j = 0; j < association.props.length; j++) {\n\t\t\t\t\t\tvar propEntry = association.props[j];\n\t\t\t\t\t\tif (propEntry.property_index > 0 && propEntry.property_index-1 < meta.iprp.ipco.boxes.length) {\n\t\t\t\t\t\t\tvar propbox = meta.iprp.ipco.boxes[propEntry.property_index-1];\n\t\t\t\t\t\t\titem.properties[propbox.type] = propbox;\n\t\t\t\t\t\t\titem.properties.boxes.push(propbox);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.prototype.getItem = function(item_id) {\t\n\tvar buffer;\n\tvar item;\n\t\n\tif (!this.meta) {\n\t\treturn null;\n\t}\n\n \titem = this.items[item_id];\n\tif (!item.data && item.size) {\n\t\t/* Not yet fetched */\n\t\titem.data = new Uint8Array(item.size);\n\t\titem.alreadyRead = 0;\n\t\tthis.itemsDataSize += item.size;\n\t\tLog.debug(\"ISOFile\", \"Allocating item #\"+item_id+\" of size \"+item.size+\" (total: \"+this.itemsDataSize+\")\");\n\t} else if (item.alreadyRead === item.size) {\n\t\t/* Already fetched entirely */\n\t\treturn item;\n\t}\n\n\t/* The item has only been partially fetched, we need to check in all buffers to find the remaining extents*/\n\n\tfor (var i = 0; i < item.extents.length; i++) {\n\t\tvar extent = item.extents[i];\n\t\tif (extent.alreadyRead === extent.length) {\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tvar index =\tthis.stream.findPosition(true, extent.offset + extent.alreadyRead, false);\n\t\t\tif (index > -1) {\n\t\t\t\tbuffer = this.stream.buffers[index];\n\t\t\t\tvar lengthAfterStart = buffer.byteLength - (extent.offset + extent.alreadyRead - buffer.fileStart);\n\t\t\t\tif (extent.length - extent.alreadyRead <= lengthAfterStart) {\n\t\t\t\t\t/* the (rest of the) extent is entirely contained in this buffer */\n\n\t\t\t\t\tLog.debug(\"ISOFile\",\"Getting item #\"+item_id+\" extent #\"+i+\" data (alreadyRead: \"+extent.alreadyRead+\n\t\t\t\t\t\t\" offset: \"+(extent.offset+extent.alreadyRead - buffer.fileStart)+\" read size: \"+(extent.length - extent.alreadyRead)+\n\t\t\t\t\t\t\" full extent size: \"+extent.length+\" full item size: \"+item.size+\")\");\n\n\t\t\t\t\tDataStream.memcpy(item.data.buffer, item.alreadyRead, \n\t\t\t\t\t buffer, extent.offset+extent.alreadyRead - buffer.fileStart, extent.length - extent.alreadyRead);\n\n\t\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\t\tbuffer.usedBytes += extent.length - extent.alreadyRead;\n\t\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\t\titem.alreadyRead += (extent.length - extent.alreadyRead);\n\t\t\t\t\textent.alreadyRead = extent.length;\n\t\t\t\t} else {\n\t\t\t\t\t/* the sample does not end in this buffer */\n\n\t\t\t\t\tLog.debug(\"ISOFile\",\"Getting item #\"+item_id+\" extent #\"+i+\" partial data (alreadyRead: \"+extent.alreadyRead+\" offset: \"+\n\t\t\t\t\t\t(extent.offset+extent.alreadyRead - buffer.fileStart)+\" read size: \"+lengthAfterStart+\n\t\t\t\t\t\t\" full extent size: \"+extent.length+\" full item size: \"+item.size+\")\");\n\n\t\t\t\t\tDataStream.memcpy(item.data.buffer, item.alreadyRead, \n\t\t\t\t\t buffer, extent.offset+extent.alreadyRead - buffer.fileStart, lengthAfterStart);\n\t\t\t\t\textent.alreadyRead += lengthAfterStart;\n\t\t\t\t\titem.alreadyRead += lengthAfterStart;\n\n\t\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\t\tbuffer.usedBytes += lengthAfterStart;\n\t\t\t\t\tthis.stream.logBufferLevel();\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t}\n\tif (item.alreadyRead === item.size) {\n\t\t/* fetched entirely */\n\t\treturn item;\n\t} else {\n\t\treturn null;\n\t}\n}\n\n/* Release the memory used to store the data of the item */\nISOFile.prototype.releaseItem = function(item_id) {\t\n\tvar item = this.items[item_id];\n\tif (item.data) {\n\t\tthis.itemsDataSize -= item.size;\n\t\titem.data = null;\n\t\titem.alreadyRead = 0;\n\t\tfor (var i = 0; i < item.extents.length; i++) {\n\t\t\tvar extent = item.extents[i];\n\t\t\textent.alreadyRead = 0;\n\t\t}\n\t\treturn item.size;\n\t} else {\n\t\treturn 0;\n\t}\n}\n\n\nISOFile.prototype.processItems = function(callback) {\n\tfor(var i in this.items) {\n\t\tvar item = this.items[i];\n\t\tthis.getItem(item.id);\n\t\tif (callback && !item.sent) {\n\t\t\tcallback(item);\n\t\t\titem.sent = true;\n\t\t\titem.data = null;\n\t\t}\n\t}\n}\n\nISOFile.prototype.hasItem = function(name) {\n\tfor(var i in this.items) {\n\t\tvar item = this.items[i];\n\t\tif (item.name === name) {\n\t\t\treturn item.id;\n\t\t}\n\t}\n\treturn -1;\n}\n\nISOFile.prototype.getMetaHandler = function() {\n\tif (!this.meta) {\n\t\treturn null;\n\t} else {\n\t\treturn this.meta.hdlr.handler;\t\t\n\t}\n}\n\nISOFile.prototype.getPrimaryItem = function() {\n\tif (!this.meta || !this.meta.pitm) {\n\t\treturn null;\n\t} else {\n\t\treturn this.getItem(this.meta.pitm.item_id);\n\t}\n}\n\nISOFile.prototype.itemToFragmentedTrackFile = function(_options) {\n\tvar options = _options || {};\n\tvar item = null;\n\tif (options.itemId) {\n\t\titem = this.getItem(options.itemId);\n\t} else {\n\t\titem = this.getPrimaryItem();\n\t}\n\tif (item == null) return null;\n\n\tvar file = new ISOFile();\n\tfile.discardMdatData = false;\n\t// assuming the track type is the same as the item type\n\tvar trackOptions = { type: item.type, description_boxes: item.properties.boxes};\n\tif (item.properties.ispe) {\n\t\ttrackOptions.width = item.properties.ispe.image_width;\n\t\ttrackOptions.height = item.properties.ispe.image_height;\n\t}\n\tvar trackId = file.addTrack(trackOptions);\n\tif (trackId) {\n\t\tfile.addSample(trackId, item.data);\n\t\treturn file;\n\t} else {\n\t\treturn null;\n\t}\n}\n\n// file:src/isofile-write.js\n/* Rewrite the entire file */\nISOFile.prototype.write = function(outstream) {\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tthis.boxes[i].write(outstream);\n\t}\n}\n\nISOFile.prototype.createFragment = function(track_id, sampleNumber, stream_) {\n\tvar trak = this.getTrackById(track_id);\n\tvar sample = this.getSample(trak, sampleNumber);\n\tif (sample == null) {\n\t\tthis.setNextSeekPositionFromSample(trak.samples[sampleNumber]);\n\t\treturn null;\n\t}\n\t\n\tvar stream = stream_ || new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\n\tvar moof = this.createSingleSampleMoof(sample);\n\tmoof.write(stream);\n\n\t/* adjusting the data_offset now that the moof size is known*/\n\tmoof.trafs[0].truns[0].data_offset = moof.size+8; //8 is mdat header\n\tLog.debug(\"MP4Box\", \"Adjusting data_offset with new value \"+moof.trafs[0].truns[0].data_offset);\n\tstream.adjustUint32(moof.trafs[0].truns[0].data_offset_position, moof.trafs[0].truns[0].data_offset);\n\t\t\n\tvar mdat = new BoxParser.mdatBox();\n\tmdat.data = sample.data;\n\tmdat.write(stream);\n\treturn stream;\n}\n\n/* Modify the file and create the initialization segment */\nISOFile.writeInitializationSegment = function(ftyp, moov, total_duration, sample_duration) {\n\tvar i;\n\tvar index;\n\tvar mehd;\n\tvar trex;\n\tvar box;\n\tLog.debug(\"ISOFile\", \"Generating initialization segment\");\n\n\tvar stream = new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tftyp.write(stream);\n\t\n\t/* we can now create the new mvex box */\n\tvar mvex = moov.add(\"mvex\");\n\tif (total_duration) {\n\t\tmvex.add(\"mehd\").set(\"fragment_duration\", total_duration);\n\t}\n\tfor (i = 0; i < moov.traks.length; i++) {\n\t\tmvex.add(\"trex\").set(\"track_id\", moov.traks[i].tkhd.track_id)\n\t\t\t\t\t\t.set(\"default_sample_description_index\", 1)\n\t\t\t\t\t\t.set(\"default_sample_duration\", sample_duration)\n\t\t\t\t\t\t.set(\"default_sample_size\", 0)\n\t\t\t\t\t\t.set(\"default_sample_flags\", 1<<16)\n\t}\n\tmoov.write(stream);\n\n\treturn stream.buffer;\n\n}\n\nISOFile.prototype.save = function(name) {\n\tvar stream = new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tthis.write(stream);\n\tstream.save(name);\t\n}\n\nISOFile.prototype.getBuffer = function() {\n\tvar stream = new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tthis.write(stream);\n\treturn stream.buffer;\n}\n\nISOFile.prototype.initializeSegmentation = function() {\n\tvar i;\n\tvar j;\n\tvar box;\n\tvar initSegs;\n\tvar trak;\n\tvar seg;\n\tif (this.onSegment === null) {\n\t\tLog.warn(\"MP4Box\", \"No segmentation callback set!\");\n\t}\n\tif (!this.isFragmentationInitialized) {\n\t\tthis.isFragmentationInitialized = true;\t\t\n\t\tthis.nextMoofNumber = 0;\n\t\tthis.resetTables();\n\t}\t\n\tinitSegs = [];\t\n\tfor (i = 0; i < this.fragmentedTracks.length; i++) {\n\t\tvar moov = new BoxParser.moovBox();\n\t\tmoov.mvhd = this.moov.mvhd;\n\t moov.boxes.push(moov.mvhd);\n\t\ttrak = this.getTrackById(this.fragmentedTracks[i].id);\n\t\tmoov.boxes.push(trak);\n\t\tmoov.traks.push(trak);\n\t\tseg = {};\n\t\tseg.id = trak.tkhd.track_id;\n\t\tseg.user = this.fragmentedTracks[i].user;\n\t\tseg.buffer = ISOFile.writeInitializationSegment(this.ftyp, moov, (this.moov.mvex && this.moov.mvex.mehd ? this.moov.mvex.mehd.fragment_duration: undefined), (this.moov.traks[i].samples.length>0 ? this.moov.traks[i].samples[0].duration: 0));\n\t\tinitSegs.push(seg);\n\t}\n\treturn initSegs;\n}\n\n// file:src/box-print.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.Box.prototype.printHeader = function(output) {\n\tthis.size += 8;\n\tif (this.size > MAX_SIZE) {\n\t\tthis.size += 8;\n\t}\n\tif (this.type === \"uuid\") {\n\t\tthis.size += 16;\n\t}\n\toutput.log(output.indent+\"size:\"+this.size);\n\toutput.log(output.indent+\"type:\"+this.type);\n}\n\nBoxParser.FullBox.prototype.printHeader = function(output) {\n\tthis.size += 4;\n\tBoxParser.Box.prototype.printHeader.call(this, output);\n\toutput.log(output.indent+\"version:\"+this.version);\n\toutput.log(output.indent+\"flags:\"+this.flags);\n}\n\nBoxParser.Box.prototype.print = function(output) {\n\tthis.printHeader(output);\n}\n\nBoxParser.ContainerBox.prototype.print = function(output) {\n\tthis.printHeader(output);\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tif (this.boxes[i]) {\n\t\t\tvar prev_indent = output.indent;\n\t\t\toutput.indent += \" \";\n\t\t\tthis.boxes[i].print(output);\n\t\t\toutput.indent = prev_indent;\n\t\t}\n\t}\n}\n\nISOFile.prototype.print = function(output) {\n\toutput.indent = \"\";\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tif (this.boxes[i]) {\n\t\t\tthis.boxes[i].print(output);\n\t\t}\n\t}\t\n}\n\nBoxParser.mvhdBox.prototype.print = function(output) {\n\tBoxParser.FullBox.prototype.printHeader.call(this, output);\n\toutput.log(output.indent+\"creation_time: \"+this.creation_time);\n\toutput.log(output.indent+\"modification_time: \"+this.modification_time);\n\toutput.log(output.indent+\"timescale: \"+this.timescale);\n\toutput.log(output.indent+\"duration: \"+this.duration);\n\toutput.log(output.indent+\"rate: \"+this.rate);\n\toutput.log(output.indent+\"volume: \"+(this.volume>>8));\n\toutput.log(output.indent+\"matrix: \"+this.matrix.join(\", \"));\n\toutput.log(output.indent+\"next_track_id: \"+this.next_track_id);\n}\n\nBoxParser.tkhdBox.prototype.print = function(output) {\n\tBoxParser.FullBox.prototype.printHeader.call(this, output);\n\toutput.log(output.indent+\"creation_time: \"+this.creation_time);\n\toutput.log(output.indent+\"modification_time: \"+this.modification_time);\n\toutput.log(output.indent+\"track_id: \"+this.track_id);\n\toutput.log(output.indent+\"duration: \"+this.duration);\n\toutput.log(output.indent+\"volume: \"+(this.volume>>8));\n\toutput.log(output.indent+\"matrix: \"+this.matrix.join(\", \"));\n\toutput.log(output.indent+\"layer: \"+this.layer);\n\toutput.log(output.indent+\"alternate_group: \"+this.alternate_group);\n\toutput.log(output.indent+\"width: \"+this.width);\n\toutput.log(output.indent+\"height: \"+this.height);\n}// file:src/mp4box.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar MP4Box = {};\n\nMP4Box.createFile = function (_keepMdatData, _stream) {\n\t/* Boolean indicating if bytes containing media data should be kept in memory */\n\tvar keepMdatData = (_keepMdatData !== undefined ? _keepMdatData : true);\n\tvar file = new ISOFile(_stream);\n\tfile.discardMdatData = (keepMdatData ? false : true);\n\treturn file;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.createFile = MP4Box.createFile;\n}\n", "/**\n * ffmpeg.wasm-based video decoder (Node.js / fallback).\n */\n\nimport { VideoDecoderBase } from './videoDecoder.base.js';\n\nexport class FfmpegDecoder extends VideoDecoderBase {\n #ffmpeg = null;\n #videoInfo = null;\n #inputName = 'input.mp4';\n\n async open(source) {\n const { FFmpeg } = await import('@ffmpeg/ffmpeg');\n const { fetchFile } = await import('@ffmpeg/util');\n\n this.#ffmpeg = new FFmpeg();\n await this.#ffmpeg.load();\n\n const data =\n source instanceof Uint8Array\n ? source\n : new Uint8Array(await fetchFile(source));\n await this.#ffmpeg.writeFile(this.#inputName, data);\n\n let probeOutput = '';\n this.#ffmpeg.on('log', ({ message }) => {\n probeOutput += `${message}\\n`;\n });\n\n await this.#ffmpeg.exec(['-i', this.#inputName, '-f', 'null', '-frames:v', '0', '-']);\n\n const sizeMatch = probeOutput.match(/(\\d{3,5})x(\\d{3,5})/);\n const fpsMatch = probeOutput.match(/([\\d.]+)\\s*fps/);\n const durMatch = probeOutput.match(/Duration:\\s*([\\d:.]+)/);\n\n const width = sizeMatch ? Number.parseInt(sizeMatch[1], 10) : 0;\n const height = sizeMatch ? Number.parseInt(sizeMatch[2], 10) : 0;\n const fps = fpsMatch ? Number.parseFloat(fpsMatch[1]) : 30;\n\n let duration = 0;\n if (durMatch) {\n const parts = durMatch[1].split(':').map(Number);\n duration = parts[0] * 3600 + parts[1] * 60 + parts[2];\n }\n\n this.#videoInfo = {\n width,\n height,\n frameCount: Math.round(duration * fps),\n duration,\n fps,\n codec: 'unknown',\n };\n\n return this.#videoInfo;\n }\n\n async *decodeFrames() {\n if (!this.#ffmpeg || !this.#videoInfo) {\n throw new Error('Call open() first');\n }\n\n const { width, height, fps } = this.#videoInfo;\n const rawName = 'frames.raw';\n\n await this.#ffmpeg.exec([\n '-i',\n this.#inputName,\n '-f',\n 'rawvideo',\n '-pix_fmt',\n 'rgba',\n rawName,\n ]);\n\n const rawData = await this.#ffmpeg.readFile(rawName);\n const frameSize = width * height * 4;\n const totalFrames = Math.floor(rawData.length / frameSize);\n\n for (let i = 0; i < totalFrames; i++) {\n const offset = i * frameSize;\n const pixels = new Uint8ClampedArray(\n rawData.buffer,\n rawData.byteOffset + offset,\n frameSize,\n );\n const imageData = new ImageData(pixels, width, height);\n\n yield {\n imageData,\n timestamp: (i / fps) * 1_000_000,\n frameIndex: i,\n };\n }\n\n await this.#ffmpeg.deleteFile(rawName);\n }\n\n async extractAudio() {\n if (!this.#ffmpeg) return null;\n\n try {\n const audioName = 'audio.aac';\n await this.#ffmpeg.exec(['-i', this.#inputName, '-vn', '-acodec', 'copy', audioName]);\n const audioData = await this.#ffmpeg.readFile(audioName);\n await this.#ffmpeg.deleteFile(audioName);\n return audioData;\n } catch {\n return null;\n }\n }\n\n async close() {\n if (this.#ffmpeg) {\n try {\n await this.#ffmpeg.deleteFile(this.#inputName);\n } catch {}\n this.#ffmpeg = null;\n }\n this.#videoInfo = null;\n }\n}\n", "/**\n * Shared video encoder types and base class.\n */\n\n/**\n * @typedef {Object} EncoderConfig\n * @property {number} width\n * @property {number} height\n * @property {number} fps\n * @property {number} [bitrate]\n * @property {string} [codec]\n */\n\nexport class VideoEncoderBase {\n async init(/* config */) {\n throw new Error('Not implemented');\n }\n\n async encodeFrame(/* imageData, timestamp */) {\n throw new Error('Not implemented');\n }\n\n async setAudioTrack(/* audioData */) {\n throw new Error('Not implemented');\n }\n\n async finalize() {\n throw new Error('Not implemented');\n }\n}\n", "var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar __privateWrapper = (obj, member, setter, getter) => ({\n set _(value) {\n __privateSet(obj, member, value, setter);\n },\n get _() {\n return __privateGet(obj, member, getter);\n }\n});\nvar __privateMethod = (obj, member, method) => {\n __accessCheck(obj, member, \"access private method\");\n return method;\n};\n\n// src/misc.ts\nvar bytes = new Uint8Array(8);\nvar view = new DataView(bytes.buffer);\nvar u8 = (value) => {\n return [(value % 256 + 256) % 256];\n};\nvar u16 = (value) => {\n view.setUint16(0, value, false);\n return [bytes[0], bytes[1]];\n};\nvar i16 = (value) => {\n view.setInt16(0, value, false);\n return [bytes[0], bytes[1]];\n};\nvar u24 = (value) => {\n view.setUint32(0, value, false);\n return [bytes[1], bytes[2], bytes[3]];\n};\nvar u32 = (value) => {\n view.setUint32(0, value, false);\n return [bytes[0], bytes[1], bytes[2], bytes[3]];\n};\nvar i32 = (value) => {\n view.setInt32(0, value, false);\n return [bytes[0], bytes[1], bytes[2], bytes[3]];\n};\nvar u64 = (value) => {\n view.setUint32(0, Math.floor(value / 2 ** 32), false);\n view.setUint32(4, value, false);\n return [bytes[0], bytes[1], bytes[2], bytes[3], bytes[4], bytes[5], bytes[6], bytes[7]];\n};\nvar fixed_8_8 = (value) => {\n view.setInt16(0, 2 ** 8 * value, false);\n return [bytes[0], bytes[1]];\n};\nvar fixed_16_16 = (value) => {\n view.setInt32(0, 2 ** 16 * value, false);\n return [bytes[0], bytes[1], bytes[2], bytes[3]];\n};\nvar fixed_2_30 = (value) => {\n view.setInt32(0, 2 ** 30 * value, false);\n return [bytes[0], bytes[1], bytes[2], bytes[3]];\n};\nvar ascii = (text, nullTerminated = false) => {\n let bytes2 = Array(text.length).fill(null).map((_, i) => text.charCodeAt(i));\n if (nullTerminated)\n bytes2.push(0);\n return bytes2;\n};\nvar last = (arr) => {\n return arr && arr[arr.length - 1];\n};\nvar lastPresentedSample = (samples) => {\n let result = void 0;\n for (let sample of samples) {\n if (!result || sample.presentationTimestamp > result.presentationTimestamp) {\n result = sample;\n }\n }\n return result;\n};\nvar intoTimescale = (timeInSeconds, timescale, round = true) => {\n let value = timeInSeconds * timescale;\n return round ? Math.round(value) : value;\n};\nvar rotationMatrix = (rotationInDegrees) => {\n let theta = rotationInDegrees * (Math.PI / 180);\n let cosTheta = Math.cos(theta);\n let sinTheta = Math.sin(theta);\n return [\n cosTheta,\n sinTheta,\n 0,\n -sinTheta,\n cosTheta,\n 0,\n 0,\n 0,\n 1\n ];\n};\nvar IDENTITY_MATRIX = rotationMatrix(0);\nvar matrixToBytes = (matrix) => {\n return [\n fixed_16_16(matrix[0]),\n fixed_16_16(matrix[1]),\n fixed_2_30(matrix[2]),\n fixed_16_16(matrix[3]),\n fixed_16_16(matrix[4]),\n fixed_2_30(matrix[5]),\n fixed_16_16(matrix[6]),\n fixed_16_16(matrix[7]),\n fixed_2_30(matrix[8])\n ];\n};\nvar deepClone = (x) => {\n if (!x)\n return x;\n if (typeof x !== \"object\")\n return x;\n if (Array.isArray(x))\n return x.map(deepClone);\n return Object.fromEntries(Object.entries(x).map(([key, value]) => [key, deepClone(value)]));\n};\nvar isU32 = (value) => {\n return value >= 0 && value < 2 ** 32;\n};\n\n// src/box.ts\nvar box = (type, contents, children) => ({\n type,\n contents: contents && new Uint8Array(contents.flat(10)),\n children\n});\nvar fullBox = (type, version, flags, contents, children) => box(\n type,\n [u8(version), u24(flags), contents ?? []],\n children\n);\nvar ftyp = (details) => {\n let minorVersion = 512;\n if (details.fragmented)\n return box(\"ftyp\", [\n ascii(\"iso5\"),\n // Major brand\n u32(minorVersion),\n // Minor version\n // Compatible brands\n ascii(\"iso5\"),\n ascii(\"iso6\"),\n ascii(\"mp41\")\n ]);\n return box(\"ftyp\", [\n ascii(\"isom\"),\n // Major brand\n u32(minorVersion),\n // Minor version\n // Compatible brands\n ascii(\"isom\"),\n details.holdsAvc ? ascii(\"avc1\") : [],\n ascii(\"mp41\")\n ]);\n};\nvar mdat = (reserveLargeSize) => ({ type: \"mdat\", largeSize: reserveLargeSize });\nvar free = (size) => ({ type: \"free\", size });\nvar moov = (tracks, creationTime, fragmented = false) => box(\"moov\", null, [\n mvhd(creationTime, tracks),\n ...tracks.map((x) => trak(x, creationTime)),\n fragmented ? mvex(tracks) : null\n]);\nvar mvhd = (creationTime, tracks) => {\n let duration = intoTimescale(Math.max(\n 0,\n ...tracks.filter((x) => x.samples.length > 0).map((x) => {\n const lastSample = lastPresentedSample(x.samples);\n return lastSample.presentationTimestamp + lastSample.duration;\n })\n ), GLOBAL_TIMESCALE);\n let nextTrackId = Math.max(...tracks.map((x) => x.id)) + 1;\n let needsU64 = !isU32(creationTime) || !isU32(duration);\n let u32OrU64 = needsU64 ? u64 : u32;\n return fullBox(\"mvhd\", +needsU64, 0, [\n u32OrU64(creationTime),\n // Creation time\n u32OrU64(creationTime),\n // Modification time\n u32(GLOBAL_TIMESCALE),\n // Timescale\n u32OrU64(duration),\n // Duration\n fixed_16_16(1),\n // Preferred rate\n fixed_8_8(1),\n // Preferred volume\n Array(10).fill(0),\n // Reserved\n matrixToBytes(IDENTITY_MATRIX),\n // Matrix\n Array(24).fill(0),\n // Pre-defined\n u32(nextTrackId)\n // Next track ID\n ]);\n};\nvar trak = (track, creationTime) => box(\"trak\", null, [\n tkhd(track, creationTime),\n mdia(track, creationTime)\n]);\nvar tkhd = (track, creationTime) => {\n let lastSample = lastPresentedSample(track.samples);\n let durationInGlobalTimescale = intoTimescale(\n lastSample ? lastSample.presentationTimestamp + lastSample.duration : 0,\n GLOBAL_TIMESCALE\n );\n let needsU64 = !isU32(creationTime) || !isU32(durationInGlobalTimescale);\n let u32OrU64 = needsU64 ? u64 : u32;\n let matrix;\n if (track.info.type === \"video\") {\n matrix = typeof track.info.rotation === \"number\" ? rotationMatrix(track.info.rotation) : track.info.rotation;\n } else {\n matrix = IDENTITY_MATRIX;\n }\n return fullBox(\"tkhd\", +needsU64, 3, [\n u32OrU64(creationTime),\n // Creation time\n u32OrU64(creationTime),\n // Modification time\n u32(track.id),\n // Track ID\n u32(0),\n // Reserved\n u32OrU64(durationInGlobalTimescale),\n // Duration\n Array(8).fill(0),\n // Reserved\n u16(0),\n // Layer\n u16(0),\n // Alternate group\n fixed_8_8(track.info.type === \"audio\" ? 1 : 0),\n // Volume\n u16(0),\n // Reserved\n matrixToBytes(matrix),\n // Matrix\n fixed_16_16(track.info.type === \"video\" ? track.info.width : 0),\n // Track width\n fixed_16_16(track.info.type === \"video\" ? track.info.height : 0)\n // Track height\n ]);\n};\nvar mdia = (track, creationTime) => box(\"mdia\", null, [\n mdhd(track, creationTime),\n hdlr(track.info.type === \"video\" ? \"vide\" : \"soun\"),\n minf(track)\n]);\nvar mdhd = (track, creationTime) => {\n let lastSample = lastPresentedSample(track.samples);\n let localDuration = intoTimescale(\n lastSample ? lastSample.presentationTimestamp + lastSample.duration : 0,\n track.timescale\n );\n let needsU64 = !isU32(creationTime) || !isU32(localDuration);\n let u32OrU64 = needsU64 ? u64 : u32;\n return fullBox(\"mdhd\", +needsU64, 0, [\n u32OrU64(creationTime),\n // Creation time\n u32OrU64(creationTime),\n // Modification time\n u32(track.timescale),\n // Timescale\n u32OrU64(localDuration),\n // Duration\n u16(21956),\n // Language (\"und\", undetermined)\n u16(0)\n // Quality\n ]);\n};\nvar hdlr = (componentSubtype) => fullBox(\"hdlr\", 0, 0, [\n ascii(\"mhlr\"),\n // Component type\n ascii(componentSubtype),\n // Component subtype\n u32(0),\n // Component manufacturer\n u32(0),\n // Component flags\n u32(0),\n // Component flags mask\n ascii(\"mp4-muxer-hdlr\", true)\n // Component name\n]);\nvar minf = (track) => box(\"minf\", null, [\n track.info.type === \"video\" ? vmhd() : smhd(),\n dinf(),\n stbl(track)\n]);\nvar vmhd = () => fullBox(\"vmhd\", 0, 1, [\n u16(0),\n // Graphics mode\n u16(0),\n // Opcolor R\n u16(0),\n // Opcolor G\n u16(0)\n // Opcolor B\n]);\nvar smhd = () => fullBox(\"smhd\", 0, 0, [\n u16(0),\n // Balance\n u16(0)\n // Reserved\n]);\nvar dinf = () => box(\"dinf\", null, [\n dref()\n]);\nvar dref = () => fullBox(\"dref\", 0, 0, [\n u32(1)\n // Entry count\n], [\n url()\n]);\nvar url = () => fullBox(\"url \", 0, 1);\nvar stbl = (track) => {\n const needsCtts = track.compositionTimeOffsetTable.length > 1 || track.compositionTimeOffsetTable.some((x) => x.sampleCompositionTimeOffset !== 0);\n return box(\"stbl\", null, [\n stsd(track),\n stts(track),\n stss(track),\n stsc(track),\n stsz(track),\n stco(track),\n needsCtts ? ctts(track) : null\n ]);\n};\nvar stsd = (track) => fullBox(\"stsd\", 0, 0, [\n u32(1)\n // Entry count\n], [\n track.info.type === \"video\" ? videoSampleDescription(\n VIDEO_CODEC_TO_BOX_NAME[track.info.codec],\n track\n ) : soundSampleDescription(\n AUDIO_CODEC_TO_BOX_NAME[track.info.codec],\n track\n )\n]);\nvar videoSampleDescription = (compressionType, track) => box(compressionType, [\n Array(6).fill(0),\n // Reserved\n u16(1),\n // Data reference index\n u16(0),\n // Pre-defined\n u16(0),\n // Reserved\n Array(12).fill(0),\n // Pre-defined\n u16(track.info.width),\n // Width\n u16(track.info.height),\n // Height\n u32(4718592),\n // Horizontal resolution\n u32(4718592),\n // Vertical resolution\n u32(0),\n // Reserved\n u16(1),\n // Frame count\n Array(32).fill(0),\n // Compressor name\n u16(24),\n // Depth\n i16(65535)\n // Pre-defined\n], [\n VIDEO_CODEC_TO_CONFIGURATION_BOX[track.info.codec](track),\n track.info.decoderConfig.colorSpace ? colr(track) : null\n]);\nvar COLOR_PRIMARIES_MAP = {\n \"bt709\": 1,\n // ITU-R BT.709\n \"bt470bg\": 5,\n // ITU-R BT.470BG\n \"smpte170m\": 6\n // ITU-R BT.601 525 - SMPTE 170M\n};\nvar TRANSFER_CHARACTERISTICS_MAP = {\n \"bt709\": 1,\n // ITU-R BT.709\n \"smpte170m\": 6,\n // SMPTE 170M\n \"iec61966-2-1\": 13\n // IEC 61966-2-1\n};\nvar MATRIX_COEFFICIENTS_MAP = {\n \"rgb\": 0,\n // Identity\n \"bt709\": 1,\n // ITU-R BT.709\n \"bt470bg\": 5,\n // ITU-R BT.470BG\n \"smpte170m\": 6\n // SMPTE 170M\n};\nvar colr = (track) => box(\"colr\", [\n ascii(\"nclx\"),\n // Colour type\n u16(COLOR_PRIMARIES_MAP[track.info.decoderConfig.colorSpace.primaries]),\n // Colour primaries\n u16(TRANSFER_CHARACTERISTICS_MAP[track.info.decoderConfig.colorSpace.transfer]),\n // Transfer characteristics\n u16(MATRIX_COEFFICIENTS_MAP[track.info.decoderConfig.colorSpace.matrix]),\n // Matrix coefficients\n u8((track.info.decoderConfig.colorSpace.fullRange ? 1 : 0) << 7)\n // Full range flag\n]);\nvar avcC = (track) => track.info.decoderConfig && box(\"avcC\", [\n // For AVC, description is an AVCDecoderConfigurationRecord, so nothing else to do here\n ...new Uint8Array(track.info.decoderConfig.description)\n]);\nvar hvcC = (track) => track.info.decoderConfig && box(\"hvcC\", [\n // For HEVC, description is a HEVCDecoderConfigurationRecord, so nothing else to do here\n ...new Uint8Array(track.info.decoderConfig.description)\n]);\nvar vpcC = (track) => {\n if (!track.info.decoderConfig) {\n return null;\n }\n let decoderConfig = track.info.decoderConfig;\n if (!decoderConfig.colorSpace) {\n throw new Error(`'colorSpace' is required in the decoder config for VP9.`);\n }\n let parts = decoderConfig.codec.split(\".\");\n let profile = Number(parts[1]);\n let level = Number(parts[2]);\n let bitDepth = Number(parts[3]);\n let chromaSubsampling = 0;\n let thirdByte = (bitDepth << 4) + (chromaSubsampling << 1) + Number(decoderConfig.colorSpace.fullRange);\n let colourPrimaries = 2;\n let transferCharacteristics = 2;\n let matrixCoefficients = 2;\n return fullBox(\"vpcC\", 1, 0, [\n u8(profile),\n // Profile\n u8(level),\n // Level\n u8(thirdByte),\n // Bit depth, chroma subsampling, full range\n u8(colourPrimaries),\n // Colour primaries\n u8(transferCharacteristics),\n // Transfer characteristics\n u8(matrixCoefficients),\n // Matrix coefficients\n u16(0)\n // Codec initialization data size\n ]);\n};\nvar av1C = () => {\n let marker = 1;\n let version = 1;\n let firstByte = (marker << 7) + version;\n return box(\"av1C\", [\n firstByte,\n 0,\n 0,\n 0\n ]);\n};\nvar soundSampleDescription = (compressionType, track) => box(compressionType, [\n Array(6).fill(0),\n // Reserved\n u16(1),\n // Data reference index\n u16(0),\n // Version\n u16(0),\n // Revision level\n u32(0),\n // Vendor\n u16(track.info.numberOfChannels),\n // Number of channels\n u16(16),\n // Sample size (bits)\n u16(0),\n // Compression ID\n u16(0),\n // Packet size\n fixed_16_16(track.info.sampleRate)\n // Sample rate\n], [\n AUDIO_CODEC_TO_CONFIGURATION_BOX[track.info.codec](track)\n]);\nvar esds = (track) => {\n let description = new Uint8Array(track.info.decoderConfig.description);\n return fullBox(\"esds\", 0, 0, [\n // https://stackoverflow.com/a/54803118\n u32(58753152),\n // TAG(3) = Object Descriptor ([2])\n u8(32 + description.byteLength),\n // length of this OD (which includes the next 2 tags)\n u16(1),\n // ES_ID = 1\n u8(0),\n // flags etc = 0\n u32(75530368),\n // TAG(4) = ES Descriptor ([2]) embedded in above OD\n u8(18 + description.byteLength),\n // length of this ESD\n u8(64),\n // MPEG-4 Audio\n u8(21),\n // stream type(6bits)=5 audio, flags(2bits)=1\n u24(0),\n // 24bit buffer size\n u32(130071),\n // max bitrate\n u32(130071),\n // avg bitrate\n u32(92307584),\n // TAG(5) = ASC ([2],[3]) embedded in above OD\n u8(description.byteLength),\n // length\n ...description,\n u32(109084800),\n // TAG(6)\n u8(1),\n // length\n u8(2)\n // data\n ]);\n};\nvar dOps = (track) => {\n let preskip = 3840;\n let gain = 0;\n const description = track.info.decoderConfig?.description;\n if (description) {\n if (description.byteLength < 18) {\n throw new TypeError(\"Invalid decoder description provided for Opus; must be at least 18 bytes long.\");\n }\n const view2 = ArrayBuffer.isView(description) ? new DataView(description.buffer, description.byteOffset, description.byteLength) : new DataView(description);\n preskip = view2.getUint16(10, true);\n gain = view2.getInt16(14, true);\n }\n return box(\"dOps\", [\n u8(0),\n // Version\n u8(track.info.numberOfChannels),\n // OutputChannelCount\n u16(preskip),\n u32(track.info.sampleRate),\n // InputSampleRate\n fixed_8_8(gain),\n // OutputGain\n u8(0)\n // ChannelMappingFamily\n ]);\n};\nvar stts = (track) => {\n return fullBox(\"stts\", 0, 0, [\n u32(track.timeToSampleTable.length),\n // Number of entries\n track.timeToSampleTable.map((x) => [\n // Time-to-sample table\n u32(x.sampleCount),\n // Sample count\n u32(x.sampleDelta)\n // Sample duration\n ])\n ]);\n};\nvar stss = (track) => {\n if (track.samples.every((x) => x.type === \"key\"))\n return null;\n let keySamples = [...track.samples.entries()].filter(([, sample]) => sample.type === \"key\");\n return fullBox(\"stss\", 0, 0, [\n u32(keySamples.length),\n // Number of entries\n keySamples.map(([index]) => u32(index + 1))\n // Sync sample table\n ]);\n};\nvar stsc = (track) => {\n return fullBox(\"stsc\", 0, 0, [\n u32(track.compactlyCodedChunkTable.length),\n // Number of entries\n track.compactlyCodedChunkTable.map((x) => [\n // Sample-to-chunk table\n u32(x.firstChunk),\n // First chunk\n u32(x.samplesPerChunk),\n // Samples per chunk\n u32(1)\n // Sample description index\n ])\n ]);\n};\nvar stsz = (track) => fullBox(\"stsz\", 0, 0, [\n u32(0),\n // Sample size (0 means non-constant size)\n u32(track.samples.length),\n // Number of entries\n track.samples.map((x) => u32(x.size))\n // Sample size table\n]);\nvar stco = (track) => {\n if (track.finalizedChunks.length > 0 && last(track.finalizedChunks).offset >= 2 ** 32) {\n return fullBox(\"co64\", 0, 0, [\n u32(track.finalizedChunks.length),\n // Number of entries\n track.finalizedChunks.map((x) => u64(x.offset))\n // Chunk offset table\n ]);\n }\n return fullBox(\"stco\", 0, 0, [\n u32(track.finalizedChunks.length),\n // Number of entries\n track.finalizedChunks.map((x) => u32(x.offset))\n // Chunk offset table\n ]);\n};\nvar ctts = (track) => {\n return fullBox(\"ctts\", 0, 0, [\n u32(track.compositionTimeOffsetTable.length),\n // Number of entries\n track.compositionTimeOffsetTable.map((x) => [\n // Time-to-sample table\n u32(x.sampleCount),\n // Sample count\n u32(x.sampleCompositionTimeOffset)\n // Sample offset\n ])\n ]);\n};\nvar mvex = (tracks) => {\n return box(\"mvex\", null, tracks.map(trex));\n};\nvar trex = (track) => {\n return fullBox(\"trex\", 0, 0, [\n u32(track.id),\n // Track ID\n u32(1),\n // Default sample description index\n u32(0),\n // Default sample duration\n u32(0),\n // Default sample size\n u32(0)\n // Default sample flags\n ]);\n};\nvar moof = (sequenceNumber, tracks) => {\n return box(\"moof\", null, [\n mfhd(sequenceNumber),\n ...tracks.map(traf)\n ]);\n};\nvar mfhd = (sequenceNumber) => {\n return fullBox(\"mfhd\", 0, 0, [\n u32(sequenceNumber)\n // Sequence number\n ]);\n};\nvar fragmentSampleFlags = (sample) => {\n let byte1 = 0;\n let byte2 = 0;\n let byte3 = 0;\n let byte4 = 0;\n let sampleIsDifferenceSample = sample.type === \"delta\";\n byte2 |= +sampleIsDifferenceSample;\n if (sampleIsDifferenceSample) {\n byte1 |= 1;\n } else {\n byte1 |= 2;\n }\n return byte1 << 24 | byte2 << 16 | byte3 << 8 | byte4;\n};\nvar traf = (track) => {\n return box(\"traf\", null, [\n tfhd(track),\n tfdt(track),\n trun(track)\n ]);\n};\nvar tfhd = (track) => {\n let tfFlags = 0;\n tfFlags |= 8;\n tfFlags |= 16;\n tfFlags |= 32;\n tfFlags |= 131072;\n let referenceSample = track.currentChunk.samples[1] ?? track.currentChunk.samples[0];\n let referenceSampleInfo = {\n duration: referenceSample.timescaleUnitsToNextSample,\n size: referenceSample.size,\n flags: fragmentSampleFlags(referenceSample)\n };\n return fullBox(\"tfhd\", 0, tfFlags, [\n u32(track.id),\n // Track ID\n u32(referenceSampleInfo.duration),\n // Default sample duration\n u32(referenceSampleInfo.size),\n // Default sample size\n u32(referenceSampleInfo.flags)\n // Default sample flags\n ]);\n};\nvar tfdt = (track) => {\n return fullBox(\"tfdt\", 1, 0, [\n u64(intoTimescale(track.currentChunk.startTimestamp, track.timescale))\n // Base Media Decode Time\n ]);\n};\nvar trun = (track) => {\n let allSampleDurations = track.currentChunk.samples.map((x) => x.timescaleUnitsToNextSample);\n let allSampleSizes = track.currentChunk.samples.map((x) => x.size);\n let allSampleFlags = track.currentChunk.samples.map(fragmentSampleFlags);\n let allSampleCompositionTimeOffsets = track.currentChunk.samples.map((x) => intoTimescale(x.presentationTimestamp - x.decodeTimestamp, track.timescale));\n let uniqueSampleDurations = new Set(allSampleDurations);\n let uniqueSampleSizes = new Set(allSampleSizes);\n let uniqueSampleFlags = new Set(allSampleFlags);\n let uniqueSampleCompositionTimeOffsets = new Set(allSampleCompositionTimeOffsets);\n let firstSampleFlagsPresent = uniqueSampleFlags.size === 2 && allSampleFlags[0] !== allSampleFlags[1];\n let sampleDurationPresent = uniqueSampleDurations.size > 1;\n let sampleSizePresent = uniqueSampleSizes.size > 1;\n let sampleFlagsPresent = !firstSampleFlagsPresent && uniqueSampleFlags.size > 1;\n let sampleCompositionTimeOffsetsPresent = uniqueSampleCompositionTimeOffsets.size > 1 || [...uniqueSampleCompositionTimeOffsets].some((x) => x !== 0);\n let flags = 0;\n flags |= 1;\n flags |= 4 * +firstSampleFlagsPresent;\n flags |= 256 * +sampleDurationPresent;\n flags |= 512 * +sampleSizePresent;\n flags |= 1024 * +sampleFlagsPresent;\n flags |= 2048 * +sampleCompositionTimeOffsetsPresent;\n return fullBox(\"trun\", 1, flags, [\n u32(track.currentChunk.samples.length),\n // Sample count\n u32(track.currentChunk.offset - track.currentChunk.moofOffset || 0),\n // Data offset\n firstSampleFlagsPresent ? u32(allSampleFlags[0]) : [],\n track.currentChunk.samples.map((_, i) => [\n sampleDurationPresent ? u32(allSampleDurations[i]) : [],\n // Sample duration\n sampleSizePresent ? u32(allSampleSizes[i]) : [],\n // Sample size\n sampleFlagsPresent ? u32(allSampleFlags[i]) : [],\n // Sample flags\n // Sample composition time offsets\n sampleCompositionTimeOffsetsPresent ? i32(allSampleCompositionTimeOffsets[i]) : []\n ])\n ]);\n};\nvar mfra = (tracks) => {\n return box(\"mfra\", null, [\n ...tracks.map(tfra),\n mfro()\n ]);\n};\nvar tfra = (track, trackIndex) => {\n let version = 1;\n return fullBox(\"tfra\", version, 0, [\n u32(track.id),\n // Track ID\n u32(63),\n // This specifies that traf number, trun number and sample number are 32-bit ints\n u32(track.finalizedChunks.length),\n // Number of entries\n track.finalizedChunks.map((chunk) => [\n u64(intoTimescale(chunk.startTimestamp, track.timescale)),\n // Time\n u64(chunk.moofOffset),\n // moof offset\n u32(trackIndex + 1),\n // traf number\n u32(1),\n // trun number\n u32(1)\n // Sample number\n ])\n ]);\n};\nvar mfro = () => {\n return fullBox(\"mfro\", 0, 0, [\n // This value needs to be overwritten manually from the outside, where the actual size of the enclosing mfra box\n // is known\n u32(0)\n // Size\n ]);\n};\nvar VIDEO_CODEC_TO_BOX_NAME = {\n \"avc\": \"avc1\",\n \"hevc\": \"hvc1\",\n \"vp9\": \"vp09\",\n \"av1\": \"av01\"\n};\nvar VIDEO_CODEC_TO_CONFIGURATION_BOX = {\n \"avc\": avcC,\n \"hevc\": hvcC,\n \"vp9\": vpcC,\n \"av1\": av1C\n};\nvar AUDIO_CODEC_TO_BOX_NAME = {\n \"aac\": \"mp4a\",\n \"opus\": \"Opus\"\n};\nvar AUDIO_CODEC_TO_CONFIGURATION_BOX = {\n \"aac\": esds,\n \"opus\": dOps\n};\n\n// src/target.ts\nvar isTarget = Symbol(\"isTarget\");\nvar Target = class {\n};\nisTarget;\nvar ArrayBufferTarget = class extends Target {\n constructor() {\n super(...arguments);\n this.buffer = null;\n }\n};\nvar StreamTarget = class extends Target {\n constructor(options) {\n super();\n this.options = options;\n if (typeof options !== \"object\") {\n throw new TypeError(\"StreamTarget requires an options object to be passed to its constructor.\");\n }\n if (options.onData) {\n if (typeof options.onData !== \"function\") {\n throw new TypeError(\"options.onData, when provided, must be a function.\");\n }\n if (options.onData.length < 2) {\n throw new TypeError(\n \"options.onData, when provided, must be a function that takes in at least two arguments (data and position). Ignoring the position argument, which specifies the byte offset at which the data is to be written, can lead to broken outputs.\"\n );\n }\n }\n if (options.chunked !== void 0 && typeof options.chunked !== \"boolean\") {\n throw new TypeError(\"options.chunked, when provided, must be a boolean.\");\n }\n if (options.chunkSize !== void 0 && (!Number.isInteger(options.chunkSize) || options.chunkSize < 1024)) {\n throw new TypeError(\"options.chunkSize, when provided, must be an integer and not smaller than 1024.\");\n }\n }\n};\nvar FileSystemWritableFileStreamTarget = class extends Target {\n constructor(stream, options) {\n super();\n this.stream = stream;\n this.options = options;\n if (!(stream instanceof FileSystemWritableFileStream)) {\n throw new TypeError(\"FileSystemWritableFileStreamTarget requires a FileSystemWritableFileStream instance.\");\n }\n if (options !== void 0 && typeof options !== \"object\") {\n throw new TypeError(\"FileSystemWritableFileStreamTarget's options, when provided, must be an object.\");\n }\n if (options) {\n if (options.chunkSize !== void 0 && (!Number.isInteger(options.chunkSize) || options.chunkSize <= 0)) {\n throw new TypeError(\"options.chunkSize, when provided, must be a positive integer\");\n }\n }\n }\n};\n\n// src/writer.ts\nvar _helper, _helperView;\nvar Writer = class {\n constructor() {\n this.pos = 0;\n __privateAdd(this, _helper, new Uint8Array(8));\n __privateAdd(this, _helperView, new DataView(__privateGet(this, _helper).buffer));\n /**\n * Stores the position from the start of the file to where boxes elements have been written. This is used to\n * rewrite/edit elements that were already added before, and to measure sizes of things.\n */\n this.offsets = /* @__PURE__ */ new WeakMap();\n }\n /** Sets the current position for future writes to a new one. */\n seek(newPos) {\n this.pos = newPos;\n }\n writeU32(value) {\n __privateGet(this, _helperView).setUint32(0, value, false);\n this.write(__privateGet(this, _helper).subarray(0, 4));\n }\n writeU64(value) {\n __privateGet(this, _helperView).setUint32(0, Math.floor(value / 2 ** 32), false);\n __privateGet(this, _helperView).setUint32(4, value, false);\n this.write(__privateGet(this, _helper).subarray(0, 8));\n }\n writeAscii(text) {\n for (let i = 0; i < text.length; i++) {\n __privateGet(this, _helperView).setUint8(i % 8, text.charCodeAt(i));\n if (i % 8 === 7)\n this.write(__privateGet(this, _helper));\n }\n if (text.length % 8 !== 0) {\n this.write(__privateGet(this, _helper).subarray(0, text.length % 8));\n }\n }\n writeBox(box2) {\n this.offsets.set(box2, this.pos);\n if (box2.contents && !box2.children) {\n this.writeBoxHeader(box2, box2.size ?? box2.contents.byteLength + 8);\n this.write(box2.contents);\n } else {\n let startPos = this.pos;\n this.writeBoxHeader(box2, 0);\n if (box2.contents)\n this.write(box2.contents);\n if (box2.children) {\n for (let child of box2.children)\n if (child)\n this.writeBox(child);\n }\n let endPos = this.pos;\n let size = box2.size ?? endPos - startPos;\n this.seek(startPos);\n this.writeBoxHeader(box2, size);\n this.seek(endPos);\n }\n }\n writeBoxHeader(box2, size) {\n this.writeU32(box2.largeSize ? 1 : size);\n this.writeAscii(box2.type);\n if (box2.largeSize)\n this.writeU64(size);\n }\n measureBoxHeader(box2) {\n return 8 + (box2.largeSize ? 8 : 0);\n }\n patchBox(box2) {\n let endPos = this.pos;\n this.seek(this.offsets.get(box2));\n this.writeBox(box2);\n this.seek(endPos);\n }\n measureBox(box2) {\n if (box2.contents && !box2.children) {\n let headerSize = this.measureBoxHeader(box2);\n return headerSize + box2.contents.byteLength;\n } else {\n let result = this.measureBoxHeader(box2);\n if (box2.contents)\n result += box2.contents.byteLength;\n if (box2.children) {\n for (let child of box2.children)\n if (child)\n result += this.measureBox(child);\n }\n return result;\n }\n }\n};\n_helper = new WeakMap();\n_helperView = new WeakMap();\nvar _target, _buffer, _bytes, _maxPos, _ensureSize, ensureSize_fn;\nvar ArrayBufferTargetWriter = class extends Writer {\n constructor(target) {\n super();\n __privateAdd(this, _ensureSize);\n __privateAdd(this, _target, void 0);\n __privateAdd(this, _buffer, new ArrayBuffer(2 ** 16));\n __privateAdd(this, _bytes, new Uint8Array(__privateGet(this, _buffer)));\n __privateAdd(this, _maxPos, 0);\n __privateSet(this, _target, target);\n }\n write(data) {\n __privateMethod(this, _ensureSize, ensureSize_fn).call(this, this.pos + data.byteLength);\n __privateGet(this, _bytes).set(data, this.pos);\n this.pos += data.byteLength;\n __privateSet(this, _maxPos, Math.max(__privateGet(this, _maxPos), this.pos));\n }\n finalize() {\n __privateMethod(this, _ensureSize, ensureSize_fn).call(this, this.pos);\n __privateGet(this, _target).buffer = __privateGet(this, _buffer).slice(0, Math.max(__privateGet(this, _maxPos), this.pos));\n }\n};\n_target = new WeakMap();\n_buffer = new WeakMap();\n_bytes = new WeakMap();\n_maxPos = new WeakMap();\n_ensureSize = new WeakSet();\nensureSize_fn = function(size) {\n let newLength = __privateGet(this, _buffer).byteLength;\n while (newLength < size)\n newLength *= 2;\n if (newLength === __privateGet(this, _buffer).byteLength)\n return;\n let newBuffer = new ArrayBuffer(newLength);\n let newBytes = new Uint8Array(newBuffer);\n newBytes.set(__privateGet(this, _bytes), 0);\n __privateSet(this, _buffer, newBuffer);\n __privateSet(this, _bytes, newBytes);\n};\nvar DEFAULT_CHUNK_SIZE = 2 ** 24;\nvar MAX_CHUNKS_AT_ONCE = 2;\nvar _target2, _sections, _chunked, _chunkSize, _chunks, _writeDataIntoChunks, writeDataIntoChunks_fn, _insertSectionIntoChunk, insertSectionIntoChunk_fn, _createChunk, createChunk_fn, _flushChunks, flushChunks_fn;\nvar StreamTargetWriter = class extends Writer {\n constructor(target) {\n super();\n __privateAdd(this, _writeDataIntoChunks);\n __privateAdd(this, _insertSectionIntoChunk);\n __privateAdd(this, _createChunk);\n __privateAdd(this, _flushChunks);\n __privateAdd(this, _target2, void 0);\n __privateAdd(this, _sections, []);\n __privateAdd(this, _chunked, void 0);\n __privateAdd(this, _chunkSize, void 0);\n /**\n * The data is divided up into fixed-size chunks, whose contents are first filled in RAM and then flushed out.\n * A chunk is flushed if all of its contents have been written.\n */\n __privateAdd(this, _chunks, []);\n __privateSet(this, _target2, target);\n __privateSet(this, _chunked, target.options?.chunked ?? false);\n __privateSet(this, _chunkSize, target.options?.chunkSize ?? DEFAULT_CHUNK_SIZE);\n }\n write(data) {\n __privateGet(this, _sections).push({\n data: data.slice(),\n start: this.pos\n });\n this.pos += data.byteLength;\n }\n flush() {\n if (__privateGet(this, _sections).length === 0)\n return;\n let chunks = [];\n let sorted = [...__privateGet(this, _sections)].sort((a, b) => a.start - b.start);\n chunks.push({\n start: sorted[0].start,\n size: sorted[0].data.byteLength\n });\n for (let i = 1; i < sorted.length; i++) {\n let lastChunk = chunks[chunks.length - 1];\n let section = sorted[i];\n if (section.start <= lastChunk.start + lastChunk.size) {\n lastChunk.size = Math.max(lastChunk.size, section.start + section.data.byteLength - lastChunk.start);\n } else {\n chunks.push({\n start: section.start,\n size: section.data.byteLength\n });\n }\n }\n for (let chunk of chunks) {\n chunk.data = new Uint8Array(chunk.size);\n for (let section of __privateGet(this, _sections)) {\n if (chunk.start <= section.start && section.start < chunk.start + chunk.size) {\n chunk.data.set(section.data, section.start - chunk.start);\n }\n }\n if (__privateGet(this, _chunked)) {\n __privateMethod(this, _writeDataIntoChunks, writeDataIntoChunks_fn).call(this, chunk.data, chunk.start);\n __privateMethod(this, _flushChunks, flushChunks_fn).call(this);\n } else {\n __privateGet(this, _target2).options.onData?.(chunk.data, chunk.start);\n }\n }\n __privateGet(this, _sections).length = 0;\n }\n finalize() {\n if (__privateGet(this, _chunked)) {\n __privateMethod(this, _flushChunks, flushChunks_fn).call(this, true);\n }\n }\n};\n_target2 = new WeakMap();\n_sections = new WeakMap();\n_chunked = new WeakMap();\n_chunkSize = new WeakMap();\n_chunks = new WeakMap();\n_writeDataIntoChunks = new WeakSet();\nwriteDataIntoChunks_fn = function(data, position) {\n let chunkIndex = __privateGet(this, _chunks).findIndex((x) => x.start <= position && position < x.start + __privateGet(this, _chunkSize));\n if (chunkIndex === -1)\n chunkIndex = __privateMethod(this, _createChunk, createChunk_fn).call(this, position);\n let chunk = __privateGet(this, _chunks)[chunkIndex];\n let relativePosition = position - chunk.start;\n let toWrite = data.subarray(0, Math.min(__privateGet(this, _chunkSize) - relativePosition, data.byteLength));\n chunk.data.set(toWrite, relativePosition);\n let section = {\n start: relativePosition,\n end: relativePosition + toWrite.byteLength\n };\n __privateMethod(this, _insertSectionIntoChunk, insertSectionIntoChunk_fn).call(this, chunk, section);\n if (chunk.written[0].start === 0 && chunk.written[0].end === __privateGet(this, _chunkSize)) {\n chunk.shouldFlush = true;\n }\n if (__privateGet(this, _chunks).length > MAX_CHUNKS_AT_ONCE) {\n for (let i = 0; i < __privateGet(this, _chunks).length - 1; i++) {\n __privateGet(this, _chunks)[i].shouldFlush = true;\n }\n __privateMethod(this, _flushChunks, flushChunks_fn).call(this);\n }\n if (toWrite.byteLength < data.byteLength) {\n __privateMethod(this, _writeDataIntoChunks, writeDataIntoChunks_fn).call(this, data.subarray(toWrite.byteLength), position + toWrite.byteLength);\n }\n};\n_insertSectionIntoChunk = new WeakSet();\ninsertSectionIntoChunk_fn = function(chunk, section) {\n let low = 0;\n let high = chunk.written.length - 1;\n let index = -1;\n while (low <= high) {\n let mid = Math.floor(low + (high - low + 1) / 2);\n if (chunk.written[mid].start <= section.start) {\n low = mid + 1;\n index = mid;\n } else {\n high = mid - 1;\n }\n }\n chunk.written.splice(index + 1, 0, section);\n if (index === -1 || chunk.written[index].end < section.start)\n index++;\n while (index < chunk.written.length - 1 && chunk.written[index].end >= chunk.written[index + 1].start) {\n chunk.written[index].end = Math.max(chunk.written[index].end, chunk.written[index + 1].end);\n chunk.written.splice(index + 1, 1);\n }\n};\n_createChunk = new WeakSet();\ncreateChunk_fn = function(includesPosition) {\n let start = Math.floor(includesPosition / __privateGet(this, _chunkSize)) * __privateGet(this, _chunkSize);\n let chunk = {\n start,\n data: new Uint8Array(__privateGet(this, _chunkSize)),\n written: [],\n shouldFlush: false\n };\n __privateGet(this, _chunks).push(chunk);\n __privateGet(this, _chunks).sort((a, b) => a.start - b.start);\n return __privateGet(this, _chunks).indexOf(chunk);\n};\n_flushChunks = new WeakSet();\nflushChunks_fn = function(force = false) {\n for (let i = 0; i < __privateGet(this, _chunks).length; i++) {\n let chunk = __privateGet(this, _chunks)[i];\n if (!chunk.shouldFlush && !force)\n continue;\n for (let section of chunk.written) {\n __privateGet(this, _target2).options.onData?.(\n chunk.data.subarray(section.start, section.end),\n chunk.start + section.start\n );\n }\n __privateGet(this, _chunks).splice(i--, 1);\n }\n};\nvar FileSystemWritableFileStreamTargetWriter = class extends StreamTargetWriter {\n constructor(target) {\n super(new StreamTarget({\n onData: (data, position) => target.stream.write({\n type: \"write\",\n data,\n position\n }),\n chunked: true,\n chunkSize: target.options?.chunkSize\n }));\n }\n};\n\n// src/muxer.ts\nvar GLOBAL_TIMESCALE = 1e3;\nvar SUPPORTED_VIDEO_CODECS = [\"avc\", \"hevc\", \"vp9\", \"av1\"];\nvar SUPPORTED_AUDIO_CODECS = [\"aac\", \"opus\"];\nvar TIMESTAMP_OFFSET = 2082844800;\nvar FIRST_TIMESTAMP_BEHAVIORS = [\"strict\", \"offset\", \"cross-track-offset\"];\nvar _options, _writer, _ftypSize, _mdat, _videoTrack, _audioTrack, _creationTime, _finalizedChunks, _nextFragmentNumber, _videoSampleQueue, _audioSampleQueue, _finalized, _validateOptions, validateOptions_fn, _writeHeader, writeHeader_fn, _computeMoovSizeUpperBound, computeMoovSizeUpperBound_fn, _prepareTracks, prepareTracks_fn, _generateMpeg4AudioSpecificConfig, generateMpeg4AudioSpecificConfig_fn, _createSampleForTrack, createSampleForTrack_fn, _addSampleToTrack, addSampleToTrack_fn, _validateTimestamp, validateTimestamp_fn, _finalizeCurrentChunk, finalizeCurrentChunk_fn, _finalizeFragment, finalizeFragment_fn, _maybeFlushStreamingTargetWriter, maybeFlushStreamingTargetWriter_fn, _ensureNotFinalized, ensureNotFinalized_fn;\nvar Muxer = class {\n constructor(options) {\n __privateAdd(this, _validateOptions);\n __privateAdd(this, _writeHeader);\n __privateAdd(this, _computeMoovSizeUpperBound);\n __privateAdd(this, _prepareTracks);\n // https://wiki.multimedia.cx/index.php/MPEG-4_Audio\n __privateAdd(this, _generateMpeg4AudioSpecificConfig);\n __privateAdd(this, _createSampleForTrack);\n __privateAdd(this, _addSampleToTrack);\n __privateAdd(this, _validateTimestamp);\n __privateAdd(this, _finalizeCurrentChunk);\n __privateAdd(this, _finalizeFragment);\n __privateAdd(this, _maybeFlushStreamingTargetWriter);\n __privateAdd(this, _ensureNotFinalized);\n __privateAdd(this, _options, void 0);\n __privateAdd(this, _writer, void 0);\n __privateAdd(this, _ftypSize, void 0);\n __privateAdd(this, _mdat, void 0);\n __privateAdd(this, _videoTrack, null);\n __privateAdd(this, _audioTrack, null);\n __privateAdd(this, _creationTime, Math.floor(Date.now() / 1e3) + TIMESTAMP_OFFSET);\n __privateAdd(this, _finalizedChunks, []);\n // Fields for fragmented MP4:\n __privateAdd(this, _nextFragmentNumber, 1);\n __privateAdd(this, _videoSampleQueue, []);\n __privateAdd(this, _audioSampleQueue, []);\n __privateAdd(this, _finalized, false);\n __privateMethod(this, _validateOptions, validateOptions_fn).call(this, options);\n options.video = deepClone(options.video);\n options.audio = deepClone(options.audio);\n options.fastStart = deepClone(options.fastStart);\n this.target = options.target;\n __privateSet(this, _options, {\n firstTimestampBehavior: \"strict\",\n ...options\n });\n if (options.target instanceof ArrayBufferTarget) {\n __privateSet(this, _writer, new ArrayBufferTargetWriter(options.target));\n } else if (options.target instanceof StreamTarget) {\n __privateSet(this, _writer, new StreamTargetWriter(options.target));\n } else if (options.target instanceof FileSystemWritableFileStreamTarget) {\n __privateSet(this, _writer, new FileSystemWritableFileStreamTargetWriter(options.target));\n } else {\n throw new Error(`Invalid target: ${options.target}`);\n }\n __privateMethod(this, _prepareTracks, prepareTracks_fn).call(this);\n __privateMethod(this, _writeHeader, writeHeader_fn).call(this);\n }\n addVideoChunk(sample, meta, timestamp, compositionTimeOffset) {\n if (!(sample instanceof EncodedVideoChunk)) {\n throw new TypeError(\"addVideoChunk's first argument (sample) must be of type EncodedVideoChunk.\");\n }\n if (meta && typeof meta !== \"object\") {\n throw new TypeError(\"addVideoChunk's second argument (meta), when provided, must be an object.\");\n }\n if (timestamp !== void 0 && (!Number.isFinite(timestamp) || timestamp < 0)) {\n throw new TypeError(\n \"addVideoChunk's third argument (timestamp), when provided, must be a non-negative real number.\"\n );\n }\n if (compositionTimeOffset !== void 0 && !Number.isFinite(compositionTimeOffset)) {\n throw new TypeError(\n \"addVideoChunk's fourth argument (compositionTimeOffset), when provided, must be a real number.\"\n );\n }\n let data = new Uint8Array(sample.byteLength);\n sample.copyTo(data);\n this.addVideoChunkRaw(\n data,\n sample.type,\n timestamp ?? sample.timestamp,\n sample.duration,\n meta,\n compositionTimeOffset\n );\n }\n addVideoChunkRaw(data, type, timestamp, duration, meta, compositionTimeOffset) {\n if (!(data instanceof Uint8Array)) {\n throw new TypeError(\"addVideoChunkRaw's first argument (data) must be an instance of Uint8Array.\");\n }\n if (type !== \"key\" && type !== \"delta\") {\n throw new TypeError(\"addVideoChunkRaw's second argument (type) must be either 'key' or 'delta'.\");\n }\n if (!Number.isFinite(timestamp) || timestamp < 0) {\n throw new TypeError(\"addVideoChunkRaw's third argument (timestamp) must be a non-negative real number.\");\n }\n if (!Number.isFinite(duration) || duration < 0) {\n throw new TypeError(\"addVideoChunkRaw's fourth argument (duration) must be a non-negative real number.\");\n }\n if (meta && typeof meta !== \"object\") {\n throw new TypeError(\"addVideoChunkRaw's fifth argument (meta), when provided, must be an object.\");\n }\n if (compositionTimeOffset !== void 0 && !Number.isFinite(compositionTimeOffset)) {\n throw new TypeError(\n \"addVideoChunkRaw's sixth argument (compositionTimeOffset), when provided, must be a real number.\"\n );\n }\n __privateMethod(this, _ensureNotFinalized, ensureNotFinalized_fn).call(this);\n if (!__privateGet(this, _options).video)\n throw new Error(\"No video track declared.\");\n if (typeof __privateGet(this, _options).fastStart === \"object\" && __privateGet(this, _videoTrack).samples.length === __privateGet(this, _options).fastStart.expectedVideoChunks) {\n throw new Error(`Cannot add more video chunks than specified in 'fastStart' (${__privateGet(this, _options).fastStart.expectedVideoChunks}).`);\n }\n let videoSample = __privateMethod(this, _createSampleForTrack, createSampleForTrack_fn).call(this, __privateGet(this, _videoTrack), data, type, timestamp, duration, meta, compositionTimeOffset);\n if (__privateGet(this, _options).fastStart === \"fragmented\" && __privateGet(this, _audioTrack)) {\n while (__privateGet(this, _audioSampleQueue).length > 0 && __privateGet(this, _audioSampleQueue)[0].decodeTimestamp <= videoSample.decodeTimestamp) {\n let audioSample = __privateGet(this, _audioSampleQueue).shift();\n __privateMethod(this, _addSampleToTrack, addSampleToTrack_fn).call(this, __privateGet(this, _audioTrack), audioSample);\n }\n if (videoSample.decodeTimestamp <= __privateGet(this, _audioTrack).lastDecodeTimestamp) {\n __privateMethod(this, _addSampleToTrack, addSampleToTrack_fn).call(this, __privateGet(this, _videoTrack), videoSample);\n } else {\n __privateGet(this, _videoSampleQueue).push(videoSample);\n }\n } else {\n __privateMethod(this, _addSampleToTrack, addSampleToTrack_fn).call(this, __privateGet(this, _videoTrack), videoSample);\n }\n }\n addAudioChunk(sample, meta, timestamp) {\n if (!(sample instanceof EncodedAudioChunk)) {\n throw new TypeError(\"addAudioChunk's first argument (sample) must be of type EncodedAudioChunk.\");\n }\n if (meta && typeof meta !== \"object\") {\n throw new TypeError(\"addAudioChunk's second argument (meta), when provided, must be an object.\");\n }\n if (timestamp !== void 0 && (!Number.isFinite(timestamp) || timestamp < 0)) {\n throw new TypeError(\n \"addAudioChunk's third argument (timestamp), when provided, must be a non-negative real number.\"\n );\n }\n let data = new Uint8Array(sample.byteLength);\n sample.copyTo(data);\n this.addAudioChunkRaw(data, sample.type, timestamp ?? sample.timestamp, sample.duration, meta);\n }\n addAudioChunkRaw(data, type, timestamp, duration, meta) {\n if (!(data instanceof Uint8Array)) {\n throw new TypeError(\"addAudioChunkRaw's first argument (data) must be an instance of Uint8Array.\");\n }\n if (type !== \"key\" && type !== \"delta\") {\n throw new TypeError(\"addAudioChunkRaw's second argument (type) must be either 'key' or 'delta'.\");\n }\n if (!Number.isFinite(timestamp) || timestamp < 0) {\n throw new TypeError(\"addAudioChunkRaw's third argument (timestamp) must be a non-negative real number.\");\n }\n if (!Number.isFinite(duration) || duration < 0) {\n throw new TypeError(\"addAudioChunkRaw's fourth argument (duration) must be a non-negative real number.\");\n }\n if (meta && typeof meta !== \"object\") {\n throw new TypeError(\"addAudioChunkRaw's fifth argument (meta), when provided, must be an object.\");\n }\n __privateMethod(this, _ensureNotFinalized, ensureNotFinalized_fn).call(this);\n if (!__privateGet(this, _options).audio)\n throw new Error(\"No audio track declared.\");\n if (typeof __privateGet(this, _options).fastStart === \"object\" && __privateGet(this, _audioTrack).samples.length === __privateGet(this, _options).fastStart.expectedAudioChunks) {\n throw new Error(`Cannot add more audio chunks than specified in 'fastStart' (${__privateGet(this, _options).fastStart.expectedAudioChunks}).`);\n }\n let audioSample = __privateMethod(this, _createSampleForTrack, createSampleForTrack_fn).call(this, __privateGet(this, _audioTrack), data, type, timestamp, duration, meta);\n if (__privateGet(this, _options).fastStart === \"fragmented\" && __privateGet(this, _videoTrack)) {\n while (__privateGet(this, _videoSampleQueue).length > 0 && __privateGet(this, _videoSampleQueue)[0].decodeTimestamp <= audioSample.decodeTimestamp) {\n let videoSample = __privateGet(this, _videoSampleQueue).shift();\n __privateMethod(this, _addSampleToTrack, addSampleToTrack_fn).call(this, __privateGet(this, _videoTrack), videoSample);\n }\n if (audioSample.decodeTimestamp <= __privateGet(this, _videoTrack).lastDecodeTimestamp) {\n __privateMethod(this, _addSampleToTrack, addSampleToTrack_fn).call(this, __privateGet(this, _audioTrack), audioSample);\n } else {\n __privateGet(this, _audioSampleQueue).push(audioSample);\n }\n } else {\n __privateMethod(this, _addSampleToTrack, addSampleToTrack_fn).call(this, __privateGet(this, _audioTrack), audioSample);\n }\n }\n /** Finalizes the file, making it ready for use. Must be called after all video and audio chunks have been added. */\n finalize() {\n if (__privateGet(this, _finalized)) {\n throw new Error(\"Cannot finalize a muxer more than once.\");\n }\n if (__privateGet(this, _options).fastStart === \"fragmented\") {\n for (let videoSample of __privateGet(this, _videoSampleQueue))\n __privateMethod(this, _addSampleToTrack, addSampleToTrack_fn).call(this, __privateGet(this, _videoTrack), videoSample);\n for (let audioSample of __privateGet(this, _audioSampleQueue))\n __privateMethod(this, _addSampleToTrack, addSampleToTrack_fn).call(this, __privateGet(this, _audioTrack), audioSample);\n __privateMethod(this, _finalizeFragment, finalizeFragment_fn).call(this, false);\n } else {\n if (__privateGet(this, _videoTrack))\n __privateMethod(this, _finalizeCurrentChunk, finalizeCurrentChunk_fn).call(this, __privateGet(this, _videoTrack));\n if (__privateGet(this, _audioTrack))\n __privateMethod(this, _finalizeCurrentChunk, finalizeCurrentChunk_fn).call(this, __privateGet(this, _audioTrack));\n }\n let tracks = [__privateGet(this, _videoTrack), __privateGet(this, _audioTrack)].filter(Boolean);\n if (__privateGet(this, _options).fastStart === \"in-memory\") {\n let mdatSize;\n for (let i = 0; i < 2; i++) {\n let movieBox2 = moov(tracks, __privateGet(this, _creationTime));\n let movieBoxSize = __privateGet(this, _writer).measureBox(movieBox2);\n mdatSize = __privateGet(this, _writer).measureBox(__privateGet(this, _mdat));\n let currentChunkPos = __privateGet(this, _writer).pos + movieBoxSize + mdatSize;\n for (let chunk of __privateGet(this, _finalizedChunks)) {\n chunk.offset = currentChunkPos;\n for (let { data } of chunk.samples) {\n currentChunkPos += data.byteLength;\n mdatSize += data.byteLength;\n }\n }\n if (currentChunkPos < 2 ** 32)\n break;\n if (mdatSize >= 2 ** 32)\n __privateGet(this, _mdat).largeSize = true;\n }\n let movieBox = moov(tracks, __privateGet(this, _creationTime));\n __privateGet(this, _writer).writeBox(movieBox);\n __privateGet(this, _mdat).size = mdatSize;\n __privateGet(this, _writer).writeBox(__privateGet(this, _mdat));\n for (let chunk of __privateGet(this, _finalizedChunks)) {\n for (let sample of chunk.samples) {\n __privateGet(this, _writer).write(sample.data);\n sample.data = null;\n }\n }\n } else if (__privateGet(this, _options).fastStart === \"fragmented\") {\n let startPos = __privateGet(this, _writer).pos;\n let mfraBox = mfra(tracks);\n __privateGet(this, _writer).writeBox(mfraBox);\n let mfraBoxSize = __privateGet(this, _writer).pos - startPos;\n __privateGet(this, _writer).seek(__privateGet(this, _writer).pos - 4);\n __privateGet(this, _writer).writeU32(mfraBoxSize);\n } else {\n let mdatPos = __privateGet(this, _writer).offsets.get(__privateGet(this, _mdat));\n let mdatSize = __privateGet(this, _writer).pos - mdatPos;\n __privateGet(this, _mdat).size = mdatSize;\n __privateGet(this, _mdat).largeSize = mdatSize >= 2 ** 32;\n __privateGet(this, _writer).patchBox(__privateGet(this, _mdat));\n let movieBox = moov(tracks, __privateGet(this, _creationTime));\n if (typeof __privateGet(this, _options).fastStart === \"object\") {\n __privateGet(this, _writer).seek(__privateGet(this, _ftypSize));\n __privateGet(this, _writer).writeBox(movieBox);\n let remainingBytes = mdatPos - __privateGet(this, _writer).pos;\n __privateGet(this, _writer).writeBox(free(remainingBytes));\n } else {\n __privateGet(this, _writer).writeBox(movieBox);\n }\n }\n __privateMethod(this, _maybeFlushStreamingTargetWriter, maybeFlushStreamingTargetWriter_fn).call(this);\n __privateGet(this, _writer).finalize();\n __privateSet(this, _finalized, true);\n }\n};\n_options = new WeakMap();\n_writer = new WeakMap();\n_ftypSize = new WeakMap();\n_mdat = new WeakMap();\n_videoTrack = new WeakMap();\n_audioTrack = new WeakMap();\n_creationTime = new WeakMap();\n_finalizedChunks = new WeakMap();\n_nextFragmentNumber = new WeakMap();\n_videoSampleQueue = new WeakMap();\n_audioSampleQueue = new WeakMap();\n_finalized = new WeakMap();\n_validateOptions = new WeakSet();\nvalidateOptions_fn = function(options) {\n if (typeof options !== \"object\") {\n throw new TypeError(\"The muxer requires an options object to be passed to its constructor.\");\n }\n if (!(options.target instanceof Target)) {\n throw new TypeError(\"The target must be provided and an instance of Target.\");\n }\n if (options.video) {\n if (!SUPPORTED_VIDEO_CODECS.includes(options.video.codec)) {\n throw new TypeError(`Unsupported video codec: ${options.video.codec}`);\n }\n if (!Number.isInteger(options.video.width) || options.video.width <= 0) {\n throw new TypeError(`Invalid video width: ${options.video.width}. Must be a positive integer.`);\n }\n if (!Number.isInteger(options.video.height) || options.video.height <= 0) {\n throw new TypeError(`Invalid video height: ${options.video.height}. Must be a positive integer.`);\n }\n const videoRotation = options.video.rotation;\n if (typeof videoRotation === \"number\" && ![0, 90, 180, 270].includes(videoRotation)) {\n throw new TypeError(`Invalid video rotation: ${videoRotation}. Has to be 0, 90, 180 or 270.`);\n } else if (Array.isArray(videoRotation) && (videoRotation.length !== 9 || videoRotation.some((value) => typeof value !== \"number\"))) {\n throw new TypeError(`Invalid video transformation matrix: ${videoRotation.join()}`);\n }\n if (options.video.frameRate !== void 0 && (!Number.isInteger(options.video.frameRate) || options.video.frameRate <= 0)) {\n throw new TypeError(\n `Invalid video frame rate: ${options.video.frameRate}. Must be a positive integer.`\n );\n }\n }\n if (options.audio) {\n if (!SUPPORTED_AUDIO_CODECS.includes(options.audio.codec)) {\n throw new TypeError(`Unsupported audio codec: ${options.audio.codec}`);\n }\n if (!Number.isInteger(options.audio.numberOfChannels) || options.audio.numberOfChannels <= 0) {\n throw new TypeError(\n `Invalid number of audio channels: ${options.audio.numberOfChannels}. Must be a positive integer.`\n );\n }\n if (!Number.isInteger(options.audio.sampleRate) || options.audio.sampleRate <= 0) {\n throw new TypeError(\n `Invalid audio sample rate: ${options.audio.sampleRate}. Must be a positive integer.`\n );\n }\n }\n if (options.firstTimestampBehavior && !FIRST_TIMESTAMP_BEHAVIORS.includes(options.firstTimestampBehavior)) {\n throw new TypeError(`Invalid first timestamp behavior: ${options.firstTimestampBehavior}`);\n }\n if (typeof options.fastStart === \"object\") {\n if (options.video) {\n if (options.fastStart.expectedVideoChunks === void 0) {\n throw new TypeError(`'fastStart' is an object but is missing property 'expectedVideoChunks'.`);\n } else if (!Number.isInteger(options.fastStart.expectedVideoChunks) || options.fastStart.expectedVideoChunks < 0) {\n throw new TypeError(`'expectedVideoChunks' must be a non-negative integer.`);\n }\n }\n if (options.audio) {\n if (options.fastStart.expectedAudioChunks === void 0) {\n throw new TypeError(`'fastStart' is an object but is missing property 'expectedAudioChunks'.`);\n } else if (!Number.isInteger(options.fastStart.expectedAudioChunks) || options.fastStart.expectedAudioChunks < 0) {\n throw new TypeError(`'expectedAudioChunks' must be a non-negative integer.`);\n }\n }\n } else if (![false, \"in-memory\", \"fragmented\"].includes(options.fastStart)) {\n throw new TypeError(`'fastStart' option must be false, 'in-memory', 'fragmented' or an object.`);\n }\n if (options.minFragmentDuration !== void 0 && (!Number.isFinite(options.minFragmentDuration) || options.minFragmentDuration < 0)) {\n throw new TypeError(`'minFragmentDuration' must be a non-negative number.`);\n }\n};\n_writeHeader = new WeakSet();\nwriteHeader_fn = function() {\n __privateGet(this, _writer).writeBox(ftyp({\n holdsAvc: __privateGet(this, _options).video?.codec === \"avc\",\n fragmented: __privateGet(this, _options).fastStart === \"fragmented\"\n }));\n __privateSet(this, _ftypSize, __privateGet(this, _writer).pos);\n if (__privateGet(this, _options).fastStart === \"in-memory\") {\n __privateSet(this, _mdat, mdat(false));\n } else if (__privateGet(this, _options).fastStart === \"fragmented\") {\n } else {\n if (typeof __privateGet(this, _options).fastStart === \"object\") {\n let moovSizeUpperBound = __privateMethod(this, _computeMoovSizeUpperBound, computeMoovSizeUpperBound_fn).call(this);\n __privateGet(this, _writer).seek(__privateGet(this, _writer).pos + moovSizeUpperBound);\n }\n __privateSet(this, _mdat, mdat(true));\n __privateGet(this, _writer).writeBox(__privateGet(this, _mdat));\n }\n __privateMethod(this, _maybeFlushStreamingTargetWriter, maybeFlushStreamingTargetWriter_fn).call(this);\n};\n_computeMoovSizeUpperBound = new WeakSet();\ncomputeMoovSizeUpperBound_fn = function() {\n if (typeof __privateGet(this, _options).fastStart !== \"object\")\n return;\n let upperBound = 0;\n let sampleCounts = [\n __privateGet(this, _options).fastStart.expectedVideoChunks,\n __privateGet(this, _options).fastStart.expectedAudioChunks\n ];\n for (let n of sampleCounts) {\n if (!n)\n continue;\n upperBound += (4 + 4) * Math.ceil(2 / 3 * n);\n upperBound += 4 * n;\n upperBound += (4 + 4 + 4) * Math.ceil(2 / 3 * n);\n upperBound += 4 * n;\n upperBound += 8 * n;\n }\n upperBound += 4096;\n return upperBound;\n};\n_prepareTracks = new WeakSet();\nprepareTracks_fn = function() {\n if (__privateGet(this, _options).video) {\n __privateSet(this, _videoTrack, {\n id: 1,\n info: {\n type: \"video\",\n codec: __privateGet(this, _options).video.codec,\n width: __privateGet(this, _options).video.width,\n height: __privateGet(this, _options).video.height,\n rotation: __privateGet(this, _options).video.rotation ?? 0,\n decoderConfig: null\n },\n // The fallback contains many common frame rates as factors\n timescale: __privateGet(this, _options).video.frameRate ?? 57600,\n samples: [],\n finalizedChunks: [],\n currentChunk: null,\n firstDecodeTimestamp: void 0,\n lastDecodeTimestamp: -1,\n timeToSampleTable: [],\n compositionTimeOffsetTable: [],\n lastTimescaleUnits: null,\n lastSample: null,\n compactlyCodedChunkTable: []\n });\n }\n if (__privateGet(this, _options).audio) {\n __privateSet(this, _audioTrack, {\n id: __privateGet(this, _options).video ? 2 : 1,\n info: {\n type: \"audio\",\n codec: __privateGet(this, _options).audio.codec,\n numberOfChannels: __privateGet(this, _options).audio.numberOfChannels,\n sampleRate: __privateGet(this, _options).audio.sampleRate,\n decoderConfig: null\n },\n timescale: __privateGet(this, _options).audio.sampleRate,\n samples: [],\n finalizedChunks: [],\n currentChunk: null,\n firstDecodeTimestamp: void 0,\n lastDecodeTimestamp: -1,\n timeToSampleTable: [],\n compositionTimeOffsetTable: [],\n lastTimescaleUnits: null,\n lastSample: null,\n compactlyCodedChunkTable: []\n });\n if (__privateGet(this, _options).audio.codec === \"aac\") {\n let guessedCodecPrivate = __privateMethod(this, _generateMpeg4AudioSpecificConfig, generateMpeg4AudioSpecificConfig_fn).call(\n this,\n 2,\n // Object type for AAC-LC, since it's the most common\n __privateGet(this, _options).audio.sampleRate,\n __privateGet(this, _options).audio.numberOfChannels\n );\n __privateGet(this, _audioTrack).info.decoderConfig = {\n codec: __privateGet(this, _options).audio.codec,\n description: guessedCodecPrivate,\n numberOfChannels: __privateGet(this, _options).audio.numberOfChannels,\n sampleRate: __privateGet(this, _options).audio.sampleRate\n };\n }\n }\n};\n_generateMpeg4AudioSpecificConfig = new WeakSet();\ngenerateMpeg4AudioSpecificConfig_fn = function(objectType, sampleRate, numberOfChannels) {\n let frequencyIndices = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350];\n let frequencyIndex = frequencyIndices.indexOf(sampleRate);\n let channelConfig = numberOfChannels;\n let configBits = \"\";\n configBits += objectType.toString(2).padStart(5, \"0\");\n configBits += frequencyIndex.toString(2).padStart(4, \"0\");\n if (frequencyIndex === 15)\n configBits += sampleRate.toString(2).padStart(24, \"0\");\n configBits += channelConfig.toString(2).padStart(4, \"0\");\n let paddingLength = Math.ceil(configBits.length / 8) * 8;\n configBits = configBits.padEnd(paddingLength, \"0\");\n let configBytes = new Uint8Array(configBits.length / 8);\n for (let i = 0; i < configBits.length; i += 8) {\n configBytes[i / 8] = parseInt(configBits.slice(i, i + 8), 2);\n }\n return configBytes;\n};\n_createSampleForTrack = new WeakSet();\ncreateSampleForTrack_fn = function(track, data, type, timestamp, duration, meta, compositionTimeOffset) {\n let presentationTimestampInSeconds = timestamp / 1e6;\n let decodeTimestampInSeconds = (timestamp - (compositionTimeOffset ?? 0)) / 1e6;\n let durationInSeconds = duration / 1e6;\n let adjusted = __privateMethod(this, _validateTimestamp, validateTimestamp_fn).call(this, presentationTimestampInSeconds, decodeTimestampInSeconds, track);\n presentationTimestampInSeconds = adjusted.presentationTimestamp;\n decodeTimestampInSeconds = adjusted.decodeTimestamp;\n if (meta?.decoderConfig) {\n if (track.info.decoderConfig === null) {\n track.info.decoderConfig = meta.decoderConfig;\n } else {\n Object.assign(track.info.decoderConfig, meta.decoderConfig);\n }\n }\n let sample = {\n presentationTimestamp: presentationTimestampInSeconds,\n decodeTimestamp: decodeTimestampInSeconds,\n duration: durationInSeconds,\n data,\n size: data.byteLength,\n type,\n // Will be refined once the next sample comes in\n timescaleUnitsToNextSample: intoTimescale(durationInSeconds, track.timescale)\n };\n return sample;\n};\n_addSampleToTrack = new WeakSet();\naddSampleToTrack_fn = function(track, sample) {\n if (__privateGet(this, _options).fastStart !== \"fragmented\") {\n track.samples.push(sample);\n }\n const sampleCompositionTimeOffset = intoTimescale(sample.presentationTimestamp - sample.decodeTimestamp, track.timescale);\n if (track.lastTimescaleUnits !== null) {\n let timescaleUnits = intoTimescale(sample.decodeTimestamp, track.timescale, false);\n let delta = Math.round(timescaleUnits - track.lastTimescaleUnits);\n track.lastTimescaleUnits += delta;\n track.lastSample.timescaleUnitsToNextSample = delta;\n if (__privateGet(this, _options).fastStart !== \"fragmented\") {\n let lastTableEntry = last(track.timeToSampleTable);\n if (lastTableEntry.sampleCount === 1) {\n lastTableEntry.sampleDelta = delta;\n lastTableEntry.sampleCount++;\n } else if (lastTableEntry.sampleDelta === delta) {\n lastTableEntry.sampleCount++;\n } else {\n lastTableEntry.sampleCount--;\n track.timeToSampleTable.push({\n sampleCount: 2,\n sampleDelta: delta\n });\n }\n const lastCompositionTimeOffsetTableEntry = last(track.compositionTimeOffsetTable);\n if (lastCompositionTimeOffsetTableEntry.sampleCompositionTimeOffset === sampleCompositionTimeOffset) {\n lastCompositionTimeOffsetTableEntry.sampleCount++;\n } else {\n track.compositionTimeOffsetTable.push({\n sampleCount: 1,\n sampleCompositionTimeOffset\n });\n }\n }\n } else {\n track.lastTimescaleUnits = 0;\n if (__privateGet(this, _options).fastStart !== \"fragmented\") {\n track.timeToSampleTable.push({\n sampleCount: 1,\n sampleDelta: intoTimescale(sample.duration, track.timescale)\n });\n track.compositionTimeOffsetTable.push({\n sampleCount: 1,\n sampleCompositionTimeOffset\n });\n }\n }\n track.lastSample = sample;\n let beginNewChunk = false;\n if (!track.currentChunk) {\n beginNewChunk = true;\n } else {\n let currentChunkDuration = sample.presentationTimestamp - track.currentChunk.startTimestamp;\n if (__privateGet(this, _options).fastStart === \"fragmented\") {\n let mostImportantTrack = __privateGet(this, _videoTrack) ?? __privateGet(this, _audioTrack);\n const chunkDuration = __privateGet(this, _options).minFragmentDuration ?? 1;\n if (track === mostImportantTrack && sample.type === \"key\" && currentChunkDuration >= chunkDuration) {\n beginNewChunk = true;\n __privateMethod(this, _finalizeFragment, finalizeFragment_fn).call(this);\n }\n } else {\n beginNewChunk = currentChunkDuration >= 0.5;\n }\n }\n if (beginNewChunk) {\n if (track.currentChunk) {\n __privateMethod(this, _finalizeCurrentChunk, finalizeCurrentChunk_fn).call(this, track);\n }\n track.currentChunk = {\n startTimestamp: sample.presentationTimestamp,\n samples: []\n };\n }\n track.currentChunk.samples.push(sample);\n};\n_validateTimestamp = new WeakSet();\nvalidateTimestamp_fn = function(presentationTimestamp, decodeTimestamp, track) {\n const strictTimestampBehavior = __privateGet(this, _options).firstTimestampBehavior === \"strict\";\n const noLastDecodeTimestamp = track.lastDecodeTimestamp === -1;\n const timestampNonZero = decodeTimestamp !== 0;\n if (strictTimestampBehavior && noLastDecodeTimestamp && timestampNonZero) {\n throw new Error(\n `The first chunk for your media track must have a timestamp of 0 (received DTS=${decodeTimestamp}).Non-zero first timestamps are often caused by directly piping frames or audio data from a MediaStreamTrack into the encoder. Their timestamps are typically relative to the age of thedocument, which is probably what you want.\n\nIf you want to offset all timestamps of a track such that the first one is zero, set firstTimestampBehavior: 'offset' in the options.\n`\n );\n } else if (__privateGet(this, _options).firstTimestampBehavior === \"offset\" || __privateGet(this, _options).firstTimestampBehavior === \"cross-track-offset\") {\n if (track.firstDecodeTimestamp === void 0) {\n track.firstDecodeTimestamp = decodeTimestamp;\n }\n let baseDecodeTimestamp;\n if (__privateGet(this, _options).firstTimestampBehavior === \"offset\") {\n baseDecodeTimestamp = track.firstDecodeTimestamp;\n } else {\n baseDecodeTimestamp = Math.min(\n __privateGet(this, _videoTrack)?.firstDecodeTimestamp ?? Infinity,\n __privateGet(this, _audioTrack)?.firstDecodeTimestamp ?? Infinity\n );\n }\n decodeTimestamp -= baseDecodeTimestamp;\n presentationTimestamp -= baseDecodeTimestamp;\n }\n if (decodeTimestamp < track.lastDecodeTimestamp) {\n throw new Error(\n `Timestamps must be monotonically increasing (DTS went from ${track.lastDecodeTimestamp * 1e6} to ${decodeTimestamp * 1e6}).`\n );\n }\n track.lastDecodeTimestamp = decodeTimestamp;\n return { presentationTimestamp, decodeTimestamp };\n};\n_finalizeCurrentChunk = new WeakSet();\nfinalizeCurrentChunk_fn = function(track) {\n if (__privateGet(this, _options).fastStart === \"fragmented\") {\n throw new Error(\"Can't finalize individual chunks if 'fastStart' is set to 'fragmented'.\");\n }\n if (!track.currentChunk)\n return;\n track.finalizedChunks.push(track.currentChunk);\n __privateGet(this, _finalizedChunks).push(track.currentChunk);\n if (track.compactlyCodedChunkTable.length === 0 || last(track.compactlyCodedChunkTable).samplesPerChunk !== track.currentChunk.samples.length) {\n track.compactlyCodedChunkTable.push({\n firstChunk: track.finalizedChunks.length,\n // 1-indexed\n samplesPerChunk: track.currentChunk.samples.length\n });\n }\n if (__privateGet(this, _options).fastStart === \"in-memory\") {\n track.currentChunk.offset = 0;\n return;\n }\n track.currentChunk.offset = __privateGet(this, _writer).pos;\n for (let sample of track.currentChunk.samples) {\n __privateGet(this, _writer).write(sample.data);\n sample.data = null;\n }\n __privateMethod(this, _maybeFlushStreamingTargetWriter, maybeFlushStreamingTargetWriter_fn).call(this);\n};\n_finalizeFragment = new WeakSet();\nfinalizeFragment_fn = function(flushStreamingWriter = true) {\n if (__privateGet(this, _options).fastStart !== \"fragmented\") {\n throw new Error(\"Can't finalize a fragment unless 'fastStart' is set to 'fragmented'.\");\n }\n let tracks = [__privateGet(this, _videoTrack), __privateGet(this, _audioTrack)].filter((track) => track && track.currentChunk);\n if (tracks.length === 0)\n return;\n let fragmentNumber = __privateWrapper(this, _nextFragmentNumber)._++;\n if (fragmentNumber === 1) {\n let movieBox = moov(tracks, __privateGet(this, _creationTime), true);\n __privateGet(this, _writer).writeBox(movieBox);\n }\n let moofOffset = __privateGet(this, _writer).pos;\n let moofBox = moof(fragmentNumber, tracks);\n __privateGet(this, _writer).writeBox(moofBox);\n {\n let mdatBox = mdat(false);\n let totalTrackSampleSize = 0;\n for (let track of tracks) {\n for (let sample of track.currentChunk.samples) {\n totalTrackSampleSize += sample.size;\n }\n }\n let mdatSize = __privateGet(this, _writer).measureBox(mdatBox) + totalTrackSampleSize;\n if (mdatSize >= 2 ** 32) {\n mdatBox.largeSize = true;\n mdatSize = __privateGet(this, _writer).measureBox(mdatBox) + totalTrackSampleSize;\n }\n mdatBox.size = mdatSize;\n __privateGet(this, _writer).writeBox(mdatBox);\n }\n for (let track of tracks) {\n track.currentChunk.offset = __privateGet(this, _writer).pos;\n track.currentChunk.moofOffset = moofOffset;\n for (let sample of track.currentChunk.samples) {\n __privateGet(this, _writer).write(sample.data);\n sample.data = null;\n }\n }\n let endPos = __privateGet(this, _writer).pos;\n __privateGet(this, _writer).seek(__privateGet(this, _writer).offsets.get(moofBox));\n let newMoofBox = moof(fragmentNumber, tracks);\n __privateGet(this, _writer).writeBox(newMoofBox);\n __privateGet(this, _writer).seek(endPos);\n for (let track of tracks) {\n track.finalizedChunks.push(track.currentChunk);\n __privateGet(this, _finalizedChunks).push(track.currentChunk);\n track.currentChunk = null;\n }\n if (flushStreamingWriter) {\n __privateMethod(this, _maybeFlushStreamingTargetWriter, maybeFlushStreamingTargetWriter_fn).call(this);\n }\n};\n_maybeFlushStreamingTargetWriter = new WeakSet();\nmaybeFlushStreamingTargetWriter_fn = function() {\n if (__privateGet(this, _writer) instanceof StreamTargetWriter) {\n __privateGet(this, _writer).flush();\n }\n};\n_ensureNotFinalized = new WeakSet();\nensureNotFinalized_fn = function() {\n if (__privateGet(this, _finalized)) {\n throw new Error(\"Cannot add new video or audio chunks after the file has been finalized.\");\n }\n};\nexport {\n ArrayBufferTarget,\n FileSystemWritableFileStreamTarget,\n Muxer,\n StreamTarget\n};\n", "/**\n * ffmpeg.wasm encoder (Node.js / fallback).\n */\n\nimport { VideoEncoderBase } from './videoEncoder.base.js';\n\nexport class FfmpegEncoder extends VideoEncoderBase {\n #ffmpeg = null;\n #config = null;\n #frameIndex = 0;\n #audioData = null;\n\n async init(config) {\n const { FFmpeg } = await import('@ffmpeg/ffmpeg');\n this.#ffmpeg = new FFmpeg();\n await this.#ffmpeg.load();\n this.#config = config;\n this.#frameIndex = 0;\n }\n\n async encodeFrame(imageData) {\n const frameName = `frame_${String(this.#frameIndex).padStart(6, '0')}.raw`;\n await this.#ffmpeg.writeFile(frameName, new Uint8Array(imageData.data.buffer));\n this.#frameIndex++;\n }\n\n async setAudioTrack(audioData) {\n if (audioData) {\n await this.#ffmpeg.writeFile('audio.aac', audioData);\n this.#audioData = true;\n }\n }\n\n async finalize() {\n const { width, height, fps, bitrate } = this.#config;\n\n const args = [\n '-f',\n 'rawvideo',\n '-pix_fmt',\n 'rgba',\n '-s',\n `${width}x${height}`,\n '-r',\n String(fps),\n '-i',\n 'frame_%06d.raw',\n ];\n\n if (this.#audioData) {\n args.push('-i', 'audio.aac', '-c:a', 'copy');\n }\n\n args.push(\n '-c:v',\n 'libx264',\n '-b:v',\n String(bitrate || 5_000_000),\n '-pix_fmt',\n 'yuv420p',\n '-movflags',\n '+faststart',\n 'output.mp4',\n );\n\n await this.#ffmpeg.exec(args);\n const data = await this.#ffmpeg.readFile('output.mp4');\n\n for (let i = 0; i < this.#frameIndex; i++) {\n const name = `frame_${String(i).padStart(6, '0')}.raw`;\n try {\n await this.#ffmpeg.deleteFile(name);\n } catch {}\n }\n try {\n await this.#ffmpeg.deleteFile('output.mp4');\n } catch {}\n if (this.#audioData) {\n try {\n await this.#ffmpeg.deleteFile('audio.aac');\n } catch {}\n }\n\n return data;\n }\n}\n", "/**\n * Core reverse alpha blending algorithm.\n * Formula: original = (watermarked - \u03B1 \u00D7 255) / (1 - \u03B1)\n */\n\nconst ALPHA_NOISE_FLOOR = 3 / 255;\nconst ALPHA_THRESHOLD = 0.002;\nconst MAX_ALPHA = 0.99;\n\n/**\n * Remove watermark from an ImageData region using a pre-calibrated alpha map.\n *\n * @param {ImageData} imageData - The watermarked image data\n * @param {Float32Array} alphaMap - Alpha map (width \u00D7 height float values 0-1)\n * @param {{ x: number, y: number, width: number, height: number }} position - Watermark region\n * @param {{ clampOutput?: boolean }} options\n * @returns {ImageData} Modified imageData (mutated in place and returned)\n */\nexport function removeWatermark(imageData, alphaMap, position, options = {}) {\n const { clampOutput = true } = options;\n const { data, width } = imageData;\n const { x: ox, y: oy, width: mw, height: mh } = position;\n\n for (let my = 0; my < mh; my++) {\n for (let mx = 0; mx < mw; mx++) {\n const alpha = alphaMap[my * mw + mx];\n\n // Skip pixels below noise floor\n if (alpha < ALPHA_THRESHOLD) continue;\n\n const effectiveAlpha = Math.min(alpha, MAX_ALPHA);\n const px = ox + mx;\n const py = oy + my;\n\n if (px < 0 || px >= width || py < 0 || py >= imageData.height) continue;\n\n const idx = (py * width + px) * 4;\n\n for (let c = 0; c < 3; c++) {\n const watermarked = data[idx + c];\n // Reverse alpha blend: original = (watermarked - alpha * 255) / (1 - alpha)\n let original = (watermarked - effectiveAlpha * 255) / (1 - effectiveAlpha);\n\n if (clampOutput) {\n original = Math.max(0, Math.min(255, Math.round(original)));\n }\n data[idx + c] = original;\n }\n // Alpha channel unchanged\n }\n }\n\n return imageData;\n}\n\n/**\n * Apply a synthetic watermark to imageData (for testing/demo).\n */\nexport function applySyntheticWatermark(imageData, alphaMap, position) {\n const { data, width } = imageData;\n const { x: ox, y: oy, width: mw, height: mh } = position;\n\n for (let my = 0; my < mh; my++) {\n for (let mx = 0; mx < mw; mx++) {\n const alpha = alphaMap[my * mw + mx];\n if (alpha < ALPHA_NOISE_FLOOR) continue;\n\n const px = ox + mx;\n const py = oy + my;\n if (px < 0 || px >= width || py < 0 || py >= imageData.height) continue;\n\n const idx = (py * width + px) * 4;\n\n for (let c = 0; c < 3; c++) {\n // Forward alpha blend: result = original * (1 - alpha) + watermarkColor * alpha\n // Watermark color is white (255)\n data[idx + c] = Math.round(data[idx + c] * (1 - alpha) + 255 * alpha);\n }\n }\n }\n\n return imageData;\n}\n\n/**\n * Compute spatial correlation of a region to validate it contains a watermark.\n */\nexport function computeRegionSpatialCorrelation(imageData, position) {\n const { data, width } = imageData;\n const { x: ox, y: oy, width: mw, height: mh } = position;\n\n let sumDiff = 0;\n let count = 0;\n\n for (let my = 1; my < mh - 1; my++) {\n for (let mx = 1; mx < mw - 1; mx++) {\n const px = ox + mx;\n const py = oy + my;\n const idx = (py * width + px) * 4;\n const idxRight = (py * width + px + 1) * 4;\n const idxBelow = ((py + 1) * width + px) * 4;\n\n for (let c = 0; c < 3; c++) {\n sumDiff += Math.abs(data[idx + c] - data[idxRight + c]);\n sumDiff += Math.abs(data[idx + c] - data[idxBelow + c]);\n }\n count += 6;\n }\n }\n\n return count > 0 ? sumDiff / count : 0;\n}\n", "/**\n * Auto-generated by scripts/embed-alpha-maps.mjs \u2014 do not edit manually.\n * Sources: GeminiWatermarkTool v0.3.1 embedded_assets.hpp +\n * VeoWatermarkRemover v0.5.0-demo binary (legacy Veo text captures).\n */\n\n/** @typedef {{ width: number, height: number, source: string, dataBase64: string }} CalibratedAlphaEntry */\n\n/** @type {Record<string, CalibratedAlphaEntry>} */\nexport const CALIBRATED_ALPHA_ENTRIES = {\n 'gemini-v2-36': { width: 36, height: 36, source: 'GeminiWatermarkTool/bg_b_36', dataBase64: 'AgICAgICAgICAgICAgICAwI0OAICAwICAgICAgIDAgICAgICAgICAgICAgICAgMCAgIDAAtMTAsBAwIDAgIDAgICAgICAgICAgICAgICAgICAgICAgMDABxSURwAAwICAgICAgICAgICAgECAgICAgICAgICAgICAgICAjVSUjUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMBD0pSUUwWAAICAQECAgICAQECAgECAgICAgICAgMCAgICAgMBLVJPTlM1AgICAgMCAgIBAgICAgIBAgICAgICAwMDAgICAwERS1JOTlFNFgADAgICAgICAgIBAQECAgICAgICAgICAgIDAQI7VE5OTk5TNwECAQICAQICAQEBAgECAgICAgICAgICAgMDACRQUE1OTk1QUCYAAwMCAQICAgICAgEBAgICAgICAgICAgMAGk5QTU5OT09NUU4bAAICAgECAgIDAgICAgICAgICAgMDAwAUR1NPTk5OTk9OTVJHEwACAgICAgECAgICAgICAwMCAwMDABNGU05NTk5OTk5NTk5SRRMAAgIBAgICAgICAgICAgICAwIBG0dTTk5OTk5OTk5OTk5OU0caAQEDAgICAgICAgICAgIDAAIoTlJOTk5OTk5OTk5OTU9OTlJOJAIAAgMCAQICAgMCAgABFjhPUU5NTk5OTk9OTk5NTk9OTk5RUDsRAQECAwQCAgAAARU1TFNPTU5OTk5OTk5OTk5NTk5OTk5NUFRLLQ8CAAACAgscNExTUU5OTk1OTk1OTk1OTk5OTk1NTk5OTU1SUUo0GwoBN0xRUlFOTU5NTk5NTk5NTk5NTU5NTk5NTk5NTk9NTlFRUUwzNExSUlJPTU5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTlBSUUw3AQocNEpSUk5NTk5OTk5OTk5OTk1OTk5OTk5OTU5RUkw0HAoCAgAAAg8tS1RQTU5OTk5NTk5OTk5NTk5OTU5NUFNMNRYCAAACAgMDAgABETtQUU5OTk5OTk5OTk1OTk5OTk1RUDgVAQACAgICAgICAwMDAAMkTVNOTk5OTk1OTk1OTk5OTlFOJwIBAQICAgIBAgICAgIBAwEBG0hTTk1OTk5OTk5NTk5OU0gaAAICAgICAgICAwICAgICAgMDABRHU05OTk5OTk5OTk1TRhMAAgICAgICAgICAgICAgICAgICAgATSFJOTk5OT05OTVJHEwADAgECAwICAgIDAgICAgICAgIBAgMAGk5RTU5NTk5NUE4aAAMCAgIBAgMDAwMDAgICAgICAgICAgMDASdQT05OTk1QUSUAAwMDAgICAgICAgICAgICAgICAQEBAgIDAQI5Uk5OTk1TOwICAgICAgIDAgIDAgIDAgICAgICAgIBAgICAgAVTVJNTlJLEQACAgIBAgICAgICAgMCAgICAgICAgICAgICAgIBNVNOT1EtAQICAgICAgICAgICAgICAgICAgICAgICAgICAgMBFk1RUUoPAAMDAgICAgIDAgIDAgICAgICAgICAgICAgICAgICAjVSUjUCAwMCAgIDAwMDAgICAgIDAgICAgICAgICAgICAgICABxSUhwAAwMCAgMCAgICAgMCAgIDAgIDAgMCAgICAgICAgIDAQtMTAoBAgICAgICAQECAQEDAgICAgICAgICAgICAgICAgICAgI2MwEBAgICAgICAgICAgICAgIB' },\n 'gemini-v2-96': { width: 96, height: 96, source: 'GeminiWatermarkTool/bg_b_96', dataBase64: 'AgMCAgICAgMCAwICAgICAgIDAgICAgICAgMCAgMCAgICAwICAQICAgIEAwIBDis+QjIQAQICAgICAwICAwICAwMDAwICAgICAgQBAgMDAwMDAwICAgICAgIDAgICAgICAgIDAgIDAgIDAgICAgMCAgICAgICAwICAgECAgIDAgICAwICAQMBAgMDAgIEFTFFRzcXBQMEAwMDAgMCAgMCAwICAgMCAwIDAgIBAQIDAgMDAgEBAwQCAgICAgICAwICAgICAgICAwICAgECAgECAgICAgMCAgICAgICAgICAgICAgICAgICAgICAQMJHDlPUDweCQICAgICAwIDAwICAgICAgICAwICAwICAgEBAgICAQICAgIAAgMBAgIDAgICAwICAgICAwICAgICAgMCAgMCAQICAgICAgICAgMCAgICAwIDAgICAgIDAgIPKURZWUYqEAMDAgIDAgICAgMCAwICAgIDAgIBAgICAwEBAwIBAQICAgIBAgMCAQIDAgICAgICAgIDAgICAgICAgQCAwICAgICAwICAgICAwMDAgICAgICAgMCAgICAgIZNE1dXkwzGQMEAQMCAwIDAwMDAgMCAgICAwIDAgIDAgICAgICAgIDAwMCAgICAgICAwICAgICAgIDAgICAwIDAgMCAgIDAgICAwICAgMCAgQDAgIDAwIDAgMCAgICAgUeN01cXE02HgUCAgMCAwIBAQMCAgIDAQECAwIDAwICAgIDAgICAwICAgMCAgIDAgICAwICAgICAgICAgMCAgICAwMDAwMDAgICAQICAgMCAgMCAwICAgIDAgIDAwIBBA8oO0tZWUo8KA4FAQMCAwMDAgMDAgICAgMCAgICAgIBAgICAgICAgECAgMBAQICAQECAgICAgIDAgICAgICAgICAwICAwICAwMCAgICAwMDAgIDAgIDAgIDAgMCAwIBCBg1Q0xWVkxCNhgHAQMCAgIDAgICAwICAgICAwICAgMCAwICAgICAgICAgIBAQICAQECAgICAQICAgMCAwMCAwICAgICAwEDAwIDAgICAgMCAgICAwICAwMCAgICAgICBh49SE1VVU5HPh0HAQIBBAMCAgICAgIDAgICAgICAgMCAwICAgIDAwICAgICAgIEAgMCAgICAgICAgIDAgIDAwICAwMDAgICAwICAgICAgICAgIDAgICAgICAgMCAwICDSlIT09SUk1OSCkPAgIDAgICAgMCAgICAgICAwIDAgICAgIDAgICAgICAgMCAgIBAgICAwIDAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgMCAgIDAgICAgICAgIEGDRRU05QUE5SUTYaBQICAgEDAgICAgICAAECAgICAgICAgMDAgICAgABAgICAgICAAECAwECAQICAgICAgICAgICAwICAgICAgICAgIBAgICAgICAgICAgEDAQMCAgIJJD1VVU9PT05UUz8pEAICAgICAgICAgICAAECAgICAgICAgICAgICAgABAgICAwICAAECAwECAgICAgEEAQICAgECAgMCAgICAgICAwICAgICAgIDAgICAgICAgMCAgMYMEZWVk9OTk9UVUg5IwsDAgIBAgMCAgICAgICAwEBAgICAgEDAgICAgICAgMCAgICAQICAwICAgMCAwIDAgICAwIDAgQCAgIDAgICAwICAgICAgIDAgICAwICAgQCAwkkOEhVVE9OTk9SVEtCLxEDAwECAgMCAgIDAgICAwEBAgMCAgIDAgICAwICAgMCAgIEAgICAwICAgMCAgICAgIDAgICAwICAwIDAgMDAwICAgMCAgMCAgICAgICAwMDBRMyQktTUk5OTk9RUkxJPBgGAgMCAgICAgIDAgIDAwICAwMBAgICAQECAgICAgMBAQICAgICAgEBAgICAgICAgIDAwICAgMCAwMDAgICAwIDAgICAgMCAgIDAgMDAgMCDCREUE1QUE9OTk5PT09TSigQAgIDAgICAgMCAwMCAgICAwICAgICAAECAgIDAwIAAAICAgICAgABAgMCAgICAgMCAwICAgIDAgIEAwMDAwMDAgQCAgIEAgIDAwMCAwICEi9MVlBQUE5PTk9OTk9VTzQbBQIDAgICAgICAgIDAgEBAgMCAgICAgICAwICAgIBAQECAQECAgICAgICAgIDAgICAgICAwMCAgMCAwMCAwMCAgICAgIDAgICAgICAQMLJj5TV1FOT09OTk9OTlBXU0AuFAUCAgMCAgICAgICAwEBAwIDAgIDAgMCAgICAgMBAQEBAgEBAgMBAwICAgIDAgICAgECAgMCAgICAgIDAgICAgICAgICAgIBAwACAQgfOEhVVFBPT05OTk9OTlBUUkc8JAkBAgICAQICAQACAgICAgIAAQMCAgICAgABAgIBAgICAAECAgACAgICAgIDAgICAgEDAgIDAgICAgIDAgICAgIBAgICAgIBAgEBAg8wSExQUU5OTk9OTk5OTk9RUEtGLwwAAgICAQICAAECAgICAgIAAQICAgICAgABAgICAgICAQECAgECAgIDAgIDAgICAwICAgMCAwMCAgIDBAICAgICAgIDAgICAgICCSFFWFNOUE5OT05OTk5PTk5QT1BSQB0IAgMCAgEBAgECAgICAgICAgECAgICAgICAQIBAQICAQECAwIBAgMDAgIDAgMCAwMDAgQCAgIDAgICAwICAgMCAgICAgICAwIDFzFKWVNPTk1OT05PTk9OT05PTlFVSC8ZBAICAgECAgIDAwICAgMCAgECAgICAwICAQIBAQIDAQECAwECAgICAgMCAgIDAgICAgICAgICAgICAgICAgMCAgMCAgICAQUSLz9MVVFPTk5OTk5OTk9NTk5OTlBTTEEyFgYBAgMCAgMDAgICAQECAgICAgICAgECAgICAgICAQECAgEBAwICAgMCAgIDAgICAgIBAgMDAgIDAgIDAwICAgMCAgICBRQsREtOUU9OTk5OTk5OTk9NTU9PTk9RUE1HMBUDAwMDAwICAgICAQECAgICAgICAgICAgIBAgICAQECAgEBAgICAgMCAwICAwICAgMCAgIDAgICAgMCAwMCAwICAgICDSQ5TlFNTlBPTU1OTk5PTk9OT05OTk9PUFJPOyYMAQMDAAECAgECAgMBAQEBAgMCAwIDAgIDAwEDAQECAwICAgICAgIDAgICAgICAgMCAgICAgIBAwICAgIDAgIDAgQLIjhIVlRNTU5OTU1PT05OT05PT05PTk5OT1RVRzkiCwQCAQACAwEBAwIAAQECAgMCAwICAgQDAwIDAQECBAMDAgMCAgICAgICAgICAgICAgICAgICAgIDAgIBAgICAgsdNUdPVlNPTU5OTU5OTk5OT05OT05PTk9NT1JVT0c2HAsCAQICAgACAgIBAQICAgMCAgABAgICAgICAQICAgECAgMCAgICAwICAgICAgICAgICAgIDAwIEAgICAgICBBgtRU9OUVBPT05PTk5OTk5OTk5OT09PTk5OTlBRTk9ELBgEAgICAgIBAgMBAQMCAgIBAQABAgMDAgMCAAECAgABAgMDAgIDAgICAgICAgQDAgICAwMCBAMCAwICAgMJGDFCUlVQT09OTk9OTk5OTk1OTk9OTk5PTU1OTk5OUFZRQDAXBwICAwEAAQECAgIEAQEDAwMCAgMBAQECAQECAwIDAwICAgIEAgICBAMDAgMDAgIDAwMCAgMCAgQCAggZLUJLUlNQTk9OTk9PTk5OT05OTk9OTk5PTU1OT05OUFRRSkItGAcCAwEBAQICAgIDAQECAwMCAgMBAQIDAQECAwECAgICAgIDAgICAgICAgMCAgICAgIDAwMDAwEBAxktQVBPT1BOTk5NTU5OTU1OTk5PTk5OTk5OTU1OT01OTlBOT1BBLBgDAQABAwICAwEBAgACAgEBAgICAgICAAECAgECAgICAgICAgIDAwIDAwICAgMDAgICAgIDAgQLGTBCUVdTTk5OTk5NTU5OTk5OTk1OTk5OTk5NTU5OTk5OTk5OUldQQjAXCwMBAgICAgIBAAEDAgIBAgICAgICAQECAwECAgMCAgICAgMCAwICAgMCAgMEAgECAgICAg0cLUJMUFRRT05OTk5OTk5PTk5OTk5OTk9OTk5OTk5OT05OTk9OUVNQS0IsHgsCAgMCAgIBAgICAwICAgICAgIDAgMDAwICAgICAgIDAgICAgMDAgMCAgICAgMCAwEFDCI2RlFTT1BPTk5OTk9OTk5OTk5OT05OT09OTk5PTk5OTk5OTk5OTk9PUlJENyIMBQECAgIDAgICAQICAgQBAgECAgICAwICAgICAgICAQICAgEBAwICAwICAQIDAQYXJDhGT1VTT05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTU1NTU1NTk9NTk5QUlRPRzgkFQUBAQICAgICAgICAgIAAQICAAECAgICAgICAwICAgICAgEBAgIDAwMDAQIBBRYwO0hOTVBQTk5OTk5PTk5PTk5OTk5OT05OTk5OTk5OTU1NTU1NTk5OTk5OUFBOT0g5LRMDAQICAgECAgICAgIAAQICAAECAgICAwICAgIDAgIBAgICAgMCAgICAgIJGjRIUFZUUE5PTk5PTk5OTk9OTk5PTk5OT05OTk5OTk5PTk5OTk5PTk9OTk5OT05RVVRORDAXCQIDAAICAgEBAgQBAQIDAgICAwICAgMCAgIDAgICAwICAgMCAgIFCg4eMUJPUlVSUE5PTk5OT09PTk9PTk5PTk9OT05PTk9OTk5PTk5OT05PTk9OT05PTk9QVFVSTEAxIBAJAAICAwEBAwMCAQMDAgIDBAICAgMCAwICAQECAgECAgIBAQQWJC8/R0pPT09PT05OTU1OTk5OTk5NTU5OTk5PT01OTk5OTk5OTU1OT05PT05NTU5PTk5OT09PT0xLRjIgCwICAgIDAgMBAgMDAgMDAgEBAgICAgICAAECAgICBAMFDhstPEdSVVJPUE9NT05NTU1OTk5OTk5NTU9OTk5PTk1NT05PTk5PTU1OTk9PT09NTU5OT05PTU1OT1RYWEg6JRMLBAQCAwQBAQQCAgMDAwABAgMCAgICAwECAwICCxIYKDRAR0tQUVBPT09OTk5OTk5OT05OTk9PTk5PTk5OT05OTk9OTk5OTU1OTk5OTk5OT05PT05OTk5PT1JTU0xIPS4kFAoDAgIDAwECAgICAgICAwIBAgICAQEBAgYQIy88Sk5RUlBQT05OTk5OTk5OTk5OTk5OTk9OTk5OTk5OT05OTk9OTk5OTU1OTk5OTk9OTk5OTk5OT05OT09NTlBVUkxFMiMYCAUCAQAAAQIDAwICAgMAAQICBAYHDRgoOEFJU1RWU1FPTk5OTk5NTU5OTU5OTk1NTk5OTk5OTU1OTU5OTk5NTU5OTU5OTk1NTU1NTU5OTU1OTk5OTk5NTVFUV1NPQjcwIxcOBwYEAAECAgICAwIAAQIGDhkdKTQ+SEtMT05QT09OTk5OTk5NTU5OTk5OTk1NTk5OTk5OTU1NTU5OTk5NTU5PTk5OTk1NTU1NTU5OTU1OTk5NTk5NTU5PUE5OSkdFPDQpHRgOBAECAgICAgMIDxkfKDU8SFFTVVRST05OT09OT05PTk5OTk5PTk5OTk1NTk9OTk5OTU1OTk5OTk5NTU5PTk5OTk1NTU1NTU1OTk5OT05OTk9NTU9PTk9QUlRVVVJIPDUoHhkQCQMBDxceKjM3O0JHT1JUVVNRT05PTk9PT05OTk9OTk5PTk5OT01NTk9OTk5PTU1OT05OTk9NTU5PTk5OTk1NTU1NTU1OTk9OT05OTk9NTU5PT09QU1JUVVROR0M8NzQqHBMMMDY9RkxMSktNTk5PT1BNTU5PTk5PTk1NTk5OTk5OTU1OT05OTk5NTU5OTU5OTk1NTU1OTk5OTU1OTk5OTk9NTU5PTk9NTk1NTk5OT05PTU1PTk5OT05NTEtMTExEOTApQEdQWV1cWFVVUlBPTk9NTU5OT05OTk1NTk5OTk5OTU1OTk5OTk5NTU5OTk5OTk1NTU1OTk5OTU1OTk5OTk5NTU9PT05NTk1NT05PTk9OTU1OTk1NT1BRU1VYXFxZTkQ9PkZNWV1cWVdUU09PTk9PTk1PTk5OT05OTk9OTk5PTk5OT05OT01OTk5PTk5PTk5OTk9NTU5OTU1OT05OTU5OTk9PTU5OTk9OTk9OTk9PTk5OT01NT1FSVFZZXF1ZUEhAKjE5RE1OS0xNTk5PUFBOT05OTk5OT05OTk5OTk5PTk5OTk5OTk5OTk5NTk5OT05OT05NTU9PTU1OTk5OTU5PTk9OTU5OT05OT09OTk5PTk5PTU5OT09OTUxLTE1FPTYxDBMbKTQ2O0RHTlJUVVNSUU9OTk5OTk5OTk5OTk1OTU9OTk5OT05NTk9OTU5OTk5OTk9NTU5OTk5OTk1NTk5NTk5OTU5OTk5OTk1NTk5OTU1PUVJUVFNOR0I8NTMqHhYPAwQHDxkeKDU8SFBUVlVSUE9OTk5OTk5OTk5OTk5PTk5OTk5OTk9OTk9PTU1OTk5PTk5NTU5OTk5OTk1OTk5OTk5OTU1OT05OTk1NTU9OTk1PUlNVU1FIPjUoHRgQCAQCAgIAAQIGDxgdKTM8RklJT09RUE9OT05OTk5OTk5PTk5OTk5PTk9OT09OTU1OT09OTk1OTk5PTk5OTk9OTk9OTk5OTk5OT05OT05NT09RUE9OTEtIPzYoHBgOBgIBAgMCAgMBAQICBAYHEBciMThCT1RYVVFOT05OTk9OTk5OT05OT05OTk9OTk9PTU1OT05OTU5OTk5PTk5NT05OTk5OTk5PTk5OT05OTk9OT1NVVlZUSkI4KRsNBwcFAgMBAQICAgMCAgIBAAABAgQIGCMyREpUVFBOTk5OTk5OTk5PTk5OTk5PTk5NTU9OTk5OTk9OTk5OTk5OTU1OT05PTk9OTU1NTk5OTk1NTk5OT1BSUE1KOy4jDwgDAQACAQICAwICAgMDAgICAAEDAwICAwsSIi49R0xTU1FPT05OTk5OTk5OTk5OTk5NTU5OTk9OTk5OTk5OTk5OTU1OTk9OTk5NTU1NTk5OTk1OUFFSUUtIPzMoFxELAgMCAgICAQICAgICAwMBAgICAwMCBAECAgMFDBMnOUlYWVVQT09NTk5OTk5OT01NTk5OTk5PTk5OTk5OTk5OTk1NTk5PT01NT05OTk5PTU5OTU5QUFRVU0c8LBkQBgMDAgIBAQIDAQECAgIDAgIDAgIDAgICAgICAgMCAgILIDJGTExOT09QTk5OTk5OTk1NTk9OTk5OTU5OT05OT05OTk1OTk5PTk1PTk9OTk5OTk5OUE9PT0tIQC8kEwMCAgICAgMAAQICAQECAwICAgICAgICAgICAgICAgIDAgEBCA8hMj9LUVRTUU5OTk5OTk5PT05NTk5OTU1OTk1OTk5NTU5OTk5OTk1NTk5NTk5OTU1PUVRSTkEvHg4KBQICAgABAgICAgICAgICAgEBAgIBAgICAQMCAwICAwMCAgMCAgIJGC9DTVVVUU9OT05PT01PT05OTk5OTU1OTk5OTk5NTU5OTk5OTk1NT05OTk9OTU1PU1VPSDMYCAICAgICAgABAgICAgICAgMCAgEBAgICAgIDAgIDAwMCAgMCAgICAwMDBhIsOUdPT1BRTk5OTk5OTk9NTk5OTU1OT05OTk5OTk5PTU1OTk5OTU5OTk5OUFBOUEY7MBYFAQIDAgIBAQICAgMCAgMCAgICAwICAgMCAgICAwICBAIDAgMCAgIDAgICAwUUJDlIUFZVT05PT05OTk9NTU5PTU1OTk5OTk5OT05OTU5OT05OTU5OTk9QU1ZQSDckFQcBAgIDAgIBAgICAgMCAwIDAgICAwICAgICAgICAgECAwICAgIBAQIDAQICAwIFCyM2RlNUT09OTk1NTk5NTU5OTU1OT01NTU5OTk5OTU1OT05OTk5NTU9PUlJGNiELBAECAgICAQECAwIDAgIBAQEDAgICAgICAgICAwMDAAECAgICAgICAAIDAQECAgICAgseLkJLUFRRTk1NTk5NTU5OTU1OTk1NTk5OT05OTU1OTk9OTk5OUVNQS0ItHQkBAQECAgEBAAECAgMDAgIAAgICAgICAgEDAgMDAwICAgICAwIDAgICAgIDAgICAgICAgQLGTFDUldTT05OTk1OTk5PTk5OTk5OTU5OTk9PTk5OT05NTk9OU1dSQjAZCwQCAgMCAgICAgICAwICAgICAgIDAgICAgICAgIDAgIDAgIDAgICAgQCAgMCAgICAwECAgEBAxkuQlJQT1BPT09OTk5PTk5OT05OTU1OTk5PT05PT05NTlBPUFFCLBgEAgEDAgICAgIDAwICAgIDAgMCAgICAgMCAwICAwMCAgIDAgICAgIDAgICAwEDAwMCAgICAgIBAQgYLUNNU1NRT09NTk5OTU1PTk5OT09OTk5PTk5OTk1NUFNTSkMtGAgCAgICAgIAAQICAgICBAIBAwIBAAICAQECAgICAwMCAgICAgICAwICAgICAgIDAgICAgICAQIBAQMIGDFDU1VQTk9OT05OTU1OTk5OT09OTU5OTU5OTk5OUFVUQzEYCAMDAgMCAwIBAQICAwEDAwABAgIBAgMCAAECAwMCAgICAgICAwICAQICAwICAwMCAQICAgABAQECAgICAhgtRk9OUVBOT05OTk5OT05OTk5NTk5OTk9OTlBRT1BELBgCAgICAwMCAwICAgEBAgICAwIDAgICAgICAgMBAwICAgMCAgICAgICAgICAgICAgICAgICAgABAQECAgICAQkdN0dPVVRPTU5OTk1OT05OTk5OTk5OTk5NT1NWT0g1GwsCAgICAgICAgICAgEAAgIDAwICBAMCAgMDAwMDAwMDAgIDAgICAgICAgICAgECAgICAQICAgAAAQIBAQIBAQMLIjdGVVROTU5OTU5OTk1NTk5OTk5OTU1OTlNVSDgiCgQCAgIDAgIBAwMBAgMCAQEBAwIDAwMDAgMDAgMCAwMDAgICAgICAgICAgICAgICAgICAgICAgACAgIBAQICAAACCyM6UFJOTk9OTk5OTk1NTk5OTk5OTU5PT1FOOSQLAgICAgMDAgABAwMCAwICAAABAgIDAwMCAwMDAgIDAwICAgMCAgICAgICAwICAgMCAgIDAgICAgICAgMDAgICAgICBRUwSE9PUU9PTk9OTk5PTk5OTk5PTk9QUExELRUEAgIDAgIDAgMDAgMCAgIDAgIBAwECBAMBAgMDAgEEAwMCAgICAgIDAgICAwICAgMCAgICAgICAwICAgIDAgMEAgICAQYVNENMU1FOTk5OT05OTk5PTk5PT1FVTEAwEwYBAgIDAwIDBAICAgICAgIDAgMCAgEBAwQBAQICAQECAwICAgICAgICAgICAgICAgICAgICAAECAgABAgICAgICAgICAwEEGjFIVlFOTU1PTk5OTk5NTU5OTVNZSzAYBAICAgIDAAECAwICAgMBAQICAgICAwICAwICAgIDAAECAgIBAgICAgICAgICAgICAgICAgECAAECAgEBAgICAgMEAgICAgICCR5BU1BPTk1OT05PTk5NTU5OTlJYRiAIAwICAgICAAEDAwICAgMBAQICAwMDAwEDAgIDAgIDAQEDAgMDAgICAgIDAgICAgICAgICAgICAgICAwICAgEBAQIDAgIBAgICAQ8wR0tQUFBOT05PTk5NTU9RUExJMQ4DAgMCAQICAgECAwICAgIEAwIDAgMDAgICAgMDAgMDAgIDBAMCAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMBAAICAgIBAwIBAgwkO0hTVFBOT05OT09NTVFVVEc5IAgBAwMCAQEDAgICAgEBAwMCAgIDAwICAwICAgMCAwIDAgMDAwMDAgMCAgICAgICAwICAgMCAgICAQICAgEBAgICAgIDAQECAgABAQUTLD9TVlFOTk1NTk5OTlFXUjwlDAIBAgIBAQMDAwICAgEBAgICAwICAgEDAwIDAgIBAQIDAgMDAgMCAgICAgICAgICAwICAwMCAgMCAgICAgABAgICAgICAAECAgIBAQECGTNOVlBOTU1OT05PUE9USy0UBAMCAgIAAQIDAgICAwABAgICAgECAQEDAgMCAgMAAQICBAICAgECAgQCAwMCAwICAwIDAgMDAgIDAgIBAgICAgMCAgIDAgICAwICAgIBEChMU09PT09OTk9PT01QRCMMAwEBAgICAgIDAgICAgMCAgMCAgICAgIDAwEBAgICAgMDAgICAwEBAgICAgMDAwMDAgICAwMCAgICAgMDAwICAgICAgIDAgICAgICAgMCBhg8SUxRUk5OTk9RUkpDMhMFAgEBAQQCAgMCAgIDAwICAgMCAgIEAgIDAgECAgMDAwICAgMDAwEBAgICAgICAQICAgICAwICAgMCAgICAgICAgICAgICAgIDAgIDAgICAxEwQEtTUk5OT05SVUk5IwoDAgICAgMCAgMCAAECAwABAgIBAQMDAgECAwICAgICAgMDAgICAgECAgICAgICAQICAwIDAgICAgICAgICAgICAgICAgICAwICAgIDAgMDBAojOEhWVE9OTlBVVkcwGAMCAgIDAwMDAwICAQECAwECAwICAgMDAgECAgICAgMCAwIBAAEBAgEBAgICAgIDAgICAgICAgMCAwIDAgMCAwICAgICAgIDAgICAgICAgQCAwMPKT9UVU5PTk1VVD0lCAECAgMDAgQCAwICAwICAwIDAwMCAgIDAwMDAQICAgQCAgICAgMDBAICAgMDAgICAgICAwMCAgICAgIDAgICAwICAgMCAgIDAgMCAwMCAgMCAgIGGjVRU05RT05TUTUYAwICAwICAwMCAwIEAgMDAwMDAgQDAwIDAwICAgIDAwMDAgIEAgMDAwMDAgICAgICAgIDAgECAgMDAQICAgICAgICAgMCAwICAwICAwICAgICAgICDipIT01SUk5OSCoOAwMDAgIDAwIDAgICAgIDAwMDAwMCAgIDBAIDBAECAwIBAQICAgICBAICAgICAgICAQMCAgICAgICAgMCAgICAgICAgICAgICAgICAgIDAgICAgIBBx08R0xVVU5HPh4IAQMDAgMCAgMBAwMCAgICAwIDAgIDAwMCAgMCAgECAgIBAQICAgMCAgICAgMCAgICAgICAwICAgICAgMDAgECAgICAgMCAgIDAgICAwICAgICAgICBxg1Q0xWVUxDNRgHAgMDAwMCAwICAwICAgMCAwICAwMDAgMDAwICAwIDAwMDAwEDAQIDAgMDAgICAgMDAgMCAgICAgIDAgMCAgICAwICAgICAgIDAgICAgIDAgICAgIBBA4oPUxZWUw7KQ4EAQICAgIDAgQDAwIDAwIEAgICAwICAwIDAgICAgMCAwQCAgEBAQICAwIDAgMBAgICAgMDAgMDAgICAgICAgICAgICAgIBAgICAQICAgICAgICAgIBAgYeNkxdXU01HgUCAQICAgEDAgICAwIDAQEDAgEBAgIAAQICAgIDAwEBAwMDAwIDAAEDAgICAgIBAQMEAgMCAgIDAgMCAgMCAgMCAgICAgIBAgICAgICAgICAgICAgMCAgMaM0tdXk0zGAICAgICAQABAgMCAwMDAgECAgEBAgIAAQICAgICAgABAgICAwIDAAICAgICAgMCAgMDAwMCAwIDAgMCAwECAgEDBAICAgICAgIDAgICAwICAgMCAgICAwMQK0VZWUQpDwIDAgICAwICAgMCAgMCAgICAgICAgICAgEDAgICAgEBAgMCAgMCAgICAwICAwMCAgIDAgIDAwICAwIDAgMDAgMCBAICAgMCAgIDAgICAwICAgMCAgIDAgMIHzxPTjocCAICAgICAgICAgMCAQMDAgICAgICAgICAgIDAgICAgAAAgICAgIDAgICAwICAQICAgMCAgICAgICAgICAgIDAgICAgMCAgICAgICAgICAgIDAgMCAgIDAgIEFTZHRTETBAECAQECAgICAwICAgICAgICAgEBAgMAAQIDAgICAgICAgIBAQIDAgICAgEBAgICAgICAgMCAgICAgICAgICAQMCAwICAgICAgICAQIDAgICAgICAgICAgMBDzBAPioNAgICAAEDAgICAgMCAgICAgICAgEBAwIBAQIBAgICAgICAgMBAQICAgICAgAB' },\n 'gemini-48': { width: 48, height: 48, source: 'GeminiWatermarkTool/bg_48', dataBase64: 'AgEBAAAAAAEAAAAAAQEAAAEBAQAAAQBxcAEBAQEBAgEBAgEBAgMBAQEBAgEDAgEBAAAAAAAAAQEAAAAAAAEBAQAAAAEAASGAgCAAAgABAQEBAQECAgIBAQEBAQICAwEBAQAAAAAAAAEAAQICAQAAAgEAAAEAAUiAgEgAAQABAQECAgACAwMBAQICAgMBAQEBAQIAAAEAAAEAAQEBAQEBAQECAQEAAXCAgHgAAQEBAgECAwEBAgIBAQICAgEBAQICAAAAAAAAAAEAAAEBAAABAAAAAAEAIICAgIAgAAABAgACAgEBAQADAwICAQEBAQEBAAIAAAEAAQEBAQAAAQAAAAABAAABUICAgIBgAAABAAECAgABAQECAwMDAQEAAAEBAQAAAAEAAwEBAQAAAQEBAgIAAAIRgICAgICAEAABAAAAAQICAQEBAQEBAQEBAQEBAAAAAAIAAQIBAQAAAQMBAQEAAQFQgICAgICAUQECAAEBAQMCAQECAgEBAQEBAQEBAgAAAQIBAgEBAgIBAQECAQICARGAgICBgICAgCACAQIAAQIBAwICAwMDAgIBAQICAQAAAQEBAAIBAAEBAAEAAQABAXCAgICAgICAgGABAQEBAQEBAQEDAwMCAwIBAQICAgEAAAECAAEBAAAAAgEBAgABQICAgICAgICAgIA4AAACAgMBAgIBAgICAQECAgEBAAABAAABAQMAAQIAAgACAQAQgICAgICAgICAgIB4GAECAwICAgIAAQEBAQICAgEBAQABAQAAAAEAAQEBAAMCARBwgICAgICAgICAgICAcAgBAQABAQECAgEBAgICAgECAQABAAABAAEAAQABAQEBAWmAgICAgICAgICAgICAgGACAQEBAQECAgEBAgICAgECAQEBAAABAAAAAAEAAgEBUYCAgICAgICAgICAgICAgIBQAQABAQEDAQEBAQICAgEBAAAAAQEAAAEAAQAAAQFQgICAgICAgICAgICAgICAgICAUAABAQEDAQEBAQECAgEBAAIAAQEAAAEAAAABCGCAgICAgYCAgICAgICAgICAgICAgGgQAgIBAQEBAwQDAgABAQABAQABAQEBAAAYcICAgICAgYCAgICAgICAgICAgICAgIBwEQQCAQEBAgECAgEBAQAAAQEAAAEAADh4gICAgICAgICAgICAgICAgICAgICAgICAgEIBAQIDAgMDAQEAAgEAAQAAAgEgYICAgICAgICAgICAgICAgICAgICAgICAgICAgIBwEAIDAgICAgEBAAEAAAAAEFGAgICAgICAgICAgICAgICAgICAgICAgYCAgICAgICAgFAQAgECAgEBAAEAASFggICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAUCABAgEBACBIeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBwSCAEcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBxcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBwASBIcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIB4SCABAQMAASBQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAYCACAgEBAAEBAAACEFGAgICAgYCAgICAgICAgICAgIGAgICAgICAgICAgICAgFERAQECAgEBAQIBAQAAAQIQcICAgICAgICAgICAgICAgICAgICAgICAgICAgIBgIAEBAQEBAQEBAQEBAQAAAAEAAUCAgICAgICAgICAgICAgICAgICAgICAgICAeTkBAQEBAQEBAQEBAQEAAQABAAAAAgAQcYCAgICAgICBgICAgICAgICAgICAgIBwGAEBAQICAQECAgEBAQEAAQABAAEAAAAAEGiAgICAgICAgICAgICAgICAgICAgGAIAQEBAQICAQECAgEBAQEBAQIBAQEAAAAAAQFQgICAgICAgYCAgICAgIGBgICAUAMDAgECAgEBAwMCAgEAAQEAAQEBAQAAAAABAQIBUICAgYCAgYCAgICAgIGBgIBQAQQEAgICAgEBAwMBAgEBAQECAgECAwMCAgICAQEBAWGAgICAgICAgICAgICAgGgCAgMDAQABAgICAwMBAQMDAQECAgEBBAMCAwIDAQEBAQpxgICAgICAgYCAgICAcBACAwMDAQEBAgICBAMAAQMDAgICAQICAAACAwIDAgIAAQIZeICAgICAgICAgICAEAACAgAAAQECAwIBAAABAQEBAgICAgMCAQECAgICAgIBAQICOICAgICAgICAgIBAAQEDAgEAAQEDAwECAQAAAAEBAgEBAQEBAQEBAQEBAAECAgICAGCAgICAgICAgHABAQECAgACAQECAQEAAQAAAQEBAgIBAQEBAQEBAQEBAQECAgMCASCAgICAgICAgBABAQACAgECAQEBAQECAQEBAQEBAQEBAQEBAQECAgAAAQACAgIBAQBQgICAgICAUAEBAQECAwABAQEBAQEBAgIBAQEBAQEBAQEBAQECAgABAQICAgEBAAEQgICAgICAEAEBAQECAgIBAQEBAQEBAgIBAQEBAgICAgICAQEBAgEBAQICAQEBAQEAYYGBgIBQAQICAgEBAQEBAgIBAQEBAQECAgEBAgICAgICAQEBAQEAAgIBAAEBAgMBIIGAgIAgAQICAAEBAQEBAgIBAQEBAQECAgEBAgICAgEBAgEBAQEBAgICAgAAAgIBAXmAgHABAQIDAQECAgAAAQEBAQEBAQECAgEBAgICAgEAAgIBAQEBAgICAgEBAgIBAUmAgEkBAQICAQEBAgEBAQEBAQEBAQECAgEBAQEBAQICAQECAQIBAAEDAwEAAQECAiCAgCEBAQICAgIAAQABAgIBAQICAQECAgEBAQEBAQICAQEBAAEBAQEBAgEBAQADAgFwcAEBAQICAgIBAAEAAgIBAQICAQECAgEB' },\n 'gemini-96': { width: 96, height: 96, source: 'GeminiWatermarkTool/bg_96', dataBase64: 'BAMEAwMDAwQAAwMEAwIFAgICAAIBAQEBAwIDBAIDAwMDAwMCAwIAAQEBAQECAjl5cTsBAwACAQIEBAIEAwMEAwMDAgQEBAIDAQMCAgECAwMCAwMEAwMEBAMDAwMEBQQEAwQCAwEDAwQCAgMDAQIEAwICAQEAAQAAAgIDAwEDAwIDBQMDAQAAAAEAAAACEICAgYEJAgABAgICAwMCAgIDBAMDAQECAgIBAgACAAEBBAQDAwMDAgMEAwMDBgUEBQQFAQACAQIEAwIAAQEDAQEBAQICAQABAQABAQEAAQICAgMDBAMDAAEAAQAAAQICKYCAgYAxAAABAgEAAAEBAgUEAwQEAgABAgIDBAQCAwUDAgIEBAMDAwQEBAMCBAMEBAMDAAEBAgIFAgMAAQICAAAAAgIBAAEAAQEAAQIBAQABBAMCBAECAAEAAAABAgIDUoCAgYFQAQEBAQEAAAECBAQDAgMEBAICAwIDBAQEBAMEAgMEBQQCAQMDBQQDBAMFBAMDAAABAwUEBAMBAgEBAAADAQMDAAIBAQACAAEAAAACBAMCAgMCAgEEAwABAAEDcoCAgIB5AgMBAgMBAgMDBAQEAwQEAwIBAQMEBQQEBAQEBAMDAwEAAwIDBAMDAgUEBQQDAQADAwMEBAQDAgQEAAEBAQIDAgEAAgIBAQEBAAECBAQEBAEEBQIEAAIEAgIhgYCAgICAIgICAgMDAgECAwQDAwMEAwICAQMDAwQEBAUDAgMEBAIBAwQDAwMDBAQDBAMDAQIBAQQEAwMEAwABAAICAQEDAQECAwMDAwIAAQIDAgICAwIBBAIBAgECAgJSgYCAgIGASQICAgIEAwIBAgIDAwUDBAICAwIDAwMDBAMCAgMDAwIDAgMGBQQEAwMDBAMDAQMCAgMDAgQEAgIBAgMEAQEAAgMDAwECAwACAgICAQEDAQEBAAEBAQECAgFxgYCAgYCAeQICAgIEAwMEAwIDAgMDAQICAgIBAwQDAwQCAQMDAgMEAwQDBQUEBAQDBAMDAwICAgECBAMBAwIDAgIEAQECAwQBAgICAgACAgIDAgMEAwIBAQECAQQDAyqAgYCAgYGAgCEDAgEDAwIDAwMDAwIDAgEBAQEDAwIEAgEAAQEEAwMEAwIEBQQCAgQEBQQEAQMBAQABAwIBAwECAgMCAgECAwQCAwABAAICAgICAgIDAwEBAAEBAQIDA1mBgICAgYGAgGECAAEDBAQDAwMCAgMCAQEAAgIDAgMCBAABAgIDBAQEBAQFBAIEAwMDBgQEAwIEAwEBAQEDAwICAQEBAgMDAgQBAQEBAQMCBAICAQQDAwEBAAEAAQIEEYCAgICAgIGAgIARAQICAgMBAgICAQEBAQMBAQECAgECAgIEBAMDAwMCBAQDAgMDAwQCAwIDAwIDAwEBAQECAwECAgEBAgMDAgIBAwEAAgQDAwICAwMCAwECAQEBAQIDUICAgICBgIGAgIBCAgIBAAIEAwQCAgICAQIBAQMCAgMAAgEEBAQDAwICAwQBAwEDAgMDAwQFAQEBAgABAgICAAABAgMAAgECAQADAwMAAAEDAgMDAwIAAQIBAgAAAgARgYGAgICAgIGAgIB5CAEBAgICAgICAQADAgECAQQDAwIBAgEEAwICAgMDAgQEBAMEBAYDAwMDAQIAAgEAAgMCAQACAwMCAgICAQICAwAAAQIDAgMCAwMCAQEBAAIBAgNBgIGAgICAgYGBgICAQQICAgEEBAQCAQECAwEBAgQDBAMCAQEBAgIDAwMDAgMDAwIEBAUEAwMDAgEBAQMEAQEBAgECAwQCAQICAgEDBAAAAQIDAwMEAwMAAQABAAAEBBJxgYGAgICBgYGCgYGAeQkCBQQEAwIEBAIDAgQBAwQEBAICAgIDAwMEBAMDBAQFBAUGBAIEBAMDAgMCAgMFAwECAQEAAgECAQMDAgIDAgIBAgIDAQIEBAMCAQECAgIDBFKBgYGAgIGBgYKAgYGBgUIDAQMEAgMGAwIBAQIDBAMEBAICAQMDAwQDBAMEBQYDBAIFAwQDBQMDAwMCAwMDBQMCAgABAgEEBAMDAgMBAgEDAwIDAgEDBAUCAwIDAQIDEoGBgYGBgYCAgICAgYGBgHkRAwMCAwMDBAMCAQQCAwMDAgIBAgIDBAIBAwMDAwMDBAMDAwMCAwMBAgMDAwUEAwQCAgEBAgEEBAQEAAIDAwIDAQIBAQIDAQACBAQDAwMCUoGAgYCAgYGAgICBgYCBgIBZBAICAgMDAgICAQMEAQADAQECAwMEBAMCAwIDBAMEBQMDAwIDBAMEAgMEAwICAwMEAgEBAAIDBQQDAQMBAQIDBAIEBAMCBAQDBAUEBAMpgIGAgICAgIOBgICAgYGBgICBIgEBAgQCAQICAAICAgICAwIDAwMDBAMDAwQEAwICAgQDAgMCAwQCAgQEAgQDAgMFBQQCAQADBAQDAQICAQIDAgIBBAICAAIDAwIDAwNxgYCBgICAgIGAgICBgoCBgICBcQkDAwMCAgEBAQIDAwICAwIDAwIDAwMDAwMDBAICAwIDBQMDAwICAwQDAgEDAQICAgMBAgICAwMCAgMAAgMEAwMEAwICAQEBAQEDBEKAgYCAgICAgICAgIGBgYCBgYGBgEkCAwMCBAEBAQEDAwIDAgMCAwMDAQQEBAIEBQQCAwECAgICBQICBAQCAwIDAQIBAgICAgICAgMBAgEBAgMDAgQDAgICAQECAAMEG4GBgYGAgICAgICBgYGBgYGAgICCgYAhAwMEBAIBAwMDBAMEBAMCBAMDAwMFBAMDAwMDAgICAgQEBAQCAwMBAQEBAQECAgEAAAAFBAICAgEDAwMCBAMBAQIDBQMAAQIRcoGAgYGBgICAgICBgYGCgYGAgYGBgYBxCwQFBQMCAAIDAwMDBAQDAwMEAwMDBQIDAgMDBAMDAwQCAwIBAwMAAAABAAAAAQAAAAEDBAIBAgICAwIDBAMDAgIDAgMCAgJRgICAgYGAgIGAgIGBgIGAgIGAgIGBgYGBWQMDBAMDAgIDBAIEAwUEAwQFBQMCBAMDAgMCAgQEAwIBAgMCAwMAAAABAwMBAgEBAAABAgACAwICAQIDAwMBAgICAwEEA0KBgICAgYGBgIGCgYGBgYCBgICBgICBgYGBgDkCAQQEAQMEAgMBBAQEAwMDAwMDAwMFAgMDAgMDAwQCAwIAAgEBAAABAgIDAQAAAQEAAQEAAwMCAgIDBAQBAQEBAQECI4GAgICAgIGBgYKBgYGBgICAgYCAgICAgYKBgIAgAQQEAgIEAQIFAwQEAQQEBAQCBQQDBAUDBAQEAwMBAwECAQIBAQICAgMEAwEAAQECAQIDAQEBAQECAwIDAgEAAwIReYGAgICAgIGBgICBgYGBgIGAgIGBgICBgIGAgIB4EgIEAgICAgECBAQCAgQEAwMDAwMDAgIDAQMDAgQDAwUDAgIAAQICAwMCAgECAgEBAQIDAgIBAgEDAwMAAQEBARBwgICAgICAgICBgICBgYGAgYGAgYGBgICAgYCBgICAcREDAQEEAwICAQMBAgMEBQMDBAIEAwMDBAMCAwMDAwQCAwIBAQIEAgMCBAICAQEBAgQDAwIAAQMBAwEAAQIDEnGAgICAgICAgIGBgYCBgYGBgYCAgIGAgICAgYCBgICAgXEQAQEFAwICAgMCAgMFBAMDAwMEAwICAwQFAwMDAwICAwICAgMFAwMDAwEBAQICAgICAwMAAgICAQIBAgILcYGAgYCAgICAgIGBgYGBgYCCgICBgICBgIGAgYCAgICBgYFpCAMCBAEAAQMCAgIEAwMDAgMDAwICAwQEAwMDAwICAwEBAgMCBAMCAQMAAQICAgMDAwICAQACAQECAhNqgICAgYCAgIGBgYGBgYCAgYGAgYGAgYGBgICBgoCAgICBgoGBcRQEBgICAQIDBAMBBAQCAgIDAwQDBAQFBQMDBAECAwMCAQMDAgEBAwICAgMCAQMDAQMBAwIDAgIBEnKBgYCAgYCAgYCBgYGBgYCBgYCBgIGBgYKCgIGBgYCAgICAgYKAgHERAgAAAwIDAwMDAwMCAgICAwQEBAMEBAQDAwIDBAMAAgMDAQEBAwIBAgQDAgEBAQIDBAICAgIScoGBgoCAgYCBgYGBgYGBgICBgYGBgYGBgYGBgYGAgYCAgICBgYGAgIBxEAEBAQIDBQMDAwUCAgMCAwQCAwQEAwQEBAICBAQBAAMDAQEBBAMCAwMEAwEBAAICBQMBASJ5gIGBgoCAgICAgICAgICAgICAgICBgICAgYGBgIGAgICAgICAgYGBgYCAeCEBAQECAwMDAwMBAgIDBAQCAwMEAwMDAgIDBgUAAgMDAQECAgICAwMDAwEBAQIEAwMBOYGBgICAgICAgICAgICAgICAgICAgICAgYCAgICAgIGBgYCAgIGAgICBgYCAgIBAAgIDAwEEAwICBAQEBAQEBAQEAwMCAwYFBAMAAQQEAgIBBAIBAwMCAwIBAQICAwhYgICAgICAgICBgICAgICAgICAgIGAgICAgICAgIGAgYGCgYCAgIGBgICAgICBgICAURIDAwMDBAQEBAQEBAQDAwQFAwMDBAQFAgMBAQECAgMBAQMCAgMDAwMCAAIDInCAgIGAgICAgICBgYCAgICAgICAgICAgICBgIGAgYGBgIGBgYCAgICAgYCAgIGAgICAgHEaAwEEAgIEAwMDAgIDAwQEAwMDBAICAQIBAQACAwMBAgQFBAMDBAICAghJgICAgICAgICAgICAgYCAgICBgIGBgICAgYGCgICAgYGBgICAgYGBgIGBgICAgICBgYCAgICAQgMCAQIEAwMDAgIEAwQDAwMDAwIBBAUDAQADAgMCAwMEAwQDBAQDInGAgICAgYGAgIGBgIGBgICBgIGBgIGBgICAgIGBgYGAgICAgICAgYGBgYGBgYCAgICBgICAgICAgHIqAgMDAwMDAwMEAwQDAwQCAgICAwQCAgECAQMDAwMFAgIEAxFZgIGBgICAgYGAgYCBgICAgYCBgYGBgYGBgICAgoGCgoGAgICBgICBgYGBgIGAgYGAgICAgYCBgYGAgIGBUhEDAwQDBAQDAwQDAwMCAwIDBgQDBAECAgMCAwMDAwMIQXmBgICAgICAgYGAgYCAgYCBgICBgYGAgICAgICAgYGBgICAgICAgICBgYGAgICAgIGAgICBgYCAgYGBgIKBgYFSEgIFBAMEAwMDAwMDAwQEAwQDBAICBAMCAwICCUJ5gIGAgICAgICAgYGAgIGAgICBgICBgYCAgICAgICBgICBgYCAgICAgICBgYGAgICAgIGBgICAgICAgYGAgIGCgYGBcUITBAUDAwMDBAMDAwQFAwMBAAIDAgIBAhBCeYCAgICAgICAgICAgIGAgIGAgICAgICAgYGAgICAgICAgYCBgYGBgYCAgICAgYGBgICAgICAgICAgICAgIGAgIGBgYGBgYCBURECBAIEAgICAgIDAgIBAwMEAgIhYYCAgIGBgICAgICAgIGBgYGAgICBgICAgICAgYGAgICAgICAgICBgYOAgoGAgYGBgYGAgICAgICAgICAgICAgICBgYCAgYGBgYGBgYFYKQMDAQQCAwMDAgMCAgEgSHmAgICAgYCBgICAgICAgICBgICAgICAgIGAgICAgYGBgYCBgICBgYGBgYGBgYGAgYGBgICAgICAgICBgICAgICBgYGAgYCBgYGAgYGAgICAgnFRJAQEAwMEAwoxUXmAgICAgICAgIGBgIGBgYGAgIKBgYGAgYCAgIGBgYCAgYGBgoKBgICBgoKBgICAgICBgYGBgICAgICAgIGBgICAgICBgYCAgIGBgIGBgYGBgICBgYGCgXJSKxICOoGBgYCBgYGBgYCBgoGBgYCBgYGBgYGCgYGAgICBgYGBgYCAgYCAgYGBgIGAgIGBgICAgICAgIGAgICBgYGAgIGAgICAgICBgYCAgICBgYGBgICAgIGBgYGBgYGAgYA6cYGBgYKBgYGBgYGBgYKBgYCBgoCBgYGBgYGBgYCAgYGCgICAgYGBgIGBgIGBgYGAgICBgICAgIGBgICAgICAgIGBgICAgIGCgYGAgICBgYGBgYGAgYCAgYGAgYGAgIF5eYGBgYGBgICAgYCAgICAgICAgICBgYCAgYCAgICBgYGAgICAgYGAgIGAgICBgYGBgYGAgYGBgICBgYCAgICAgIGAgIGAgYGAgYGBgICAgICBgYGBgYGAgIGBgIGBgYFyOoCAgICAgICAgYCBgIGAgICAgICBgYCAgICAgICBgYCAgICAgoGBgYCAgICAgYCAgYGBgYGAgICAgYGAgICAgICAgICBgoGAgICBgYCAgICBgYGBgYCAgYGAgYGBgYE7AxUoUnGAgICAgIGAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgIGBgICAgICAgYCBgYCAgICAgICBgYGAgIGAgICAgIGBgYGBgYCAgYGBgYGAgICBgYCBgXpRMQkCAwQDAwIhUHGAgICAgICBgICBgICAgICAgICAgICAgICAgIGAgYGAgIGBgICAgICAgIGAgYCAgICAgYGBgYCAgIGAgICBgYGBgYGBgYCAgYGBgIGAgIGBgXlKIgQDAgECAwQCAQIBAgIpWoCAgYCBgICAgICAgYCAgIGBgICAgYCBgIGBgYGBgYCCgICAgYCAgICAgIGAgICAgYGBgYGBgYGBgICAgIGBgYGBgYGBgYGBgYCAgYFhIgQFAwMBAgIBBAQDAwICAgIEAxBRgICAgoKAgIGBgYCBgICBgIGAgIGBgIKBgYGBgoKBgICAgYCAgYCAgIGBgICAgIGBgYGBgYGAgICAgIGBgYGBgIGBgYGAgYB5QhMDAwYGAwMCBAICBAMDAwUEBAMEBAICEkJxgYGBgIGCgYCAgYGBgYGBgYGBgICBgIGBgoGBgYCAgICAgIGBgIGAgICAgYCBgYGBgYGBgICAgYGBgYGAgYGBgYGBeUEJAgICBAQFAwIEAwECBAIDBAUEAgMFBQIDAgQQUYGAgIGCgoGBgYKBgYGBgYGBgICBgICBgYGBgYCAgICAgYGBgYGAgICBgYCBgYGAgYGBgICBgYCBgYGAgYGBgXpCCgQCAgICAgQFBAMEAwICAwMDBAMCBAQDBQQCAgIAAhFTgIGCgYCBgICBgIKBgYGBgYCAgYCAgICAgYGAgICAgYGBgYGBgYGBgICAgICAgICAgIGBgYGBgYGBgYGBWRIEAwMCBAQEAwQEBAMDAgMEAwMCAwICAwQDBAEBAQIAAQMDKHCAgYCAgYCAgIGCgYGCgYCAgYCAgICAgYCAgICAgIGBgYCAgIGBgYCAgIGAgICAgICBgYGBgIGBgXIiBAMDAwQDAwIDAwQEAwMBAgMDAwIDAgMDAwQDBAUEAwIBAgICAAJBgICAgYGAgICAgIGBgYGAgICAgICBgICAgYCAgYGAgIGAgIGCgYCAgICAgYCAgICBgYGBgYGBSgsDAwMDAwMDAwMDAwUDAQMBAgECBAQDBAMEAwMDAwMEAwQAAgACAQEAGHGBgYGAgICAgIGBgYCBgYGAgYCBgICBgYCBgoGAgICAgICBgYCAgICBgYCAgICBgYGBgXEiAwMDAwMDAwMDAwMDBAUEAwMBAQEBAwMEAwMDAwMDBAICAwIAAQMCAAADARFRgYCAgIGBgIGBgYGAgICAgYCBgICAgYCCgYGAgICAgYCBgYCAgICBgYCAgICBgYGBWQoDAwMDAwMDAwMDAwMDAwUEAwMCAwICAwQEBAMDBAMDAwMEAwMBAQEBAgEEAgEEQoGBgYGCgYGBgYGAgICAgYKBgYCAgYGBgYGAgICBgYGAgYGBgIGBgYCAgICBgYE5AwMDAwQDAwMDAwIDAwMDAwQFAwIBAgECAwMDAgMDBQQDBAQDAgMCAgQDAgMBAwECAiJ5gYCBgYKBgICAgICAgYGBgIGAgYCAgIGBgYCBgYGAgICAgYCAgICBgICAeCIDAgMDAwQDBAMDAwIDAwMDAwUEBAMDAwMDAwQCAwMDBAQDBQQEBAQDAwMDAgIBAwIDBAMTcYCBgYCBgIGBgICAgYGBgYCBgYCAgIGBgYCAgYGAgICAgICAgYGBgIBxEQMDAwMDAwMDAwMDBQMEAwMDAwQEBQMDAwQDBAQDAwMDAwMEBAMEAwMDAQMDAwQDAwMDBAQEEnGBgICBgYGBgIGAgYGAgYGAgYGBgYGBgYCBgIGAgIGBgICBgYGBgHESAgIDAgIDAwMEBQMEBQQEBQMDAwQEAwIEAgIBBAQCAwMEAwQFBQMEAwIDAgEEBAQEAwQEAgMDAxJxgYGBgYGBgoCAgIGBgYKBgYKBgoKBgYCBgICAgYGBgICBgYGBaRIDAwMEAwMDAwMEBAMEBAQEBAMDAgQEAgICAgICBAQDAwMEAwQEBQMEAwECAgMEBAMDAwMDBAMEBAIKaYGBgYGBgYGAgICBgYKBgYGBgYGBgICAgICBgYGBgICBgIFxCwQBAwMCAgMAAgQDAwMDAwQEAwIDAwQFAgMCAgICBAQEAwMDAwMDBAMEAgQCAgMDAwMDAwMEAwECAwMDE3KBgYGBgYGAgIGBgYGBgYGBgIGAgICBgIGCgoCAgIGBgHESBAIDBAMEAwMDAwIDBAMCBAQDAwMDBAQEAwIDAgICAwQDAwIDAgMDAwICAgICAQMDAwMCAgMDAwQBAwMDAxJxgoGBgYGAgIGBgYCAgICBgICAgIGAgYGCgYGBgICCcRICAgQDBAMDAwQCAwIFBAMEAwIDAwMDAwQEAwMEAwICAwQEBAMDAwMCBAIBAQECAgIDAgMDAwMDBQQDAwMDBAMReYGBgYGCgYGBgYCAgICBgYCAgICAgYGBgYKBgYF6EgQDAwMCAwIEAwQDBAMEAgMCAwMDBAUFBQMEAwQDAwICAwQDBAIEAwICAgMCAgIBAQIDAwMDBAQFAwMDAwMDAgMBIYGAgICBgYCBgICAgICAgYGAgICBgYGCgYGBgIEjBQUDAwMDAQQCAwUCAwQEAwMDAwMDAwMCAwMDBAMDAwICAwMDAwMDAwICAgMBAgECAgIDAgMDAwQFBQMEBAQCAwICAjmAgICBgICBgYCAgIGAgYGBgYGAgYGBgYGBgUEEBQQDAwMDBAICBAMDAwMEAwMDBAMDAwMCAwMDBAMDBAICAgUEAwMDAwYCAwIDAgICAgMCAwMFBQUEBAIDAwMCAAICAQNZgICAgICAgYGAgYCAgIGBgoGBgYGAgICAUAECAQQDAwMCAQICBAMDAwICBAMDBAMCBAICBAQEAwIDAwEFAwMDAwMEAwMDBAICAgMAAwMCBAQFBQUEAwQEAwMEAgMBAgMIcICAgICBgoGBgYCAgYGBgYGBgICAgIBxEgIBAwMEBQMBAwQDAgQDAwMDAwMDAgMEAwQCAwMEAwEDAgIDAQIBBAMEAgMDAwMBAwMCAwMDBAMEBAIDBAQDAwMCBAQDAwMCIICAgIGBgIGBgYCAgYGAgYGAgYCAgYEaBAQDBAQDAwQDAwMDAgQFBAIDAgMDAwMDAwQCBAMCAgMCAwQCAQECAQIDAwQDAwICAgICAgQDAwMCAgQEAwMDAwMCAwMDAwMDAkmAgIGCgIGBgYCAgYGBgYCAgICAgUICBAQDAgMEAwQEBAQEAgQBBAQDAwMDAwMDAwQEAgIDAwIDAgECAgMBAwIDAwMCAwIEAgMCAgQCAwMEBAMCBQIBAwMDAgMDAwMEAQlxgIKBgYKBgYCBgYGBgYGAgICBcgQDBQQDAwMFBAIDBQMDAwMCAwMDAgQEAwMDAwMCAgIDAwQFAwMEAgQCBQIDAwMCAwMEAwQDAgQDAwMEBAQDBAQCAgIEAwMDAwQDAgIigYGCgYKBgoCBgYGBgYGBgIGBKgICAgIEBAIEAQMCAwICBAIBAgIEAwMDAwMDAgMCAwICAgMEAwQBAwUDAwMDAwMEBAEDAgEDBAUEBAMDBAMDAwIDAwMEAgIDAwACAQIBWYCAgICBgoCBgYGBgYGBgIFSBAMDAwUEBAMDBAMDBAMDAgMDAwMDAwQEBAICAgEDBAMDBAQDAgICAwUDAwICAwQEBAICAQIEAwQFBAIDBAMEAwIDBQQEAgIDAwQDAgICEXiAgICAgYGBgoKBgYGBgYERAwMDAQQCAwMFAwMCBAMFAwIDAwMEAwMEBAQCAQEDAwMDAwMDAwICAgQEBAIDBAQDBQMDBAQDAgMCAgQCAwICAQMDAwIDAwMEAwMEAwMDA0GAgICAgIGCgYGBgYKBgVIEBAQDAwUDAwIDAgMCAwECAgIDAwIDBQMDAwMDAwMDAwMDAwMEAwQEAwMDAwMDBAMEBAIEAwQCBAICAAICAwIEAgIDAwIEAwMDAwUEAwQEBAl5gICCgYCBgoGBgYGBcRMDAwUEBAMDAwIDAwQCAgUDBAUDAwMDAwIDAwMDBAMDAwMDAwMCAwQEAwMDBAIDAwQDAgMDAgMBAgICAAMDAwACAgICAgECAgMDBAQEBAQDAwJBgYGBgYCBgYGAgYGBQQMFBQQDBAMCAgMDAgUDAwMCAwMDBAMDAwMEBAMDBAMDAwQEAwMEAwECAwMDBAMDAwMDBQICAgEBAQMBAQICAwMBAwMEAgECAgMDBAQEBQQDBAIKeYGBgYCBgYGAgIGBEwIEBQQDAwMDAgIDBAQDBQEDBAMEAwMDAwQEBAQDBAIDAwMEAgMDBAICAwMDAgQDAwMEAgIBAgICAgIEAgEBAwMCAgMDBAICAgIDAwQEBAQDAwICQoGAgYCBgYCBgIFSBAQDBAMDBAQEAwIDAgEBAwECBAICBAMEAwQEAwQEAwMDAwMFAwMDAwECBAMDAwIDAwQGAwMDAAIDAAIEAgEDBQQCAwIAAgMCAQIDAwQEBAQDAgICEoGBgYGBgYGBgYESAwQEBAUDAwUDAwMBAQIEAgIBAQQCBAQDAwMEAwQEBAMEAwMEAwMDAwICAwMCAwMCAQMDAwMDAQEDAgICAQIDAwICAwMBAQMCAAICAwMDAwMDAwMDAmGAgIGBgYGAgVkEAwQEBAQEBQUEBAEDAgMCAgEDAgMDAgMDBAQCAwQDAwMDAwMEAwMDAwECAwMEAwMDAwMDAwQEAgICAwECAgMEAwMDAwMCAgECAQIDAgIDAwMDAwQEAiCAgIGBgYKAgSkDAwICBAUBAwMDAwUEAQIAAQIDAgQAAgMEAwMDAgMDAwMDAwMDAwMDAwMDAwMCAgIEBQMCAgMDAgECAwECAgICAgIDAgMCAgICAgIEAwQEBAQDAwIFAwN5gYGBgYKBcQQDAwMDBAMDAwMDAwUEAQECAgECAQIDAwICAwIDBAMDAwICAwICAgEDAgICAwUCBAQFBQQDBAMDAgICAwADAwEBAgQCAwIBAgMBAQEDAwMEBAQDBQMDAwJKgYGBgYGBUgQEAwMFBAQDAwMDAgQEAgICBAIDAgEDBQQEAgIDBAQDBAQCBQIDAwMCAgICBAQDBAMDBAQEBAMDAgMBAgECAgIDAgIEAwIAAgICAgIBAwQEAgIDAgMDAwMigYGBgIGAIgIEAgMEAwQEBAQDAgIDAQEBAgICAgMCAwICAQIFAQEAAQEBAgACAQEDBAICAwMDAwIEBAQEBAMFAwQCAwMCAAEEAwACAwECAgIDAgICAQIEAQMCAwMCAwMCeYCBgYFxAgMDAwMEBAUEBAQBAQMCAgIBAgEAAAMCAgECAgICAwEBAgMAAgEBAgMDAgMCBAQDAwMDAwMCAwMDBAMDAwMCAgUCAwICAgMCAgIBAwQDAgACAgMDAwMEAwMCUoGBgYFQAgMFBAIEBAMEBQICAgMDBQQBBAICAwQFAwIFAgIBAgICAgICAgIDAgMCAgIDAwQCAwIDAgIDAgMEAgQEAwMAAQMCAQACAgICAgEDAwMDAgIBAwMDAgMEAwMDMYGBgYEqAwQEAwIDBAQEAwMEBAICBAMBAwICAwIDAwECAQICAgECAgECAgICAQECAgECAgMDAgIEAwMDAwQDBAMDAwQDAwIDAQIDAgIDAwMDAwMDBAMDAwMEBAMDAwICCYCBgYERBAQEAwQCBAMCAwMDAwICAgIBAgMBAQEAAQICAwICAQIDAwMDAwIBAgQBAgACAwMDAwIDAwQCAwQDAwUCAwIDAAIBAgMCAgICAwIDBAIBAwQEAgMEBAMEAwMCAzlweToDBAQDAgEDAwIEAwIEAwMCAgICAgEDAwECAgECAwQBAQIDAwMDAwEBBAMBAgIC' },\n '720p-landscape': { width: 80, height: 28, source: 'VeoWatermarkRemover/720p-text', dataBase64: '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' },\n '720p-portrait': { width: 80, height: 28, source: 'VeoWatermarkRemover/720p-text', dataBase64: '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' },\n '1080p-landscape': { width: 120, height: 42, source: 'VeoWatermarkRemover/1080p-text', dataBase64: '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' },\n '1080p-portrait': { width: 120, height: 42, source: 'VeoWatermarkRemover/1080p-text', dataBase64: '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' },\n 'veo-diamond-1080p-landscape': { width: 96, height: 96, source: 'GeminiWatermarkTool/bg_b_96', dataBase64: 'AgMCAgICAgMCAwICAgICAgIDAgICAgICAgMCAgMCAgICAwICAQICAgIEAwIBDis+QjIQAQICAgICAwICAwICAwMDAwICAgICAgQBAgMDAwMDAwICAgICAgIDAgICAgICAgIDAgIDAgIDAgICAgMCAgICAgICAwICAgECAgIDAgICAwICAQMBAgMDAgIEFTFFRzcXBQMEAwMDAgMCAgMCAwICAgMCAwIDAgIBAQIDAgMDAgEBAwQCAgICAgICAwICAgICAgICAwICAgECAgECAgICAgMCAgICAgICAgICAgICAgICAgICAgICAQMJHDlPUDweCQICAgICAwIDAwICAgICAgICAwICAwICAgEBAgICAQICAgIAAgMBAgIDAgICAwICAgICAwICAgICAgMCAgMCAQICAgICAgICAgMCAgICAwIDAgICAgIDAgIPKURZWUYqEAMDAgIDAgICAgMCAwICAgIDAgIBAgICAwEBAwIBAQICAgIBAgMCAQIDAgICAgICAgIDAgICAgICAgQCAwICAgICAwICAgICAwMDAgICAgICAgMCAgICAgIZNE1dXkwzGQMEAQMCAwIDAwMDAgMCAgICAwIDAgIDAgICAgICAgIDAwMCAgICAgICAwICAgICAgIDAgICAwIDAgMCAgIDAgICAwICAgMCAgQDAgIDAwIDAgMCAgICAgUeN01cXE02HgUCAgMCAwIBAQMCAgIDAQECAwIDAwICAgIDAgICAwICAgMCAgIDAgICAwICAgICAgICAgMCAgICAwMDAwMDAgICAQICAgMCAgMCAwICAgIDAgIDAwIBBA8oO0tZWUo8KA4FAQMCAwMDAgMDAgICAgMCAgICAgIBAgICAgICAgECAgMBAQICAQECAgICAgIDAgICAgICAgICAwICAwICAwMCAgICAwMDAgIDAgIDAgIDAgMCAwIBCBg1Q0xWVkxCNhgHAQMCAgIDAgICAwICAgICAwICAgMCAwICAgICAgICAgIBAQICAQECAgICAQICAgMCAwMCAwICAgICAwEDAwIDAgICAgMCAgICAwICAwMCAgICAgICBh49SE1VVU5HPh0HAQIBBAMCAgICAgIDAgICAgICAgMCAwICAgIDAwICAgICAgIEAgMCAgICAgICAgIDAgIDAwICAwMDAgICAwICAgICAgICAgIDAgICAgICAgMCAwICDSlIT09SUk1OSCkPAgIDAgICAgMCAgICAgICAwIDAgICAgIDAgICAgICAgMCAgIBAgICAwIDAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgMCAgIDAgICAgICAgIEGDRRU05QUE5SUTYaBQICAgEDAgICAgICAAECAgICAgICAgMDAgICAgABAgICAgICAAECAwECAQICAgICAgICAgICAwICAgICAgICAgIBAgICAgICAgICAgEDAQMCAgIJJD1VVU9PT05UUz8pEAICAgICAgICAgICAAECAgICAgICAgICAgICAgABAgICAwICAAECAwECAgICAgEEAQICAgECAgMCAgICAgICAwICAgICAgIDAgICAgICAgMCAgMYMEZWVk9OTk9UVUg5IwsDAgIBAgMCAgICAgICAwEBAgICAgEDAgICAgICAgMCAgICAQICAwICAgMCAwIDAgICAwIDAgQCAgIDAgICAwICAgICAgIDAgICAwICAgQCAwkkOEhVVE9OTk9SVEtCLxEDAwECAgMCAgIDAgICAwEBAgMCAgIDAgICAwICAgMCAgIEAgICAwICAgMCAgICAgIDAgICAwICAwIDAgMDAwICAgMCAgMCAgICAgICAwMDBRMyQktTUk5OTk9RUkxJPBgGAgMCAgICAgIDAgIDAwICAwMBAgICAQECAgICAgMBAQICAgICAgEBAgICAgICAgIDAwICAgMCAwMDAgICAwIDAgICAgMCAgIDAgMDAgMCDCREUE1QUE9OTk5PT09TSigQAgIDAgICAgMCAwMCAgICAwICAgICAAECAgIDAwIAAAICAgICAgABAgMCAgICAgMCAwICAgIDAgIEAwMDAwMDAgQCAgIEAgIDAwMCAwICEi9MVlBQUE5PTk9OTk9VTzQbBQIDAgICAgICAgIDAgEBAgMCAgICAgICAwICAgIBAQECAQECAgICAgICAgIDAgICAgICAwMCAgMCAwMCAwMCAgICAgIDAgICAgICAQMLJj5TV1FOT09OTk9OTlBXU0AuFAUCAgMCAgICAgICAwEBAwIDAgIDAgMCAgICAgMBAQEBAgEBAgMBAwICAgIDAgICAgECAgMCAgICAgIDAgICAgICAgICAgIBAwACAQgfOEhVVFBPT05OTk9OTlBUUkc8JAkBAgICAQICAQACAgICAgIAAQMCAgICAgABAgIBAgICAAECAgACAgICAgIDAgICAgEDAgIDAgICAgIDAgICAgIBAgICAgIBAgEBAg8wSExQUU5OTk9OTk5OTk9RUEtGLwwAAgICAQICAAECAgICAgIAAQICAgICAgABAgICAgICAQECAgECAgIDAgIDAgICAwICAgMCAwMCAgIDBAICAgICAgIDAgICAgICCSFFWFNOUE5OT05OTk5PTk5QT1BSQB0IAgMCAgEBAgECAgICAgICAgECAgICAgICAQIBAQICAQECAwIBAgMDAgIDAgMCAwMDAgQCAgIDAgICAwICAgMCAgICAgICAwIDFzFKWVNPTk1OT05PTk9OT05PTlFVSC8ZBAICAgECAgIDAwICAgMCAgECAgICAwICAQIBAQIDAQECAwECAgICAgMCAgIDAgICAgICAgICAgICAgICAgMCAgMCAgICAQUSLz9MVVFPTk5OTk5OTk9NTk5OTlBTTEEyFgYBAgMCAgMDAgICAQECAgICAgICAgECAgICAgICAQECAgEBAwICAgMCAgIDAgICAgIBAgMDAgIDAgIDAwICAgMCAgICBRQsREtOUU9OTk5OTk5OTk9NTU9PTk9RUE1HMBUDAwMDAwICAgICAQECAgICAgICAgICAgIBAgICAQECAgEBAgICAgMCAwICAwICAgMCAgIDAgICAgMCAwMCAwICAgICDSQ5TlFNTlBPTU1OTk5PTk9OT05OTk9PUFJPOyYMAQMDAAECAgECAgMBAQEBAgMCAwIDAgIDAwEDAQECAwICAgICAgIDAgICAgICAgMCAgICAgIBAwICAgIDAgIDAgQLIjhIVlRNTU5OTU1PT05OT05PT05PTk5OT1RVRzkiCwQCAQACAwEBAwIAAQECAgMCAwICAgQDAwIDAQECBAMDAgMCAgICAgICAgICAgICAgICAgICAgIDAgIBAgICAgsdNUdPVlNPTU5OTU5OTk5OT05OT05PTk9NT1JVT0c2HAsCAQICAgACAgIBAQICAgMCAgABAgICAgICAQICAgECAgMCAgICAwICAgICAgICAgICAgIDAwIEAgICAgICBBgtRU9OUVBPT05PTk5OTk5OTk5OT09PTk5OTlBRTk9ELBgEAgICAgIBAgMBAQMCAgIBAQABAgMDAgMCAAECAgABAgMDAgIDAgICAgICAgQDAgICAwMCBAMCAwICAgMJGDFCUlVQT09OTk9OTk5OTk1OTk9OTk5PTU1OTk5OUFZRQDAXBwICAwEAAQECAgIEAQEDAwMCAgMBAQECAQECAwIDAwICAgIEAgICBAMDAgMDAgIDAwMCAgMCAgQCAggZLUJLUlNQTk9OTk9PTk5OT05OTk9OTk5PTU1OT05OUFRRSkItGAcCAwEBAQICAgIDAQECAwMCAgMBAQIDAQECAwECAgICAgIDAgICAgICAgMCAgICAgIDAwMDAwEBAxktQVBPT1BOTk5NTU5OTU1OTk5PTk5OTk5OTU1OT01OTlBOT1BBLBgDAQABAwICAwEBAgACAgEBAgICAgICAAECAgECAgICAgICAgIDAwIDAwICAgMDAgICAgIDAgQLGTBCUVdTTk5OTk5NTU5OTk5OTk1OTk5OTk5NTU5OTk5OTk5OUldQQjAXCwMBAgICAgIBAAEDAgIBAgICAgICAQECAwECAgMCAgICAgMCAwICAgMCAgMEAgECAgICAg0cLUJMUFRRT05OTk5OTk5PTk5OTk5OTk9OTk5OTk5OT05OTk9OUVNQS0IsHgsCAgMCAgIBAgICAwICAgICAgIDAgMDAwICAgICAgIDAgICAgMDAgMCAgICAgMCAwEFDCI2RlFTT1BPTk5OTk9OTk5OTk5OT05OT09OTk5PTk5OTk5OTk5OTk9PUlJENyIMBQECAgIDAgICAQICAgQBAgECAgICAwICAgICAgICAQICAgEBAwICAwICAQIDAQYXJDhGT1VTT05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTU1NTU1NTk9NTk5QUlRPRzgkFQUBAQICAgICAgICAgIAAQICAAECAgICAgICAwICAgICAgEBAgIDAwMDAQIBBRYwO0hOTVBQTk5OTk5PTk5PTk5OTk5OT05OTk5OTk5OTU1NTU1NTk5OTk5OUFBOT0g5LRMDAQICAgECAgICAgIAAQICAAECAgICAwICAgIDAgIBAgICAgMCAgICAgIJGjRIUFZUUE5PTk5PTk5OTk9OTk5PTk5OT05OTk5OTk5PTk5OTk5PTk9OTk5OT05RVVRORDAXCQIDAAICAgEBAgQBAQIDAgICAwICAgMCAgIDAgICAwICAgMCAgIFCg4eMUJPUlVSUE5PTk5OT09PTk9PTk5PTk9OT05PTk9OTk5PTk5OT05PTk9OT05PTk9QVFVSTEAxIBAJAAICAwEBAwMCAQMDAgIDBAICAgMCAwICAQECAgECAgIBAQQWJC8/R0pPT09PT05OTU1OTk5OTk5NTU5OTk5PT01OTk5OTk5OTU1OT05PT05NTU5PTk5OT09PT0xLRjIgCwICAgIDAgMBAgMDAgMDAgEBAgICAgICAAECAgICBAMFDhstPEdSVVJPUE9NT05NTU1OTk5OTk5NTU9OTk5PTk1NT05PTk5PTU1OTk9PT09NTU5OT05PTU1OT1RYWEg6JRMLBAQCAwQBAQQCAgMDAwABAgMCAgICAwECAwICCxIYKDRAR0tQUVBPT09OTk5OTk5OT05OTk9PTk5PTk5OT05OTk9OTk5OTU1OTk5OTk5OT05PT05OTk5PT1JTU0xIPS4kFAoDAgIDAwECAgICAgICAwIBAgICAQEBAgYQIy88Sk5RUlBQT05OTk5OTk5OTk5OTk5OTk9OTk5OTk5OT05OTk9OTk5OTU1OTk5OTk9OTk5OTk5OT05OT09NTlBVUkxFMiMYCAUCAQAAAQIDAwICAgMAAQICBAYHDRgoOEFJU1RWU1FPTk5OTk5NTU5OTU5OTk1NTk5OTk5OTU1OTU5OTk5NTU5OTU5OTk1NTU1NTU5OTU1OTk5OTk5NTVFUV1NPQjcwIxcOBwYEAAECAgICAwIAAQIGDhkdKTQ+SEtMT05QT09OTk5OTk5NTU5OTk5OTk1NTk5OTk5OTU1NTU5OTk5NTU5PTk5OTk1NTU1NTU5OTU1OTk5NTk5NTU5PUE5OSkdFPDQpHRgOBAECAgICAgMIDxkfKDU8SFFTVVRST05OT09OT05PTk5OTk5PTk5OTk1NTk9OTk5OTU1OTk5OTk5NTU5PTk5OTk1NTU1NTU1OTk5OT05OTk9NTU9PTk9QUlRVVVJIPDUoHhkQCQMBDxceKjM3O0JHT1JUVVNRT05PTk9PT05OTk9OTk5PTk5OT01NTk9OTk5PTU1OT05OTk9NTU5PTk5OTk1NTU1NTU1OTk9OT05OTk9NTU5PT09QU1JUVVROR0M8NzQqHBMMMDY9RkxMSktNTk5PT1BNTU5PTk5PTk1NTk5OTk5OTU1OT05OTk5NTU5OTU5OTk1NTU1OTk5OTU1OTk5OTk9NTU5PTk9NTk1NTk5OT05PTU1PTk5OT05NTEtMTExEOTApQEdQWV1cWFVVUlBPTk9NTU5OT05OTk1NTk5OTk5OTU1OTk5OTk5NTU5OTk5OTk1NTU1OTk5OTU1OTk5OTk5NTU9PT05NTk1NT05PTk9OTU1OTk1NT1BRU1VYXFxZTkQ9PkZNWV1cWVdUU09PTk9PTk1PTk5OT05OTk9OTk5PTk5OT05OT01OTk5PTk5PTk5OTk9NTU5OTU1OT05OTU5OTk9PTU5OTk9OTk9OTk9PTk5OT01NT1FSVFZZXF1ZUEhAKjE5RE1OS0xNTk5PUFBOT05OTk5OT05OTk5OTk5PTk5OTk5OTk5OTk5NTk5OT05OT05NTU9PTU1OTk5OTU5PTk9OTU5OT05OT09OTk5PTk5PTU5OT09OTUxLTE1FPTYxDBMbKTQ2O0RHTlJUVVNSUU9OTk5OTk5OTk5OTk1OTU9OTk5OT05NTk9OTU5OTk5OTk9NTU5OTk5OTk1NTk5NTk5OTU5OTk5OTk1NTk5OTU1PUVJUVFNOR0I8NTMqHhYPAwQHDxkeKDU8SFBUVlVSUE9OTk5OTk5OTk5OTk5PTk5OTk5OTk9OTk9PTU1OTk5PTk5NTU5OTk5OTk1OTk5OTk5OTU1OT05OTk1NTU9OTk1PUlNVU1FIPjUoHRgQCAQCAgIAAQIGDxgdKTM8RklJT09RUE9OT05OTk5OTk5PTk5OTk5PTk9OT09OTU1OT09OTk1OTk5PTk5OTk9OTk9OTk5OTk5OT05OT05NT09RUE9OTEtIPzYoHBgOBgIBAgMCAgMBAQICBAYHEBciMThCT1RYVVFOT05OTk9OTk5OT05OT05OTk9OTk9PTU1OT05OTU5OTk5PTk5NT05OTk5OTk5PTk5OT05OTk9OT1NVVlZUSkI4KRsNBwcFAgMBAQICAgMCAgIBAAABAgQIGCMyREpUVFBOTk5OTk5OTk5PTk5OTk5PTk5NTU9OTk5OTk9OTk5OTk5OTU1OT05PTk9OTU1NTk5OTk1NTk5OT1BSUE1KOy4jDwgDAQACAQICAwICAgMDAgICAAEDAwICAwsSIi49R0xTU1FPT05OTk5OTk5OTk5OTk5NTU5OTk9OTk5OTk5OTk5OTU1OTk9OTk5NTU1NTk5OTk1OUFFSUUtIPzMoFxELAgMCAgICAQICAgICAwMBAgICAwMCBAECAgMFDBMnOUlYWVVQT09NTk5OTk5OT01NTk5OTk5PTk5OTk5OTk5OTk1NTk5PT01NT05OTk5PTU5OTU5QUFRVU0c8LBkQBgMDAgIBAQIDAQECAgIDAgIDAgIDAgICAgICAgMCAgILIDJGTExOT09QTk5OTk5OTk1NTk9OTk5OTU5OT05OT05OTk1OTk5PTk1PTk9OTk5OTk5OUE9PT0tIQC8kEwMCAgICAgMAAQICAQECAwICAgICAgICAgICAgICAgIDAgEBCA8hMj9LUVRTUU5OTk5OTk5PT05NTk5OTU1OTk1OTk5NTU5OTk5OTk1NTk5NTk5OTU1PUVRSTkEvHg4KBQICAgABAgICAgICAgICAgEBAgIBAgICAQMCAwICAwMCAgMCAgIJGC9DTVVVUU9OT05PT01PT05OTk5OTU1OTk5OTk5NTU5OTk5OTk1NT05OTk9OTU1PU1VPSDMYCAICAgICAgABAgICAgICAgMCAgEBAgICAgIDAgIDAwMCAgMCAgICAwMDBhIsOUdPT1BRTk5OTk5OTk9NTk5OTU1OT05OTk5OTk5PTU1OTk5OTU5OTk5OUFBOUEY7MBYFAQIDAgIBAQICAgMCAgMCAgICAwICAgMCAgICAwICBAIDAgMCAgIDAgICAwUUJDlIUFZVT05PT05OTk9NTU5PTU1OTk5OTk5OT05OTU5OT05OTU5OTk9QU1ZQSDckFQcBAgIDAgIBAgICAgMCAwIDAgICAwICAgICAgICAgECAwICAgIBAQIDAQICAwIFCyM2RlNUT09OTk1NTk5NTU5OTU1OT01NTU5OTk5OTU1OT05OTk5NTU9PUlJGNiELBAECAgICAQECAwIDAgIBAQEDAgICAgICAgICAwMDAAECAgICAgICAAIDAQECAgICAgseLkJLUFRRTk1NTk5NTU5OTU1OTk1NTk5OT05OTU1OTk9OTk5OUVNQS0ItHQkBAQECAgEBAAECAgMDAgIAAgICAgICAgEDAgMDAwICAgICAwIDAgICAgIDAgICAgICAgQLGTFDUldTT05OTk1OTk5PTk5OTk5OTU5OTk9PTk5OT05NTk9OU1dSQjAZCwQCAgMCAgICAgICAwICAgICAgIDAgICAgICAgIDAgIDAgIDAgICAgQCAgMCAgICAwECAgEBAxkuQlJQT1BPT09OTk5PTk5OT05OTU1OTk5PT05PT05NTlBPUFFCLBgEAgEDAgICAgIDAwICAgIDAgMCAgICAgMCAwICAwMCAgIDAgICAgIDAgICAwEDAwMCAgICAgIBAQgYLUNNU1NRT09NTk5OTU1PTk5OT09OTk5PTk5OTk1NUFNTSkMtGAgCAgICAgIAAQICAgICBAIBAwIBAAICAQECAgICAwMCAgICAgICAwICAgICAgIDAgICAgICAQIBAQMIGDFDU1VQTk9OT05OTU1OTk5OT09OTU5OTU5OTk5OUFVUQzEYCAMDAgMCAwIBAQICAwEDAwABAgIBAgMCAAECAwMCAgICAgICAwICAQICAwICAwMCAQICAgABAQECAgICAhgtRk9OUVBOT05OTk5OT05OTk5NTk5OTk9OTlBRT1BELBgCAgICAwMCAwICAgEBAgICAwIDAgICAgICAgMBAwICAgMCAgICAgICAgICAgICAgICAgICAgABAQECAgICAQkdN0dPVVRPTU5OTk1OT05OTk5OTk5OTk5NT1NWT0g1GwsCAgICAgICAgICAgEAAgIDAwICBAMCAgMDAwMDAwMDAgIDAgICAgICAgICAgECAgICAQICAgAAAQIBAQIBAQMLIjdGVVROTU5OTU5OTk1NTk5OTk5OTU1OTlNVSDgiCgQCAgIDAgIBAwMBAgMCAQEBAwIDAwMDAgMDAgMCAwMDAgICAgICAgICAgICAgICAgICAgICAgACAgIBAQICAAACCyM6UFJOTk9OTk5OTk1NTk5OTk5OTU5PT1FOOSQLAgICAgMDAgABAwMCAwICAAABAgIDAwMCAwMDAgIDAwICAgMCAgICAgICAwICAgMCAgIDAgICAgICAgMDAgICAgICBRUwSE9PUU9PTk9OTk5PTk5OTk5PTk9QUExELRUEAgIDAgIDAgMDAgMCAgIDAgIBAwECBAMBAgMDAgEEAwMCAgICAgIDAgICAwICAgMCAgICAgICAwICAgIDAgMEAgICAQYVNENMU1FOTk5OT05OTk5PTk5PT1FVTEAwEwYBAgIDAwIDBAICAgICAgIDAgMCAgEBAwQBAQICAQECAwICAgICAgICAgICAgICAgICAgICAAECAgABAgICAgICAgICAwEEGjFIVlFOTU1PTk5OTk5NTU5OTVNZSzAYBAICAgIDAAECAwICAgMBAQICAgICAwICAwICAgIDAAECAgIBAgICAgICAgICAgICAgICAgECAAECAgEBAgICAgMEAgICAgICCR5BU1BPTk1OT05PTk5NTU5OTlJYRiAIAwICAgICAAEDAwICAgMBAQICAwMDAwEDAgIDAgIDAQEDAgMDAgICAgIDAgICAgICAgICAgICAgICAwICAgEBAQIDAgIBAgICAQ8wR0tQUFBOT05PTk5NTU9RUExJMQ4DAgMCAQICAgECAwICAgIEAwIDAgMDAgICAgMDAgMDAgIDBAMCAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMBAAICAgIBAwIBAgwkO0hTVFBOT05OT09NTVFVVEc5IAgBAwMCAQEDAgICAgEBAwMCAgIDAwICAwICAgMCAwIDAgMDAwMDAgMCAgICAgICAwICAgMCAgICAQICAgEBAgICAgIDAQECAgABAQUTLD9TVlFOTk1NTk5OTlFXUjwlDAIBAgIBAQMDAwICAgEBAgICAwICAgEDAwIDAgIBAQIDAgMDAgMCAgICAgICAgICAwICAwMCAgMCAgICAgABAgICAgICAAECAgIBAQECGTNOVlBOTU1OT05PUE9USy0UBAMCAgIAAQIDAgICAwABAgICAgECAQEDAgMCAgMAAQICBAICAgECAgQCAwMCAwICAwIDAgMDAgIDAgIBAgICAgMCAgIDAgICAwICAgIBEChMU09PT09OTk9PT01QRCMMAwEBAgICAgIDAgICAgMCAgMCAgICAgIDAwEBAgICAgMDAgICAwEBAgICAgMDAwMDAgICAwMCAgICAgMDAwICAgICAgIDAgICAgICAgMCBhg8SUxRUk5OTk9RUkpDMhMFAgEBAQQCAgMCAgIDAwICAgMCAgIEAgIDAgECAgMDAwICAgMDAwEBAgICAgICAQICAgICAwICAgMCAgICAgICAgICAgICAgIDAgIDAgICAxEwQEtTUk5OT05SVUk5IwoDAgICAgMCAgMCAAECAwABAgIBAQMDAgECAwICAgICAgMDAgICAgECAgICAgICAQICAwIDAgICAgICAgICAgICAgICAgICAwICAgIDAgMDBAojOEhWVE9OTlBVVkcwGAMCAgIDAwMDAwICAQECAwECAwICAgMDAgECAgICAgMCAwIBAAEBAgEBAgICAgIDAgICAgICAgMCAwIDAgMCAwICAgICAgIDAgICAgICAgQCAwMPKT9UVU5PTk1VVD0lCAECAgMDAgQCAwICAwICAwIDAwMCAgIDAwMDAQICAgQCAgICAgMDBAICAgMDAgICAgICAwMCAgICAgIDAgICAwICAgMCAgIDAgMCAwMCAgMCAgIGGjVRU05RT05TUTUYAwICAwICAwMCAwIEAgMDAwMDAgQDAwIDAwICAgIDAwMDAgIEAgMDAwMDAgICAgICAgIDAgECAgMDAQICAgICAgICAgMCAwICAwICAwICAgICAgICDipIT01SUk5OSCoOAwMDAgIDAwIDAgICAgIDAwMDAwMCAgIDBAIDBAECAwIBAQICAgICBAICAgICAgICAQMCAgICAgICAgMCAgICAgICAgICAgICAgICAgIDAgICAgIBBx08R0xVVU5HPh4IAQMDAgMCAgMBAwMCAgICAwIDAgIDAwMCAgMCAgECAgIBAQICAgMCAgICAgMCAgICAgICAwICAgICAgMDAgECAgICAgMCAgIDAgICAwICAgICAgICBxg1Q0xWVUxDNRgHAgMDAwMCAwICAwICAgMCAwICAwMDAgMDAwICAwIDAwMDAwEDAQIDAgMDAgICAgMDAgMCAgICAgIDAgMCAgICAwICAgICAgIDAgICAgIDAgICAgIBBA4oPUxZWUw7KQ4EAQICAgIDAgQDAwIDAwIEAgICAwICAwIDAgICAgMCAwQCAgEBAQICAwIDAgMBAgICAgMDAgMDAgICAgICAgICAgICAgIBAgICAQICAgICAgICAgIBAgYeNkxdXU01HgUCAQICAgEDAgICAwIDAQEDAgEBAgIAAQICAgIDAwEBAwMDAwIDAAEDAgICAgIBAQMEAgMCAgIDAgMCAgMCAgMCAgICAgIBAgICAgICAgICAgICAgMCAgMaM0tdXk0zGAICAgICAQABAgMCAwMDAgECAgEBAgIAAQICAgICAgABAgICAwIDAAICAgICAgMCAgMDAwMCAwIDAgMCAwECAgEDBAICAgICAgIDAgICAwICAgMCAgICAwMQK0VZWUQpDwIDAgICAwICAgMCAgMCAgICAgICAgICAgEDAgICAgEBAgMCAgMCAgICAwICAwMCAgIDAgIDAwICAwIDAgMDAgMCBAICAgMCAgIDAgICAwICAgMCAgIDAgMIHzxPTjocCAICAgICAgICAgMCAQMDAgICAgICAgICAgIDAgICAgAAAgICAgIDAgICAwICAQICAgMCAgICAgICAgICAgIDAgICAgMCAgICAgICAgICAgIDAgMCAgIDAgIEFTZHRTETBAECAQECAgICAwICAgICAgICAgEBAgMAAQIDAgICAgICAgIBAQIDAgICAgEBAgICAgICAgMCAgICAgICAgICAQMCAwICAgICAgICAQIDAgICAgICAgICAgMBDzBAPioNAgICAAEDAgICAgMCAgICAgICAgEBAwIBAQIBAgICAgICAgMBAQICAgICAgAB' },\n 'veo-diamond-1080p-portrait': { width: 96, height: 96, source: 'GeminiWatermarkTool/bg_b_96', dataBase64: 'AgMCAgICAgMCAwICAgICAgIDAgICAgICAgMCAgMCAgICAwICAQICAgIEAwIBDis+QjIQAQICAgICAwICAwICAwMDAwICAgICAgQBAgMDAwMDAwICAgICAgIDAgICAgICAgIDAgIDAgIDAgICAgMCAgICAgICAwICAgECAgIDAgICAwICAQMBAgMDAgIEFTFFRzcXBQMEAwMDAgMCAgMCAwICAgMCAwIDAgIBAQIDAgMDAgEBAwQCAgICAgICAwICAgICAgICAwICAgECAgECAgICAgMCAgICAgICAgICAgICAgICAgICAgICAQMJHDlPUDweCQICAgICAwIDAwICAgICAgICAwICAwICAgEBAgICAQICAgIAAgMBAgIDAgICAwICAgICAwICAgICAgMCAgMCAQICAgICAgICAgMCAgICAwIDAgICAgIDAgIPKURZWUYqEAMDAgIDAgICAgMCAwICAgIDAgIBAgICAwEBAwIBAQICAgIBAgMCAQIDAgICAgICAgIDAgICAgICAgQCAwICAgICAwICAgICAwMDAgICAgICAgMCAgICAgIZNE1dXkwzGQMEAQMCAwIDAwMDAgMCAgICAwIDAgIDAgICAgICAgIDAwMCAgICAgICAwICAgICAgIDAgICAwIDAgMCAgIDAgICAwICAgMCAgQDAgIDAwIDAgMCAgICAgUeN01cXE02HgUCAgMCAwIBAQMCAgIDAQECAwIDAwICAgIDAgICAwICAgMCAgIDAgICAwICAgICAgICAgMCAgICAwMDAwMDAgICAQICAgMCAgMCAwICAgIDAgIDAwIBBA8oO0tZWUo8KA4FAQMCAwMDAgMDAgICAgMCAgICAgIBAgICAgICAgECAgMBAQICAQECAgICAgIDAgICAgICAgICAwICAwICAwMCAgICAwMDAgIDAgIDAgIDAgMCAwIBCBg1Q0xWVkxCNhgHAQMCAgIDAgICAwICAgICAwICAgMCAwICAgICAgICAgIBAQICAQECAgICAQICAgMCAwMCAwICAgICAwEDAwIDAgICAgMCAgICAwICAwMCAgICAgICBh49SE1VVU5HPh0HAQIBBAMCAgICAgIDAgICAgICAgMCAwICAgIDAwICAgICAgIEAgMCAgICAgICAgIDAgIDAwICAwMDAgICAwICAgICAgICAgIDAgICAgICAgMCAwICDSlIT09SUk1OSCkPAgIDAgICAgMCAgICAgICAwIDAgICAgIDAgICAgICAgMCAgIBAgICAwIDAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgMCAgIDAgICAgICAgIEGDRRU05QUE5SUTYaBQICAgEDAgICAgICAAECAgICAgICAgMDAgICAgABAgICAgICAAECAwECAQICAgICAgICAgICAwICAgICAgICAgIBAgICAgICAgICAgEDAQMCAgIJJD1VVU9PT05UUz8pEAICAgICAgICAgICAAECAgICAgICAgICAgICAgABAgICAwICAAECAwECAgICAgEEAQICAgECAgMCAgICAgICAwICAgICAgIDAgICAgICAgMCAgMYMEZWVk9OTk9UVUg5IwsDAgIBAgMCAgICAgICAwEBAgICAgEDAgICAgICAgMCAgICAQICAwICAgMCAwIDAgICAwIDAgQCAgIDAgICAwICAgICAgIDAgICAwICAgQCAwkkOEhVVE9OTk9SVEtCLxEDAwECAgMCAgIDAgICAwEBAgMCAgIDAgICAwICAgMCAgIEAgICAwICAgMCAgICAgIDAgICAwICAwIDAgMDAwICAgMCAgMCAgICAgICAwMDBRMyQktTUk5OTk9RUkxJPBgGAgMCAgICAgIDAgIDAwICAwMBAgICAQECAgICAgMBAQICAgICAgEBAgICAgICAgIDAwICAgMCAwMDAgICAwIDAgICAgMCAgIDAgMDAgMCDCREUE1QUE9OTk5PT09TSigQAgIDAgICAgMCAwMCAgICAwICAgICAAECAgIDAwIAAAICAgICAgABAgMCAgICAgMCAwICAgIDAgIEAwMDAwMDAgQCAgIEAgIDAwMCAwICEi9MVlBQUE5PTk9OTk9VTzQbBQIDAgICAgICAgIDAgEBAgMCAgICAgICAwICAgIBAQECAQECAgICAgICAgIDAgICAgICAwMCAgMCAwMCAwMCAgICAgIDAgICAgICAQMLJj5TV1FOT09OTk9OTlBXU0AuFAUCAgMCAgICAgICAwEBAwIDAgIDAgMCAgICAgMBAQEBAgEBAgMBAwICAgIDAgICAgECAgMCAgICAgIDAgICAgICAgICAgIBAwACAQgfOEhVVFBPT05OTk9OTlBUUkc8JAkBAgICAQICAQACAgICAgIAAQMCAgICAgABAgIBAgICAAECAgACAgICAgIDAgICAgEDAgIDAgICAgIDAgICAgIBAgICAgIBAgEBAg8wSExQUU5OTk9OTk5OTk9RUEtGLwwAAgICAQICAAECAgICAgIAAQICAgICAgABAgICAgICAQECAgECAgIDAgIDAgICAwICAgMCAwMCAgIDBAICAgICAgIDAgICAgICCSFFWFNOUE5OT05OTk5PTk5QT1BSQB0IAgMCAgEBAgECAgICAgICAgECAgICAgICAQIBAQICAQECAwIBAgMDAgIDAgMCAwMDAgQCAgIDAgICAwICAgMCAgICAgICAwIDFzFKWVNPTk1OT05PTk9OT05PTlFVSC8ZBAICAgECAgIDAwICAgMCAgECAgICAwICAQIBAQIDAQECAwECAgICAgMCAgIDAgICAgICAgICAgICAgICAgMCAgMCAgICAQUSLz9MVVFPTk5OTk5OTk9NTk5OTlBTTEEyFgYBAgMCAgMDAgICAQECAgICAgICAgECAgICAgICAQECAgEBAwICAgMCAgIDAgICAgIBAgMDAgIDAgIDAwICAgMCAgICBRQsREtOUU9OTk5OTk5OTk9NTU9PTk9RUE1HMBUDAwMDAwICAgICAQECAgICAgICAgICAgIBAgICAQECAgEBAgICAgMCAwICAwICAgMCAgIDAgICAgMCAwMCAwICAgICDSQ5TlFNTlBPTU1OTk5PTk9OT05OTk9PUFJPOyYMAQMDAAECAgECAgMBAQEBAgMCAwIDAgIDAwEDAQECAwICAgICAgIDAgICAgICAgMCAgICAgIBAwICAgIDAgIDAgQLIjhIVlRNTU5OTU1PT05OT05PT05PTk5OT1RVRzkiCwQCAQACAwEBAwIAAQECAgMCAwICAgQDAwIDAQECBAMDAgMCAgICAgICAgICAgICAgICAgICAgIDAgIBAgICAgsdNUdPVlNPTU5OTU5OTk5OT05OT05PTk9NT1JVT0c2HAsCAQICAgACAgIBAQICAgMCAgABAgICAgICAQICAgECAgMCAgICAwICAgICAgICAgICAgIDAwIEAgICAgICBBgtRU9OUVBPT05PTk5OTk5OTk5OT09PTk5OTlBRTk9ELBgEAgICAgIBAgMBAQMCAgIBAQABAgMDAgMCAAECAgABAgMDAgIDAgICAgICAgQDAgICAwMCBAMCAwICAgMJGDFCUlVQT09OTk9OTk5OTk1OTk9OTk5PTU1OTk5OUFZRQDAXBwICAwEAAQECAgIEAQEDAwMCAgMBAQECAQECAwIDAwICAgIEAgICBAMDAgMDAgIDAwMCAgMCAgQCAggZLUJLUlNQTk9OTk9PTk5OT05OTk9OTk5PTU1OT05OUFRRSkItGAcCAwEBAQICAgIDAQECAwMCAgMBAQIDAQECAwECAgICAgIDAgICAgICAgMCAgICAgIDAwMDAwEBAxktQVBPT1BOTk5NTU5OTU1OTk5PTk5OTk5OTU1OT01OTlBOT1BBLBgDAQABAwICAwEBAgACAgEBAgICAgICAAECAgECAgICAgICAgIDAwIDAwICAgMDAgICAgIDAgQLGTBCUVdTTk5OTk5NTU5OTk5OTk1OTk5OTk5NTU5OTk5OTk5OUldQQjAXCwMBAgICAgIBAAEDAgIBAgICAgICAQECAwECAgMCAgICAgMCAwICAgMCAgMEAgECAgICAg0cLUJMUFRRT05OTk5OTk5PTk5OTk5OTk9OTk5OTk5OT05OTk9OUVNQS0IsHgsCAgMCAgIBAgICAwICAgICAgIDAgMDAwICAgICAgIDAgICAgMDAgMCAgICAgMCAwEFDCI2RlFTT1BPTk5OTk9OTk5OTk5OT05OT09OTk5PTk5OTk5OTk5OTk9PUlJENyIMBQECAgIDAgICAQICAgQBAgECAgICAwICAgICAgICAQICAgEBAwICAwICAQIDAQYXJDhGT1VTT05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTU1NTU1NTk9NTk5QUlRPRzgkFQUBAQICAgICAgICAgIAAQICAAECAgICAgICAwICAgICAgEBAgIDAwMDAQIBBRYwO0hOTVBQTk5OTk5PTk5PTk5OTk5OT05OTk5OTk5OTU1NTU1NTk5OTk5OUFBOT0g5LRMDAQICAgECAgICAgIAAQICAAECAgICAwICAgIDAgIBAgICAgMCAgICAgIJGjRIUFZUUE5PTk5PTk5OTk9OTk5PTk5OT05OTk5OTk5PTk5OTk5PTk9OTk5OT05RVVRORDAXCQIDAAICAgEBAgQBAQIDAgICAwICAgMCAgIDAgICAwICAgMCAgIFCg4eMUJPUlVSUE5PTk5OT09PTk9PTk5PTk9OT05PTk9OTk5PTk5OT05PTk9OT05PTk9QVFVSTEAxIBAJAAICAwEBAwMCAQMDAgIDBAICAgMCAwICAQECAgECAgIBAQQWJC8/R0pPT09PT05OTU1OTk5OTk5NTU5OTk5PT01OTk5OTk5OTU1OT05PT05NTU5PTk5OT09PT0xLRjIgCwICAgIDAgMBAgMDAgMDAgEBAgICAgICAAECAgICBAMFDhstPEdSVVJPUE9NT05NTU1OTk5OTk5NTU9OTk5PTk1NT05PTk5PTU1OTk9PT09NTU5OT05PTU1OT1RYWEg6JRMLBAQCAwQBAQQCAgMDAwABAgMCAgICAwECAwICCxIYKDRAR0tQUVBPT09OTk5OTk5OT05OTk9PTk5PTk5OT05OTk9OTk5OTU1OTk5OTk5OT05PT05OTk5PT1JTU0xIPS4kFAoDAgIDAwECAgICAgICAwIBAgICAQEBAgYQIy88Sk5RUlBQT05OTk5OTk5OTk5OTk5OTk9OTk5OTk5OT05OTk9OTk5OTU1OTk5OTk9OTk5OTk5OT05OT09NTlBVUkxFMiMYCAUCAQAAAQIDAwICAgMAAQICBAYHDRgoOEFJU1RWU1FPTk5OTk5NTU5OTU5OTk1NTk5OTk5OTU1OTU5OTk5NTU5OTU5OTk1NTU1NTU5OTU1OTk5OTk5NTVFUV1NPQjcwIxcOBwYEAAECAgICAwIAAQIGDhkdKTQ+SEtMT05QT09OTk5OTk5NTU5OTk5OTk1NTk5OTk5OTU1NTU5OTk5NTU5PTk5OTk1NTU1NTU5OTU1OTk5NTk5NTU5PUE5OSkdFPDQpHRgOBAECAgICAgMIDxkfKDU8SFFTVVRST05OT09OT05PTk5OTk5PTk5OTk1NTk9OTk5OTU1OTk5OTk5NTU5PTk5OTk1NTU1NTU1OTk5OT05OTk9NTU9PTk9QUlRVVVJIPDUoHhkQCQMBDxceKjM3O0JHT1JUVVNRT05PTk9PT05OTk9OTk5PTk5OT01NTk9OTk5PTU1OT05OTk9NTU5PTk5OTk1NTU1NTU1OTk9OT05OTk9NTU5PT09QU1JUVVROR0M8NzQqHBMMMDY9RkxMSktNTk5PT1BNTU5PTk5PTk1NTk5OTk5OTU1OT05OTk5NTU5OTU5OTk1NTU1OTk5OTU1OTk5OTk9NTU5PTk9NTk1NTk5OT05PTU1PTk5OT05NTEtMTExEOTApQEdQWV1cWFVVUlBPTk9NTU5OT05OTk1NTk5OTk5OTU1OTk5OTk5NTU5OTk5OTk1NTU1OTk5OTU1OTk5OTk5NTU9PT05NTk1NT05PTk9OTU1OTk1NT1BRU1VYXFxZTkQ9PkZNWV1cWVdUU09PTk9PTk1PTk5OT05OTk9OTk5PTk5OT05OT01OTk5PTk5PTk5OTk9NTU5OTU1OT05OTU5OTk9PTU5OTk9OTk9OTk9PTk5OT01NT1FSVFZZXF1ZUEhAKjE5RE1OS0xNTk5PUFBOT05OTk5OT05OTk5OTk5PTk5OTk5OTk5OTk5NTk5OT05OT05NTU9PTU1OTk5OTU5PTk9OTU5OT05OT09OTk5PTk5PTU5OT09OTUxLTE1FPTYxDBMbKTQ2O0RHTlJUVVNSUU9OTk5OTk5OTk5OTk1OTU9OTk5OT05NTk9OTU5OTk5OTk9NTU5OTk5OTk1NTk5NTk5OTU5OTk5OTk1NTk5OTU1PUVJUVFNOR0I8NTMqHhYPAwQHDxkeKDU8SFBUVlVSUE9OTk5OTk5OTk5OTk5PTk5OTk5OTk9OTk9PTU1OTk5PTk5NTU5OTk5OTk1OTk5OTk5OTU1OT05OTk1NTU9OTk1PUlNVU1FIPjUoHRgQCAQCAgIAAQIGDxgdKTM8RklJT09RUE9OT05OTk5OTk5PTk5OTk5PTk9OT09OTU1OT09OTk1OTk5PTk5OTk9OTk9OTk5OTk5OT05OT05NT09RUE9OTEtIPzYoHBgOBgIBAgMCAgMBAQICBAYHEBciMThCT1RYVVFOT05OTk9OTk5OT05OT05OTk9OTk9PTU1OT05OTU5OTk5PTk5NT05OTk5OTk5PTk5OT05OTk9OT1NVVlZUSkI4KRsNBwcFAgMBAQICAgMCAgIBAAABAgQIGCMyREpUVFBOTk5OTk5OTk5PTk5OTk5PTk5NTU9OTk5OTk9OTk5OTk5OTU1OT05PTk9OTU1NTk5OTk1NTk5OT1BSUE1KOy4jDwgDAQACAQICAwICAgMDAgICAAEDAwICAwsSIi49R0xTU1FPT05OTk5OTk5OTk5OTk5NTU5OTk9OTk5OTk5OTk5OTU1OTk9OTk5NTU1NTk5OTk1OUFFSUUtIPzMoFxELAgMCAgICAQICAgICAwMBAgICAwMCBAECAgMFDBMnOUlYWVVQT09NTk5OTk5OT01NTk5OTk5PTk5OTk5OTk5OTk1NTk5PT01NT05OTk5PTU5OTU5QUFRVU0c8LBkQBgMDAgIBAQIDAQECAgIDAgIDAgIDAgICAgICAgMCAgILIDJGTExOT09QTk5OTk5OTk1NTk9OTk5OTU5OT05OT05OTk1OTk5PTk1PTk9OTk5OTk5OUE9PT0tIQC8kEwMCAgICAgMAAQICAQECAwICAgICAgICAgICAgICAgIDAgEBCA8hMj9LUVRTUU5OTk5OTk5PT05NTk5OTU1OTk1OTk5NTU5OTk5OTk1NTk5NTk5OTU1PUVRSTkEvHg4KBQICAgABAgICAgICAgICAgEBAgIBAgICAQMCAwICAwMCAgMCAgIJGC9DTVVVUU9OT05PT01PT05OTk5OTU1OTk5OTk5NTU5OTk5OTk1NT05OTk9OTU1PU1VPSDMYCAICAgICAgABAgICAgICAgMCAgEBAgICAgIDAgIDAwMCAgMCAgICAwMDBhIsOUdPT1BRTk5OTk5OTk9NTk5OTU1OT05OTk5OTk5PTU1OTk5OTU5OTk5OUFBOUEY7MBYFAQIDAgIBAQICAgMCAgMCAgICAwICAgMCAgICAwICBAIDAgMCAgIDAgICAwUUJDlIUFZVT05PT05OTk9NTU5PTU1OTk5OTk5OT05OTU5OT05OTU5OTk9QU1ZQSDckFQcBAgIDAgIBAgICAgMCAwIDAgICAwICAgICAgICAgECAwICAgIBAQIDAQICAwIFCyM2RlNUT09OTk1NTk5NTU5OTU1OT01NTU5OTk5OTU1OT05OTk5NTU9PUlJGNiELBAECAgICAQECAwIDAgIBAQEDAgICAgICAgICAwMDAAECAgICAgICAAIDAQECAgICAgseLkJLUFRRTk1NTk5NTU5OTU1OTk1NTk5OT05OTU1OTk9OTk5OUVNQS0ItHQkBAQECAgEBAAECAgMDAgIAAgICAgICAgEDAgMDAwICAgICAwIDAgICAgIDAgICAgICAgQLGTFDUldTT05OTk1OTk5PTk5OTk5OTU5OTk9PTk5OT05NTk9OU1dSQjAZCwQCAgMCAgICAgICAwICAgICAgIDAgICAgICAgIDAgIDAgIDAgICAgQCAgMCAgICAwECAgEBAxkuQlJQT1BPT09OTk5PTk5OT05OTU1OTk5PT05PT05NTlBPUFFCLBgEAgEDAgICAgIDAwICAgIDAgMCAgICAgMCAwICAwMCAgIDAgICAgIDAgICAwEDAwMCAgICAgIBAQgYLUNNU1NRT09NTk5OTU1PTk5OT09OTk5PTk5OTk1NUFNTSkMtGAgCAgICAgIAAQICAgICBAIBAwIBAAICAQECAgICAwMCAgICAgICAwICAgICAgIDAgICAgICAQIBAQMIGDFDU1VQTk9OT05OTU1OTk5OT09OTU5OTU5OTk5OUFVUQzEYCAMDAgMCAwIBAQICAwEDAwABAgIBAgMCAAECAwMCAgICAgICAwICAQICAwICAwMCAQICAgABAQECAgICAhgtRk9OUVBOT05OTk5OT05OTk5NTk5OTk9OTlBRT1BELBgCAgICAwMCAwICAgEBAgICAwIDAgICAgICAgMBAwICAgMCAgICAgICAgICAgICAgICAgICAgABAQECAgICAQkdN0dPVVRPTU5OTk1OT05OTk5OTk5OTk5NT1NWT0g1GwsCAgICAgICAgICAgEAAgIDAwICBAMCAgMDAwMDAwMDAgIDAgICAgICAgICAgECAgICAQICAgAAAQIBAQIBAQMLIjdGVVROTU5OTU5OTk1NTk5OTk5OTU1OTlNVSDgiCgQCAgIDAgIBAwMBAgMCAQEBAwIDAwMDAgMDAgMCAwMDAgICAgICAgICAgICAgICAgICAgICAgACAgIBAQICAAACCyM6UFJOTk9OTk5OTk1NTk5OTk5OTU5PT1FOOSQLAgICAgMDAgABAwMCAwICAAABAgIDAwMCAwMDAgIDAwICAgMCAgICAgICAwICAgMCAgIDAgICAgICAgMDAgICAgICBRUwSE9PUU9PTk9OTk5PTk5OTk5PTk9QUExELRUEAgIDAgIDAgMDAgMCAgIDAgIBAwECBAMBAgMDAgEEAwMCAgICAgIDAgICAwICAgMCAgICAgICAwICAgIDAgMEAgICAQYVNENMU1FOTk5OT05OTk5PTk5PT1FVTEAwEwYBAgIDAwIDBAICAgICAgIDAgMCAgEBAwQBAQICAQECAwICAgICAgICAgICAgICAgICAgICAAECAgABAgICAgICAgICAwEEGjFIVlFOTU1PTk5OTk5NTU5OTVNZSzAYBAICAgIDAAECAwICAgMBAQICAgICAwICAwICAgIDAAECAgIBAgICAgICAgICAgICAgICAgECAAECAgEBAgICAgMEAgICAgICCR5BU1BPTk1OT05PTk5NTU5OTlJYRiAIAwICAgICAAEDAwICAgMBAQICAwMDAwEDAgIDAgIDAQEDAgMDAgICAgIDAgICAgICAgICAgICAgICAwICAgEBAQIDAgIBAgICAQ8wR0tQUFBOT05PTk5NTU9RUExJMQ4DAgMCAQICAgECAwICAgIEAwIDAgMDAgICAgMDAgMDAgIDBAMCAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMBAAICAgIBAwIBAgwkO0hTVFBOT05OT09NTVFVVEc5IAgBAwMCAQEDAgICAgEBAwMCAgIDAwICAwICAgMCAwIDAgMDAwMDAgMCAgICAgICAwICAgMCAgICAQICAgEBAgICAgIDAQECAgABAQUTLD9TVlFOTk1NTk5OTlFXUjwlDAIBAgIBAQMDAwICAgEBAgICAwICAgEDAwIDAgIBAQIDAgMDAgMCAgICAgICAgICAwICAwMCAgMCAgICAgABAgICAgICAAECAgIBAQECGTNOVlBOTU1OT05PUE9USy0UBAMCAgIAAQIDAgICAwABAgICAgECAQEDAgMCAgMAAQICBAICAgECAgQCAwMCAwICAwIDAgMDAgIDAgIBAgICAgMCAgIDAgICAwICAgIBEChMU09PT09OTk9PT01QRCMMAwEBAgICAgIDAgICAgMCAgMCAgICAgIDAwEBAgICAgMDAgICAwEBAgICAgMDAwMDAgICAwMCAgICAgMDAwICAgICAgIDAgICAgICAgMCBhg8SUxRUk5OTk9RUkpDMhMFAgEBAQQCAgMCAgIDAwICAgMCAgIEAgIDAgECAgMDAwICAgMDAwEBAgICAgICAQICAgICAwICAgMCAgICAgICAgICAgICAgIDAgIDAgICAxEwQEtTUk5OT05SVUk5IwoDAgICAgMCAgMCAAECAwABAgIBAQMDAgECAwICAgICAgMDAgICAgECAgICAgICAQICAwIDAgICAgICAgICAgICAgICAgICAwICAgIDAgMDBAojOEhWVE9OTlBVVkcwGAMCAgIDAwMDAwICAQECAwECAwICAgMDAgECAgICAgMCAwIBAAEBAgEBAgICAgIDAgICAgICAgMCAwIDAgMCAwICAgICAgIDAgICAgICAgQCAwMPKT9UVU5PTk1VVD0lCAECAgMDAgQCAwICAwICAwIDAwMCAgIDAwMDAQICAgQCAgICAgMDBAICAgMDAgICAgICAwMCAgICAgIDAgICAwICAgMCAgIDAgMCAwMCAgMCAgIGGjVRU05RT05TUTUYAwICAwICAwMCAwIEAgMDAwMDAgQDAwIDAwICAgIDAwMDAgIEAgMDAwMDAgICAgICAgIDAgECAgMDAQICAgICAgICAgMCAwICAwICAwICAgICAgICDipIT01SUk5OSCoOAwMDAgIDAwIDAgICAgIDAwMDAwMCAgIDBAIDBAECAwIBAQICAgICBAICAgICAgICAQMCAgICAgICAgMCAgICAgICAgICAgICAgICAgIDAgICAgIBBx08R0xVVU5HPh4IAQMDAgMCAgMBAwMCAgICAwIDAgIDAwMCAgMCAgECAgIBAQICAgMCAgICAgMCAgICAgICAwICAgICAgMDAgECAgICAgMCAgIDAgICAwICAgICAgICBxg1Q0xWVUxDNRgHAgMDAwMCAwICAwICAgMCAwICAwMDAgMDAwICAwIDAwMDAwEDAQIDAgMDAgICAgMDAgMCAgICAgIDAgMCAgICAwICAgICAgIDAgICAgIDAgICAgIBBA4oPUxZWUw7KQ4EAQICAgIDAgQDAwIDAwIEAgICAwICAwIDAgICAgMCAwQCAgEBAQICAwIDAgMBAgICAgMDAgMDAgICAgICAgICAgICAgIBAgICAQICAgICAgICAgIBAgYeNkxdXU01HgUCAQICAgEDAgICAwIDAQEDAgEBAgIAAQICAgIDAwEBAwMDAwIDAAEDAgICAgIBAQMEAgMCAgIDAgMCAgMCAgMCAgICAgIBAgICAgICAgICAgICAgMCAgMaM0tdXk0zGAICAgICAQABAgMCAwMDAgECAgEBAgIAAQICAgICAgABAgICAwIDAAICAgICAgMCAgMDAwMCAwIDAgMCAwECAgEDBAICAgICAgIDAgICAwICAgMCAgICAwMQK0VZWUQpDwIDAgICAwICAgMCAgMCAgICAgICAgICAgEDAgICAgEBAgMCAgMCAgICAwICAwMCAgIDAgIDAwICAwIDAgMDAgMCBAICAgMCAgIDAgICAwICAgMCAgIDAgMIHzxPTjocCAICAgICAgICAgMCAQMDAgICAgICAgICAgIDAgICAgAAAgICAgIDAgICAwICAQICAgMCAgICAgICAgICAgIDAgICAgMCAgICAgICAgICAgIDAgMCAgIDAgIEFTZHRTETBAECAQECAgICAwICAgICAgICAgEBAgMAAQIDAgICAgICAgIBAQIDAgICAgEBAgICAgICAgMCAgICAgICAgICAQMCAwICAgICAgICAQIDAgICAgICAgICAgMBDzBAPioNAgICAAEDAgICAgMCAgICAgICAgEBAwIBAQIBAgICAgICAgMBAQICAgICAgAB' },\n}\n\n\n/** Decode a packed alpha entry into Float32Array (0\u20131). */\nexport function decodeCalibratedAlpha(entry) {\n const binary = typeof atob === 'function'\n ? atob(entry.dataBase64)\n : Buffer.from(entry.dataBase64, 'base64').toString('binary')\n\n const map = new Float32Array(entry.width * entry.height)\n for (let i = 0; i < map.length; i++) {\n map[i] = binary.charCodeAt(i) / 255\n }\n return map\n}\n\n/** @returns {{ data: Float32Array, width: number, height: number, source: string }|null} */\nexport function loadCalibratedAlphaMap(key) {\n const entry = CALIBRATED_ALPHA_ENTRIES[key]\n if (!entry) return null\n return {\n data: decodeCalibratedAlpha(entry),\n width: entry.width,\n height: entry.height,\n source: entry.source,\n }\n}\n", "/**\n * Gemini watermark position/size detection for different image dimensions.\n *\n * Gemini currently has two visible watermark profiles:\n * - V2/current (Gemini 3.5+): 36\u00D736 small, 96\u00D796 large\n * - V1/legacy (pre-Gemini 3.5): 48\u00D748 small, 96\u00D796 large\n *\n * The watermark is always placed in the bottom-right corner as a white overlay.\n */\n\n/** Dimension threshold \u2014 large only when both dimensions exceed this value. */\nconst LARGE_IMAGE_THRESHOLD = 1024\n\n/** @typedef {'current'|'legacy'} GeminiWatermarkProfile */\n\n/** @type {Record<GeminiWatermarkProfile, Record<'small'|'large', { size: number, alphaMapKey: string, margin?: number }>>} */\nconst GEMINI_WATERMARK_PROFILES = {\n current: {\n small: { size: 36, alphaMapKey: 'gemini-v2-36' },\n large: { size: 96, margin: 192, alphaMapKey: 'gemini-v2-96' },\n },\n legacy: {\n small: { size: 48, margin: 32, alphaMapKey: 'gemini-48' },\n large: { size: 96, margin: 64, alphaMapKey: 'gemini-96' },\n },\n}\n\n/** Backwards-compatible alias for the legacy profile table. */\nconst GEMINI_WATERMARK_SIZES = GEMINI_WATERMARK_PROFILES.legacy\n\n/**\n * Normalize profile aliases used by the CLI and SDK.\n * @param {string|{ profile?: string }|undefined} profile\n * @returns {GeminiWatermarkProfile}\n */\nfunction normalizeGeminiProfile(profile) {\n const value = typeof profile === 'object' && profile\n ? profile.profile\n : profile\n\n if (value === 'legacy' || value === 'v1' || value === 'V1') return 'legacy'\n return 'current'\n}\n\n/**\n * Determine which watermark tier applies for a given image dimension.\n * @param {number} width\n * @param {number} height\n * @returns {'small'|'large'}\n */\nfunction getWatermarkTier(width, height) {\n return (width > LARGE_IMAGE_THRESHOLD && height > LARGE_IMAGE_THRESHOLD)\n ? 'large'\n : 'small'\n}\n\n/**\n * Resolve V2 small margin by inferring the canonical large source size.\n * @param {number} width\n * @param {number} height\n * @returns {number}\n */\nfunction calculateCurrentSmallMargin(width, height) {\n const longSide = Math.max(width, height)\n const shortSide = Math.min(width, height)\n\n let sourceLongDim\n if (shortSide >= 566) {\n sourceLongDim = 2752\n } else if (shortSide >= 550) {\n sourceLongDim = 2816\n } else {\n sourceLongDim = 2848\n }\n\n return Math.round(192 * (longSide / sourceLongDim))\n}\n\n/**\n * Detect Gemini watermark configuration for given image dimensions.\n * Returns null if the image is too small to contain the watermark region.\n *\n * @param {number} width - Image width in pixels\n * @param {number} height - Image height in pixels\n * @param {string|{ profile?: string }} [profile='current'] - current/V2 or legacy/V1\n * @returns {{ tier: string, profile: GeminiWatermarkProfile, size: number, margin: number, alphaMapKey: string }|null}\n */\nexport function detectGeminiWatermarkConfig(width, height, profile = 'current') {\n const normalizedProfile = normalizeGeminiProfile(profile)\n const tier = getWatermarkTier(width, height)\n const config = GEMINI_WATERMARK_PROFILES[normalizedProfile][tier]\n const margin = config.margin ?? calculateCurrentSmallMargin(width, height)\n\n // Image must be large enough to contain the watermark + margins\n const minDim = config.size + margin\n if (width < minDim || height < minDim) return null\n\n return { tier, profile: normalizedProfile, ...config, margin }\n}\n\n/**\n * Calculate the expected watermark bounding box position.\n *\n * @param {number} width - Image width in pixels\n * @param {number} height - Image height in pixels\n * @param {string|{ profile?: string }} [profile='current'] - current/V2 or legacy/V1\n * @returns {{ x: number, y: number, width: number, height: number }|null}\n */\nexport function calculateGeminiWatermarkPosition(width, height, profile = 'current') {\n const config = detectGeminiWatermarkConfig(width, height, profile)\n if (!config) return null\n\n return {\n x: width - config.margin - config.size,\n y: height - config.margin - config.size,\n width: config.size,\n height: config.size,\n }\n}\n\n/**\n * Get full watermark info including alpha map key for a given image.\n *\n * @param {number} width - Image width in pixels\n * @param {number} height - Image height in pixels\n * @param {string|{ profile?: string }} [profile='current'] - current/V2 or legacy/V1\n * @returns {{ profile: GeminiWatermarkProfile, tier: string, alphaMapKey: string, size: number, margin: number, position: { x: number, y: number, width: number, height: number } }|null}\n */\nexport function getGeminiWatermarkInfo(width, height, profile = 'current') {\n const config = detectGeminiWatermarkConfig(width, height, profile)\n if (!config) return null\n\n return {\n profile: config.profile,\n tier: config.tier,\n alphaMapKey: config.alphaMapKey,\n size: config.size,\n margin: config.margin,\n position: {\n x: width - config.margin - config.size,\n y: height - config.margin - config.size,\n width: config.size,\n height: config.size,\n },\n }\n}\n\nexport {\n GEMINI_WATERMARK_PROFILES,\n GEMINI_WATERMARK_SIZES,\n LARGE_IMAGE_THRESHOLD,\n calculateCurrentSmallMargin,\n getWatermarkTier,\n normalizeGeminiProfile,\n}\n", "/**\n * Alpha map management for Gemini watermarks.\n *\n * Calibrated maps are embedded from GeminiWatermarkTool v0.3.1 captures\n * (see scripts/embed-alpha-maps.mjs and assets/masks/).\n */\n\nimport {\n CALIBRATED_ALPHA_ENTRIES,\n decodeCalibratedAlpha,\n loadCalibratedAlphaMap,\n} from '../calibratedAlphaData.js'\n\nconst geminiAlphaMapRegistry = new Map()\n\nconst GEMINI_ALPHA_MAP_KEYS = [\n 'gemini-v2-36',\n 'gemini-v2-96',\n 'gemini-48',\n 'gemini-96',\n]\n\nfor (const key of GEMINI_ALPHA_MAP_KEYS) {\n const loaded = loadCalibratedAlphaMap(key)\n if (loaded) {\n geminiAlphaMapRegistry.set(key, loaded)\n }\n}\n\n/**\n * Decode a Base64-encoded alpha map (from PNG brightness data).\n * @param {string} base64Data\n * @param {number} size\n * @returns {Float32Array}\n */\nexport function decodeAlphaMapFromBase64(base64Data, size) {\n return decodeCalibratedAlpha({ width: size, height: size, dataBase64: base64Data })\n}\n\n/**\n * Load an alpha map from a URL (browser) or file path (Node.js).\n * @param {string} source\n * @param {number} size\n * @returns {Promise<Float32Array>}\n */\nexport async function loadAlphaMapFromPNG(source, size) {\n if (typeof document !== 'undefined' && typeof createImageBitmap === 'function') {\n const response = await fetch(source)\n const blob = await response.blob()\n const bitmap = await createImageBitmap(blob)\n\n const canvas = new OffscreenCanvas(size, size)\n const ctx = canvas.getContext('2d')\n ctx.drawImage(bitmap, 0, 0, size, size)\n\n const imageData = ctx.getImageData(0, 0, size, size)\n const map = new Float32Array(size * size)\n\n for (let i = 0; i < size * size; i++) {\n const idx = i * 4\n map[i] = Math.max(imageData.data[idx], imageData.data[idx + 1], imageData.data[idx + 2]) / 255\n }\n return map\n }\n\n const { readFile } = await import('node:fs/promises')\n const fileData = await readFile(source)\n\n if (fileData[0] === 0x89 && fileData[1] === 0x50) {\n const sharp = (await import('sharp')).default\n const { data, info } = await sharp(fileData).ensureAlpha().raw().toBuffer({ resolveWithObject: true })\n const map = new Float32Array(info.width * info.height)\n for (let i = 0; i < map.length; i++) {\n const base = i * info.channels\n map[i] = Math.max(data[base], data[base + 1], data[base + 2]) / 255\n }\n return map\n }\n\n const map = new Float32Array(size * size)\n for (let i = 0; i < Math.min(fileData.length, size * size); i++) {\n map[i] = fileData[i] / 255\n }\n return map\n}\n\n/**\n * @param {string} key\n * @returns {{ data: Float32Array, width: number, height: number, source: string }|null}\n */\nexport function getGeminiAlphaMap(key) {\n return geminiAlphaMapRegistry.get(key) || loadCalibratedAlphaMap(key)\n}\n\nexport function registerGeminiAlphaMap(key, data, size, source = 'custom') {\n geminiAlphaMapRegistry.set(key, { data, width: size, height: size, source })\n}\n\nexport async function loadAndRegisterAlphaMap(key, pngSource, size) {\n const data = await loadAlphaMapFromPNG(pngSource, size)\n registerGeminiAlphaMap(key, data, size, pngSource)\n}\n\nexport function listGeminiAlphaMapKeys() {\n return Array.from(new Set([...geminiAlphaMapRegistry.keys(), ...Object.keys(CALIBRATED_ALPHA_ENTRIES)]))\n}\n\nexport { geminiAlphaMapRegistry, CALIBRATED_ALPHA_ENTRIES, loadCalibratedAlphaMap }\n", "/**\n * Post-removal validation metrics for Gemini image watermark removal.\n * Rejects false-positive detections before committing pixel changes.\n */\n\nconst HALO_MIN_ALPHA = 0.12\nconst HALO_MAX_ALPHA = 0.35\nconst HALO_OUTSIDE_ALPHA_MAX = 0.01\nconst HALO_OUTER_MARGIN = 3\nconst MIN_HALO_VISIBILITY = 0.35\nconst MAX_RESIDUAL_NCC_RATIO = 0.55\nconst NEAR_BLACK_THRESHOLD = 5\n\n/**\n * Deep-clone ImageData-like object.\n * @param {{ width: number, height: number, data: Uint8ClampedArray }} imageData\n */\nexport function cloneImageData(imageData) {\n return {\n width: imageData.width,\n height: imageData.height,\n data: new Uint8ClampedArray(imageData.data),\n }\n}\n\n/**\n * Measure how much brighter the watermark band is vs surrounding pixels on the original.\n * Real Gemini overlays produce a visible halo before removal.\n */\nexport function assessAlphaBandHalo(imageData, position, alphaMap) {\n let bandSum = 0\n let bandSq = 0\n let bandCount = 0\n let outerSum = 0\n let outerSq = 0\n let outerCount = 0\n\n for (let row = -HALO_OUTER_MARGIN; row < position.height + HALO_OUTER_MARGIN; row++) {\n for (let col = -HALO_OUTER_MARGIN; col < position.width + HALO_OUTER_MARGIN; col++) {\n const pixelX = position.x + col\n const pixelY = position.y + row\n if (pixelX < 0 || pixelY < 0 || pixelX >= imageData.width || pixelY >= imageData.height) {\n continue\n }\n\n const idx = (pixelY * imageData.width + pixelX) * 4\n const lum = 0.2126 * imageData.data[idx]\n + 0.7152 * imageData.data[idx + 1]\n + 0.0722 * imageData.data[idx + 2]\n\n const inside = row >= 0 && col >= 0 && row < position.height && col < position.width\n const alpha = inside ? alphaMap[row * position.width + col] : 0\n\n if (inside && alpha >= HALO_MIN_ALPHA && alpha <= HALO_MAX_ALPHA) {\n bandSum += lum\n bandSq += lum * lum\n bandCount++\n continue\n }\n\n if (!inside || alpha <= HALO_OUTSIDE_ALPHA_MAX) {\n outerSum += lum\n outerSq += lum * lum\n outerCount++\n }\n }\n }\n\n const bandMean = bandCount > 0 ? bandSum / bandCount : 0\n const outerMean = outerCount > 0 ? outerSum / outerCount : 0\n const outerStd = outerCount > 0\n ? Math.sqrt(Math.max(0, outerSq / outerCount - outerMean * outerMean))\n : 1\n\n const deltaLum = bandMean - outerMean\n const visibility = deltaLum / Math.max(1, outerStd)\n\n return { bandCount, outerCount, deltaLum, visibility }\n}\n\n/** Ratio of near-black pixels inside the watermark region after restoration. */\nexport function calculateNearBlackRatio(imageData, position) {\n let nearBlack = 0\n let total = 0\n\n for (let row = 0; row < position.height; row++) {\n for (let col = 0; col < position.width; col++) {\n const idx = ((position.y + row) * imageData.width + (position.x + col)) * 4\n const r = imageData.data[idx]\n const g = imageData.data[idx + 1]\n const b = imageData.data[idx + 2]\n if (r <= NEAR_BLACK_THRESHOLD && g <= NEAR_BLACK_THRESHOLD && b <= NEAR_BLACK_THRESHOLD) {\n nearBlack++\n }\n total++\n }\n }\n\n return total > 0 ? nearBlack / total : 0\n}\n\n/**\n * Lightweight NCC on restored region \u2014 residual should drop after valid removal.\n */\nfunction computeRegionNCC(imgData, imgW, position, alphaMap, step = 2) {\n let sumImg = 0\n let sumMask = 0\n let sumImgSq = 0\n let sumMaskSq = 0\n let sumProduct = 0\n let count = 0\n const { x, y, width: maskW, height: maskH } = position\n\n for (let my = 0; my < maskH; my += step) {\n for (let mx = 0; mx < maskW; mx += step) {\n const alpha = alphaMap[my * maskW + mx]\n if (alpha < 0.01) continue\n\n const idx = ((y + my) * imgW + (x + mx)) * 4\n const brightness = (imgData[idx] + imgData[idx + 1] + imgData[idx + 2]) / 3\n sumImg += brightness\n sumMask += alpha\n sumImgSq += brightness * brightness\n sumMaskSq += alpha * alpha\n sumProduct += brightness * alpha\n count++\n }\n }\n\n if (count < 10) return 0\n\n const meanImg = sumImg / count\n const meanMask = sumMask / count\n const numerator = (sumProduct / count) - (meanImg * meanMask)\n const denomImg = Math.sqrt(Math.max(0, (sumImgSq / count) - meanImg * meanImg))\n const denomMask = Math.sqrt(Math.max(0, (sumMaskSq / count) - meanMask * meanMask))\n\n if (denomImg < 1e-6 || denomMask < 1e-6) return 0\n return Math.max(0, numerator / (denomImg * denomMask))\n}\n\n/**\n * Validate that reverse alpha removal improved the watermark region without artifacts.\n *\n * @returns {{ valid: boolean, decisionTier: string, haloVisibility: number, residualNccRatio: number, nearBlackRatio: number }}\n */\nexport function validateRestoration(originalImageData, restoredImageData, position, alphaMap, preRemovalNcc) {\n const halo = assessAlphaBandHalo(originalImageData, position, alphaMap)\n const nearBlackRatio = calculateNearBlackRatio(restoredImageData, position)\n const postNcc = computeRegionNCC(restoredImageData.data, restoredImageData.width, position, alphaMap)\n const residualNccRatio = preRemovalNcc > 0 ? postNcc / preRemovalNcc : postNcc\n\n // Original must show watermark-like halo; restored region must not collapse to black.\n const haloOk = halo.bandCount >= 8 && halo.visibility >= MIN_HALO_VISIBILITY\n const residualOk = postNcc < 0.35 || residualNccRatio <= MAX_RESIDUAL_NCC_RATIO\n const noDarkHole = nearBlackRatio < 0.35\n\n const valid = haloOk && residualOk && noDarkHole\n\n return {\n valid,\n decisionTier: valid ? 'validated' : 'rejected',\n haloVisibility: halo.visibility,\n residualNccRatio,\n nearBlackRatio,\n }\n}\n", "/**\n * Gemini image watermark removal processor.\n *\n * Pipeline:\n * 1. Detect watermark tier (48 or 96) based on image dimensions\n * 2. Load corresponding alpha map\n * 3. NCC template matching to find exact watermark position in bottom-right region\n * 4. Apply reverse alpha blending to restore original pixels\n *\n * Works with raw ImageData \u2014 environment-agnostic (browser + Node.js).\n */\n\nimport { removeWatermark } from '../blendModes.js'\nimport { getGeminiWatermarkInfo, normalizeGeminiProfile } from './geminiConfig.js'\nimport { getGeminiAlphaMap } from './geminiAlphaMaps.js'\nimport { cloneImageData, validateRestoration } from './restorationMetrics.js'\n\nconst PROFILE_ORDER = ['current', 'legacy']\nconst DEFAULT_MAX_PASSES = 4\n\n/**\n * Compute Normalized Cross-Correlation between an image region and the alpha map.\n * Measures how well the brightness pattern matches the expected watermark shape.\n *\n * @param {Uint8ClampedArray} imgData - Image pixel data (RGBA)\n * @param {number} imgW - Image width\n * @param {number} x - Region top-left X\n * @param {number} y - Region top-left Y\n * @param {Float32Array} maskAlpha - Alpha map values\n * @param {number} maskW - Mask width\n * @param {number} maskH - Mask height\n * @param {number} step - Sampling step (1 = full, 2 = half resolution)\n * @returns {number} NCC score (0\u20131, higher = better match)\n */\nfunction computeNCC(imgData, imgW, x, y, maskAlpha, maskW, maskH, step) {\n let sumImg = 0, sumMask = 0\n let sumImgSq = 0, sumMaskSq = 0\n let sumProduct = 0\n let count = 0\n\n for (let my = 0; my < maskH; my += step) {\n for (let mx = 0; mx < maskW; mx += step) {\n const alpha = maskAlpha[my * maskW + mx]\n if (alpha < 0.01) continue\n\n const px = x + mx\n const py = y + my\n const idx = (py * imgW + px) * 4\n\n // Compute brightness (average of RGB)\n const brightness = (imgData[idx] + imgData[idx + 1] + imgData[idx + 2]) / 3\n\n // The watermark adds white overlay proportional to alpha,\n // so brighter-than-expected pixels correlate with higher alpha\n sumImg += brightness\n sumMask += alpha\n sumImgSq += brightness * brightness\n sumMaskSq += alpha * alpha\n sumProduct += brightness * alpha\n count++\n }\n }\n\n if (count < 10) return 0\n\n // NCC formula\n const meanImg = sumImg / count\n const meanMask = sumMask / count\n const numerator = (sumProduct / count) - (meanImg * meanMask)\n const denomImg = Math.sqrt(Math.max(0, (sumImgSq / count) - meanImg * meanImg))\n const denomMask = Math.sqrt(Math.max(0, (sumMaskSq / count) - meanMask * meanMask))\n\n if (denomImg < 1e-6 || denomMask < 1e-6) return 0\n\n return Math.max(0, numerator / (denomImg * denomMask))\n}\n\n/**\n * Find the exact watermark position using NCC template matching.\n * Searches in a constrained region around the expected bottom-right location.\n *\n * @param {ImageData} imageData - Full image data\n * @param {{ width: number, height: number, alpha: Float32Array }} mask - Alpha mask info\n * @param {{ x: number, y: number, width: number, height: number }} expectedPosition - Expected region\n * @returns {{ x: number, y: number, confidence: number }|null}\n */\nfunction findWatermarkPosition(imageData, mask, expectedPosition) {\n const { width: imgW, height: imgH, data: imgData } = imageData\n const { width: maskW, height: maskH, alpha: maskAlpha } = mask\n\n let bestX = 0, bestY = 0, bestScore = -1\n\n const expectedX = expectedPosition?.x ?? (imgW - maskW)\n const expectedY = expectedPosition?.y ?? (imgH - maskH)\n const searchRadius = Math.max(16, Math.round(maskW * 0.75))\n const searchStartX = Math.max(0, expectedX - searchRadius)\n const searchStartY = Math.max(0, expectedY - searchRadius)\n const searchMaxX = Math.min(imgW - maskW, expectedX + searchRadius)\n const searchMaxY = Math.min(imgH - maskH, expectedY + searchRadius)\n\n // Coarse search (step=2) to quickly find approximate location\n for (let y = searchStartY; y <= searchMaxY; y += 2) {\n for (let x = searchStartX; x <= searchMaxX; x += 2) {\n const score = computeNCC(imgData, imgW, x, y, maskAlpha, maskW, maskH, 2)\n if (score > bestScore) { bestScore = score; bestX = x; bestY = y }\n }\n }\n\n // Fine search (step=1) around the best coarse match\n const fineStartX = Math.max(0, bestX - 2)\n const fineStartY = Math.max(0, bestY - 2)\n const fineEndX = Math.min(searchMaxX, bestX + 2)\n const fineEndY = Math.min(searchMaxY, bestY + 2)\n\n for (let y = fineStartY; y <= fineEndY; y++) {\n for (let x = fineStartX; x <= fineEndX; x++) {\n const score = computeNCC(imgData, imgW, x, y, maskAlpha, maskW, maskH, 1)\n if (score > bestScore) { bestScore = score; bestX = x; bestY = y }\n }\n }\n\n // Require minimum confidence threshold\n return bestScore >= 0.5 ? { x: bestX, y: bestY, confidence: bestScore } : null\n}\n\nfunction getProfilesToTry(profile) {\n if (!profile || profile === 'auto') return PROFILE_ORDER\n return [normalizeGeminiProfile(profile)]\n}\n\nfunction emptyResult(imageData, reason, attemptedProfiles, profile = null, meta = {}) {\n return {\n imageData,\n processed: false,\n confidence: 0,\n position: null,\n reason,\n profile,\n attemptedProfiles,\n decisionTier: meta.decisionTier ?? null,\n meta: meta.validation ?? null,\n }\n}\n\nfunction normalizeAdaptiveMode(adaptiveMode) {\n if (!adaptiveMode || adaptiveMode === 'auto') return 'auto'\n if (adaptiveMode === 'off') return 'off'\n return 'auto'\n}\n\nfunction copyImageData(target, source) {\n target.data.set(source.data)\n}\n\nfunction processImageWithProfile(imageData, options, profile) {\n const { width, height } = imageData\n const {\n skipDetection = false,\n forcePosition,\n adaptiveMode = 'auto',\n } = options\n const useValidation = normalizeAdaptiveMode(adaptiveMode) === 'auto' && !skipDetection && !forcePosition\n\n const info = getGeminiWatermarkInfo(width, height, profile)\n if (!info) {\n return emptyResult(imageData, 'image_too_small', [profile], profile)\n }\n\n const alphaMapEntry = getGeminiAlphaMap(info.alphaMapKey)\n if (!alphaMapEntry) {\n return emptyResult(imageData, 'missing_alpha_map', [profile], profile)\n }\n\n let position\n let confidence = 1.0\n\n if (forcePosition) {\n // Use explicitly provided position (skip NCC matching)\n position = {\n x: forcePosition.x,\n y: forcePosition.y,\n width: info.size,\n height: info.size,\n }\n } else if (skipDetection) {\n // Use expected position without NCC verification\n position = info.position\n } else {\n // NCC template matching to find exact position\n const mask = {\n width: alphaMapEntry.width,\n height: alphaMapEntry.height,\n alpha: alphaMapEntry.data,\n }\n\n const match = findWatermarkPosition(imageData, mask, info.position)\n if (!match) {\n return emptyResult(imageData, 'watermark_not_detected', [profile], profile)\n }\n\n confidence = match.confidence\n position = {\n x: match.x,\n y: match.y,\n width: alphaMapEntry.width,\n height: alphaMapEntry.height,\n }\n }\n\n const workingCopy = cloneImageData(imageData)\n removeWatermark(workingCopy, alphaMapEntry.data, position)\n\n let decisionTier = skipDetection || forcePosition ? 'ncc_only' : 'ncc_only'\n let validationMeta = null\n\n if (useValidation) {\n const preRemovalNcc = computeNCC(\n imageData.data,\n width,\n position.x,\n position.y,\n alphaMapEntry.data,\n alphaMapEntry.width,\n alphaMapEntry.height,\n 2,\n )\n const validation = validateRestoration(\n imageData,\n workingCopy,\n position,\n alphaMapEntry.data,\n preRemovalNcc,\n )\n validationMeta = validation\n\n if (!validation.valid) {\n return emptyResult(\n imageData,\n 'restoration_rejected',\n [profile],\n profile,\n { decisionTier: validation.decisionTier, validation },\n )\n }\n decisionTier = validation.decisionTier\n }\n\n copyImageData(imageData, workingCopy)\n\n return {\n imageData,\n processed: true,\n confidence,\n position,\n profile,\n attemptedProfiles: [profile],\n decisionTier,\n meta: validationMeta,\n }\n}\n\n/**\n * Process a single image to remove the Gemini watermark.\n *\n * @param {ImageData} imageData - The watermarked image (mutated in place)\n * @param {{ skipDetection?: boolean, forcePosition?: { x: number, y: number }, profile?: 'auto'|'current'|'legacy'|'v1'|'v2' }} options\n * @returns {{ imageData: ImageData, processed: boolean, confidence: number, position: { x: number, y: number, width: number, height: number }|null, profile: string|null, attemptedProfiles: string[], reason?: string }}\n */\nexport function processImage(imageData, options = {}) {\n const profile = options.profile ?? 'auto'\n const profilesToTry = getProfilesToTry(profile)\n const maxPasses = Math.max(1, options.maxPasses ?? DEFAULT_MAX_PASSES)\n const attemptedProfiles = []\n let lastResult = null\n let passCount = 0\n\n for (const activeProfile of profilesToTry) {\n if (passCount >= maxPasses) break\n\n attemptedProfiles.push(activeProfile)\n passCount++\n const result = processImageWithProfile(imageData, options, activeProfile)\n result.attemptedProfiles = [...attemptedProfiles]\n\n if (result.processed) return result\n lastResult = result\n\n if (result.reason !== 'watermark_not_detected' && result.reason !== 'restoration_rejected') break\n }\n\n return {\n ...(lastResult || emptyResult(imageData, 'watermark_not_detected', attemptedProfiles)),\n attemptedProfiles,\n }\n}\n\n/**\n * Create a reusable image processor with cached config for a specific image size.\n * Useful when processing multiple images of the same dimensions.\n *\n * @param {number} [targetWidth] - Optional fixed width (auto-detect if omitted)\n * @param {number} [targetHeight] - Optional fixed height (auto-detect if omitted)\n * @returns {{ process(imageData: ImageData, options?: object): object }}\n */\nexport function createImageProcessor(targetWidth, targetHeight) {\n // If dimensions are pre-specified, cache the lookup\n const cachedByProfile = new Map()\n\n if (targetWidth && targetHeight) {\n for (const profile of PROFILE_ORDER) {\n const info = getGeminiWatermarkInfo(targetWidth, targetHeight, profile)\n if (info) {\n cachedByProfile.set(profile, {\n info,\n alphaMap: getGeminiAlphaMap(info.alphaMapKey),\n })\n }\n }\n }\n\n return {\n /**\n * Process an image to remove the Gemini watermark.\n * @param {ImageData} imageData\n * @param {{ skipDetection?: boolean, forcePosition?: { x: number, y: number }, profile?: 'auto'|'current'|'legacy'|'v1'|'v2' }} options\n */\n process(imageData, options = {}) {\n // Use cached config if dimensions match, otherwise dynamic lookup\n if (cachedByProfile.size > 0 && imageData.width === targetWidth && imageData.height === targetHeight) {\n const profilesToTry = getProfilesToTry(options.profile ?? 'auto')\n const attemptedProfiles = []\n let lastResult = null\n\n for (const profile of profilesToTry) {\n attemptedProfiles.push(profile)\n const cached = cachedByProfile.get(profile)\n\n if (!cached?.info) {\n lastResult = emptyResult(imageData, 'image_too_small', [...attemptedProfiles], profile)\n break\n }\n\n if (!cached.alphaMap) {\n lastResult = emptyResult(imageData, 'missing_alpha_map', [...attemptedProfiles], profile)\n break\n }\n\n const result = processImageWithProfile(imageData, options, profile)\n result.attemptedProfiles = [...attemptedProfiles]\n\n if (result.processed) return result\n lastResult = result\n\n if (result.reason !== 'watermark_not_detected' && result.reason !== 'restoration_rejected') break\n }\n\n return {\n ...(lastResult || emptyResult(imageData, 'watermark_not_detected', attemptedProfiles)),\n attemptedProfiles,\n }\n }\n\n // Fallback to full dynamic processing\n return processImage(imageData, options)\n },\n }\n}\n\nexport { findWatermarkPosition, computeNCC }\n", "/**\n * CLI implementation for gemini-veo-watermark-remover.\n * Supports both video (Veo) and image (Gemini) watermark removal.\n *\n * Usage:\n * pictx remove <input> [options]\n *\n * Detects file type by extension and routes to the appropriate processor.\n */\n\nimport { parseArgs } from 'node:util'\nimport { resolve, basename, extname, join } from 'node:path'\nimport { existsSync, statSync } from 'node:fs'\nimport { readdir } from 'node:fs/promises'\nimport { readFile, writeFile, mkdir } from 'node:fs/promises'\nimport { processVideoFile } from '../sdk/node.js'\n\nconst IMAGE_EXTENSIONS = new Set(['.png', '.jpg', '.jpeg', '.webp', '.bmp', '.tiff', '.tif'])\nconst VIDEO_EXTENSIONS = new Set(['.mp4', '.webm', '.mov', '.avi', '.mkv'])\n\nconst HELP = `\npictx \u2014 Gemini/Veo Watermark Remover CLI\n\nUsage:\n pictx remove <input> [options]\n\nCommands:\n remove Remove watermark from a video or image file\n\nOptions:\n --output, -o Output file path (default: <input>_clean.<ext>)\n --out-dir Output directory for batch mode (writes <name>_clean.<ext>)\n --overwrite Overwrite output if it exists\n --format, -f Output format for images (png, jpeg, webp) [default: same as input]\n --quality, -q Output quality for lossy formats (0-100) [default: 95]\n --skip-detect Skip NCC detection, use expected position directly\n --adaptive Restoration validation: auto (default) or off\n --max-passes Max profile/pass attempts for images [default: 4]\n --legacy Images: legacy Gemini profile only. Videos: old \"Veo\" text watermark\n --no-legacy Use current Gemini 3.5+ profile only, no fallback\n --json Output result as JSON\n --verbose Show detailed progress\n --help, -h Show this help\n\nSupported formats:\n Images: PNG, JPEG, WebP, BMP, TIFF (Gemini watermark)\n Videos: MP4, WebM, MOV, AVI, MKV (Veo watermark)\n\nExamples:\n pictx remove image.png\n pictx remove image.jpg -o clean.png --format png\n pictx remove video.mp4 # Gemini 3.5+ diamond video watermark\n pictx remove old-veo-video.mp4 --legacy\n pictx remove video.mp4 -o clean.mp4 --verbose\n pictx remove old-gemini.png --legacy\n pictx remove image.jpg --no-legacy\n pictx remove ./photos --out-dir ./clean\n pictx remove image.jpg --json # machine-readable output\n\nExit codes:\n 0 Processed successfully\n 1 Single image skipped because no watermark was detected\n 2 Real failure, such as bad args, IO error, or conflicting flags\n`\n\n/**\n * Determine if a file is an image based on extension.\n * @param {string} filePath\n * @returns {'image'|'video'|'unknown'}\n */\nfunction detectFileType(filePath) {\n const ext = extname(filePath).toLowerCase()\n if (IMAGE_EXTENSIONS.has(ext)) return 'image'\n if (VIDEO_EXTENSIONS.has(ext)) return 'video'\n return 'unknown'\n}\n\n/**\n * Get the appropriate output extension for images.\n * @param {string} inputExt\n * @param {string|undefined} formatOverride\n * @returns {string}\n */\nfunction getOutputExtension(inputExt, formatOverride) {\n if (formatOverride) {\n const map = { png: '.png', jpeg: '.jpg', jpg: '.jpg', webp: '.webp' }\n return map[formatOverride.toLowerCase()] || inputExt\n }\n return inputExt\n}\n\nfunction isSupportedFile(filePath) {\n return detectFileType(filePath) !== 'unknown'\n}\n\n/**\n * Collect input files for single or batch processing.\n * @param {string} inputPath\n * @returns {Promise<string[]>}\n */\nasync function collectInputFiles(inputPath) {\n const stat = statSync(inputPath)\n if (stat.isFile()) return [inputPath]\n\n if (!stat.isDirectory()) {\n throw new Error(`Input is not a file or directory: ${inputPath}`)\n }\n\n const entries = await readdir(inputPath)\n return entries\n .map((name) => join(inputPath, name))\n .filter((filePath) => existsSync(filePath) && statSync(filePath).isFile() && isSupportedFile(filePath))\n .sort()\n}\n\nfunction buildOutputPath(inputPath, values, fileType, outDir) {\n const ext = extname(inputPath)\n const base = basename(inputPath, ext)\n const outputExt = fileType === 'image'\n ? getOutputExtension(ext, values.format)\n : ext || '.mp4'\n\n if (outDir) {\n return join(resolve(outDir), `${base}_clean${outputExt}`)\n }\n\n if (values.output) {\n return resolve(values.output)\n }\n\n return resolve(inputPath, '..', `${base}_clean${outputExt}`)\n}\n\n/**\n * Process an image file using the Gemini engine.\n * @param {string} inputPath\n * @param {string} outputPath\n * @param {{ skipDetection?: boolean, verbose?: boolean, profile?: 'auto'|'current'|'legacy', adaptiveMode?: 'auto'|'off', maxPasses?: number }} options\n * @returns {Promise<{ width: number, height: number, detected: boolean, skipped: boolean, confidence: number, profile: string|null, attemptedProfiles: string[], decisionTier: string|null }>}\n */\nasync function processImageFile(inputPath, outputPath, options = {}) {\n const { processImage } = await import('../core/gemini/imageProcessor.js')\n\n // Decode image using sharp (Node.js image processing)\n let imageData, width, height\n\n try {\n const sharp = (await import('sharp')).default\n const image = sharp(inputPath)\n const metadata = await image.metadata()\n width = metadata.width\n height = metadata.height\n\n // Get raw RGBA pixel data\n const rawBuffer = await image.ensureAlpha().raw().toBuffer()\n const data = new Uint8ClampedArray(rawBuffer.buffer, rawBuffer.byteOffset, rawBuffer.length)\n imageData = { data, width, height }\n } catch {\n // Fallback: use Canvas-like approach with raw file reading\n // This requires the 'canvas' package or similar\n throw new Error(\n 'Image decoding requires the \"sharp\" package.\\n' +\n 'Install it with: npm install sharp'\n )\n }\n\n // Process\n const result = processImage(imageData, {\n skipDetection: options.skipDetection,\n profile: options.profile ?? 'auto',\n adaptiveMode: options.adaptiveMode ?? 'auto',\n maxPasses: options.maxPasses,\n })\n\n if (options.verbose) {\n if (result.processed) {\n console.log(` Watermark detected at (${result.position.x}, ${result.position.y})`)\n console.log(` Confidence: ${(result.confidence * 100).toFixed(1)}%`)\n console.log(` Region: ${result.position.width}\u00D7${result.position.height}`)\n console.log(` Profile: ${result.profile}`)\n if (result.decisionTier) console.log(` Decision: ${result.decisionTier}`)\n } else {\n console.log(` Not processed: ${result.reason}`)\n console.log(` Profiles tried: ${(result.attemptedProfiles || []).join(', ')}`)\n }\n }\n\n if (!result.processed) {\n const inputData = await readFile(inputPath)\n await writeFile(outputPath, inputData)\n return {\n width,\n height,\n detected: false,\n skipped: true,\n confidence: 0,\n profile: result.profile,\n attemptedProfiles: result.attemptedProfiles || [],\n decisionTier: result.decisionTier ?? null,\n }\n }\n\n // Encode output using sharp\n const sharp = (await import('sharp')).default\n const outputBuffer = Buffer.from(result.imageData.data.buffer)\n const outputExt = extname(outputPath).toLowerCase()\n\n let encoder = sharp(outputBuffer, { raw: { width, height, channels: 4 } })\n\n if (outputExt === '.png') {\n encoder = encoder.png()\n } else if (outputExt === '.jpg' || outputExt === '.jpeg') {\n encoder = encoder.jpeg({ quality: options.quality || 95 })\n } else if (outputExt === '.webp') {\n encoder = encoder.webp({ quality: options.quality || 95 })\n } else {\n encoder = encoder.png()\n }\n\n await encoder.toFile(outputPath)\n\n return {\n width,\n height,\n detected: true,\n skipped: false,\n confidence: result.confidence,\n profile: result.profile,\n attemptedProfiles: result.attemptedProfiles || [],\n decisionTier: result.decisionTier ?? null,\n }\n}\n\nasync function processSingleInput(inputPath, values, profile, adaptiveMode, maxPasses, emitJson = values.json) {\n const fileType = detectFileType(inputPath)\n if (fileType === 'unknown') {\n throw new Error(`Unsupported file type: ${extname(inputPath)}`)\n }\n\n const outDir = values['out-dir'] ? resolve(values['out-dir']) : null\n const outputPath = buildOutputPath(inputPath, values, fileType, outDir)\n\n if (outDir) {\n await mkdir(outDir, { recursive: true })\n }\n\n if (existsSync(outputPath) && !values.overwrite) {\n throw new Error(`Output file already exists: ${outputPath}\\nUse --overwrite to replace.`)\n }\n\n const startTime = Date.now()\n\n if (fileType === 'image') {\n if (!emitJson) {\n console.log(`Processing image: ${inputPath}`)\n }\n\n const result = await processImageFile(inputPath, outputPath, {\n skipDetection: values['skip-detect'],\n verbose: values.verbose,\n quality: values.quality ? parseInt(values.quality, 10) : 95,\n profile,\n adaptiveMode,\n maxPasses,\n })\n const elapsed = ((Date.now() - startTime) / 1000).toFixed(1)\n\n if (emitJson) {\n console.log(JSON.stringify({\n success: result.detected,\n type: 'image',\n input: inputPath,\n output: outputPath,\n width: result.width,\n height: result.height,\n detected: result.detected,\n skipped: result.skipped,\n confidence: result.confidence,\n profile: result.profile,\n attemptedProfiles: result.attemptedProfiles,\n decisionTier: result.decisionTier,\n elapsed: parseFloat(elapsed),\n }))\n } else if (result.detected) {\n console.log(`\u2713 Watermark removed in ${elapsed}s \u2192 ${outputPath}`)\n } else {\n console.log(`\u26A0 No watermark detected, file copied unchanged \u2192 ${outputPath}`)\n }\n\n return { detected: result.detected, skipped: result.skipped, type: 'image' }\n }\n\n const videoProfile = values.legacy ? 'legacy' : 'diamond'\n const onProgress = values.verbose || !values.json\n ? (current, total) => {\n if (!values.json) {\n const pct = total > 0 ? Math.round((current / total) * 100) : 0\n process.stdout.write(`\\rProcessing: ${current}/${total} frames (${pct}%)`)\n }\n }\n : undefined\n\n const result = await processVideoFile(inputPath, outputPath, { onProgress, videoProfile })\n const elapsed = ((Date.now() - startTime) / 1000).toFixed(1)\n\n if (values.json) {\n console.log(JSON.stringify({\n success: !result.skipped,\n type: 'video',\n input: inputPath,\n output: outputPath,\n size: result.size,\n detected: !result.skipped,\n skipped: Boolean(result.skipped),\n reason: result.reason || null,\n profile: result.profile || videoProfile,\n processedFrames: result.processedFrames || 0,\n skippedFrames: result.skippedFrames || 0,\n elapsed: parseFloat(elapsed),\n }))\n } else {\n process.stdout.write('\\n')\n if (result.skipped) {\n console.log(`\u26A0 No supported ${videoProfile} video watermark processed (${result.reason || 'not_processed'}), video encoded unchanged \u2192 ${outputPath}`)\n if (videoProfile === 'diamond') {\n console.log(' For pre-Gemini-3.5 videos with the old \"Veo\" text watermark, re-run with --legacy.')\n }\n } else {\n console.log(`\u2713 ${videoProfile} video watermark removed in ${elapsed}s \u2192 ${outputPath}`)\n }\n }\n\n return { detected: !result.skipped, skipped: Boolean(result.skipped), type: 'video' }\n}\n\nexport async function main(argv = process.argv.slice(2)) {\n if (argv.length === 0 || argv.includes('--help') || argv.includes('-h')) {\n console.log(HELP)\n process.exit(0)\n }\n\n const command = argv[0]\n if (command !== 'remove') {\n console.error(`Unknown command: ${command}\\nRun \"pictx --help\" for usage.`)\n process.exit(2)\n }\n\n const { values, positionals } = parseArgs({\n args: argv.slice(1),\n options: {\n output: { type: 'string', short: 'o' },\n 'out-dir': { type: 'string' },\n overwrite: { type: 'boolean', default: false },\n format: { type: 'string', short: 'f' },\n quality: { type: 'string', short: 'q' },\n 'skip-detect': { type: 'boolean', default: false },\n adaptive: { type: 'string', default: 'auto' },\n 'max-passes': { type: 'string', default: '4' },\n legacy: { type: 'boolean', default: false },\n 'no-legacy': { type: 'boolean', default: false },\n json: { type: 'boolean', default: false },\n verbose: { type: 'boolean', default: false },\n },\n allowPositionals: true,\n })\n\n if (values.output && values['out-dir']) {\n const msg = 'Cannot specify both --output and --out-dir'\n if (values.json) console.log(JSON.stringify({ success: false, error: msg }))\n else console.error(`Error: ${msg}`)\n process.exit(2)\n }\n\n if (values.legacy && values['no-legacy']) {\n if (values.json) {\n console.log(JSON.stringify({\n success: false,\n error: 'Cannot specify both --legacy and --no-legacy',\n }))\n } else {\n console.error('Error: Cannot specify both --legacy and --no-legacy')\n }\n process.exit(2)\n }\n\n const adaptiveMode = values.adaptive === 'off' ? 'off' : 'auto'\n const maxPasses = Math.max(1, parseInt(values['max-passes'], 10) || 4)\n\n const inputFile = positionals[0]\n if (!inputFile) {\n console.error('Error: No input file specified.\\nUsage: pictx remove <input>')\n process.exit(2)\n }\n\n const inputPath = resolve(inputFile)\n if (!existsSync(inputPath)) {\n console.error(`Error: File not found: ${inputPath}`)\n process.exit(2)\n }\n\n const profile = values.legacy\n ? 'legacy'\n : values['no-legacy']\n ? 'current'\n : 'auto'\n\n try {\n const inputFiles = await collectInputFiles(inputPath)\n if (inputFiles.length === 0) {\n throw new Error(`No supported image/video files found in: ${inputPath}`)\n }\n\n const isBatch = inputFiles.length > 1 || statSync(inputPath).isDirectory()\n if (isBatch && values.output && !values['out-dir']) {\n throw new Error('Use --out-dir for directory/batch processing instead of --output')\n }\n\n let skippedImages = 0\n const batchResults = []\n\n for (const filePath of inputFiles) {\n const perFileValues = { ...values }\n if (isBatch) {\n perFileValues.output = undefined\n }\n\n const result = await processSingleInput(\n filePath,\n perFileValues,\n profile,\n adaptiveMode,\n maxPasses,\n values.json && !isBatch,\n )\n batchResults.push({ input: filePath, ...result })\n if (result.type === 'image' && !result.detected) skippedImages++\n }\n\n if (isBatch && values.json) {\n console.log(JSON.stringify({\n success: skippedImages < inputFiles.length,\n batch: true,\n count: inputFiles.length,\n skippedImages,\n results: batchResults,\n }))\n } else if (!values.json && isBatch) {\n console.log(`Batch complete: ${inputFiles.length} file(s), ${skippedImages} image(s) skipped (no watermark detected)`)\n }\n\n if (!isBatch && batchResults[0]?.type === 'image' && !batchResults[0]?.detected) {\n process.exitCode = 1\n }\n } catch (err) {\n if (values.json) {\n console.log(JSON.stringify({ success: false, error: err.message }))\n } else {\n console.error(`\\nError: ${err.message}`)\n }\n process.exit(2)\n }\n}\n", "/**\n * Node.js SDK entry point.\n * Provides file-system based APIs using ffmpeg.wasm backend.\n */\n\nimport { readFile, writeFile } from 'node:fs/promises';\nimport { processVideo } from '../video/pipeline.js';\n\nexport { removeWatermark } from '../core/blendModes.js';\nexport { processFrame, createFrameProcessor } from '../core/frameProcessor.js';\nexport {\n getVeoWatermarkInfo,\n detectVeoWatermarkConfig,\n calculateWatermarkPosition,\n normalizeVideoWatermarkProfile,\n GEMINI_DIAMOND_VIDEO_CATALOG,\n LEGACY_VEO_TEXT_CATALOG,\n VIDEO_WATERMARK_PROFILES,\n VEO_WATERMARK_CATALOG,\n} from '../core/veoConfig.js';\nexport { getEmbeddedAlphaMap, registerAlphaMap } from '../core/embeddedAlphaMaps.js';\nexport { processVideo } from '../video/pipeline.js';\n\n/**\n * Process a video file from disk and write result to output path.\n *\n * @param {string} inputPath - Source video file path\n * @param {string} outputPath - Destination file path\n * @param {{ onProgress?: (current: number, total: number) => void, videoProfile?: 'diamond'|'legacy' }} options\n */\nexport async function processVideoFile(inputPath, outputPath, options = {}) {\n const inputData = await readFile(inputPath);\n const result = await processVideo(new Uint8Array(inputData), {\n environment: 'node',\n ...options,\n });\n\n const output = result instanceof Blob\n ? new Uint8Array(await result.arrayBuffer())\n : result;\n\n await writeFile(outputPath, output);\n return {\n inputPath,\n outputPath,\n size: output.length,\n profile: result.videoProfile,\n processedFrames: result.processedFrames,\n skippedFrames: result.skippedFrames,\n skipped: result.skipped,\n reason: result.reason,\n };\n}\n", "/**\n * WebCodecs-based video decoder (browser only).\n */\n\nimport { VideoDecoderBase } from './videoDecoder.base.js';\n\nexport class WebCodecsDecoder extends VideoDecoderBase {\n #videoInfo = null;\n #videoMp4 = null;\n #sourceBuffer = null;\n #frameIndex = 0;\n #audioData = null;\n\n async open(source) {\n if (typeof VideoDecoder === 'undefined') {\n throw new Error('WebCodecs API not available. Use Chrome 94+ or a fallback decoder.');\n }\n\n this.#sourceBuffer = await source.arrayBuffer();\n const { createFile } = await import('mp4box');\n\n const probeFile = createFile();\n const info = await new Promise((resolve, reject) => {\n probeFile.onReady = resolve;\n probeFile.onError = reject;\n this.#sourceBuffer.fileStart = 0;\n probeFile.appendBuffer(this.#sourceBuffer);\n probeFile.flush();\n });\n\n const videoTrack = info.videoTracks[0];\n if (!videoTrack) {\n throw new Error('No video track found');\n }\n\n this.#videoInfo = {\n width: videoTrack.video.width,\n height: videoTrack.video.height,\n frameCount: videoTrack.nb_samples,\n duration: videoTrack.duration / videoTrack.timescale,\n fps: videoTrack.nb_samples / (videoTrack.duration / videoTrack.timescale),\n codec: videoTrack.codec,\n videoTrackId: videoTrack.id,\n };\n\n const audioTrack = info.audioTracks?.[0] ?? null;\n if (audioTrack) {\n this.#audioData = await this.#readTrackSamples(createFile, audioTrack);\n }\n\n this.#videoMp4 = createFile();\n await new Promise((resolve, reject) => {\n this.#videoMp4.onReady = resolve;\n this.#videoMp4.onError = reject;\n const buffer = this.#sourceBuffer.slice(0);\n buffer.fileStart = 0;\n this.#videoMp4.appendBuffer(buffer);\n this.#videoMp4.flush();\n });\n\n return this.#videoInfo;\n }\n\n /**\n * @param {typeof import('mp4box').createFile} createFile\n * @param {object} track\n */\n async #readTrackSamples(createFile, track) {\n const mp4 = createFile();\n const samples = [];\n\n await new Promise((resolve, reject) => {\n mp4.onReady = () => {\n mp4.onSamples = (_trackId, _user, trackSamples) => {\n for (const sample of trackSamples) {\n samples.push({\n data: sample.data,\n timestamp: Math.round((sample.cts * 1_000_000) / sample.timescale),\n duration: Math.round((sample.duration * 1_000_000) / sample.timescale),\n type: sample.is_sync ? 'key' : 'delta',\n });\n }\n };\n mp4.setExtractionOptions(track.id);\n mp4.start();\n mp4.flush();\n queueMicrotask(resolve);\n };\n mp4.onError = reject;\n const buffer = this.#sourceBuffer.slice(0);\n buffer.fileStart = 0;\n mp4.appendBuffer(buffer);\n mp4.flush();\n });\n\n return {\n codec: 'aac',\n sampleRate: track.audio?.sample_rate ?? 48000,\n numberOfChannels: track.audio?.channel_count ?? 2,\n samples,\n };\n }\n\n async extractAudio() {\n return this.#audioData;\n }\n\n async *decodeFrames() {\n if (!this.#videoMp4 || !this.#videoInfo) {\n throw new Error('Call open() first');\n }\n\n const { width, height, videoTrackId } = this.#videoInfo;\n const pendingFrames = [];\n let resolveNext = null;\n let done = false;\n\n const decoder = new VideoDecoder({\n output: (frame) => {\n const canvas = new OffscreenCanvas(width, height);\n const ctx = canvas.getContext('2d');\n ctx.drawImage(frame, 0, 0);\n const imageData = ctx.getImageData(0, 0, width, height);\n\n const decoded = {\n imageData,\n timestamp: frame.timestamp,\n frameIndex: this.#frameIndex++,\n };\n\n frame.close();\n\n if (resolveNext) {\n const r = resolveNext;\n resolveNext = null;\n r(decoded);\n } else {\n pendingFrames.push(decoded);\n }\n },\n error: (e) => {\n console.error('Decoder error:', e);\n done = true;\n },\n });\n\n decoder.configure({\n codec: this.#videoInfo.codec,\n codedWidth: width,\n codedHeight: height,\n });\n\n this.#videoMp4.onSamples = (_trackId, _user, trackSamples) => {\n for (const sample of trackSamples) {\n const chunk = new EncodedVideoChunk({\n type: sample.is_sync ? 'key' : 'delta',\n timestamp: (sample.cts * 1_000_000) / sample.timescale,\n duration: (sample.duration * 1_000_000) / sample.timescale,\n data: sample.data,\n });\n decoder.decode(chunk);\n }\n };\n\n this.#videoMp4.setExtractionOptions(videoTrackId);\n this.#videoMp4.start();\n\n while (!done) {\n if (pendingFrames.length > 0) {\n yield pendingFrames.shift();\n } else {\n const frame = await new Promise((resolve) => {\n resolveNext = resolve;\n if (decoder.decodeQueueSize === 0) {\n decoder.flush().then(() => {\n done = true;\n resolve(null);\n });\n }\n });\n if (frame) yield frame;\n else break;\n }\n }\n\n decoder.close();\n }\n\n async close() {\n this.#videoMp4 = null;\n this.#videoInfo = null;\n this.#audioData = null;\n this.#sourceBuffer = null;\n this.#frameIndex = 0;\n }\n}\n", "/**\n * Video decoder factory \u2014 selects WebCodecs or ffmpeg based on environment.\n */\n\nimport { WebCodecsDecoder } from './videoDecoder.webcodecs.js';\n\nexport { VideoDecoderBase } from './videoDecoder.base.js';\nexport { WebCodecsDecoder } from './videoDecoder.webcodecs.js';\n\n/**\n * @param {'browser' | 'node' | 'auto'} [environment]\n */\nexport function createDecoder(environment = 'auto') {\n if (\n environment === 'browser' ||\n (environment === 'auto' && typeof VideoDecoder !== 'undefined')\n ) {\n return new WebCodecsDecoder();\n }\n\n throw new Error(\n 'Node.js decoding requires createNodeDecoder() from videoDecoder.ffmpeg.js',\n );\n}\n\n/** Lazy-load ffmpeg decoder for Node.js CLI usage. */\nexport async function createNodeDecoder() {\n const { FfmpegDecoder } = await import('./videoDecoder.ffmpeg.js');\n return new FfmpegDecoder();\n}\n", "/**\n * WebCodecs + mp4-muxer encoder (browser).\n */\n\nimport { VideoEncoderBase } from './videoEncoder.base.js';\n\nexport class WebCodecsEncoder extends VideoEncoderBase {\n #muxer = null;\n #encoder = null;\n #frameCount = 0;\n #audioSamples = null;\n _target = null;\n\n async init(config) {\n if (typeof VideoEncoder === 'undefined') {\n throw new Error('WebCodecs API not available');\n }\n\n const { Muxer, ArrayBufferTarget } = await import('mp4-muxer');\n\n const target = new ArrayBufferTarget();\n\n const muxerConfig = {\n target,\n video: {\n codec: 'avc',\n width: config.width,\n height: config.height,\n },\n fastStart: 'in-memory',\n };\n\n if (config.audio) {\n muxerConfig.audio = {\n codec: config.audio.codec || 'aac',\n numberOfChannels: config.audio.numberOfChannels || 2,\n sampleRate: config.audio.sampleRate || 48000,\n };\n }\n\n this.#muxer = new Muxer(muxerConfig);\n\n this.#encoder = new VideoEncoder({\n output: (chunk, meta) => {\n this.#muxer.addVideoChunk(chunk, meta);\n },\n error: (e) => {\n console.error('Encoder error:', e);\n },\n });\n\n this.#encoder.configure({\n codec: config.codec || 'avc1.42001f',\n width: config.width,\n height: config.height,\n bitrate: config.bitrate || 5_000_000,\n framerate: config.fps,\n });\n\n this._target = target;\n }\n\n async encodeFrame(imageData, timestamp) {\n const frame = new VideoFrame(imageData.data.buffer, {\n format: 'RGBA',\n codedWidth: imageData.width,\n codedHeight: imageData.height,\n timestamp,\n });\n\n const isKey = this.#frameCount % 30 === 0;\n this.#encoder.encode(frame, { keyFrame: isKey });\n frame.close();\n this.#frameCount++;\n }\n\n /**\n * Queue encoded audio samples for passthrough muxing after video finalize.\n * @param {{ codec?: string, sampleRate: number, numberOfChannels: number, samples: Array<{ data: Uint8Array, timestamp: number, duration: number, type: 'key'|'delta' }> }} audioData\n */\n async setAudioTrack(audioData) {\n this.#audioSamples = audioData;\n }\n\n async finalize() {\n await this.#encoder.flush();\n this.#encoder.close();\n\n if (this.#audioSamples?.samples?.length) {\n for (const sample of this.#audioSamples.samples) {\n this.#muxer.addAudioChunkRaw(\n sample.data,\n sample.type,\n sample.timestamp,\n sample.duration,\n );\n }\n }\n\n this.#muxer.finalize();\n return new Blob([this._target.buffer], { type: 'video/mp4' });\n }\n}\n", "/**\n * Video encoder factory.\n */\n\nimport { WebCodecsEncoder } from './videoEncoder.webcodecs.js';\n\nexport { VideoEncoderBase } from './videoEncoder.base.js';\nexport { WebCodecsEncoder } from './videoEncoder.webcodecs.js';\n\nexport function createEncoder(environment = 'auto') {\n if (\n environment === 'browser' ||\n (environment === 'auto' && typeof VideoEncoder !== 'undefined')\n ) {\n return new WebCodecsEncoder();\n }\n\n throw new Error(\n 'Node.js encoding requires createNodeEncoder() from videoEncoder.ffmpeg.js',\n );\n}\n\nexport async function createNodeEncoder() {\n const { FfmpegEncoder } = await import('./videoEncoder.ffmpeg.js');\n return new FfmpegEncoder();\n}\n", "/**\n * Per-frame watermark processing orchestrator.\n * Combines veoConfig + alphaMap + blendModes to process a single frame.\n */\n\nimport { removeWatermark } from './blendModes.js';\nimport { getVeoWatermarkInfo, normalizeVideoWatermarkProfile } from './veoConfig.js';\nimport { getEmbeddedAlphaMap } from './embeddedAlphaMaps.js';\n\n/**\n * Process a single video frame to remove the configured video watermark.\n *\n * @param {ImageData} frameData - Frame pixel data\n * @param {{ width?: number, height?: number, videoProfile?: 'diamond'|'legacy' }} options\n * @returns {{ imageData: ImageData, processed: boolean, reason?: string, profile?: string|null, position?: object|null }}\n */\nexport function processFrame(frameData, options = {}) {\n const width = options.width || frameData.width;\n const height = options.height || frameData.height;\n const profile = normalizeVideoWatermarkProfile(options.videoProfile ?? options.profile);\n\n if (!profile) {\n return { imageData: frameData, processed: false, reason: 'unsupported_profile', profile: null };\n }\n\n const info = getVeoWatermarkInfo(width, height, profile);\n if (!info) {\n return { imageData: frameData, processed: false, reason: 'unsupported_resolution', profile };\n }\n\n const alphaMap = getEmbeddedAlphaMap(info.alphaMapKey);\n if (!alphaMap) {\n return { imageData: frameData, processed: false, reason: 'missing_alpha_map', profile };\n }\n\n removeWatermark(frameData, alphaMap.data, info.position);\n return { imageData: frameData, processed: true, profile, position: info.position };\n}\n\n/**\n * Create a reusable frame processor for a specific video (caches config lookup).\n *\n * @param {number} frameWidth\n * @param {number} frameHeight\n * @param {{ videoProfile?: 'diamond'|'legacy' }} options\n * @returns {{ profile: string|null, position: object|null, process(frameData: ImageData): { imageData: ImageData, processed: boolean, reason?: string, profile?: string|null, position?: object|null } }}\n */\nexport function createFrameProcessor(frameWidth, frameHeight, options = {}) {\n const profile = normalizeVideoWatermarkProfile(options.videoProfile ?? options.profile);\n\n if (!profile) {\n return {\n profile: null,\n position: null,\n process(frameData) {\n return { imageData: frameData, processed: false, reason: 'unsupported_profile', profile: null };\n },\n };\n }\n\n const info = getVeoWatermarkInfo(frameWidth, frameHeight, profile);\n if (!info) {\n return {\n profile,\n position: null,\n process(frameData) {\n return { imageData: frameData, processed: false, reason: 'unsupported_resolution', profile };\n },\n };\n }\n\n const alphaMap = getEmbeddedAlphaMap(info.alphaMapKey);\n if (!alphaMap) {\n return {\n profile,\n position: info.position,\n process(frameData) {\n return { imageData: frameData, processed: false, reason: 'missing_alpha_map', profile };\n },\n };\n }\n\n const position = info.position;\n const mapData = alphaMap.data;\n\n return {\n profile,\n position,\n process(frameData) {\n removeWatermark(frameData, mapData, position);\n return { imageData: frameData, processed: true, profile, position };\n },\n };\n}\n", "/**\n * Veo/Gemini video watermark position/size detection for known resolutions.\n */\n\n/** @typedef {'diamond'|'legacy'} VideoWatermarkProfile */\n\n/**\n * Legacy pre-Gemini-3.5 videos carry the \"Veo\" text watermark.\n * The short keys are kept for backwards compatibility with existing alpha maps.\n */\nconst LEGACY_VEO_TEXT_CATALOG = {\n '1280x720': {\n key: '720p-landscape',\n profile: 'legacy',\n watermark: { width: 80, height: 28 },\n position: { x: 1180, y: 684 },\n },\n '720x1280': {\n key: '720p-portrait',\n profile: 'legacy',\n watermark: { width: 80, height: 28 },\n position: { x: 620, y: 1244 },\n },\n '1920x1080': {\n key: '1080p-landscape',\n profile: 'legacy',\n watermark: { width: 120, height: 42 },\n position: { x: 1772, y: 1028 },\n },\n '1080x1920': {\n key: '1080p-portrait',\n profile: 'legacy',\n watermark: { width: 120, height: 42 },\n position: { x: 932, y: 1868 },\n },\n};\n\n/**\n * Gemini 3.5+ videos carry the Gemini diamond logo. Upstream v0.5.0-demo\n * currently validates only 1080p landscape and portrait.\n */\nconst GEMINI_DIAMOND_VIDEO_CATALOG = {\n '1920x1080': {\n key: 'veo-diamond-1080p-landscape',\n profile: 'diamond',\n watermark: { width: 96, height: 96 },\n position: { x: 1632, y: 792 },\n },\n '1080x1920': {\n key: 'veo-diamond-1080p-portrait',\n profile: 'diamond',\n watermark: { width: 96, height: 96 },\n position: { x: 792, y: 1632 },\n },\n};\n\nconst VIDEO_WATERMARK_PROFILES = {\n diamond: GEMINI_DIAMOND_VIDEO_CATALOG,\n legacy: LEGACY_VEO_TEXT_CATALOG,\n};\n\n/**\n * Normalize profile aliases used by CLI and SDK options.\n * @param {string|{ videoProfile?: string, profile?: string }|undefined} profile\n * @returns {VideoWatermarkProfile|null}\n */\nexport function normalizeVideoWatermarkProfile(profile) {\n const value = typeof profile === 'object' && profile\n ? profile.videoProfile ?? profile.profile\n : profile;\n\n if (!value || value === 'diamond' || value === 'current' || value === 'v2' || value === 'gemini') {\n return 'diamond';\n }\n if (value === 'legacy' || value === 'veo' || value === 'text' || value === 'v1') {\n return 'legacy';\n }\n return null;\n}\n\n/**\n * Detect watermark config for a given video resolution and profile.\n * @param {number} width\n * @param {number} height\n * @param {string|{ videoProfile?: string, profile?: string }} [profile='diamond']\n * @returns {object|null} Config or null if resolution unknown\n */\nexport function detectVeoWatermarkConfig(width, height, profile = 'diamond') {\n const normalizedProfile = normalizeVideoWatermarkProfile(profile);\n if (!normalizedProfile) return null;\n\n const key = `${width}x${height}`;\n return VIDEO_WATERMARK_PROFILES[normalizedProfile][key] || null;\n}\n\n/**\n * Calculate watermark bounding box for a given resolution.\n * @param {number} width\n * @param {number} height\n * @param {string|{ videoProfile?: string, profile?: string }} [profile='diamond']\n * @returns {{ x: number, y: number, width: number, height: number }|null}\n */\nexport function calculateWatermarkPosition(width, height, profile = 'diamond') {\n const config = detectVeoWatermarkConfig(width, height, profile);\n if (!config) return null;\n\n return {\n x: config.position.x,\n y: config.position.y,\n width: config.watermark.width,\n height: config.watermark.height,\n };\n}\n\n/**\n * Get full watermark info including alpha map key.\n * @param {number} width\n * @param {number} height\n * @param {string|{ videoProfile?: string, profile?: string }} [profile='diamond']\n */\nexport function getVeoWatermarkInfo(width, height, profile = 'diamond') {\n const normalizedProfile = normalizeVideoWatermarkProfile(profile);\n if (!normalizedProfile) return null;\n\n const config = detectVeoWatermarkConfig(width, height, normalizedProfile);\n if (!config) return null;\n\n return {\n profile: normalizedProfile,\n alphaMapKey: config.key,\n position: {\n x: config.position.x,\n y: config.position.y,\n width: config.watermark.width,\n height: config.watermark.height,\n },\n };\n}\n\nconst VEO_WATERMARK_CATALOG = LEGACY_VEO_TEXT_CATALOG;\n\nexport {\n GEMINI_DIAMOND_VIDEO_CATALOG,\n LEGACY_VEO_TEXT_CATALOG,\n VIDEO_WATERMARK_PROFILES,\n VEO_WATERMARK_CATALOG,\n};\n", "/**\n * Embedded alpha maps for video watermark removal.\n * Calibrated from GeminiWatermarkTool + VeoWatermarkRemover upstream captures.\n */\n\nimport { loadCalibratedAlphaMap } from './calibratedAlphaData.js'\n\nconst alphaMapRegistry = new Map()\n\nconst VIDEO_ALPHA_KEYS = [\n '720p-landscape',\n '720p-portrait',\n '1080p-landscape',\n '1080p-portrait',\n 'veo-diamond-1080p-landscape',\n 'veo-diamond-1080p-portrait',\n]\n\nfor (const key of VIDEO_ALPHA_KEYS) {\n const loaded = loadCalibratedAlphaMap(key)\n if (loaded) {\n alphaMapRegistry.set(key, loaded)\n }\n}\n\n/**\n * Bilinear resize helper (used when registering custom maps).\n */\nexport function resizeAlphaMap(source, sourceWidth, sourceHeight, targetWidth, targetHeight) {\n if (sourceWidth === targetWidth && sourceHeight === targetHeight) {\n return new Float32Array(source)\n }\n\n const result = new Float32Array(targetWidth * targetHeight)\n const xScale = sourceWidth / targetWidth\n const yScale = sourceHeight / targetHeight\n\n for (let y = 0; y < targetHeight; y++) {\n const sourceY = (y + 0.5) * yScale - 0.5\n const sourceY0 = Math.floor(sourceY)\n const y0 = Math.max(0, sourceY0)\n const y1 = Math.min(sourceHeight - 1, y0 + 1)\n const yWeight = Math.max(0, Math.min(1, sourceY - sourceY0))\n\n for (let x = 0; x < targetWidth; x++) {\n const sourceX = (x + 0.5) * xScale - 0.5\n const sourceX0 = Math.floor(sourceX)\n const x0 = Math.max(0, sourceX0)\n const x1 = Math.min(sourceWidth - 1, x0 + 1)\n const xWeight = Math.max(0, Math.min(1, sourceX - sourceX0))\n\n const top =\n source[y0 * sourceWidth + x0] * (1 - xWeight) +\n source[y0 * sourceWidth + x1] * xWeight\n const bottom =\n source[y1 * sourceWidth + x0] * (1 - xWeight) +\n source[y1 * sourceWidth + x1] * xWeight\n\n result[y * targetWidth + x] = top * (1 - yWeight) + bottom * yWeight\n }\n }\n\n return result\n}\n\n/**\n * @param {string} key\n * @returns {{ data: Float32Array, width: number, height: number, source?: string } | null}\n */\nexport function getEmbeddedAlphaMap(key) {\n return alphaMapRegistry.get(key) || loadCalibratedAlphaMap(key)\n}\n\nexport function registerAlphaMap(key, data, width, height, source = 'custom') {\n alphaMapRegistry.set(key, { data, width, height, source })\n}\n\nexport function listAlphaMapKeys() {\n return Array.from(alphaMapRegistry.keys())\n}\n", "/**\n * Full video processing pipeline.\n * Orchestrates: decode \u2192 per-frame watermark removal \u2192 encode.\n */\n\nimport { createDecoder, createNodeDecoder } from './videoDecoder.js';\nimport { createEncoder, createNodeEncoder } from './videoEncoder.js';\nimport { createFrameProcessor } from '../core/frameProcessor.js';\n\n/**\n * @typedef {Object} ProcessOptions\n * @property {string} [environment] - 'browser' | 'node' | 'auto'\n * @property {number} [bitrate] - Output bitrate\n * @property {'diamond'|'legacy'} [videoProfile] - diamond for Gemini 3.5+ videos, legacy for old \"Veo\" text videos\n * @property {(current: number, total: number) => void} [onProgress]\n */\n\n/**\n * Process a video file to remove Veo watermarks.\n *\n * @param {File|Blob|Uint8Array} input - Source video\n * @param {ProcessOptions} options\n * @returns {Promise<Blob|Uint8Array>} Processed video\n */\nexport async function processVideo(input, options = {}) {\n const { environment = 'auto', bitrate, onProgress, videoProfile = 'diamond' } = options;\n\n const useNode =\n environment === 'node' ||\n (environment === 'auto' && typeof VideoDecoder === 'undefined');\n\n const decoder = useNode ? await createNodeDecoder() : createDecoder(environment);\n const videoInfo = await decoder.open(input);\n\n const processor = createFrameProcessor(videoInfo.width, videoInfo.height, { videoProfile });\n\n const encoder = useNode ? await createNodeEncoder() : createEncoder(environment);\n await encoder.init({\n width: videoInfo.width,\n height: videoInfo.height,\n fps: videoInfo.fps,\n bitrate: bitrate || 5_000_000,\n });\n\n // 4. Extract and pass through audio\n const audioData = await decoder.extractAudio();\n if (audioData) {\n await encoder.setAudioTrack(audioData);\n }\n\n // 5. Process frames\n let frameIndex = 0;\n let processedFrames = 0;\n let skippedFrames = 0;\n let skipReason = null;\n const totalFrames = videoInfo.frameCount || 0;\n\n for await (const frame of decoder.decodeFrames()) {\n // Remove watermark from frame\n const frameResult = processor.process(frame.imageData);\n if (frameResult.processed) {\n processedFrames++;\n } else {\n skippedFrames++;\n skipReason = skipReason || frameResult.reason || 'not_processed';\n }\n\n // Encode processed frame\n await encoder.encodeFrame(frame.imageData, frame.timestamp);\n\n frameIndex++;\n if (onProgress && totalFrames > 0) {\n onProgress(frameIndex, totalFrames);\n }\n }\n\n // 6. Finalize\n await decoder.close();\n const output = await encoder.finalize();\n\n if (output && typeof output === 'object') {\n output.videoProfile = processor.profile;\n output.processedFrames = processedFrames;\n output.skippedFrames = skippedFrames;\n output.skipped = processedFrames === 0;\n output.reason = processedFrames === 0 ? skipReason : null;\n }\n\n return output;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["module", "i", "u8", "url", "box", "ret", "str", "entry_count", "nalu_array", "j", "nalu", "strm", "bytes", "trak", "last", "moov", "_options", "ftyp", "mdia", "minf", "avcC", "hvcC", "stbl", "moof", "traf", "stco", "stsc", "stsz", "stts", "ctts", "stss", "stsd", "trex", "trun", "mdat", "mvex", "i", "box", "i", "box2", "i", "i", "readFile", "writeFile", "resolve", "FfmpegDecoder", "Muxer", "ArrayBufferTarget", "FfmpegEncoder", "processImage", "sharp", "readFile", "writeFile", "result", "elapsed"]
|
|
7
|
+
}
|