-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathdisplay.0fcb9144.map
1 lines (1 loc) · 310 KB
/
display.0fcb9144.map
1
{"version":3,"sources":["ts\\display\\Utils.ts","ts\\display\\GameState.ts","ts\\display\\GameOverScreen.ts","ts\\display\\PlayScreen.ts","ts\\display\\CountDownScreen.ts","ts\\display\\GameContext.ts","..\\node_modules\\parseuri\\index.js","..\\node_modules\\ms\\index.js","..\\node_modules\\debug\\src\\debug.js","..\\node_modules\\process\\browser.js","..\\node_modules\\debug\\src\\browser.js","..\\node_modules\\socket.io-client\\lib\\url.js","..\\node_modules\\component-emitter\\index.js","..\\node_modules\\socket.io-parser\\node_modules\\isarray\\index.js","..\\node_modules\\socket.io-parser\\is-buffer.js","..\\node_modules\\socket.io-parser\\binary.js","..\\node_modules\\socket.io-parser\\index.js","..\\node_modules\\has-cors\\index.js","..\\node_modules\\engine.io-client\\lib\\xmlhttprequest.js","..\\node_modules\\engine.io-parser\\lib\\keys.js","..\\node_modules\\has-binary2\\node_modules\\isarray\\index.js","..\\node_modules\\base64-js\\index.js","..\\node_modules\\ieee754\\index.js","..\\node_modules\\isarray\\index.js","..\\node_modules\\buffer\\index.js","..\\node_modules\\has-binary2\\index.js","..\\node_modules\\arraybuffer.slice\\index.js","..\\node_modules\\after\\index.js","..\\node_modules\\engine.io-parser\\lib\\utf8.js","..\\node_modules\\base64-arraybuffer\\lib\\base64-arraybuffer.js","..\\node_modules\\blob\\index.js","..\\node_modules\\engine.io-parser\\lib\\browser.js","..\\node_modules\\engine.io-client\\lib\\transport.js","..\\node_modules\\parseqs\\index.js","..\\node_modules\\component-inherit\\index.js","..\\node_modules\\yeast\\index.js","..\\node_modules\\engine.io-client\\lib\\transports\\polling.js","..\\node_modules\\engine.io-client\\lib\\transports\\polling-xhr.js","..\\node_modules\\engine.io-client\\lib\\transports\\polling-jsonp.js","..\\node_modules\\engine.io-client\\lib\\transports\\websocket.js","..\\node_modules\\engine.io-client\\lib\\transports\\index.js","..\\node_modules\\indexof\\index.js","..\\node_modules\\engine.io-client\\lib\\socket.js","..\\node_modules\\engine.io-client\\lib\\index.js","..\\node_modules\\to-array\\index.js","..\\node_modules\\socket.io-client\\lib\\on.js","..\\node_modules\\component-bind\\index.js","..\\node_modules\\socket.io-client\\lib\\socket.js","..\\node_modules\\backo2\\index.js","..\\node_modules\\socket.io-client\\lib\\manager.js","..\\node_modules\\socket.io-client\\lib\\index.js","ts\\serverSettings.ts","ts\\display\\IO.ts","ts\\display\\StartScreen.ts","ts\\display\\GameRunner.ts","ts\\display.tsx"],"names":["cachedSetTimeout","cachedClearTimeout","process","module","exports","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","setTimeout","e","call","runClearTimeout","marker","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","length","concat","drainQueue","timeout","len","run","Item","array","noop","nextTick","args","Array","arguments","i","push","prototype","apply","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","name","binding","cwd","chdir","dir","umask","useColors","window","type","navigator","userAgent","toLowerCase","match","document","documentElement","style","WebkitAppearance","console","firebug","exception","table","parseInt","RegExp","$1","formatArgs","namespace","humanize","diff","c","color","splice","index","lastC","replace","log","Function","save","namespaces","storage","removeItem","debug","load","r","localstorage","localStorage","require","chrome","local","colors","formatters","j","v","JSON","stringify","err","message","enable","chars","lookup","Uint8Array","charCodeAt","encode","arraybuffer","bytes","base64","substring","decode","bufferLength","encoded1","encoded2","encoded3","encoded4","p","ArrayBuffer"],"mappings":"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","file":"display.0fcb9144.map","sourceRoot":"..\\client","sourcesContent":["export class Utils {\r\n public static randColor(): string {\r\n const hue = Math.floor(Math.random() * 360);\r\n return 'hsl(' + hue + ', 90%, 50%)';\r\n }\r\n}\r\n","import { GameContext } from './GameContext';\r\nimport { Utils } from './Utils';\r\n\r\nexport abstract class GameState {\r\n protected ctx: GameContext;\r\n protected minTimePerFrame = 0;\r\n\r\n private borderColors: string[] = [];\r\n private lastUpdated = Date.now();\r\n\r\n constructor(ctx: GameContext) {\r\n this.ctx = ctx;\r\n this.randomizeBorderColors();\r\n }\r\n\r\n public update(): void {\r\n if (Date.now() - this.lastUpdated > this.minTimePerFrame) {\r\n this.advanceFrame();\r\n this.draw();\r\n this.lastUpdated = Date.now();\r\n }\r\n }\r\n\r\n public advanceFrame(): void {}\r\n public abstract draw(): void;\r\n\r\n public start(): void {}\r\n\r\n protected fillScreen(color: string): void {\r\n this.ctx.g2D.fillStyle = color;\r\n this.ctx.g2D.fillRect(0, 0, this.ctx.width, this.ctx.height);\r\n }\r\n\r\n protected drawSquare(loc: number[], color: string): void {\r\n this.ctx.g2D.fillStyle = color;\r\n this.ctx.g2D.fillRect(\r\n loc[1] * this.ctx.tileSize, loc[0] * this.ctx.tileSize, this.ctx.tileSize, this.ctx.tileSize);\r\n }\r\n\r\n protected drawArt(art: string[], rowOffset: number, colOffset: number, color: string): void {\r\n for (let i = 0; i < art.length; i++) {\r\n for (let j = 0; j < art[i].length; j++) {\r\n if (art[i][j] !== ' ') {\r\n this.drawSquare([rowOffset + i, colOffset + j], color);\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected drawCenteredArt(art: string[], color: string) {\r\n const rowOffset = (this.ctx.rows - art.length) / 2;\r\n const colOffset = (this.ctx.cols - art[0].length) / 2;\r\n this.drawArt(art, rowOffset, colOffset, color);\r\n }\r\n\r\n protected randomizeBorderColors(): void {\r\n let c = 0;\r\n\r\n for (let i = 0; i < this.ctx.rows; i++, c += 2) {\r\n this.borderColors[c] = Utils.randColor();\r\n this.borderColors[c + 1] = Utils.randColor();\r\n }\r\n\r\n for (let j = 0; j < this.ctx.cols; j++, c += 2) {\r\n this.borderColors[c] = Utils.randColor();\r\n this.borderColors[c + 1] = Utils.randColor();\r\n }\r\n }\r\n\r\n protected drawBorder(type = 'checker'): void {\r\n let c = 0;\r\n\r\n for (let i = 0; i < this.ctx.rows; i++, c += 2) {\r\n let color1: string;\r\n let color2: string;\r\n if (type === 'colorful') {\r\n color1 = this.borderColors[c];\r\n color2 = this.borderColors[c + 1];\r\n } else if (type === 'checker') {\r\n color1 = (i % 2) ? 'grey' : 'lightgrey';\r\n color2 = ((this.ctx.cols - 1 + i) % 2) ? 'grey' : 'lightgrey';\r\n } else {\r\n color1 = color2 = type;\r\n }\r\n\r\n this.drawSquare([i, 0], color1);\r\n this.drawSquare([i, this.ctx.cols - 1], color2);\r\n }\r\n\r\n for (let j = 0; j < this.ctx.cols; j++, c += 2) {\r\n let color1: string;\r\n let color2: string;\r\n if (type === 'colorful') {\r\n color1 = this.borderColors[c];\r\n color2 = this.borderColors[c + 1];\r\n } else if (type === 'checker') {\r\n color1 = (j % 2) ? 'grey' : 'lightgrey';\r\n color2 = ((this.ctx.rows - 1 + j) % 2) ? 'grey' : 'lightgrey';\r\n } else {\r\n color1 = color2 = type;\r\n }\r\n\r\n this.drawSquare([0, j], color1);\r\n this.drawSquare([this.ctx.rows - 1, j], color2);\r\n }\r\n }\r\n\r\n protected drawText(text: string, x: number, y: number, color: string, size: number) {\r\n const g = this.ctx.g2D;\r\n g.font = size + 'px monospace';\r\n g.textBaseline = 'top';\r\n g.fillStyle = color;\r\n g.fillText(text, x, y);\r\n }\r\n}\r\n","import { GameContext } from './GameContext';\r\nimport { GameState } from './GameState';\r\nimport { StartScreen } from './StartScreen';\r\n\r\nexport class GameOverScreen extends GameState {\r\n public static Name = 'game over';\r\n\r\n private gameOverArt: string[] = [\r\n 'ooooo ooooo ',\r\n 'o o o ',\r\n 'o oooo ooooo oooo o o o o oooo oooo',\r\n 'o oo o o o o o o o o o o o o o ',\r\n 'o o oooo o o o oooo o o o o oooo o ',\r\n 'o o o o o o o o o o o o o o ',\r\n 'ooooo oooo o o o oooo ooooo o oooo o ',\r\n ];\r\n private snake: number[][];\r\n\r\n constructor(ctx: GameContext) {\r\n super(ctx);\r\n }\r\n\r\n public advanceFrame(): void {}\r\n\r\n public draw(): void {\r\n this.fillScreen('black');\r\n this.drawBorder('red');\r\n\r\n for (const segment of this.snake) {\r\n this.drawSquare(segment, 'darkred');\r\n }\r\n\r\n this.drawCenteredArt(this.gameOverArt, 'red');\r\n }\r\n\r\n public start(): void {\r\n this.snake = this.ctx.sharedData as number[][];\r\n setTimeout(() => {\r\n location.reload(true);\r\n // this.ctx.switchState(StartScreen.Name);\r\n }, 3000);\r\n }\r\n}\r\n","import { GameOverScreen } from './GameOverScreen';\r\nimport { GameState } from './GameState';\r\nimport { Utils } from './Utils';\r\n\r\nexport class PlayScreen extends GameState {\r\n public static Name = 'play';\r\n\r\n private snake: number[][];\r\n private snakeColors: string[];\r\n private powerups: number[][];\r\n private powerupColors: string[];\r\n private direction: string;\r\n private lastMove: string;\r\n\r\n private forbidden: { [dir: string]: string } = {\r\n d: 'u',\r\n l: 'r',\r\n r: 'l',\r\n u: 'd',\r\n };\r\n\r\n public advanceFrame(): void {\r\n const head = this.snake[this.snake.length - 1].slice();\r\n const changeRow = this.direction === 'u' || this.direction === 'd';\r\n const increment = this.direction === 'r' || this.direction === 'd';\r\n head[changeRow ? 0 : 1] += increment ? 1 : -1;\r\n\r\n if (head[0] === 0 || head[0] === this.ctx.rows - 1 || head[1] === 0 || head[1] === this.ctx.cols - 1) {\r\n this.die();\r\n return;\r\n }\r\n\r\n for (let i = 0; i < this.snake.length - 1; i++) {\r\n if (this.sameloc(this.snake[i], head)) {\r\n this.die();\r\n return;\r\n }\r\n }\r\n\r\n this.snake.push(head);\r\n this.lastMove = this.direction;\r\n\r\n let hitPowerup = false;\r\n for (let i = 0; i < this.powerups.length; i++) {\r\n if (this.sameloc(head, this.powerups[i])) {\r\n this.snakeColors[this.snake.length - 1] = this.powerupColors[i];\r\n this.powerups[i] = this.randloc();\r\n this.powerupColors[i] = Utils.randColor();\r\n if (this.minTimePerFrame > 50) {\r\n this.minTimePerFrame -= 25;\r\n }\r\n hitPowerup = true;\r\n }\r\n }\r\n if (!hitPowerup) {\r\n this.snake.shift();\r\n }\r\n }\r\n\r\n public draw(): void {\r\n this.fillScreen('black');\r\n this.drawBorder('#F66733');\r\n\r\n for (let i = 0; i < this.snake.length; i++) {\r\n this.drawSquare(this.snake[i], this.snakeColors[i]);\r\n }\r\n for (let i = 0; i < this.powerups.length; i++) {\r\n this.drawSquare(this.powerups[i], this.powerupColors[i]);\r\n }\r\n }\r\n\r\n public start(): void {\r\n this.minTimePerFrame = 200;\r\n this.snake = [[Math.floor(this.ctx.rows / 2), Math.floor(this.ctx.cols / 2)]];\r\n this.snakeColors = [Utils.randColor()];\r\n this.direction = 'l';\r\n this.powerups = [this.randloc()];\r\n this.powerupColors = [Utils.randColor()];\r\n for (let i = 0; i < 4; i++) {\r\n this.powerups.push(this.randloc());\r\n this.powerupColors.push(Utils.randColor());\r\n }\r\n\r\n this.ctx.io.addListener((socketId: string, event: string) => {\r\n if (socketId === this.ctx.sharedData) {\r\n console.log(event);\r\n if (event && this.forbidden[this.lastMove] !== event) {\r\n this.direction = event;\r\n }\r\n }\r\n });\r\n }\r\n\r\n private randi(a: number, b: number): number {\r\n return Math.floor(a + (b - a + 1) * Math.random());\r\n }\r\n\r\n private sameloc(a: number[], b: number[]): boolean {\r\n return a[0] === b[0] && a[1] === b[1];\r\n }\r\n\r\n private randloc(): number[] {\r\n const loc = [this.randi(1, this.ctx.rows - 2), this.randi(1, this.ctx.cols - 2)];\r\n for (const segment of this.snake) {\r\n if (this.sameloc(loc, segment)) {\r\n return this.randloc();\r\n }\r\n }\r\n return loc;\r\n }\r\n\r\n private die(): void {\r\n this.ctx.io.sendMessage(this.ctx.sharedData as string, 'stop-playing');\r\n this.ctx.sharedData = this.snake;\r\n this.ctx.switchState(GameOverScreen.Name);\r\n }\r\n}\r\n","import { GameState } from './GameState';\r\nimport { PlayScreen } from './PlayScreen';\r\n\r\nexport class CountDownScreen extends GameState {\r\n public static Name = 'count down';\r\n private numberArt: string[][] = [[\r\n 'oooo',\r\n ' o',\r\n ' o',\r\n 'oooo',\r\n ' o',\r\n ' o',\r\n 'oooo',\r\n ], [\r\n 'oooo',\r\n ' o',\r\n ' o',\r\n 'oooo',\r\n 'o ',\r\n 'o ',\r\n 'oooo',\r\n ], [\r\n ' o ',\r\n 'oo ',\r\n ' o ',\r\n ' o ',\r\n ' o ',\r\n ' o ',\r\n 'ooo',\r\n ]];\r\n private currentArt = 0;\r\n private startTime: number;\r\n private offset = 0;\r\n\r\n public advanceFrame(): void {\r\n const elapsedSecs = Math.floor((Date.now() - this.startTime) / 1000);\r\n if (elapsedSecs > 2) {\r\n this.ctx.switchState(PlayScreen.Name);\r\n } else {\r\n this.currentArt = elapsedSecs;\r\n }\r\n this.offset += 1;\r\n }\r\n\r\n public draw(): void {\r\n const g = this.ctx.g2D;\r\n for (let i = 0; i < this.ctx.rows; i++) {\r\n for (let j = 0; j < this.ctx.cols; j++) {\r\n const x = (i - this.ctx.rows / 2) / 2;\r\n const y = (j - this.ctx.cols / 2) / 2;\r\n g.fillStyle = 'hsl(' + Math.floor(this.offset + 10 * Math.sqrt(x * x + y * y)) + ',80%,50%)';\r\n g.fillRect(j * this.ctx.tileSize, i * this.ctx.tileSize, 10, 10);\r\n }\r\n }\r\n g.fillStyle = 'black';\r\n g.beginPath();\r\n g.arc(this.ctx.width / 2, this.ctx.height / 2, 24, 0, 2 * Math.PI, false);\r\n g.fill();\r\n this.drawCenteredArt(this.numberArt[this.currentArt], 'white');\r\n }\r\n\r\n public start(): void {\r\n this.startTime = Date.now();\r\n }\r\n}\r\n","import { IO } from './IO';\r\n\r\nexport class GameContext {\r\n public g2D: CanvasRenderingContext2D;\r\n public io: IO;\r\n\r\n public readonly rows = 18;\r\n public readonly cols = 157;\r\n public readonly tileSize = 4;\r\n public readonly width = this.cols * this.tileSize;\r\n public readonly height = this.rows * this.tileSize;\r\n\r\n public sharedData: {};\r\n public currState: string;\r\n\r\n constructor(private stateSwitcher: (newState: string, ctx: GameContext) => void) {}\r\n\r\n public switchState(newState: string): void {\r\n this.stateSwitcher(newState, this);\r\n }\r\n}\r\n","/**\r\n * Parses an URI\r\n *\r\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\r\n * @api private\r\n */\r\n\r\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\r\n\r\nvar parts = [\r\n 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\r\n];\r\n\r\nmodule.exports = function parseuri(str) {\r\n var src = str,\r\n b = str.indexOf('['),\r\n e = str.indexOf(']');\r\n\r\n if (b != -1 && e != -1) {\r\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\r\n }\r\n\r\n var m = re.exec(str || ''),\r\n uri = {},\r\n i = 14;\r\n\r\n while (i--) {\r\n uri[parts[i]] = m[i] || '';\r\n }\r\n\r\n if (b != -1 && e != -1) {\r\n uri.source = src;\r\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\r\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\r\n uri.ipv6uri = true;\r\n }\r\n\r\n return uri;\r\n};\r\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * Active `debug` instances.\n */\nexports.instances = [];\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n var prevTime;\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n debug.destroy = destroy;\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n exports.instances.push(debug);\n\n return debug;\n}\n\nfunction destroy () {\n var index = exports.instances.indexOf(this);\n if (index !== -1) {\n exports.instances.splice(index, 1);\n return true;\n } else {\n return false;\n }\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var i;\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n\n for (i = 0; i < exports.instances.length; i++) {\n var instance = exports.instances[i];\n instance.enabled = exports.enabled(instance.namespace);\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n if (name[name.length - 1] === '*') {\n return true;\n }\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',\n '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',\n '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',\n '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',\n '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',\n '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',\n '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',\n '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',\n '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',\n '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',\n '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // Internet Explorer and Edge do not support colors.\n if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n return false;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n","\n/**\n * Module dependencies.\n */\n\nvar parseuri = require('parseuri');\nvar debug = require('debug')('socket.io-client:url');\n\n/**\n * Module exports.\n */\n\nmodule.exports = url;\n\n/**\n * URL parser.\n *\n * @param {String} url\n * @param {Object} An object meant to mimic window.location.\n * Defaults to window.location.\n * @api public\n */\n\nfunction url (uri, loc) {\n var obj = uri;\n\n // default to window.location\n loc = loc || global.location;\n if (null == uri) uri = loc.protocol + '//' + loc.host;\n\n // relative path support\n if ('string' === typeof uri) {\n if ('/' === uri.charAt(0)) {\n if ('/' === uri.charAt(1)) {\n uri = loc.protocol + uri;\n } else {\n uri = loc.host + uri;\n }\n }\n\n if (!/^(https?|wss?):\\/\\//.test(uri)) {\n debug('protocol-less url %s', uri);\n if ('undefined' !== typeof loc) {\n uri = loc.protocol + '//' + uri;\n } else {\n uri = 'https://' + uri;\n }\n }\n\n // parse\n debug('parse %s', uri);\n obj = parseuri(uri);\n }\n\n // make sure we treat `localhost:80` and `localhost` equally\n if (!obj.port) {\n if (/^(http|ws)$/.test(obj.protocol)) {\n obj.port = '80';\n } else if (/^(http|ws)s$/.test(obj.protocol)) {\n obj.port = '443';\n }\n }\n\n obj.path = obj.path || '/';\n\n var ipv6 = obj.host.indexOf(':') !== -1;\n var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\n // define unique id\n obj.id = obj.protocol + '://' + host + ':' + obj.port;\n // define href\n obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\n return obj;\n}\n","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n for (var key in Emitter.prototype) {\r\n obj[key] = Emitter.prototype[key];\r\n }\r\n return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n .push(fn);\r\n return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n function on() {\r\n this.off(event, on);\r\n fn.apply(this, arguments);\r\n }\r\n\r\n on.fn = fn;\r\n this.on(event, on);\r\n return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n\r\n // all\r\n if (0 == arguments.length) {\r\n this._callbacks = {};\r\n return this;\r\n }\r\n\r\n // specific event\r\n var callbacks = this._callbacks['$' + event];\r\n if (!callbacks) return this;\r\n\r\n // remove all handlers\r\n if (1 == arguments.length) {\r\n delete this._callbacks['$' + event];\r\n return this;\r\n }\r\n\r\n // remove specific handler\r\n var cb;\r\n for (var i = 0; i < callbacks.length; i++) {\r\n cb = callbacks[i];\r\n if (cb === fn || cb.fn === fn) {\r\n callbacks.splice(i, 1);\r\n break;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n this._callbacks = this._callbacks || {};\r\n var args = [].slice.call(arguments, 1)\r\n , callbacks = this._callbacks['$' + event];\r\n\r\n if (callbacks) {\r\n callbacks = callbacks.slice(0);\r\n for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n callbacks[i].apply(this, args);\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n this._callbacks = this._callbacks || {};\r\n return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n return !! this.listeners(event).length;\r\n};\r\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","\nmodule.exports = isBuf;\n\nvar withNativeBuffer = typeof global.Buffer === 'function' && typeof global.Buffer.isBuffer === 'function';\nvar withNativeArrayBuffer = typeof global.ArrayBuffer === 'function';\n\nvar isView = (function () {\n if (withNativeArrayBuffer && typeof global.ArrayBuffer.isView === 'function') {\n return global.ArrayBuffer.isView;\n } else {\n return function (obj) { return obj.buffer instanceof global.ArrayBuffer; };\n }\n})();\n\n/**\n * Returns true if obj is a buffer or an arraybuffer.\n *\n * @api private\n */\n\nfunction isBuf(obj) {\n return (withNativeBuffer && global.Buffer.isBuffer(obj)) ||\n (withNativeArrayBuffer && (obj instanceof global.ArrayBuffer || isView(obj)));\n}\n","/*global Blob,File*/\n\n/**\n * Module requirements\n */\n\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof global.Blob === 'function' || toString.call(global.Blob) === '[object BlobConstructor]';\nvar withNativeFile = typeof global.File === 'function' || toString.call(global.File) === '[object FileConstructor]';\n\n/**\n * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n * Anything with blobs or files should be fed through removeBlobs before coming\n * here.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @api public\n */\n\nexports.deconstructPacket = function(packet) {\n var buffers = [];\n var packetData = packet.data;\n var pack = packet;\n pack.data = _deconstructPacket(packetData, buffers);\n pack.attachments = buffers.length; // number of binary 'attachments'\n return {packet: pack, buffers: buffers};\n};\n\nfunction _deconstructPacket(data, buffers) {\n if (!data) return data;\n\n if (isBuf(data)) {\n var placeholder = { _placeholder: true, num: buffers.length };\n buffers.push(data);\n return placeholder;\n } else if (isArray(data)) {\n var newData = new Array(data.length);\n for (var i = 0; i < data.length; i++) {\n newData[i] = _deconstructPacket(data[i], buffers);\n }\n return newData;\n } else if (typeof data === 'object' && !(data instanceof Date)) {\n var newData = {};\n for (var key in data) {\n newData[key] = _deconstructPacket(data[key], buffers);\n }\n return newData;\n }\n return data;\n}\n\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @api public\n */\n\nexports.reconstructPacket = function(packet, buffers) {\n packet.data = _reconstructPacket(packet.data, buffers);\n packet.attachments = undefined; // no longer useful\n return packet;\n};\n\nfunction _reconstructPacket(data, buffers) {\n if (!data) return data;\n\n if (data && data._placeholder) {\n return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n } else if (isArray(data)) {\n for (var i = 0; i < data.length; i++) {\n data[i] = _reconstructPacket(data[i], buffers);\n }\n } else if (typeof data === 'object') {\n for (var key in data) {\n data[key] = _reconstructPacket(data[key], buffers);\n }\n }\n\n return data;\n}\n\n/**\n * Asynchronously removes Blobs or Files from data via\n * FileReader's readAsArrayBuffer method. Used before encoding\n * data as msgpack. Calls callback with the blobless data.\n *\n * @param {Object} data\n * @param {Function} callback\n * @api private\n */\n\nexports.removeBlobs = function(data, callback) {\n function _removeBlobs(obj, curKey, containingObject) {\n if (!obj) return obj;\n\n // convert any blob\n if ((withNativeBlob && obj instanceof Blob) ||\n (withNativeFile && obj instanceof File)) {\n pendingBlobs++;\n\n // async filereader\n var fileReader = new FileReader();\n fileReader.onload = function() { // this.result == arraybuffer\n if (containingObject) {\n containingObject[curKey] = this.result;\n }\n else {\n bloblessData = this.result;\n }\n\n // if nothing pending its callback time\n if(! --pendingBlobs) {\n callback(bloblessData);\n }\n };\n\n fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n } else if (isArray(obj)) { // handle array\n for (var i = 0; i < obj.length; i++) {\n _removeBlobs(obj[i], i, obj);\n }\n } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n for (var key in obj) {\n _removeBlobs(obj[key], key, obj);\n }\n }\n }\n\n var pendingBlobs = 0;\n var bloblessData = data;\n _removeBlobs(bloblessData);\n if (!pendingBlobs) {\n callback(bloblessData);\n }\n};\n","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar binary = require('./binary');\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = 4;\n\n/**\n * Packet types.\n *\n * @api public\n */\n\nexports.types = [\n 'CONNECT',\n 'DISCONNECT',\n 'EVENT',\n 'ACK',\n 'ERROR',\n 'BINARY_EVENT',\n 'BINARY_ACK'\n];\n\n/**\n * Packet type `connect`.\n *\n * @api public\n */\n\nexports.CONNECT = 0;\n\n/**\n * Packet type `disconnect`.\n *\n * @api public\n */\n\nexports.DISCONNECT = 1;\n\n/**\n * Packet type `event`.\n *\n * @api public\n */\n\nexports.EVENT = 2;\n\n/**\n * Packet type `ack`.\n *\n * @api public\n */\n\nexports.ACK = 3;\n\n/**\n * Packet type `error`.\n *\n * @api public\n */\n\nexports.ERROR = 4;\n\n/**\n * Packet type 'binary event'\n *\n * @api public\n */\n\nexports.BINARY_EVENT = 5;\n\n/**\n * Packet type `binary ack`. For acks with binary arguments.\n *\n * @api public\n */\n\nexports.BINARY_ACK = 6;\n\n/**\n * Encoder constructor.\n *\n * @api public\n */\n\nexports.Encoder = Encoder;\n\n/**\n * Decoder constructor.\n *\n * @api public\n */\n\nexports.Decoder = Decoder;\n\n/**\n * A socket.io Encoder instance\n *\n * @api public\n */\n\nfunction Encoder() {}\n\nvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\n/**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n * @param {Function} callback - function to handle encodings (likely engine.write)\n * @return Calls callback with Array of encodings\n * @api public\n */\n\nEncoder.prototype.encode = function(obj, callback){\n debug('encoding packet %j', obj);\n\n if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n encodeAsBinary(obj, callback);\n } else {\n var encoding = encodeAsString(obj);\n callback([encoding]);\n }\n};\n\n/**\n * Encode packet as string.\n *\n * @param {Object} packet\n * @return {String} encoded\n * @api private\n */\n\nfunction encodeAsString(obj) {\n\n // first is type\n var str = '' + obj.type;\n\n // attachments if we have them\n if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n str += obj.attachments + '-';\n }\n\n // if we have a namespace other than `/`\n // we append it followed by a comma `,`\n if (obj.nsp && '/' !== obj.nsp) {\n str += obj.nsp + ',';\n }\n\n // immediately followed by the id\n if (null != obj.id) {\n str += obj.id;\n }\n\n // json data\n if (null != obj.data) {\n var payload = tryStringify(obj.data);\n if (payload !== false) {\n str += payload;\n } else {\n return ERROR_PACKET;\n }\n }\n\n debug('encoded %j as %s', obj, str);\n return str;\n}\n\nfunction tryStringify(str) {\n try {\n return JSON.stringify(str);\n } catch(e){\n return false;\n }\n}\n\n/**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n *\n * @param {Object} packet\n * @return {Buffer} encoded\n * @api private\n */\n\nfunction encodeAsBinary(obj, callback) {\n\n function writeEncoding(bloblessData) {\n var deconstruction = binary.deconstructPacket(bloblessData);\n var pack = encodeAsString(deconstruction.packet);\n var buffers = deconstruction.buffers;\n\n buffers.unshift(pack); // add packet info to beginning of data list\n callback(buffers); // write all the buffers\n }\n\n binary.removeBlobs(obj, writeEncoding);\n}\n\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n * @api public\n */\n\nfunction Decoder() {\n this.reconstructor = null;\n}\n\n/**\n * Mix in `Emitter` with Decoder.\n */\n\nEmitter(Decoder.prototype);\n\n/**\n * Decodes an ecoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n * @return {Object} packet\n * @api public\n */\n\nDecoder.prototype.add = function(obj) {\n var packet;\n if (typeof obj === 'string') {\n packet = decodeString(obj);\n if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n this.reconstructor = new BinaryReconstructor(packet);\n\n // no attachments, labeled binary but no binary data to follow\n if (this.reconstructor.reconPack.attachments === 0) {\n this.emit('decoded', packet);\n }\n } else { // non-binary full packet\n this.emit('decoded', packet);\n }\n }\n else if (isBuf(obj) || obj.base64) { // raw binary data\n if (!this.reconstructor) {\n throw new Error('got binary data when not reconstructing a packet');\n } else {\n packet = this.reconstructor.takeBinaryData(obj);\n if (packet) { // received final buffer\n this.reconstructor = null;\n this.emit('decoded', packet);\n }\n }\n }\n else {\n throw new Error('Unknown type: ' + obj);\n }\n};\n\n/**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n * @api private\n */\n\nfunction decodeString(str) {\n var i = 0;\n // look up type\n var p = {\n type: Number(str.charAt(0))\n };\n\n if (null == exports.types[p.type]) {\n return error('unknown packet type ' + p.type);\n }\n\n // look up attachments if type binary\n if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n var buf = '';\n while (str.charAt(++i) !== '-') {\n buf += str.charAt(i);\n if (i == str.length) break;\n }\n if (buf != Number(buf) || str.charAt(i) !== '-') {\n throw new Error('Illegal attachments');\n }\n p.attachments = Number(buf);\n }\n\n // look up namespace (if any)\n if ('/' === str.charAt(i + 1)) {\n p.nsp = '';\n while (++i) {\n var c = str.charAt(i);\n if (',' === c) break;\n p.nsp += c;\n if (i === str.length) break;\n }\n } else {\n p.nsp = '/';\n }\n\n // look up id\n var next = str.charAt(i + 1);\n if ('' !== next && Number(next) == next) {\n p.id = '';\n while (++i) {\n var c = str.charAt(i);\n if (null == c || Number(c) != c) {\n --i;\n break;\n }\n p.id += str.charAt(i);\n if (i === str.length) break;\n }\n p.id = Number(p.id);\n }\n\n // look up json data\n if (str.charAt(++i)) {\n var payload = tryParse(str.substr(i));\n var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n if (isPayloadValid) {\n p.data = payload;\n } else {\n return error('invalid payload');\n }\n }\n\n debug('decoded %s as %j', str, p);\n return p;\n}\n\nfunction tryParse(str) {\n try {\n return JSON.parse(str);\n } catch(e){\n return false;\n }\n}\n\n/**\n * Deallocates a parser's resources\n *\n * @api public\n */\n\nDecoder.prototype.destroy = function() {\n if (this.reconstructor) {\n this.reconstructor.finishedReconstruction();\n }\n};\n\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n * @api private\n */\n\nfunction BinaryReconstructor(packet) {\n this.reconPack = packet;\n this.buffers = [];\n}\n\n/**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n * a reconstructed packet object if all buffers have been received.\n * @api private\n */\n\nBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n this.buffers.push(binData);\n if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n this.finishedReconstruction();\n return packet;\n }\n return null;\n};\n\n/**\n * Cleans up binary packet reconstruction variables.\n *\n * @api private\n */\n\nBinaryReconstructor.prototype.finishedReconstruction = function() {\n this.reconPack = null;\n this.buffers = [];\n};\n\nfunction error(msg) {\n return {\n type: exports.ERROR,\n data: 'parser error: ' + msg\n };\n}\n","\n/**\n * Module exports.\n *\n * Logic borrowed from Modernizr:\n *\n * - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n */\n\ntry {\n module.exports = typeof XMLHttpRequest !== 'undefined' &&\n 'withCredentials' in new XMLHttpRequest();\n} catch (err) {\n // if XMLHttp support is disabled in IE then it will throw\n // when trying to create\n module.exports = false;\n}\n","// browser shim for xmlhttprequest module\n\nvar hasCORS = require('has-cors');\n\nmodule.exports = function (opts) {\n var xdomain = opts.xdomain;\n\n // scheme must be same when usign XDomainRequest\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n var xscheme = opts.xscheme;\n\n // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.\n // https://github.com/Automattic/engine.io-client/pull/217\n var enablesXDR = opts.enablesXDR;\n\n // XMLHttpRequest can be disabled on IE\n try {\n if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n return new XMLHttpRequest();\n }\n } catch (e) { }\n\n // Use XDomainRequest for IE8 if enablesXDR is true\n // because loading bar keeps flashing when using jsonp-polling\n // https://github.com/yujiosaka/socke.io-ie8-loading-example\n try {\n if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {\n return new XDomainRequest();\n }\n } catch (e) { }\n\n if (!xdomain) {\n try {\n return new global[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n } catch (e) { }\n }\n};\n","\n/**\n * Gets the keys for an object.\n *\n * @return {Array} keys\n * @api private\n */\n\nmodule.exports = Object.keys || function keys (obj){\n var arr = [];\n var has = Object.prototype.hasOwnProperty;\n\n for (var i in obj) {\n if (has.call(obj, i)) {\n arr.push(i);\n }\n }\n return arr;\n};\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n for (var i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","/* global Blob File */\n\n/*\n * Module requirements.\n */\n\nvar isArray = require('isarray');\n\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' ||\n typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\nvar withNativeFile = typeof File === 'function' ||\n typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Supports Buffer, ArrayBuffer, Blob and File.\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary (obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n\n if (isArray(obj)) {\n for (var i = 0, l = obj.length; i < l; i++) {\n if (hasBinary(obj[i])) {\n return true;\n }\n }\n return false;\n }\n\n if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n (withNativeBlob && obj instanceof Blob) ||\n (withNativeFile && obj instanceof File)\n ) {\n return true;\n }\n\n // see: https://github.com/Automattic/has-binary/pull/4\n if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n return hasBinary(obj.toJSON(), true);\n }\n\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n return true;\n }\n }\n\n return false;\n}\n","/**\n * An abstraction for slicing an arraybuffer even when\n * ArrayBuffer.prototype.slice is not supported\n *\n * @api public\n */\n\nmodule.exports = function(arraybuffer, start, end) {\n var bytes = arraybuffer.byteLength;\n start = start || 0;\n end = end || bytes;\n\n if (arraybuffer.slice) { return arraybuffer.slice(start, end); }\n\n if (start < 0) { start += bytes; }\n if (end < 0) { end += bytes; }\n if (end > bytes) { end = bytes; }\n\n if (start >= bytes || start >= end || bytes === 0) {\n return new ArrayBuffer(0);\n }\n\n var abv = new Uint8Array(arraybuffer);\n var result = new Uint8Array(end - start);\n for (var i = start, ii = 0; i < end; i++, ii++) {\n result[ii] = abv[i];\n }\n return result.buffer;\n};\n","module.exports = after\n\nfunction after(count, callback, err_cb) {\n var bail = false\n err_cb = err_cb || noop\n proxy.count = count\n\n return (count === 0) ? callback() : proxy\n\n function proxy(err, result) {\n if (proxy.count <= 0) {\n throw new Error('after called too many times')\n }\n --proxy.count\n\n // after first error, rest are passed to err_cb\n if (err) {\n bail = true\n callback(err)\n // future error callbacks will go to error handler\n callback = err_cb\n } else if (proxy.count === 0 && !bail) {\n callback(null, result)\n }\n }\n}\n\nfunction noop() {}\n","/*! https://mths.be/utf8js v2.1.2 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint, strict) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tif (strict) {\n\t\t\t\tthrow Error(\n\t\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t\t' is not a scalar value'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint, strict) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\t\tcodePoint = 0xFFFD;\n\t\t\t}\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string, opts) {\n\t\topts = opts || {};\n\t\tvar strict = false !== opts.strict;\n\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol(strict) {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString, opts) {\n\t\topts = opts || {};\n\t\tvar strict = false !== opts.strict;\n\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.1.2',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n(function(){\n \"use strict\";\n\n var chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n // Use a lookup table to find the index.\n var lookup = new Uint8Array(256);\n for (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n }\n\n exports.encode = function(arraybuffer) {\n var bytes = new Uint8Array(arraybuffer),\n i, len = bytes.length, base64 = \"\";\n\n for (i = 0; i < len; i+=3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n\n if ((len % 3) === 2) {\n base64 = base64.substring(0, base64.length - 1) + \"=\";\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + \"==\";\n }\n\n return base64;\n };\n\n exports.decode = function(base64) {\n var bufferLength = base64.length * 0.75,\n len = base64.length, i, p = 0,\n encoded1, encoded2, encoded3, encoded4;\n\n if (base64[base64.length - 1] === \"=\") {\n bufferLength--;\n if (base64[base64.length - 2] === \"=\") {\n bufferLength--;\n }\n }\n\n var arraybuffer = new ArrayBuffer(bufferLength),\n bytes = new Uint8Array(arraybuffer);\n\n for (i = 0; i < len; i+=4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i+1)];\n encoded3 = lookup[base64.charCodeAt(i+2)];\n encoded4 = lookup[base64.charCodeAt(i+3)];\n\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n\n return arraybuffer;\n };\n})();\n","/**\n * Create a blob builder even when vendor prefixes exist\n */\n\nvar BlobBuilder = global.BlobBuilder\n || global.WebKitBlobBuilder\n || global.MSBlobBuilder\n || global.MozBlobBuilder;\n\n/**\n * Check if Blob constructor is supported\n */\n\nvar blobSupported = (function() {\n try {\n var a = new Blob(['hi']);\n return a.size === 2;\n } catch(e) {\n return false;\n }\n})();\n\n/**\n * Check if Blob constructor supports ArrayBufferViews\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\n */\n\nvar blobSupportsArrayBufferView = blobSupported && (function() {\n try {\n var b = new Blob([new Uint8Array([1,2])]);\n return b.size === 2;\n } catch(e) {\n return false;\n }\n})();\n\n/**\n * Check if BlobBuilder is supported\n */\n\nvar blobBuilderSupported = BlobBuilder\n && BlobBuilder.prototype.append\n && BlobBuilder.prototype.getBlob;\n\n/**\n * Helper function that maps ArrayBufferViews to ArrayBuffers\n * Used by BlobBuilder constructor and old browsers that didn't\n * support it in the Blob constructor.\n */\n\nfunction mapArrayBufferViews(ary) {\n for (var i = 0; i < ary.length; i++) {\n var chunk = ary[i];\n if (chunk.buffer instanceof ArrayBuffer) {\n var buf = chunk.buffer;\n\n // if this is a subarray, make a copy so we only\n // include the subarray region from the underlying buffer\n if (chunk.byteLength !== buf.byteLength) {\n var copy = new Uint8Array(chunk.byteLength);\n copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\n buf = copy.buffer;\n }\n\n ary[i] = buf;\n }\n }\n}\n\nfunction BlobBuilderConstructor(ary, options) {\n options = options || {};\n\n var bb = new BlobBuilder();\n mapArrayBufferViews(ary);\n\n for (var i = 0; i < ary.length; i++) {\n bb.append(ary[i]);\n }\n\n return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\n};\n\nfunction BlobConstructor(ary, options) {\n mapArrayBufferViews(ary);\n return new Blob(ary, options || {});\n};\n\nmodule.exports = (function() {\n if (blobSupported) {\n return blobSupportsArrayBufferView ? global.Blob : BlobConstructor;\n } else if (blobBuilderSupported) {\n return BlobBuilderConstructor;\n } else {\n return undefined;\n }\n})();\n","/**\n * Module dependencies.\n */\n\nvar keys = require('./keys');\nvar hasBinary = require('has-binary2');\nvar sliceBuffer = require('arraybuffer.slice');\nvar after = require('after');\nvar utf8 = require('./utf8');\n\nvar base64encoder;\nif (global && global.ArrayBuffer) {\n base64encoder = require('base64-arraybuffer');\n}\n\n/**\n * Check if we are running an android browser. That requires us to use\n * ArrayBuffer with polling transports...\n *\n * http://ghinda.net/jpeg-blob-ajax-android/\n */\n\nvar isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);\n\n/**\n * Check if we are running in PhantomJS.\n * Uploading a Blob with PhantomJS does not work correctly, as reported here:\n * https://github.com/ariya/phantomjs/issues/11395\n * @type boolean\n */\nvar isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);\n\n/**\n * When true, avoids using Blobs to encode payloads.\n * @type boolean\n */\nvar dontSendBlobs = isAndroid || isPhantomJS;\n\n/**\n * Current protocol version.\n */\n\nexports.protocol = 3;\n\n/**\n * Packet types.\n */\n\nvar packets = exports.packets = {\n open: 0 // non-ws\n , close: 1 // non-ws\n , ping: 2\n , pong: 3\n , message: 4\n , upgrade: 5\n , noop: 6\n};\n\nvar packetslist = keys(packets);\n\n/**\n * Premade error packet.\n */\n\nvar err = { type: 'error', data: 'parser error' };\n\n/**\n * Create a blob api even for blob builder when vendor prefixes exist\n */\n\nvar Blob = require('blob');\n\n/**\n * Encodes a packet.\n *\n * <packet type id> [ <data> ]\n *\n * Example:\n *\n * 5hello world\n * 3\n * 4\n *\n * Binary is encoded in an identical principle\n *\n * @api private\n */\n\nexports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {\n if (typeof supportsBinary === 'function') {\n callback = supportsBinary;\n supportsBinary = false;\n }\n\n if (typeof utf8encode === 'function') {\n callback = utf8encode;\n utf8encode = null;\n }\n\n var data = (packet.data === undefined)\n ? undefined\n : packet.data.buffer || packet.data;\n\n if (global.ArrayBuffer && data instanceof ArrayBuffer) {\n return encodeArrayBuffer(packet, supportsBinary, callback);\n } else if (Blob && data instanceof global.Blob) {\n return encodeBlob(packet, supportsBinary, callback);\n }\n\n // might be an object with { base64: true, data: dataAsBase64String }\n if (data && data.base64) {\n return encodeBase64Object(packet, callback);\n }\n\n // Sending data as a utf-8 string\n var encoded = packets[packet.type];\n\n // data fragment is optional\n if (undefined !== packet.data) {\n encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);\n }\n\n return callback('' + encoded);\n\n};\n\nfunction encodeBase64Object(packet, callback) {\n // packet data is an object { base64: true, data: dataAsBase64String }\n var message = 'b' + exports.packets[packet.type] + packet.data.data;\n return callback(message);\n}\n\n/**\n * Encode packet helpers for binary types\n */\n\nfunction encodeArrayBuffer(packet, supportsBinary, callback) {\n if (!supportsBinary) {\n return exports.encodeBase64Packet(packet, callback);\n }\n\n var data = packet.data;\n var contentArray = new Uint8Array(data);\n var resultBuffer = new Uint8Array(1 + data.byteLength);\n\n resultBuffer[0] = packets[packet.type];\n for (var i = 0; i < contentArray.length; i++) {\n resultBuffer[i+1] = contentArray[i];\n }\n\n return callback(resultBuffer.buffer);\n}\n\nfunction encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {\n if (!supportsBinary) {\n return exports.encodeBase64Packet(packet, callback);\n }\n\n var fr = new FileReader();\n fr.onload = function() {\n packet.data = fr.result;\n exports.encodePacket(packet, supportsBinary, true, callback);\n };\n return fr.readAsArrayBuffer(packet.data);\n}\n\nfunction encodeBlob(packet, supportsBinary, callback) {\n if (!supportsBinary) {\n return exports.encodeBase64Packet(packet, callback);\n }\n\n if (dontSendBlobs) {\n return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);\n }\n\n var length = new Uint8Array(1);\n length[0] = packets[packet.type];\n var blob = new Blob([length.buffer, packet.data]);\n\n return callback(blob);\n}\n\n/**\n * Encodes a packet with binary data in a base64 string\n *\n * @param {Object} packet, has `type` and `data`\n * @return {String} base64 encoded message\n */\n\nexports.encodeBase64Packet = function(packet, callback) {\n var message = 'b' + exports.packets[packet.type];\n if (Blob && packet.data instanceof global.Blob) {\n var fr = new FileReader();\n fr.onload = function() {\n var b64 = fr.result.split(',')[1];\n callback(message + b64);\n };\n return fr.readAsDataURL(packet.data);\n }\n\n var b64data;\n try {\n b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));\n } catch (e) {\n // iPhone Safari doesn't let you apply with typed arrays\n var typed = new Uint8Array(packet.data);\n var basic = new Array(typed.length);\n for (var i = 0; i < typed.length; i++) {\n basic[i] = typed[i];\n }\n b64data = String.fromCharCode.apply(null, basic);\n }\n message += global.btoa(b64data);\n return callback(message);\n};\n\n/**\n * Decodes a packet. Changes format to Blob if requested.\n *\n * @return {Object} with `type` and `data` (if any)\n * @api private\n */\n\nexports.decodePacket = function (data, binaryType, utf8decode) {\n if (data === undefined) {\n return err;\n }\n // String data\n if (typeof data === 'string') {\n if (data.charAt(0) === 'b') {\n return exports.decodeBase64Packet(data.substr(1), binaryType);\n }\n\n if (utf8decode) {\n data = tryDecode(data);\n if (data === false) {\n return err;\n }\n }\n var type = data.charAt(0);\n\n if (Number(type) != type || !packetslist[type]) {\n return err;\n }\n\n if (data.length > 1) {\n return { type: packetslist[type], data: data.substring(1) };\n } else {\n return { type: packetslist[type] };\n }\n }\n\n var asArray = new Uint8Array(data);\n var type = asArray[0];\n var rest = sliceBuffer(data, 1);\n if (Blob && binaryType === 'blob') {\n rest = new Blob([rest]);\n }\n return { type: packetslist[type], data: rest };\n};\n\nfunction tryDecode(data) {\n try {\n data = utf8.decode(data, { strict: false });\n } catch (e) {\n return false;\n }\n return data;\n}\n\n/**\n * Decodes a packet encoded in a base64 string\n *\n * @param {String} base64 encoded message\n * @return {Object} with `type` and `data` (if any)\n */\n\nexports.decodeBase64Packet = function(msg, binaryType) {\n var type = packetslist[msg.charAt(0)];\n if (!base64encoder) {\n return { type: type, data: { base64: true, data: msg.substr(1) } };\n }\n\n var data = base64encoder.decode(msg.substr(1));\n\n if (binaryType === 'blob' && Blob) {\n data = new Blob([data]);\n }\n\n return { type: type, data: data };\n};\n\n/**\n * Encodes multiple messages (payload).\n *\n * <length>:data\n *\n * Example:\n *\n * 11:hello world2:hi\n *\n * If any contents are binary, they will be encoded as base64 strings. Base64\n * encoded strings are marked with a b before the length specifier\n *\n * @param {Array} packets\n * @api private\n */\n\nexports.encodePayload = function (packets, supportsBinary, callback) {\n if (typeof supportsBinary === 'function') {\n callback = supportsBinary;\n supportsBinary = null;\n }\n\n var isBinary = hasBinary(packets);\n\n if (supportsBinary && isBinary) {\n if (Blob && !dontSendBlobs) {\n return exports.encodePayloadAsBlob(packets, callback);\n }\n\n return exports.encodePayloadAsArrayBuffer(packets, callback);\n }\n\n if (!packets.length) {\n return callback('0:');\n }\n\n function setLengthHeader(message) {\n return message.length + ':' + message;\n }\n\n function encodeOne(packet, doneCallback) {\n exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {\n doneCallback(null, setLengthHeader(message));\n });\n }\n\n map(packets, encodeOne, function(err, results) {\n return callback(results.join(''));\n });\n};\n\n/**\n * Async array map using after\n */\n\nfunction map(ary, each, done) {\n var result = new Array(ary.length);\n var next = after(ary.length, done);\n\n var eachWithIndex = function(i, el, cb) {\n each(el, function(error, msg) {\n result[i] = msg;\n cb(error, result);\n });\n };\n\n for (var i = 0; i < ary.length; i++) {\n eachWithIndex(i, ary[i], next);\n }\n}\n\n/*\n * Decodes data when a payload is maybe expected. Possible binary contents are\n * decoded from their base64 representation\n *\n * @param {String} data, callback method\n * @api public\n */\n\nexports.decodePayload = function (data, binaryType, callback) {\n if (typeof data !== 'string') {\n return exports.decodePayloadAsBinary(data, binaryType, callback);\n }\n\n if (typeof binaryType === 'function') {\n callback = binaryType;\n binaryType = null;\n }\n\n var packet;\n if (data === '') {\n // parser error - ignoring payload\n return callback(err, 0, 1);\n }\n\n var length = '', n, msg;\n\n for (var i = 0, l = data.length; i < l; i++) {\n var chr = data.charAt(i);\n\n if (chr !== ':') {\n length += chr;\n continue;\n }\n\n if (length === '' || (length != (n = Number(length)))) {\n // parser error - ignoring payload\n return callback(err, 0, 1);\n }\n\n msg = data.substr(i + 1, n);\n\n if (length != msg.length) {\n // parser error - ignoring payload\n return callback(err, 0, 1);\n }\n\n if (msg.length) {\n packet = exports.decodePacket(msg, binaryType, false);\n\n if (err.type === packet.type && err.data === packet.data) {\n // parser error in individual packet - ignoring payload\n return callback(err, 0, 1);\n }\n\n var ret = callback(packet, i + n, l);\n if (false === ret) return;\n }\n\n // advance cursor\n i += n;\n length = '';\n }\n\n if (length !== '') {\n // parser error - ignoring payload\n return callback(err, 0, 1);\n }\n\n};\n\n/**\n * Encodes multiple messages (payload) as binary.\n *\n * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number\n * 255><data>\n *\n * Example:\n * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers\n *\n * @param {Array} packets\n * @return {ArrayBuffer} encoded payload\n * @api private\n */\n\nexports.encodePayloadAsArrayBuffer = function(packets, callback) {\n if (!packets.length) {\n return callback(new ArrayBuffer(0));\n }\n\n function encodeOne(packet, doneCallback) {\n exports.encodePacket(packet, true, true, function(data) {\n return doneCallback(null, data);\n });\n }\n\n map(packets, encodeOne, function(err, encodedPackets) {\n var totalLength = encodedPackets.reduce(function(acc, p) {\n var len;\n if (typeof p === 'string'){\n len = p.length;\n } else {\n len = p.byteLength;\n }\n return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2\n }, 0);\n\n var resultArray = new Uint8Array(totalLength);\n\n var bufferIndex = 0;\n encodedPackets.forEach(function(p) {\n var isString = typeof p === 'string';\n var ab = p;\n if (isString) {\n var view = new Uint8Array(p.length);\n for (var i = 0; i < p.length; i++) {\n view[i] = p.charCodeAt(i);\n }\n ab = view.buffer;\n }\n\n if (isString) { // not true binary\n resultArray[bufferIndex++] = 0;\n } else { // true binary\n resultArray[bufferIndex++] = 1;\n }\n\n var lenStr = ab.byteLength.toString();\n for (var i = 0; i < lenStr.length; i++) {\n resultArray[bufferIndex++] = parseInt(lenStr[i]);\n }\n resultArray[bufferIndex++] = 255;\n\n var view = new Uint8Array(ab);\n for (var i = 0; i < view.length; i++) {\n resultArray[bufferIndex++] = view[i];\n }\n });\n\n return callback(resultArray.buffer);\n });\n};\n\n/**\n * Encode as Blob\n */\n\nexports.encodePayloadAsBlob = function(packets, callback) {\n function encodeOne(packet, doneCallback) {\n exports.encodePacket(packet, true, true, function(encoded) {\n var binaryIdentifier = new Uint8Array(1);\n binaryIdentifier[0] = 1;\n if (typeof encoded === 'string') {\n var view = new Uint8Array(encoded.length);\n for (var i = 0; i < encoded.length; i++) {\n view[i] = encoded.charCodeAt(i);\n }\n encoded = view.buffer;\n binaryIdentifier[0] = 0;\n }\n\n var len = (encoded instanceof ArrayBuffer)\n ? encoded.byteLength\n : encoded.size;\n\n var lenStr = len.toString();\n var lengthAry = new Uint8Array(lenStr.length + 1);\n for (var i = 0; i < lenStr.length; i++) {\n lengthAry[i] = parseInt(lenStr[i]);\n }\n lengthAry[lenStr.length] = 255;\n\n if (Blob) {\n var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);\n doneCallback(null, blob);\n }\n });\n }\n\n map(packets, encodeOne, function(err, results) {\n return callback(new Blob(results));\n });\n};\n\n/*\n * Decodes data when a payload is maybe expected. Strings are decoded by\n * interpreting each byte as a key code for entries marked to start with 0. See\n * description of encodePayloadAsBinary\n *\n * @param {ArrayBuffer} data, callback method\n * @api public\n */\n\nexports.decodePayloadAsBinary = function (data, binaryType, callback) {\n if (typeof binaryType === 'function') {\n callback = binaryType;\n binaryType = null;\n }\n\n var bufferTail = data;\n var buffers = [];\n\n while (bufferTail.byteLength > 0) {\n var tailArray = new Uint8Array(bufferTail);\n var isString = tailArray[0] === 0;\n var msgLength = '';\n\n for (var i = 1; ; i++) {\n if (tailArray[i] === 255) break;\n\n // 310 = char length of Number.MAX_VALUE\n if (msgLength.length > 310) {\n return callback(err, 0, 1);\n }\n\n msgLength += tailArray[i];\n }\n\n bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);\n msgLength = parseInt(msgLength);\n\n var msg = sliceBuffer(bufferTail, 0, msgLength);\n if (isString) {\n try {\n msg = String.fromCharCode.apply(null, new Uint8Array(msg));\n } catch (e) {\n // iPhone Safari doesn't let you apply to typed arrays\n var typed = new Uint8Array(msg);\n msg = '';\n for (var i = 0; i < typed.length; i++) {\n msg += String.fromCharCode(typed[i]);\n }\n }\n }\n\n buffers.push(msg);\n bufferTail = sliceBuffer(bufferTail, msgLength);\n }\n\n var total = buffers.length;\n buffers.forEach(function(buffer, i) {\n callback(exports.decodePacket(buffer, binaryType, true), i, total);\n });\n};\n","/**\n * Module dependencies.\n */\n\nvar parser = require('engine.io-parser');\nvar Emitter = require('component-emitter');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Transport;\n\n/**\n * Transport abstract constructor.\n *\n * @param {Object} options.\n * @api private\n */\n\nfunction Transport (opts) {\n this.path = opts.path;\n this.hostname = opts.hostname;\n this.port = opts.port;\n this.secure = opts.secure;\n this.query = opts.query;\n this.timestampParam = opts.timestampParam;\n this.timestampRequests = opts.timestampRequests;\n this.readyState = '';\n this.agent = opts.agent || false;\n this.socket = opts.socket;\n this.enablesXDR = opts.enablesXDR;\n\n // SSL options for Node.js client\n this.pfx = opts.pfx;\n this.key = opts.key;\n this.passphrase = opts.passphrase;\n this.cert = opts.cert;\n this.ca = opts.ca;\n this.ciphers = opts.ciphers;\n this.rejectUnauthorized = opts.rejectUnauthorized;\n this.forceNode = opts.forceNode;\n\n // other options for Node.js client\n this.extraHeaders = opts.extraHeaders;\n this.localAddress = opts.localAddress;\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Transport.prototype);\n\n/**\n * Emits an error.\n *\n * @param {String} str\n * @return {Transport} for chaining\n * @api public\n */\n\nTransport.prototype.onError = function (msg, desc) {\n var err = new Error(msg);\n err.type = 'TransportError';\n err.description = desc;\n this.emit('error', err);\n return this;\n};\n\n/**\n * Opens the transport.\n *\n * @api public\n */\n\nTransport.prototype.open = function () {\n if ('closed' === this.readyState || '' === this.readyState) {\n this.readyState = 'opening';\n this.doOpen();\n }\n\n return this;\n};\n\n/**\n * Closes the transport.\n *\n * @api private\n */\n\nTransport.prototype.close = function () {\n if ('opening' === this.readyState || 'open' === this.readyState) {\n this.doClose();\n this.onClose();\n }\n\n return this;\n};\n\n/**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api private\n */\n\nTransport.prototype.send = function (packets) {\n if ('open' === this.readyState) {\n this.write(packets);\n } else {\n throw new Error('Transport not open');\n }\n};\n\n/**\n * Called upon open\n *\n * @api private\n */\n\nTransport.prototype.onOpen = function () {\n this.readyState = 'open';\n this.writable = true;\n this.emit('open');\n};\n\n/**\n * Called with data.\n *\n * @param {String} data\n * @api private\n */\n\nTransport.prototype.onData = function (data) {\n var packet = parser.decodePacket(data, this.socket.binaryType);\n this.onPacket(packet);\n};\n\n/**\n * Called with a decoded packet.\n */\n\nTransport.prototype.onPacket = function (packet) {\n this.emit('packet', packet);\n};\n\n/**\n * Called upon close.\n *\n * @api private\n */\n\nTransport.prototype.onClose = function () {\n this.readyState = 'closed';\n this.emit('close');\n};\n","/**\r\n * Compiles a querystring\r\n * Returns string representation of the object\r\n *\r\n * @param {Object}\r\n * @api private\r\n */\r\n\r\nexports.encode = function (obj) {\r\n var str = '';\r\n\r\n for (var i in obj) {\r\n if (obj.hasOwnProperty(i)) {\r\n if (str.length) str += '&';\r\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\r\n }\r\n }\r\n\r\n return str;\r\n};\r\n\r\n/**\r\n * Parses a simple querystring into an object\r\n *\r\n * @param {String} qs\r\n * @api private\r\n */\r\n\r\nexports.decode = function(qs){\r\n var qry = {};\r\n var pairs = qs.split('&');\r\n for (var i = 0, l = pairs.length; i < l; i++) {\r\n var pair = pairs[i].split('=');\r\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\r\n }\r\n return qry;\r\n};\r\n","\nmodule.exports = function(a, b){\n var fn = function(){};\n fn.prototype = b.prototype;\n a.prototype = new fn;\n a.prototype.constructor = a;\n};","'use strict';\n\nvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n , length = 64\n , map = {}\n , seed = 0\n , i = 0\n , prev;\n\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nfunction encode(num) {\n var encoded = '';\n\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n\n return encoded;\n}\n\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nfunction decode(str) {\n var decoded = 0;\n\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n\n return decoded;\n}\n\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nfunction yeast() {\n var now = encode(+new Date());\n\n if (now !== prev) return seed = 0, prev = now;\n return now +'.'+ encode(seed++);\n}\n\n//\n// Map each character to its index.\n//\nfor (; i < length; i++) map[alphabet[i]] = i;\n\n//\n// Expose the `yeast`, `encode` and `decode` functions.\n//\nyeast.encode = encode;\nyeast.decode = decode;\nmodule.exports = yeast;\n","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parseqs = require('parseqs');\nvar parser = require('engine.io-parser');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:polling');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Polling;\n\n/**\n * Is XHR2 supported?\n */\n\nvar hasXHR2 = (function () {\n var XMLHttpRequest = require('xmlhttprequest-ssl');\n var xhr = new XMLHttpRequest({ xdomain: false });\n return null != xhr.responseType;\n})();\n\n/**\n * Polling interface.\n *\n * @param {Object} opts\n * @api private\n */\n\nfunction Polling (opts) {\n var forceBase64 = (opts && opts.forceBase64);\n if (!hasXHR2 || forceBase64) {\n this.supportsBinary = false;\n }\n Transport.call(this, opts);\n}\n\n/**\n * Inherits from Transport.\n */\n\ninherit(Polling, Transport);\n\n/**\n * Transport name.\n */\n\nPolling.prototype.name = 'polling';\n\n/**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @api private\n */\n\nPolling.prototype.doOpen = function () {\n this.poll();\n};\n\n/**\n * Pauses polling.\n *\n * @param {Function} callback upon buffers are flushed and transport is paused\n * @api private\n */\n\nPolling.prototype.pause = function (onPause) {\n var self = this;\n\n this.readyState = 'pausing';\n\n function pause () {\n debug('paused');\n self.readyState = 'paused';\n onPause();\n }\n\n if (this.polling || !this.writable) {\n var total = 0;\n\n if (this.polling) {\n debug('we are currently polling - waiting to pause');\n total++;\n this.once('pollComplete', function () {\n debug('pre-pause polling complete');\n --total || pause();\n });\n }\n\n if (!this.writable) {\n debug('we are currently writing - waiting to pause');\n total++;\n this.once('drain', function () {\n debug('pre-pause writing complete');\n --total || pause();\n });\n }\n } else {\n pause();\n }\n};\n\n/**\n * Starts polling cycle.\n *\n * @api public\n */\n\nPolling.prototype.poll = function () {\n debug('polling');\n this.polling = true;\n this.doPoll();\n this.emit('poll');\n};\n\n/**\n * Overloads onData to detect payloads.\n *\n * @api private\n */\n\nPolling.prototype.onData = function (data) {\n var self = this;\n debug('polling got data %s', data);\n var callback = function (packet, index, total) {\n // if its the first message we consider the transport open\n if ('opening' === self.readyState) {\n self.onOpen();\n }\n\n // if its a close packet, we close the ongoing requests\n if ('close' === packet.type) {\n self.onClose();\n return false;\n }\n\n // otherwise bypass onData and handle the message\n self.onPacket(packet);\n };\n\n // decode payload\n parser.decodePayload(data, this.socket.binaryType, callback);\n\n // if an event did not trigger closing\n if ('closed' !== this.readyState) {\n // if we got data we're not polling\n this.polling = false;\n this.emit('pollComplete');\n\n if ('open' === this.readyState) {\n this.poll();\n } else {\n debug('ignoring poll - transport state \"%s\"', this.readyState);\n }\n }\n};\n\n/**\n * For polling, send a close packet.\n *\n * @api private\n */\n\nPolling.prototype.doClose = function () {\n var self = this;\n\n function close () {\n debug('writing close packet');\n self.write([{ type: 'close' }]);\n }\n\n if ('open' === this.readyState) {\n debug('transport open - closing');\n close();\n } else {\n // in case we're trying to close while\n // handshaking is in progress (GH-164)\n debug('transport not open - deferring close');\n this.once('open', close);\n }\n};\n\n/**\n * Writes a packets payload.\n *\n * @param {Array} data packets\n * @param {Function} drain callback\n * @api private\n */\n\nPolling.prototype.write = function (packets) {\n var self = this;\n this.writable = false;\n var callbackfn = function () {\n self.writable = true;\n self.emit('drain');\n };\n\n parser.encodePayload(packets, this.supportsBinary, function (data) {\n self.doWrite(data, callbackfn);\n });\n};\n\n/**\n * Generates uri for connection.\n *\n * @api private\n */\n\nPolling.prototype.uri = function () {\n var query = this.query || {};\n var schema = this.secure ? 'https' : 'http';\n var port = '';\n\n // cache busting is forced\n if (false !== this.timestampRequests) {\n query[this.timestampParam] = yeast();\n }\n\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n\n query = parseqs.encode(query);\n\n // avoid port if default for schema\n if (this.port && (('https' === schema && Number(this.port) !== 443) ||\n ('http' === schema && Number(this.port) !== 80))) {\n port = ':' + this.port;\n }\n\n // prepend ? to query\n if (query.length) {\n query = '?' + query;\n }\n\n var ipv6 = this.hostname.indexOf(':') !== -1;\n return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n};\n","/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar Polling = require('./polling');\nvar Emitter = require('component-emitter');\nvar inherit = require('component-inherit');\nvar debug = require('debug')('engine.io-client:polling-xhr');\n\n/**\n * Module exports.\n */\n\nmodule.exports = XHR;\nmodule.exports.Request = Request;\n\n/**\n * Empty function\n */\n\nfunction empty () {}\n\n/**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction XHR (opts) {\n Polling.call(this, opts);\n this.requestTimeout = opts.requestTimeout;\n this.extraHeaders = opts.extraHeaders;\n\n if (global.location) {\n var isSSL = 'https:' === location.protocol;\n var port = location.port;\n\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? 443 : 80;\n }\n\n this.xd = opts.hostname !== global.location.hostname ||\n port !== opts.port;\n this.xs = opts.secure !== isSSL;\n }\n}\n\n/**\n * Inherits from Polling.\n */\n\ninherit(XHR, Polling);\n\n/**\n * XHR supports binary\n */\n\nXHR.prototype.supportsBinary = true;\n\n/**\n * Creates a request.\n *\n * @param {String} method\n * @api private\n */\n\nXHR.prototype.request = function (opts) {\n opts = opts || {};\n opts.uri = this.uri();\n opts.xd = this.xd;\n opts.xs = this.xs;\n opts.agent = this.agent || false;\n opts.supportsBinary = this.supportsBinary;\n opts.enablesXDR = this.enablesXDR;\n\n // SSL options for Node.js client\n opts.pfx = this.pfx;\n opts.key = this.key;\n opts.passphrase = this.passphrase;\n opts.cert = this.cert;\n opts.ca = this.ca;\n opts.ciphers = this.ciphers;\n opts.rejectUnauthorized = this.rejectUnauthorized;\n opts.requestTimeout = this.requestTimeout;\n\n // other options for Node.js client\n opts.extraHeaders = this.extraHeaders;\n\n return new Request(opts);\n};\n\n/**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @api private\n */\n\nXHR.prototype.doWrite = function (data, fn) {\n var isBinary = typeof data !== 'string' && data !== undefined;\n var req = this.request({ method: 'POST', data: data, isBinary: isBinary });\n var self = this;\n req.on('success', fn);\n req.on('error', function (err) {\n self.onError('xhr post error', err);\n });\n this.sendXhr = req;\n};\n\n/**\n * Starts a poll cycle.\n *\n * @api private\n */\n\nXHR.prototype.doPoll = function () {\n debug('xhr poll');\n var req = this.request();\n var self = this;\n req.on('data', function (data) {\n self.onData(data);\n });\n req.on('error', function (err) {\n self.onError('xhr poll error', err);\n });\n this.pollXhr = req;\n};\n\n/**\n * Request constructor\n *\n * @param {Object} options\n * @api public\n */\n\nfunction Request (opts) {\n this.method = opts.method || 'GET';\n this.uri = opts.uri;\n this.xd = !!opts.xd;\n this.xs = !!opts.xs;\n this.async = false !== opts.async;\n this.data = undefined !== opts.data ? opts.data : null;\n this.agent = opts.agent;\n this.isBinary = opts.isBinary;\n this.supportsBinary = opts.supportsBinary;\n this.enablesXDR = opts.enablesXDR;\n this.requestTimeout = opts.requestTimeout;\n\n // SSL options for Node.js client\n this.pfx = opts.pfx;\n this.key = opts.key;\n this.passphrase = opts.passphrase;\n this.cert = opts.cert;\n this.ca = opts.ca;\n this.ciphers = opts.ciphers;\n this.rejectUnauthorized = opts.rejectUnauthorized;\n\n // other options for Node.js client\n this.extraHeaders = opts.extraHeaders;\n\n this.create();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Request.prototype);\n\n/**\n * Creates the XHR object and sends the request.\n *\n * @api private\n */\n\nRequest.prototype.create = function () {\n var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };\n\n // SSL options for Node.js client\n opts.pfx = this.pfx;\n opts.key = this.key;\n opts.passphrase = this.passphrase;\n opts.cert = this.cert;\n opts.ca = this.ca;\n opts.ciphers = this.ciphers;\n opts.rejectUnauthorized = this.rejectUnauthorized;\n\n var xhr = this.xhr = new XMLHttpRequest(opts);\n var self = this;\n\n try {\n debug('xhr open %s: %s', this.method, this.uri);\n xhr.open(this.method, this.uri, this.async);\n try {\n if (this.extraHeaders) {\n xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n for (var i in this.extraHeaders) {\n if (this.extraHeaders.hasOwnProperty(i)) {\n xhr.setRequestHeader(i, this.extraHeaders[i]);\n }\n }\n }\n } catch (e) {}\n\n if ('POST' === this.method) {\n try {\n if (this.isBinary) {\n xhr.setRequestHeader('Content-type', 'application/octet-stream');\n } else {\n xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');\n }\n } catch (e) {}\n }\n\n try {\n xhr.setRequestHeader('Accept', '*/*');\n } catch (e) {}\n\n // ie6 check\n if ('withCredentials' in xhr) {\n xhr.withCredentials = true;\n }\n\n if (this.requestTimeout) {\n xhr.timeout = this.requestTimeout;\n }\n\n if (this.hasXDR()) {\n xhr.onload = function () {\n self.onLoad();\n };\n xhr.onerror = function () {\n self.onError(xhr.responseText);\n };\n } else {\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 2) {\n try {\n var contentType = xhr.getResponseHeader('Content-Type');\n if (self.supportsBinary && contentType === 'application/octet-stream') {\n xhr.responseType = 'arraybuffer';\n }\n } catch (e) {}\n }\n if (4 !== xhr.readyState) return;\n if (200 === xhr.status || 1223 === xhr.status) {\n self.onLoad();\n } else {\n // make sure the `error` event handler that's user-set\n // does not throw in the same tick and gets caught here\n setTimeout(function () {\n self.onError(xhr.status);\n }, 0);\n }\n };\n }\n\n debug('xhr data %s', this.data);\n xhr.send(this.data);\n } catch (e) {\n // Need to defer since .create() is called directly fhrom the constructor\n // and thus the 'error' event can only be only bound *after* this exception\n // occurs. Therefore, also, we cannot throw here at all.\n setTimeout(function () {\n self.onError(e);\n }, 0);\n return;\n }\n\n if (global.document) {\n this.index = Request.requestsCount++;\n Request.requests[this.index] = this;\n }\n};\n\n/**\n * Called upon successful response.\n *\n * @api private\n */\n\nRequest.prototype.onSuccess = function () {\n this.emit('success');\n this.cleanup();\n};\n\n/**\n * Called if we have data.\n *\n * @api private\n */\n\nRequest.prototype.onData = function (data) {\n this.emit('data', data);\n this.onSuccess();\n};\n\n/**\n * Called upon error.\n *\n * @api private\n */\n\nRequest.prototype.onError = function (err) {\n this.emit('error', err);\n this.cleanup(true);\n};\n\n/**\n * Cleans up house.\n *\n * @api private\n */\n\nRequest.prototype.cleanup = function (fromError) {\n if ('undefined' === typeof this.xhr || null === this.xhr) {\n return;\n }\n // xmlhttprequest\n if (this.hasXDR()) {\n this.xhr.onload = this.xhr.onerror = empty;\n } else {\n this.xhr.onreadystatechange = empty;\n }\n\n if (fromError) {\n try {\n this.xhr.abort();\n } catch (e) {}\n }\n\n if (global.document) {\n delete Request.requests[this.index];\n }\n\n this.xhr = null;\n};\n\n/**\n * Called upon load.\n *\n * @api private\n */\n\nRequest.prototype.onLoad = function () {\n var data;\n try {\n var contentType;\n try {\n contentType = this.xhr.getResponseHeader('Content-Type');\n } catch (e) {}\n if (contentType === 'application/octet-stream') {\n data = this.xhr.response || this.xhr.responseText;\n } else {\n data = this.xhr.responseText;\n }\n } catch (e) {\n this.onError(e);\n }\n if (null != data) {\n this.onData(data);\n }\n};\n\n/**\n * Check if it has XDomainRequest.\n *\n * @api private\n */\n\nRequest.prototype.hasXDR = function () {\n return 'undefined' !== typeof global.XDomainRequest && !this.xs && this.enablesXDR;\n};\n\n/**\n * Aborts the request.\n *\n * @api public\n */\n\nRequest.prototype.abort = function () {\n this.cleanup();\n};\n\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\n\nRequest.requestsCount = 0;\nRequest.requests = {};\n\nif (global.document) {\n if (global.attachEvent) {\n global.attachEvent('onunload', unloadHandler);\n } else if (global.addEventListener) {\n global.addEventListener('beforeunload', unloadHandler, false);\n }\n}\n\nfunction unloadHandler () {\n for (var i in Request.requests) {\n if (Request.requests.hasOwnProperty(i)) {\n Request.requests[i].abort();\n }\n }\n}\n","\n/**\n * Module requirements.\n */\n\nvar Polling = require('./polling');\nvar inherit = require('component-inherit');\n\n/**\n * Module exports.\n */\n\nmodule.exports = JSONPPolling;\n\n/**\n * Cached regular expressions.\n */\n\nvar rNewline = /\\n/g;\nvar rEscapedNewline = /\\\\n/g;\n\n/**\n * Global JSONP callbacks.\n */\n\nvar callbacks;\n\n/**\n * Noop.\n */\n\nfunction empty () { }\n\n/**\n * JSONP Polling constructor.\n *\n * @param {Object} opts.\n * @api public\n */\n\nfunction JSONPPolling (opts) {\n Polling.call(this, opts);\n\n this.query = this.query || {};\n\n // define global callbacks array if not present\n // we do this here (lazily) to avoid unneeded global pollution\n if (!callbacks) {\n // we need to consider multiple engines in the same page\n if (!global.___eio) global.___eio = [];\n callbacks = global.___eio;\n }\n\n // callback identifier\n this.index = callbacks.length;\n\n // add callback to jsonp global\n var self = this;\n callbacks.push(function (msg) {\n self.onData(msg);\n });\n\n // append to query string\n this.query.j = this.index;\n\n // prevent spurious errors from being emitted when the window is unloaded\n if (global.document && global.addEventListener) {\n global.addEventListener('beforeunload', function () {\n if (self.script) self.script.onerror = empty;\n }, false);\n }\n}\n\n/**\n * Inherits from Polling.\n */\n\ninherit(JSONPPolling, Polling);\n\n/*\n * JSONP only supports binary as base64 encoded strings\n */\n\nJSONPPolling.prototype.supportsBinary = false;\n\n/**\n * Closes the socket.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doClose = function () {\n if (this.script) {\n this.script.parentNode.removeChild(this.script);\n this.script = null;\n }\n\n if (this.form) {\n this.form.parentNode.removeChild(this.form);\n this.form = null;\n this.iframe = null;\n }\n\n Polling.prototype.doClose.call(this);\n};\n\n/**\n * Starts a poll cycle.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doPoll = function () {\n var self = this;\n var script = document.createElement('script');\n\n if (this.script) {\n this.script.parentNode.removeChild(this.script);\n this.script = null;\n }\n\n script.async = true;\n script.src = this.uri();\n script.onerror = function (e) {\n self.onError('jsonp poll error', e);\n };\n\n var insertAt = document.getElementsByTagName('script')[0];\n if (insertAt) {\n insertAt.parentNode.insertBefore(script, insertAt);\n } else {\n (document.head || document.body).appendChild(script);\n }\n this.script = script;\n\n var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\n if (isUAgecko) {\n setTimeout(function () {\n var iframe = document.createElement('iframe');\n document.body.appendChild(iframe);\n document.body.removeChild(iframe);\n }, 100);\n }\n};\n\n/**\n * Writes with a hidden iframe.\n *\n * @param {String} data to send\n * @param {Function} called upon flush.\n * @api private\n */\n\nJSONPPolling.prototype.doWrite = function (data, fn) {\n var self = this;\n\n if (!this.form) {\n var form = document.createElement('form');\n var area = document.createElement('textarea');\n var id = this.iframeId = 'eio_iframe_' + this.index;\n var iframe;\n\n form.className = 'socketio';\n form.style.position = 'absolute';\n form.style.top = '-1000px';\n form.style.left = '-1000px';\n form.target = id;\n form.method = 'POST';\n form.setAttribute('accept-charset', 'utf-8');\n area.name = 'd';\n form.appendChild(area);\n document.body.appendChild(form);\n\n this.form = form;\n this.area = area;\n }\n\n this.form.action = this.uri();\n\n function complete () {\n initIframe();\n fn();\n }\n\n function initIframe () {\n if (self.iframe) {\n try {\n self.form.removeChild(self.iframe);\n } catch (e) {\n self.onError('jsonp polling iframe removal error', e);\n }\n }\n\n try {\n // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n var html = '<iframe src=\"javascript:0\" name=\"' + self.iframeId + '\">';\n iframe = document.createElement(html);\n } catch (e) {\n iframe = document.createElement('iframe');\n iframe.name = self.iframeId;\n iframe.src = 'javascript:0';\n }\n\n iframe.id = self.iframeId;\n\n self.form.appendChild(iframe);\n self.iframe = iframe;\n }\n\n initIframe();\n\n // escape \\n to prevent it from being converted into \\r\\n by some UAs\n // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side\n data = data.replace(rEscapedNewline, '\\\\\\n');\n this.area.value = data.replace(rNewline, '\\\\n');\n\n try {\n this.form.submit();\n } catch (e) {}\n\n if (this.iframe.attachEvent) {\n this.iframe.onreadystatechange = function () {\n if (self.iframe.readyState === 'complete') {\n complete();\n }\n };\n } else {\n this.iframe.onload = complete;\n }\n};\n","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parser = require('engine.io-parser');\nvar parseqs = require('parseqs');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:websocket');\nvar BrowserWebSocket = global.WebSocket || global.MozWebSocket;\nvar NodeWebSocket;\nif (typeof window === 'undefined') {\n try {\n NodeWebSocket = require('ws');\n } catch (e) { }\n}\n\n/**\n * Get either the `WebSocket` or `MozWebSocket` globals\n * in the browser or try to resolve WebSocket-compatible\n * interface exposed by `ws` for Node-like environment.\n */\n\nvar WebSocket = BrowserWebSocket;\nif (!WebSocket && typeof window === 'undefined') {\n WebSocket = NodeWebSocket;\n}\n\n/**\n * Module exports.\n */\n\nmodule.exports = WS;\n\n/**\n * WebSocket transport constructor.\n *\n * @api {Object} connection options\n * @api public\n */\n\nfunction WS (opts) {\n var forceBase64 = (opts && opts.forceBase64);\n if (forceBase64) {\n this.supportsBinary = false;\n }\n this.perMessageDeflate = opts.perMessageDeflate;\n this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n this.protocols = opts.protocols;\n if (!this.usingBrowserWebSocket) {\n WebSocket = NodeWebSocket;\n }\n Transport.call(this, opts);\n}\n\n/**\n * Inherits from Transport.\n */\n\ninherit(WS, Transport);\n\n/**\n * Transport name.\n *\n * @api public\n */\n\nWS.prototype.name = 'websocket';\n\n/*\n * WebSockets support binary\n */\n\nWS.prototype.supportsBinary = true;\n\n/**\n * Opens socket.\n *\n * @api private\n */\n\nWS.prototype.doOpen = function () {\n if (!this.check()) {\n // let probe timeout\n return;\n }\n\n var uri = this.uri();\n var protocols = this.protocols;\n var opts = {\n agent: this.agent,\n perMessageDeflate: this.perMessageDeflate\n };\n\n // SSL options for Node.js client\n opts.pfx = this.pfx;\n opts.key = this.key;\n opts.passphrase = this.passphrase;\n opts.cert = this.cert;\n opts.ca = this.ca;\n opts.ciphers = this.ciphers;\n opts.rejectUnauthorized = this.rejectUnauthorized;\n if (this.extraHeaders) {\n opts.headers = this.extraHeaders;\n }\n if (this.localAddress) {\n opts.localAddress = this.localAddress;\n }\n\n try {\n this.ws = this.usingBrowserWebSocket ? (protocols ? new WebSocket(uri, protocols) : new WebSocket(uri)) : new WebSocket(uri, protocols, opts);\n } catch (err) {\n return this.emit('error', err);\n }\n\n if (this.ws.binaryType === undefined) {\n this.supportsBinary = false;\n }\n\n if (this.ws.supports && this.ws.supports.binary) {\n this.supportsBinary = true;\n this.ws.binaryType = 'nodebuffer';\n } else {\n this.ws.binaryType = 'arraybuffer';\n }\n\n this.addEventListeners();\n};\n\n/**\n * Adds event listeners to the socket\n *\n * @api private\n */\n\nWS.prototype.addEventListeners = function () {\n var self = this;\n\n this.ws.onopen = function () {\n self.onOpen();\n };\n this.ws.onclose = function () {\n self.onClose();\n };\n this.ws.onmessage = function (ev) {\n self.onData(ev.data);\n };\n this.ws.onerror = function (e) {\n self.onError('websocket error', e);\n };\n};\n\n/**\n * Writes data to socket.\n *\n * @param {Array} array of packets.\n * @api private\n */\n\nWS.prototype.write = function (packets) {\n var self = this;\n this.writable = false;\n\n // encodePacket efficient as it uses WS framing\n // no need for encodePayload\n var total = packets.length;\n for (var i = 0, l = total; i < l; i++) {\n (function (packet) {\n parser.encodePacket(packet, self.supportsBinary, function (data) {\n if (!self.usingBrowserWebSocket) {\n // always create a new object (GH-437)\n var opts = {};\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n\n if (self.perMessageDeflate) {\n var len = 'string' === typeof data ? global.Buffer.byteLength(data) : data.length;\n if (len < self.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\n\n // Sometimes the websocket has already been closed but the browser didn't\n // have a chance of informing us about it yet, in that case send will\n // throw an error\n try {\n if (self.usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n self.ws.send(data);\n } else {\n self.ws.send(data, opts);\n }\n } catch (e) {\n debug('websocket closed before onclose event');\n }\n\n --total || done();\n });\n })(packets[i]);\n }\n\n function done () {\n self.emit('flush');\n\n // fake drain\n // defer to next tick to allow Socket to clear writeBuffer\n setTimeout(function () {\n self.writable = true;\n self.emit('drain');\n }, 0);\n }\n};\n\n/**\n * Called upon close\n *\n * @api private\n */\n\nWS.prototype.onClose = function () {\n Transport.prototype.onClose.call(this);\n};\n\n/**\n * Closes socket.\n *\n * @api private\n */\n\nWS.prototype.doClose = function () {\n if (typeof this.ws !== 'undefined') {\n this.ws.close();\n }\n};\n\n/**\n * Generates uri for connection.\n *\n * @api private\n */\n\nWS.prototype.uri = function () {\n var query = this.query || {};\n var schema = this.secure ? 'wss' : 'ws';\n var port = '';\n\n // avoid port if default for schema\n if (this.port && (('wss' === schema && Number(this.port) !== 443) ||\n ('ws' === schema && Number(this.port) !== 80))) {\n port = ':' + this.port;\n }\n\n // append timestamp to URI\n if (this.timestampRequests) {\n query[this.timestampParam] = yeast();\n }\n\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n\n query = parseqs.encode(query);\n\n // prepend ? to query\n if (query.length) {\n query = '?' + query;\n }\n\n var ipv6 = this.hostname.indexOf(':') !== -1;\n return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n};\n\n/**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @api public\n */\n\nWS.prototype.check = function () {\n return !!WebSocket && !('__initialize' in WebSocket && this.name === WS.prototype.name);\n};\n","/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar XHR = require('./polling-xhr');\nvar JSONP = require('./polling-jsonp');\nvar websocket = require('./websocket');\n\n/**\n * Export transports.\n */\n\nexports.polling = polling;\nexports.websocket = websocket;\n\n/**\n * Polling transport polymorphic constructor.\n * Decides on xhr vs jsonp based on feature detection.\n *\n * @api private\n */\n\nfunction polling (opts) {\n var xhr;\n var xd = false;\n var xs = false;\n var jsonp = false !== opts.jsonp;\n\n if (global.location) {\n var isSSL = 'https:' === location.protocol;\n var port = location.port;\n\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? 443 : 80;\n }\n\n xd = opts.hostname !== location.hostname || port !== opts.port;\n xs = opts.secure !== isSSL;\n }\n\n opts.xdomain = xd;\n opts.xscheme = xs;\n xhr = new XMLHttpRequest(opts);\n\n if ('open' in xhr && !opts.forceJSONP) {\n return new XHR(opts);\n } else {\n if (!jsonp) throw new Error('JSONP disabled');\n return new JSONP(opts);\n }\n}\n","\nvar indexOf = [].indexOf;\n\nmodule.exports = function(arr, obj){\n if (indexOf) return arr.indexOf(obj);\n for (var i = 0; i < arr.length; ++i) {\n if (arr[i] === obj) return i;\n }\n return -1;\n};","/**\n * Module dependencies.\n */\n\nvar transports = require('./transports/index');\nvar Emitter = require('component-emitter');\nvar debug = require('debug')('engine.io-client:socket');\nvar index = require('indexof');\nvar parser = require('engine.io-parser');\nvar parseuri = require('parseuri');\nvar parseqs = require('parseqs');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Socket;\n\n/**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} options\n * @api public\n */\n\nfunction Socket (uri, opts) {\n if (!(this instanceof Socket)) return new Socket(uri, opts);\n\n opts = opts || {};\n\n if (uri && 'object' === typeof uri) {\n opts = uri;\n uri = null;\n }\n\n if (uri) {\n uri = parseuri(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';\n opts.port = uri.port;\n if (uri.query) opts.query = uri.query;\n } else if (opts.host) {\n opts.hostname = parseuri(opts.host).host;\n }\n\n this.secure = null != opts.secure ? opts.secure\n : (global.location && 'https:' === location.protocol);\n\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? '443' : '80';\n }\n\n this.agent = opts.agent || false;\n this.hostname = opts.hostname ||\n (global.location ? location.hostname : 'localhost');\n this.port = opts.port || (global.location && location.port\n ? location.port\n : (this.secure ? 443 : 80));\n this.query = opts.query || {};\n if ('string' === typeof this.query) this.query = parseqs.decode(this.query);\n this.upgrade = false !== opts.upgrade;\n this.path = (opts.path || '/engine.io').replace(/\\/$/, '') + '/';\n this.forceJSONP = !!opts.forceJSONP;\n this.jsonp = false !== opts.jsonp;\n this.forceBase64 = !!opts.forceBase64;\n this.enablesXDR = !!opts.enablesXDR;\n this.timestampParam = opts.timestampParam || 't';\n this.timestampRequests = opts.timestampRequests;\n this.transports = opts.transports || ['polling', 'websocket'];\n this.transportOptions = opts.transportOptions || {};\n this.readyState = '';\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n this.policyPort = opts.policyPort || 843;\n this.rememberUpgrade = opts.rememberUpgrade || false;\n this.binaryType = null;\n this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;\n this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;\n\n if (true === this.perMessageDeflate) this.perMessageDeflate = {};\n if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {\n this.perMessageDeflate.threshold = 1024;\n }\n\n // SSL options for Node.js client\n this.pfx = opts.pfx || null;\n this.key = opts.key || null;\n this.passphrase = opts.passphrase || null;\n this.cert = opts.cert || null;\n this.ca = opts.ca || null;\n this.ciphers = opts.ciphers || null;\n this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;\n this.forceNode = !!opts.forceNode;\n\n // other options for Node.js client\n var freeGlobal = typeof global === 'object' && global;\n if (freeGlobal.global === freeGlobal) {\n if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n this.extraHeaders = opts.extraHeaders;\n }\n\n if (opts.localAddress) {\n this.localAddress = opts.localAddress;\n }\n }\n\n // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n\n // set on heartbeat\n this.pingIntervalTimer = null;\n this.pingTimeoutTimer = null;\n\n this.open();\n}\n\nSocket.priorWebsocketSuccess = false;\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nSocket.protocol = parser.protocol; // this is an int\n\n/**\n * Expose deps for legacy compatibility\n * and standalone browser access.\n */\n\nSocket.Socket = Socket;\nSocket.Transport = require('./transport');\nSocket.transports = require('./transports/index');\nSocket.parser = require('engine.io-parser');\n\n/**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api private\n */\n\nSocket.prototype.createTransport = function (name) {\n debug('creating transport \"%s\"', name);\n var query = clone(this.query);\n\n // append engine.io protocol identifier\n query.EIO = parser.protocol;\n\n // transport name\n query.transport = name;\n\n // per-transport options\n var options = this.transportOptions[name] || {};\n\n // session id if we already have one\n if (this.id) query.sid = this.id;\n\n var transport = new transports[name]({\n query: query,\n socket: this,\n agent: options.agent || this.agent,\n hostname: options.hostname || this.hostname,\n port: options.port || this.port,\n secure: options.secure || this.secure,\n path: options.path || this.path,\n forceJSONP: options.forceJSONP || this.forceJSONP,\n jsonp: options.jsonp || this.jsonp,\n forceBase64: options.forceBase64 || this.forceBase64,\n enablesXDR: options.enablesXDR || this.enablesXDR,\n timestampRequests: options.timestampRequests || this.timestampRequests,\n timestampParam: options.timestampParam || this.timestampParam,\n policyPort: options.policyPort || this.policyPort,\n pfx: options.pfx || this.pfx,\n key: options.key || this.key,\n passphrase: options.passphrase || this.passphrase,\n cert: options.cert || this.cert,\n ca: options.ca || this.ca,\n ciphers: options.ciphers || this.ciphers,\n rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n extraHeaders: options.extraHeaders || this.extraHeaders,\n forceNode: options.forceNode || this.forceNode,\n localAddress: options.localAddress || this.localAddress,\n requestTimeout: options.requestTimeout || this.requestTimeout,\n protocols: options.protocols || void (0)\n });\n\n return transport;\n};\n\nfunction clone (obj) {\n var o = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n o[i] = obj[i];\n }\n }\n return o;\n}\n\n/**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\nSocket.prototype.open = function () {\n var transport;\n if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {\n transport = 'websocket';\n } else if (0 === this.transports.length) {\n // Emit error on next tick so it can be listened to\n var self = this;\n setTimeout(function () {\n self.emit('error', 'No transports available');\n }, 0);\n return;\n } else {\n transport = this.transports[0];\n }\n this.readyState = 'opening';\n\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n } catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\n\n transport.open();\n this.setTransport(transport);\n};\n\n/**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api private\n */\n\nSocket.prototype.setTransport = function (transport) {\n debug('setting transport %s', transport.name);\n var self = this;\n\n if (this.transport) {\n debug('clearing existing transport %s', this.transport.name);\n this.transport.removeAllListeners();\n }\n\n // set up transport\n this.transport = transport;\n\n // set up transport listeners\n transport\n .on('drain', function () {\n self.onDrain();\n })\n .on('packet', function (packet) {\n self.onPacket(packet);\n })\n .on('error', function (e) {\n self.onError(e);\n })\n .on('close', function () {\n self.onClose('transport close');\n });\n};\n\n/**\n * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n\nSocket.prototype.probe = function (name) {\n debug('probing transport \"%s\"', name);\n var transport = this.createTransport(name, { probe: 1 });\n var failed = false;\n var self = this;\n\n Socket.priorWebsocketSuccess = false;\n\n function onTransportOpen () {\n if (self.onlyBinaryUpgrades) {\n var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;\n failed = failed || upgradeLosesBinary;\n }\n if (failed) return;\n\n debug('probe transport \"%s\" opened', name);\n transport.send([{ type: 'ping', data: 'probe' }]);\n transport.once('packet', function (msg) {\n if (failed) return;\n if ('pong' === msg.type && 'probe' === msg.data) {\n debug('probe transport \"%s\" pong', name);\n self.upgrading = true;\n self.emit('upgrading', transport);\n if (!transport) return;\n Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\n debug('pausing current transport \"%s\"', self.transport.name);\n self.transport.pause(function () {\n if (failed) return;\n if ('closed' === self.readyState) return;\n debug('changing transport and sending upgrade packet');\n\n cleanup();\n\n self.setTransport(transport);\n transport.send([{ type: 'upgrade' }]);\n self.emit('upgrade', transport);\n transport = null;\n self.upgrading = false;\n self.flush();\n });\n } else {\n debug('probe transport \"%s\" failed', name);\n var err = new Error('probe error');\n err.transport = transport.name;\n self.emit('upgradeError', err);\n }\n });\n }\n\n function freezeTransport () {\n if (failed) return;\n\n // Any callback called by transport should be ignored since now\n failed = true;\n\n cleanup();\n\n transport.close();\n transport = null;\n }\n\n // Handle any error that happens while probing\n function onerror (err) {\n var error = new Error('probe error: ' + err);\n error.transport = transport.name;\n\n freezeTransport();\n\n debug('probe transport \"%s\" failed because of error: %s', name, err);\n\n self.emit('upgradeError', error);\n }\n\n function onTransportClose () {\n onerror('transport closed');\n }\n\n // When the socket is closed while we're probing\n function onclose () {\n onerror('socket closed');\n }\n\n // When the socket is upgraded while we're probing\n function onupgrade (to) {\n if (transport && to.name !== transport.name) {\n debug('\"%s\" works - aborting \"%s\"', to.name, transport.name);\n freezeTransport();\n }\n }\n\n // Remove all listeners on the transport and on self\n function cleanup () {\n transport.removeListener('open', onTransportOpen);\n transport.removeListener('error', onerror);\n transport.removeListener('close', onTransportClose);\n self.removeListener('close', onclose);\n self.removeListener('upgrading', onupgrade);\n }\n\n transport.once('open', onTransportOpen);\n transport.once('error', onerror);\n transport.once('close', onTransportClose);\n\n this.once('close', onclose);\n this.once('upgrading', onupgrade);\n\n transport.open();\n};\n\n/**\n * Called when connection is deemed open.\n *\n * @api public\n */\n\nSocket.prototype.onOpen = function () {\n debug('socket open');\n this.readyState = 'open';\n Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;\n this.emit('open');\n this.flush();\n\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if ('open' === this.readyState && this.upgrade && this.transport.pause) {\n debug('starting upgrade probes');\n for (var i = 0, l = this.upgrades.length; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\n};\n\n/**\n * Handles a packet.\n *\n * @api private\n */\n\nSocket.prototype.onPacket = function (packet) {\n if ('opening' === this.readyState || 'open' === this.readyState ||\n 'closing' === this.readyState) {\n debug('socket receive: type \"%s\", data \"%s\"', packet.type, packet.data);\n\n this.emit('packet', packet);\n\n // Socket is live - any packet counts\n this.emit('heartbeat');\n\n switch (packet.type) {\n case 'open':\n this.onHandshake(JSON.parse(packet.data));\n break;\n\n case 'pong':\n this.setPing();\n this.emit('pong');\n break;\n\n case 'error':\n var err = new Error('server error');\n err.code = packet.data;\n this.onError(err);\n break;\n\n case 'message':\n this.emit('data', packet.data);\n this.emit('message', packet.data);\n break;\n }\n } else {\n debug('packet received with socket readyState \"%s\"', this.readyState);\n }\n};\n\n/**\n * Called upon handshake completion.\n *\n * @param {Object} handshake obj\n * @api private\n */\n\nSocket.prototype.onHandshake = function (data) {\n this.emit('handshake', data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this.upgrades = this.filterUpgrades(data.upgrades);\n this.pingInterval = data.pingInterval;\n this.pingTimeout = data.pingTimeout;\n this.onOpen();\n // In case open handler closes socket\n if ('closed' === this.readyState) return;\n this.setPing();\n\n // Prolong liveness of socket on heartbeat\n this.removeListener('heartbeat', this.onHeartbeat);\n this.on('heartbeat', this.onHeartbeat);\n};\n\n/**\n * Resets ping timeout.\n *\n * @api private\n */\n\nSocket.prototype.onHeartbeat = function (timeout) {\n clearTimeout(this.pingTimeoutTimer);\n var self = this;\n self.pingTimeoutTimer = setTimeout(function () {\n if ('closed' === self.readyState) return;\n self.onClose('ping timeout');\n }, timeout || (self.pingInterval + self.pingTimeout));\n};\n\n/**\n * Pings server every `this.pingInterval` and expects response\n * within `this.pingTimeout` or closes connection.\n *\n * @api private\n */\n\nSocket.prototype.setPing = function () {\n var self = this;\n clearTimeout(self.pingIntervalTimer);\n self.pingIntervalTimer = setTimeout(function () {\n debug('writing ping packet - expecting pong within %sms', self.pingTimeout);\n self.ping();\n self.onHeartbeat(self.pingTimeout);\n }, self.pingInterval);\n};\n\n/**\n* Sends a ping packet.\n*\n* @api private\n*/\n\nSocket.prototype.ping = function () {\n var self = this;\n this.sendPacket('ping', function () {\n self.emit('ping');\n });\n};\n\n/**\n * Called on `drain` event\n *\n * @api private\n */\n\nSocket.prototype.onDrain = function () {\n this.writeBuffer.splice(0, this.prevBufferLen);\n\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this.prevBufferLen = 0;\n\n if (0 === this.writeBuffer.length) {\n this.emit('drain');\n } else {\n this.flush();\n }\n};\n\n/**\n * Flush write buffers.\n *\n * @api private\n */\n\nSocket.prototype.flush = function () {\n if ('closed' !== this.readyState && this.transport.writable &&\n !this.upgrading && this.writeBuffer.length) {\n debug('flushing %d packets in socket', this.writeBuffer.length);\n this.transport.send(this.writeBuffer);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this.prevBufferLen = this.writeBuffer.length;\n this.emit('flush');\n }\n};\n\n/**\n * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n\nSocket.prototype.write =\nSocket.prototype.send = function (msg, options, fn) {\n this.sendPacket('message', msg, options, fn);\n return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {String} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api private\n */\n\nSocket.prototype.sendPacket = function (type, data, options, fn) {\n if ('function' === typeof data) {\n fn = data;\n data = undefined;\n }\n\n if ('function' === typeof options) {\n fn = options;\n options = null;\n }\n\n if ('closing' === this.readyState || 'closed' === this.readyState) {\n return;\n }\n\n options = options || {};\n options.compress = false !== options.compress;\n\n var packet = {\n type: type,\n data: data,\n options: options\n };\n this.emit('packetCreate', packet);\n this.writeBuffer.push(packet);\n if (fn) this.once('flush', fn);\n this.flush();\n};\n\n/**\n * Closes the connection.\n *\n * @api private\n */\n\nSocket.prototype.close = function () {\n if ('opening' === this.readyState || 'open' === this.readyState) {\n this.readyState = 'closing';\n\n var self = this;\n\n if (this.writeBuffer.length) {\n this.once('drain', function () {\n if (this.upgrading) {\n waitForUpgrade();\n } else {\n close();\n }\n });\n } else if (this.upgrading) {\n waitForUpgrade();\n } else {\n close();\n }\n }\n\n function close () {\n self.onClose('forced close');\n debug('socket closing - telling transport to close');\n self.transport.close();\n }\n\n function cleanupAndClose () {\n self.removeListener('upgrade', cleanupAndClose);\n self.removeListener('upgradeError', cleanupAndClose);\n close();\n }\n\n function waitForUpgrade () {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n self.once('upgrade', cleanupAndClose);\n self.once('upgradeError', cleanupAndClose);\n }\n\n return this;\n};\n\n/**\n * Called upon transport error\n *\n * @api private\n */\n\nSocket.prototype.onError = function (err) {\n debug('socket error %j', err);\n Socket.priorWebsocketSuccess = false;\n this.emit('error', err);\n this.onClose('transport error', err);\n};\n\n/**\n * Called upon transport close.\n *\n * @api private\n */\n\nSocket.prototype.onClose = function (reason, desc) {\n if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {\n debug('socket close with reason: \"%s\"', reason);\n var self = this;\n\n // clear timers\n clearTimeout(this.pingIntervalTimer);\n clearTimeout(this.pingTimeoutTimer);\n\n // stop event from firing again for transport\n this.transport.removeAllListeners('close');\n\n // ensure transport won't stay open\n this.transport.close();\n\n // ignore further transport communication\n this.transport.removeAllListeners();\n\n // set ready state\n this.readyState = 'closed';\n\n // clear session id\n this.id = null;\n\n // emit close event\n this.emit('close', reason, desc);\n\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n self.writeBuffer = [];\n self.prevBufferLen = 0;\n }\n};\n\n/**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n\nSocket.prototype.filterUpgrades = function (upgrades) {\n var filteredUpgrades = [];\n for (var i = 0, j = upgrades.length; i < j; i++) {\n if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n};\n","\nmodule.exports = require('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = require('engine.io-parser');\n","module.exports = toArray\n\nfunction toArray(list, index) {\n var array = []\n\n index = index || 0\n\n for (var i = index || 0; i < list.length; i++) {\n array[i - index] = list[i]\n }\n\n return array\n}\n","\n/**\n * Module exports.\n */\n\nmodule.exports = on;\n\n/**\n * Helper for subscriptions.\n *\n * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n * @param {String} event name\n * @param {Function} callback\n * @api public\n */\n\nfunction on (obj, ev, fn) {\n obj.on(ev, fn);\n return {\n destroy: function () {\n obj.removeListener(ev, fn);\n }\n };\n}\n","/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n if ('string' == typeof fn) fn = obj[fn];\n if ('function' != typeof fn) throw new Error('bind() requires a function');\n var args = slice.call(arguments, 2);\n return function(){\n return fn.apply(obj, args.concat(slice.call(arguments)));\n }\n};\n","\n/**\n * Module dependencies.\n */\n\nvar parser = require('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar toArray = require('to-array');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:socket');\nvar parseqs = require('parseqs');\nvar hasBin = require('has-binary2');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = Socket;\n\n/**\n * Internal events (blacklisted).\n * These events can't be emitted by the user.\n *\n * @api private\n */\n\nvar events = {\n connect: 1,\n connect_error: 1,\n connect_timeout: 1,\n connecting: 1,\n disconnect: 1,\n error: 1,\n reconnect: 1,\n reconnect_attempt: 1,\n reconnect_failed: 1,\n reconnect_error: 1,\n reconnecting: 1,\n ping: 1,\n pong: 1\n};\n\n/**\n * Shortcut to `Emitter#emit`.\n */\n\nvar emit = Emitter.prototype.emit;\n\n/**\n * `Socket` constructor.\n *\n * @api public\n */\n\nfunction Socket (io, nsp, opts) {\n this.io = io;\n this.nsp = nsp;\n this.json = this; // compat\n this.ids = 0;\n this.acks = {};\n this.receiveBuffer = [];\n this.sendBuffer = [];\n this.connected = false;\n this.disconnected = true;\n this.flags = {};\n if (opts && opts.query) {\n this.query = opts.query;\n }\n if (this.io.autoConnect) this.open();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Subscribe to open, close and packet events\n *\n * @api private\n */\n\nSocket.prototype.subEvents = function () {\n if (this.subs) return;\n\n var io = this.io;\n this.subs = [\n on(io, 'open', bind(this, 'onopen')),\n on(io, 'packet', bind(this, 'onpacket')),\n on(io, 'close', bind(this, 'onclose'))\n ];\n};\n\n/**\n * \"Opens\" the socket.\n *\n * @api public\n */\n\nSocket.prototype.open =\nSocket.prototype.connect = function () {\n if (this.connected) return this;\n\n this.subEvents();\n this.io.open(); // ensure open\n if ('open' === this.io.readyState) this.onopen();\n this.emit('connecting');\n return this;\n};\n\n/**\n * Sends a `message` event.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.send = function () {\n var args = toArray(arguments);\n args.unshift('message');\n this.emit.apply(this, args);\n return this;\n};\n\n/**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @param {String} event name\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.emit = function (ev) {\n if (events.hasOwnProperty(ev)) {\n emit.apply(this, arguments);\n return this;\n }\n\n var args = toArray(arguments);\n var packet = {\n type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n data: args\n };\n\n packet.options = {};\n packet.options.compress = !this.flags || false !== this.flags.compress;\n\n // event ack callback\n if ('function' === typeof args[args.length - 1]) {\n debug('emitting packet with ack id %d', this.ids);\n this.acks[this.ids] = args.pop();\n packet.id = this.ids++;\n }\n\n if (this.connected) {\n this.packet(packet);\n } else {\n this.sendBuffer.push(packet);\n }\n\n this.flags = {};\n\n return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.packet = function (packet) {\n packet.nsp = this.nsp;\n this.io.packet(packet);\n};\n\n/**\n * Called upon engine `open`.\n *\n * @api private\n */\n\nSocket.prototype.onopen = function () {\n debug('transport is open - connecting');\n\n // write connect packet if necessary\n if ('/' !== this.nsp) {\n if (this.query) {\n var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n debug('sending connect packet with query %s', query);\n this.packet({type: parser.CONNECT, query: query});\n } else {\n this.packet({type: parser.CONNECT});\n }\n }\n};\n\n/**\n * Called upon engine `close`.\n *\n * @param {String} reason\n * @api private\n */\n\nSocket.prototype.onclose = function (reason) {\n debug('close (%s)', reason);\n this.connected = false;\n this.disconnected = true;\n delete this.id;\n this.emit('disconnect', reason);\n};\n\n/**\n * Called with socket packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onpacket = function (packet) {\n var sameNamespace = packet.nsp === this.nsp;\n var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\n if (!sameNamespace && !rootNamespaceError) return;\n\n switch (packet.type) {\n case parser.CONNECT:\n this.onconnect();\n break;\n\n case parser.EVENT:\n this.onevent(packet);\n break;\n\n case parser.BINARY_EVENT:\n this.onevent(packet);\n break;\n\n case parser.ACK:\n this.onack(packet);\n break;\n\n case parser.BINARY_ACK:\n this.onack(packet);\n break;\n\n case parser.DISCONNECT:\n this.ondisconnect();\n break;\n\n case parser.ERROR:\n this.emit('error', packet.data);\n break;\n }\n};\n\n/**\n * Called upon a server event.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onevent = function (packet) {\n var args = packet.data || [];\n debug('emitting event %j', args);\n\n if (null != packet.id) {\n debug('attaching ack callback to event');\n args.push(this.ack(packet.id));\n }\n\n if (this.connected) {\n emit.apply(this, args);\n } else {\n this.receiveBuffer.push(args);\n }\n};\n\n/**\n * Produces an ack callback to emit with an event.\n *\n * @api private\n */\n\nSocket.prototype.ack = function (id) {\n var self = this;\n var sent = false;\n return function () {\n // prevent double callbacks\n if (sent) return;\n sent = true;\n var args = toArray(arguments);\n debug('sending ack %j', args);\n\n self.packet({\n type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n id: id,\n data: args\n });\n };\n};\n\n/**\n * Called upon a server acknowlegement.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onack = function (packet) {\n var ack = this.acks[packet.id];\n if ('function' === typeof ack) {\n debug('calling ack %s with %j', packet.id, packet.data);\n ack.apply(this, packet.data);\n delete this.acks[packet.id];\n } else {\n debug('bad ack %s', packet.id);\n }\n};\n\n/**\n * Called upon server connect.\n *\n * @api private\n */\n\nSocket.prototype.onconnect = function () {\n this.connected = true;\n this.disconnected = false;\n this.emit('connect');\n this.emitBuffered();\n};\n\n/**\n * Emit buffered events (received and emitted).\n *\n * @api private\n */\n\nSocket.prototype.emitBuffered = function () {\n var i;\n for (i = 0; i < this.receiveBuffer.length; i++) {\n emit.apply(this, this.receiveBuffer[i]);\n }\n this.receiveBuffer = [];\n\n for (i = 0; i < this.sendBuffer.length; i++) {\n this.packet(this.sendBuffer[i]);\n }\n this.sendBuffer = [];\n};\n\n/**\n * Called upon server disconnect.\n *\n * @api private\n */\n\nSocket.prototype.ondisconnect = function () {\n debug('server disconnect (%s)', this.nsp);\n this.destroy();\n this.onclose('io server disconnect');\n};\n\n/**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @api private.\n */\n\nSocket.prototype.destroy = function () {\n if (this.subs) {\n // clean subscriptions to avoid reconnections\n for (var i = 0; i < this.subs.length; i++) {\n this.subs[i].destroy();\n }\n this.subs = null;\n }\n\n this.io.destroy(this);\n};\n\n/**\n * Disconnects the socket manually.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.close =\nSocket.prototype.disconnect = function () {\n if (this.connected) {\n debug('performing disconnect (%s)', this.nsp);\n this.packet({ type: parser.DISCONNECT });\n }\n\n // remove socket from pool\n this.destroy();\n\n if (this.connected) {\n // fire events\n this.onclose('io client disconnect');\n }\n return this;\n};\n\n/**\n * Sets the compress flag.\n *\n * @param {Boolean} if `true`, compresses the sending data\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.compress = function (compress) {\n this.flags.compress = compress;\n return this;\n};\n\n/**\n * Sets the binary flag\n *\n * @param {Boolean} whether the emitted data contains binary\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.binary = function (binary) {\n this.flags.binary = binary;\n return this;\n};\n","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n this.jitter = jitter;\n};\n\n","\n/**\n * Module dependencies.\n */\n\nvar eio = require('engine.io-client');\nvar Socket = require('./socket');\nvar Emitter = require('component-emitter');\nvar parser = require('socket.io-parser');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:manager');\nvar indexOf = require('indexof');\nvar Backoff = require('backo2');\n\n/**\n * IE6+ hasOwnProperty\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports\n */\n\nmodule.exports = Manager;\n\n/**\n * `Manager` constructor.\n *\n * @param {String} engine instance or engine uri/opts\n * @param {Object} options\n * @api public\n */\n\nfunction Manager (uri, opts) {\n if (!(this instanceof Manager)) return new Manager(uri, opts);\n if (uri && ('object' === typeof uri)) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n\n opts.path = opts.path || '/socket.io';\n this.nsps = {};\n this.subs = [];\n this.opts = opts;\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor(opts.randomizationFactor || 0.5);\n this.backoff = new Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor()\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this.readyState = 'closed';\n this.uri = uri;\n this.connecting = [];\n this.lastPing = null;\n this.encoding = false;\n this.packetBuffer = [];\n var _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this.autoConnect = opts.autoConnect !== false;\n if (this.autoConnect) this.open();\n}\n\n/**\n * Propagate given event to sockets and emit on `this`\n *\n * @api private\n */\n\nManager.prototype.emitAll = function () {\n this.emit.apply(this, arguments);\n for (var nsp in this.nsps) {\n if (has.call(this.nsps, nsp)) {\n this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n }\n }\n};\n\n/**\n * Update `socket.id` of all sockets\n *\n * @api private\n */\n\nManager.prototype.updateSocketIds = function () {\n for (var nsp in this.nsps) {\n if (has.call(this.nsps, nsp)) {\n this.nsps[nsp].id = this.generateId(nsp);\n }\n }\n};\n\n/**\n * generate `socket.id` for the given `nsp`\n *\n * @param {String} nsp\n * @return {String}\n * @api private\n */\n\nManager.prototype.generateId = function (nsp) {\n return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n};\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Manager.prototype);\n\n/**\n * Sets the `reconnection` config.\n *\n * @param {Boolean} true/false if it should automatically reconnect\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnection = function (v) {\n if (!arguments.length) return this._reconnection;\n this._reconnection = !!v;\n return this;\n};\n\n/**\n * Sets the reconnection attempts config.\n *\n * @param {Number} max reconnection attempts before giving up\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionAttempts = function (v) {\n if (!arguments.length) return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n};\n\n/**\n * Sets the delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelay = function (v) {\n if (!arguments.length) return this._reconnectionDelay;\n this._reconnectionDelay = v;\n this.backoff && this.backoff.setMin(v);\n return this;\n};\n\nManager.prototype.randomizationFactor = function (v) {\n if (!arguments.length) return this._randomizationFactor;\n this._randomizationFactor = v;\n this.backoff && this.backoff.setJitter(v);\n return this;\n};\n\n/**\n * Sets the maximum delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelayMax = function (v) {\n if (!arguments.length) return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n this.backoff && this.backoff.setMax(v);\n return this;\n};\n\n/**\n * Sets the connection timeout. `false` to disable\n *\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.timeout = function (v) {\n if (!arguments.length) return this._timeout;\n this._timeout = v;\n return this;\n};\n\n/**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @api private\n */\n\nManager.prototype.maybeReconnectOnOpen = function () {\n // Only try to reconnect if it's the first time we're connecting\n if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n};\n\n/**\n * Sets the current transport `socket`.\n *\n * @param {Function} optional, callback\n * @return {Manager} self\n * @api public\n */\n\nManager.prototype.open =\nManager.prototype.connect = function (fn, opts) {\n debug('readyState %s', this.readyState);\n if (~this.readyState.indexOf('open')) return this;\n\n debug('opening %s', this.uri);\n this.engine = eio(this.uri, this.opts);\n var socket = this.engine;\n var self = this;\n this.readyState = 'opening';\n this.skipReconnect = false;\n\n // emit `open`\n var openSub = on(socket, 'open', function () {\n self.onopen();\n fn && fn();\n });\n\n // emit `connect_error`\n var errorSub = on(socket, 'error', function (data) {\n debug('connect_error');\n self.cleanup();\n self.readyState = 'closed';\n self.emitAll('connect_error', data);\n if (fn) {\n var err = new Error('Connection error');\n err.data = data;\n fn(err);\n } else {\n // Only do this if there is no fn to handle the error\n self.maybeReconnectOnOpen();\n }\n });\n\n // emit `connect_timeout`\n if (false !== this._timeout) {\n var timeout = this._timeout;\n debug('connect attempt will timeout after %d', timeout);\n\n // set timer\n var timer = setTimeout(function () {\n debug('connect attempt timed out after %d', timeout);\n openSub.destroy();\n socket.close();\n socket.emit('error', 'timeout');\n self.emitAll('connect_timeout', timeout);\n }, timeout);\n\n this.subs.push({\n destroy: function () {\n clearTimeout(timer);\n }\n });\n }\n\n this.subs.push(openSub);\n this.subs.push(errorSub);\n\n return this;\n};\n\n/**\n * Called upon transport open.\n *\n * @api private\n */\n\nManager.prototype.onopen = function () {\n debug('open');\n\n // clear old subs\n this.cleanup();\n\n // mark as open\n this.readyState = 'open';\n this.emit('open');\n\n // add new subs\n var socket = this.engine;\n this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n};\n\n/**\n * Called upon a ping.\n *\n * @api private\n */\n\nManager.prototype.onping = function () {\n this.lastPing = new Date();\n this.emitAll('ping');\n};\n\n/**\n * Called upon a packet.\n *\n * @api private\n */\n\nManager.prototype.onpong = function () {\n this.emitAll('pong', new Date() - this.lastPing);\n};\n\n/**\n * Called with data.\n *\n * @api private\n */\n\nManager.prototype.ondata = function (data) {\n this.decoder.add(data);\n};\n\n/**\n * Called when parser fully decodes a packet.\n *\n * @api private\n */\n\nManager.prototype.ondecoded = function (packet) {\n this.emit('packet', packet);\n};\n\n/**\n * Called upon socket error.\n *\n * @api private\n */\n\nManager.prototype.onerror = function (err) {\n debug('error', err);\n this.emitAll('error', err);\n};\n\n/**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @api public\n */\n\nManager.prototype.socket = function (nsp, opts) {\n var socket = this.nsps[nsp];\n if (!socket) {\n socket = new Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n var self = this;\n socket.on('connecting', onConnecting);\n socket.on('connect', function () {\n socket.id = self.generateId(nsp);\n });\n\n if (this.autoConnect) {\n // manually call here since connecting event is fired before listening\n onConnecting();\n }\n }\n\n function onConnecting () {\n if (!~indexOf(self.connecting, socket)) {\n self.connecting.push(socket);\n }\n }\n\n return socket;\n};\n\n/**\n * Called upon a socket close.\n *\n * @param {Socket} socket\n */\n\nManager.prototype.destroy = function (socket) {\n var index = indexOf(this.connecting, socket);\n if (~index) this.connecting.splice(index, 1);\n if (this.connecting.length) return;\n\n this.close();\n};\n\n/**\n * Writes a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nManager.prototype.packet = function (packet) {\n debug('writing packet %j', packet);\n var self = this;\n if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\n if (!self.encoding) {\n // encode, then write to engine with result\n self.encoding = true;\n this.encoder.encode(packet, function (encodedPackets) {\n for (var i = 0; i < encodedPackets.length; i++) {\n self.engine.write(encodedPackets[i], packet.options);\n }\n self.encoding = false;\n self.processPacketQueue();\n });\n } else { // add packet to the queue\n self.packetBuffer.push(packet);\n }\n};\n\n/**\n * If packet buffer is non-empty, begins encoding the\n * next packet in line.\n *\n * @api private\n */\n\nManager.prototype.processPacketQueue = function () {\n if (this.packetBuffer.length > 0 && !this.encoding) {\n var pack = this.packetBuffer.shift();\n this.packet(pack);\n }\n};\n\n/**\n * Clean up transport subscriptions and packet buffer.\n *\n * @api private\n */\n\nManager.prototype.cleanup = function () {\n debug('cleanup');\n\n var subsLength = this.subs.length;\n for (var i = 0; i < subsLength; i++) {\n var sub = this.subs.shift();\n sub.destroy();\n }\n\n this.packetBuffer = [];\n this.encoding = false;\n this.lastPing = null;\n\n this.decoder.destroy();\n};\n\n/**\n * Close the current socket.\n *\n * @api private\n */\n\nManager.prototype.close =\nManager.prototype.disconnect = function () {\n debug('disconnect');\n this.skipReconnect = true;\n this.reconnecting = false;\n if ('opening' === this.readyState) {\n // `onclose` will not fire because\n // an open event never happened\n this.cleanup();\n }\n this.backoff.reset();\n this.readyState = 'closed';\n if (this.engine) this.engine.close();\n};\n\n/**\n * Called upon engine close.\n *\n * @api private\n */\n\nManager.prototype.onclose = function (reason) {\n debug('onclose');\n\n this.cleanup();\n this.backoff.reset();\n this.readyState = 'closed';\n this.emit('close', reason);\n\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n};\n\n/**\n * Attempt a reconnection.\n *\n * @api private\n */\n\nManager.prototype.reconnect = function () {\n if (this.reconnecting || this.skipReconnect) return this;\n\n var self = this;\n\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n debug('reconnect failed');\n this.backoff.reset();\n this.emitAll('reconnect_failed');\n this.reconnecting = false;\n } else {\n var delay = this.backoff.duration();\n debug('will wait %dms before reconnect attempt', delay);\n\n this.reconnecting = true;\n var timer = setTimeout(function () {\n if (self.skipReconnect) return;\n\n debug('attempting reconnect');\n self.emitAll('reconnect_attempt', self.backoff.attempts);\n self.emitAll('reconnecting', self.backoff.attempts);\n\n // check again for the case socket closed in above events\n if (self.skipReconnect) return;\n\n self.open(function (err) {\n if (err) {\n debug('reconnect attempt error');\n self.reconnecting = false;\n self.reconnect();\n self.emitAll('reconnect_error', err.data);\n } else {\n debug('reconnect success');\n self.onreconnect();\n }\n });\n }, delay);\n\n this.subs.push({\n destroy: function () {\n clearTimeout(timer);\n }\n });\n }\n};\n\n/**\n * Called upon successful reconnect.\n *\n * @api private\n */\n\nManager.prototype.onreconnect = function () {\n var attempt = this.backoff.attempts;\n this.reconnecting = false;\n this.backoff.reset();\n this.updateSocketIds();\n this.emitAll('reconnect', attempt);\n};\n","\n/**\n * Module dependencies.\n */\n\nvar url = require('./url');\nvar parser = require('socket.io-parser');\nvar Manager = require('./manager');\nvar debug = require('debug')('socket.io-client');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = lookup;\n\n/**\n * Managers cache.\n */\n\nvar cache = exports.managers = {};\n\n/**\n * Looks up an existing `Manager` for multiplexing.\n * If the user summons:\n *\n * `io('http://localhost/a');`\n * `io('http://localhost/b');`\n *\n * We reuse the existing instance based on same scheme/port/host,\n * and we initialize sockets for each namespace.\n *\n * @api public\n */\n\nfunction lookup (uri, opts) {\n if (typeof uri === 'object') {\n opts = uri;\n uri = undefined;\n }\n\n opts = opts || {};\n\n var parsed = url(uri);\n var source = parsed.source;\n var id = parsed.id;\n var path = parsed.path;\n var sameNamespace = cache[id] && path in cache[id].nsps;\n var newConnection = opts.forceNew || opts['force new connection'] ||\n false === opts.multiplex || sameNamespace;\n\n var io;\n\n if (newConnection) {\n debug('ignoring socket cache for %s', source);\n io = Manager(source, opts);\n } else {\n if (!cache[id]) {\n debug('new io instance for %s', source);\n cache[id] = Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.query;\n }\n return io.socket(parsed.path, opts);\n}\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = parser.protocol;\n\n/**\n * `connect`.\n *\n * @param {String} uri\n * @api public\n */\n\nexports.connect = lookup;\n\n/**\n * Expose constructors for standalone build.\n *\n * @api public\n */\n\nexports.Manager = require('./manager');\nexports.Socket = require('./socket');\n","const SERVER_ENDPOINT = 'https://watt-center-snake.herokuapp.com'; // 'localhost:3000'\r\nexport default SERVER_ENDPOINT;","import * as io from 'socket.io-client';\r\nimport SERVER_ENDPOINT from '../serverSettings';\r\ntype SocketListener = (socketId: string, event: string) => void;\r\n\r\nexport class IO {\r\n private listeners: SocketListener[] = [];\r\n private socket: SocketIOClient.Socket;\r\n\r\n constructor() {\r\n this.socket = io.connect(SERVER_ENDPOINT + '/display');\r\n }\r\n\r\n public addListener(listener: SocketListener) {\r\n this.socket.on('message', listener);\r\n this.listeners.push(listener);\r\n }\r\n\r\n public clearListeners() {\r\n for (const listener of this.listeners) {\r\n this.socket.removeListener('message', listener);\r\n }\r\n this.listeners = [];\r\n }\r\n\r\n public sendMessage(socketId: string, message: string) {\r\n this.socket.emit(socketId, message);\r\n }\r\n}\r\n","import { CountDownScreen } from './CountDownScreen';\r\nimport { GameContext } from './GameContext';\r\nimport { GameState } from './GameState';\r\nimport logoURL from '../../img/logo.png';\r\n\r\nexport class StartScreen extends GameState {\r\n public static Name = 'start';\r\n private logo: HTMLImageElement;\r\n private passcode: string;\r\n\r\n constructor(ctx: GameContext) {\r\n super(ctx);\r\n this.minTimePerFrame = 250;\r\n this.logo = new Image();\r\n this.logo.src = logoURL;\r\n this.passcode = (1000 + Math.floor(9000 * Math.random())).toString();\r\n }\r\n\r\n public draw(): void {\r\n this.fillScreen('white');\r\n this.ctx.g2D.drawImage(this.logo, 6, 6);\r\n this.drawText('cuhack.it/play ' + this.passcode, 108, 12, 'black', 45);\r\n }\r\n\r\n public start(): void {\r\n this.ctx.io.addListener((socketId: string, event: string) => {\r\n if (event === this.passcode) {\r\n this.ctx.sharedData = socketId;\r\n this.ctx.switchState(CountDownScreen.Name);\r\n this.ctx.io.sendMessage(socketId, 'playing');\r\n }\r\n });\r\n }\r\n}\r\n","import { CountDownScreen } from './CountDownScreen';\r\nimport { GameContext } from './GameContext';\r\nimport { GameOverScreen } from './GameOverScreen';\r\nimport { GameState } from './GameState';\r\nimport { IO } from './IO';\r\nimport { PlayScreen } from './PlayScreen';\r\nimport { StartScreen } from './StartScreen';\r\n\r\nexport class GameRunner {\r\n private states: { [type: string]: GameState } = {};\r\n private ctx = new GameContext((newState: string, ctx: GameContext) => {\r\n ctx.io.clearListeners();\r\n ctx.currState = newState;\r\n this.states[newState].start();\r\n });\r\n\r\n constructor(private canvas: HTMLCanvasElement) {\r\n canvas.width = this.ctx.width;\r\n canvas.height = this.ctx.height;\r\n this.ctx.g2D = canvas.getContext('2d');\r\n this.ctx.g2D.imageSmoothingEnabled = false;\r\n this.ctx.g2D.webkitImageSmoothingEnabled = false;\r\n\r\n this.ctx.io = new IO();\r\n this.states[StartScreen.Name] = new StartScreen(this.ctx);\r\n this.states[CountDownScreen.Name] = new CountDownScreen(this.ctx);\r\n this.states[PlayScreen.Name] = new PlayScreen(this.ctx);\r\n this.states[GameOverScreen.Name] = new GameOverScreen(this.ctx);\r\n this.ctx.currState = StartScreen.Name;\r\n this.states[StartScreen.Name].start();\r\n }\r\n\r\n public run(): void {\r\n this.states[this.ctx.currState].update();\r\n requestAnimationFrame(() => { this.run(); });\r\n }\r\n}\r\n","import { GameRunner } from './display/GameRunner';\r\n\r\nconst canvas = document.createElement('canvas');\r\ndocument.body.appendChild(canvas);\r\n\r\nconst game = new GameRunner(canvas);\r\ngame.run();\r\n"]}