From 8fe7e861b508653cd7020b7d4d999771a8db99ab Mon Sep 17 00:00:00 2001 From: Alexander Emelin Date: Wed, 31 Mar 2021 13:45:50 +0300 Subject: [PATCH] 2.7.3 - data in SubscribeSuccessContext --- CHANGELOG.md | 5 +++++ dist/centrifuge.d.ts | 1 + dist/centrifuge.js | 5 +++++ dist/centrifuge.js.map | 2 +- dist/centrifuge.min.js | 2 +- dist/centrifuge.min.js.map | 2 +- dist/centrifuge.protobuf.js | 5 +++++ dist/centrifuge.protobuf.js.map | 2 +- dist/centrifuge.protobuf.min.js | 2 +- dist/centrifuge.protobuf.min.js.map | 2 +- package-lock.json | 2 +- package.json | 2 +- src/centrifuge.js | 3 +++ 13 files changed, 27 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c89980b1..d0be90c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +2.7.3 +===== + +* `SubscribeSuccessContext` can contain `data` field if custom data returned from a server in a subscribe result. + 2.7.2 ===== diff --git a/dist/centrifuge.d.ts b/dist/centrifuge.d.ts index e446a6c1..9744bd61 100644 --- a/dist/centrifuge.d.ts +++ b/dist/centrifuge.d.ts @@ -131,6 +131,7 @@ declare namespace Centrifuge { isResubscribe: boolean; recovered: boolean; streamPosition?: StreamPosition; + data?: any; } export interface SubscribeErrorContext { diff --git a/dist/centrifuge.js b/dist/centrifuge.js index 9ea9ca91..d0eb32f9 100644 --- a/dist/centrifuge.js +++ b/dist/centrifuge.js @@ -1706,6 +1706,11 @@ var Centrifuge = /*#__PURE__*/function (_EventEmitter) { } ; + + if (result.data) { + ctx.data = result.data; + } + return ctx; } }, { diff --git a/dist/centrifuge.js.map b/dist/centrifuge.js.map index 1a3646ab..f4179cd5 100644 --- a/dist/centrifuge.js.map +++ b/dist/centrifuge.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://Centrifuge/webpack/universalModuleDefinition","webpack://Centrifuge/./src/centrifuge.js","webpack://Centrifuge/./src/index.js","webpack://Centrifuge/./src/json.js","webpack://Centrifuge/./src/subscription.js","webpack://Centrifuge/./src/utils.js","webpack://Centrifuge/./node_modules/events/events.js","webpack://Centrifuge/webpack/bootstrap","webpack://Centrifuge/webpack/runtime/global","webpack://Centrifuge/webpack/startup"],"names":["_errorTimeout","_errorConnectionClosed","Centrifuge","url","options","_url","_websocket","_sockjs","_isSockjs","_binary","_methodType","_pushType","_encoder","_decoder","_status","_reconnect","_reconnecting","_transport","_transportName","_transportClosed","_messageId","_clientID","_refreshRequired","_subs","_serverSubs","_lastSeq","_lastGen","_lastOffset","_lastEpoch","_messages","_isBatching","_isSubscribeBatching","_privateChannels","_numRefreshFailed","_refreshTimeout","_pingTimeout","_pongTimeout","_subRefreshTimeouts","_retries","_callbacks","_latency","_latencyStart","_connectData","_token","_xhrID","_xhrs","_dispatchPromise","Promise","resolve","_config","debug","name","version","websocket","sockjs","minRetry","maxRetry","timeout","ping","pingInterval","pongWaitTimeout","privateChannelPrefix","onTransportClose","sockjsServer","sockjsTransports","refreshEndpoint","refreshHeaders","refreshParams","refreshData","refreshAttempts","refreshInterval","onRefreshFailed","onRefresh","subscribeEndpoint","subscribeHeaders","subscribeParams","subRefreshInterval","onPrivateSubscribe","_configure","token","data","headers","params","callback","query","_debug","JSON","stringify","xhr","global","XMLHttpRequest","ActiveXObject","i","hasOwnProperty","length","encodeURIComponent","open","withCredentials","setRequestHeader","headerName","onreadystatechange","readyState","status","parsed","parse","responseText","e","error","_log","setTimeout","send","arguments","WebSocket","format","_formatOverride","Error","JsonMethodType","JsonPushType","JsonEncoder","JsonDecoder","configuration","indexOf","_setFormat","SockJS","newStatus","interval","xhrID","abort","reconnect","_stopPing","id","callbacks","clearTimeout","errback","_createErrorObject","channel","sub","_isSuccess","_triggerUnsubscribe","_recover","_shouldResubscribe","_setSubscribing","_setUnsubscribed","_abortInflightXHRs","_clearSubRefreshTimeout","transport","OPEN","commands","_isTransportOpen","command","encodeCommands","sockjsOptions","transports","server","_websocketSupported","binaryType","onopen","onheartbeat","_restartPing","msg","subs","hasSubs","recoverable","seq","gen","offset","epoch","Date","_call","then","resolveCtx","_connectResponse","decodeCommandResult","CONNECT","result","next","rejectCtx","err","code","_disconnect","onerror","onclose","closeEvent","reason","needReconnect","advice","event","_getRetryInterval","_refresh","_connect","onmessage","_dataReceived","_rpc","method","RPC","_methodCall","SEND","isConnected","reject","sent","_transportSend","undefined","since","limit","resultCB","PUBLISH","_getHistoryParams","HISTORY","publications","PRESENCE","presence","PRESENCE_STATS","num_users","num_clients","replies","decodeReplies","finishDispatch","_dispatchSynchronized","p","_dispatchReply","reply","_handleReply","_handlePush","_addMessage","_registerCall","_setStatus","_setupTransport","shouldReconnect","_isDisconnected","_clearConnectedState","emit","close","_refreshFailed","clientID","_newXHRID","cb","resp","jitter","Math","round","random","max","REFRESH","_refreshResponse","_refreshError","context","_ajax","expires","client","_getTTLMilliseconds","ttl","channelsData","channels","channelData","SUB_REFRESH","_getSub","_subRefreshResponse","_subRefreshError","subRefreshTimeout","_subRefresh","isResubscribe","_setNew","SUBSCRIBE","startSubscribeBatching","_subscribe","stopSubscribeBatching","recover","_needRecover","_getLastSeq","_getLastGen","_getLastOffset","_getLastEpoch","_subscribeResponse","_subscribeError","UNSUBSCRIBE","min","isRecover","wasReconnecting","_resetRetry","getTime","startBatching","stopBatching","_startPing","ctx","latency","_processServerSubs","subCtx","_expandSubscribeContext","recovered","pubs","reverse","_handlePublication","_isSubscribing","message","_setSubscribeError","positioned","streamPosition","_setSubscribeSuccess","_recoverable","join","info","_isServerSub","leave","unsub","unsubscribe","resubscribe","subscribe","pub","push","decodePush","type","PUBLICATION","decodePushData","MESSAGE","_handleMessage","JOIN","_handleJoin","LEAVE","_handleLeave","UNSUB","_handleUnsub","SUB","_handleSub","messages","slice","PING","_pingResponse","lastSeq","lastOffset","lastGen","lastEpoch","errObject","_nextMessageId","_isConnected","_ping","_flush","authChannels","batch","events","currentSub","_setEvents","_isUnsubscribed","Subscription","EventEmitter","encodedCommands","encodedReplies","split","methodType","pushType","_STATE_NEW","_STATE_SUBSCRIBING","_STATE_SUCCESS","_STATE_ERROR","_STATE_UNSUBSCRIBED","centrifuge","_centrifuge","_error","_isResubscribe","_ready","_subscriptionPromise","_noResubscribe","_initializePromise","_promises","_promiseId","on","errContext","_resolve","value","_reject","Object","prototype","toString","call","knownEvents","l","ev","subscribeResult","successContext","_getSubscribeSuccessContext","_getSubscribeErrorContext","noResubscribe","needTrigger","subscribeErrorContext","_unsubscribe","_isError","subPromise","res","rej","_nextPromiseId","self","publish","presenceStats","history","startsWith","prefix","lastIndexOf","isFunction","log","level","args","console","logger","apply","backoff","step","pow","floor","errorExists","extend","a","b","key"],"mappings":"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AAGiH,IAAI,CAACqC,GAAL,CAASlC,GAAT,EAAckC,GAAG,GAAGrC,IAAI,CAACuK,GAAL,CAAS,CAAT,EAAYD,IAAI,GAAG,CAAnB,CAApB,CAAjB;AAEA,SAAOtK,IAAI,CAACwK,KAAL,CAAW,CAAC,IAAIzK,MAAL,IAAehH,QAA1B,CAAP;AACD;;AAAA;;AAEM,SAAS0R,WAAT,CAAqBvU,IAArB,EAA2B;AAChC,SAAO,WAAWA,IAAX,IAAmBA,IAAI,CAAC2B,KAAL,KAAe,IAAzC;AACD;;AAAA;;AAEM,SAAS6S,MAAT,CAAgBC,CAAhB,EAAmBC,CAAnB,EAAsB;AAC3B,OAAK,IAAMC,GAAX,IAAkBD,CAAlB,EAAqB;AACnB,QAAIA,CAAC,CAAC7T,cAAF,CAAiB8T,GAAjB,CAAJ,EAA2B;AACzBF,OAAC,CAACE,GAAD,CAAD,GAASD,CAAC,CAACC,GAAD,CAAV;AACD;AACF;;AACD,SAAOF,CAAP;AACD;;AAAA,C;;;;;;;ACvCD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,cAAc;AACd;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,OAAO;AACP;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;;AAEA;AACA,QAAQ,yBAAyB;AACjC;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;AACH;;;;;;;UC3dA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCrBA;WACA;WACA;WACA;WACA,EAAE;WACF;WACA;WACA,CAAC,I;;;;UCPD;UACA;UACA;UACA","file":"centrifuge.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Centrifuge\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Centrifuge\"] = factory();\n\telse\n\t\troot[\"Centrifuge\"] = factory();\n})(this, function() {\nreturn ","import EventEmitter from 'events';\nimport Subscription from './subscription';\n\nimport {\n JsonEncoder,\n JsonDecoder,\n JsonMethodType,\n JsonPushType\n} from './json';\n\nimport {\n isFunction,\n log,\n startsWith,\n errorExists,\n backoff,\n extend\n} from './utils';\n\nconst _errorTimeout = 'timeout';\nconst _errorConnectionClosed = 'connection closed';\n\nexport class Centrifuge extends EventEmitter {\n\n constructor(url, options) {\n super();\n this._url = url;\n this._websocket = null;\n this._sockjs = null;\n this._isSockjs = false;\n this._binary = false;\n this._methodType = null;\n this._pushType = null;\n this._encoder = null;\n this._decoder = null;\n this._status = 'disconnected';\n this._reconnect = true;\n this._reconnecting = false;\n this._transport = null;\n this._transportName = null;\n this._transportClosed = true;\n this._messageId = 0;\n this._clientID = null;\n this._refreshRequired = false;\n this._subs = {};\n this._serverSubs = {};\n this._lastSeq = {};\n this._lastGen = {};\n this._lastOffset = {};\n this._lastEpoch = {};\n this._messages = [];\n this._isBatching = false;\n this._isSubscribeBatching = false;\n this._privateChannels = {};\n this._numRefreshFailed = 0;\n this._refreshTimeout = null;\n this._pingTimeout = null;\n this._pongTimeout = null;\n this._subRefreshTimeouts = {};\n this._retries = 0;\n this._callbacks = {};\n this._latency = null;\n this._latencyStart = null;\n this._connectData = null;\n this._token = null;\n this._xhrID = 0;\n this._xhrs = {};\n this._dispatchPromise = Promise.resolve();\n this._config = {\n debug: false,\n name: '',\n version: '',\n websocket: null,\n sockjs: null,\n minRetry: 1000,\n maxRetry: 20000,\n timeout: 5000,\n ping: true,\n pingInterval: 25000,\n pongWaitTimeout: 5000,\n privateChannelPrefix: '$',\n onTransportClose: null,\n sockjsServer: null,\n sockjsTransports: [\n 'websocket',\n 'xdr-streaming',\n 'xhr-streaming',\n 'eventsource',\n 'iframe-eventsource',\n 'iframe-htmlfile',\n 'xdr-polling',\n 'xhr-polling',\n 'iframe-xhr-polling',\n 'jsonp-polling'\n ],\n refreshEndpoint: '/centrifuge/refresh',\n refreshHeaders: {},\n refreshParams: {},\n refreshData: {},\n refreshAttempts: null,\n refreshInterval: 1000,\n onRefreshFailed: null,\n onRefresh: null,\n subscribeEndpoint: '/centrifuge/subscribe',\n subscribeHeaders: {},\n subscribeParams: {},\n subRefreshInterval: 1000,\n onPrivateSubscribe: null\n };\n this._configure(options);\n }\n\n setToken(token) {\n this._token = token;\n }\n\n setConnectData(data) {\n this._connectData = data;\n }\n\n setRefreshHeaders(headers) {\n this._config.refreshHeaders = headers;\n }\n setRefreshParams(params) {\n this._config.refreshParams = params;\n }\n setRefreshData(data) {\n this._config.refreshData = data;\n }\n\n setSubscribeHeaders(headers) {\n this._config.subscribeHeaders = headers;\n }\n setSubscribeParams(params) {\n this._config.subscribeParams = params;\n }\n\n _ajax(url, params, headers, data, callback) {\n let query = '';\n this._debug('sending AJAX request to', url, 'with data', JSON.stringify(data));\n\n const xhr = (global.XMLHttpRequest ? new global.XMLHttpRequest() : new global.ActiveXObject('Microsoft.XMLHTTP'));\n\n for (const i in params) {\n if (params.hasOwnProperty(i)) {\n if (query.length > 0) {\n query += '&';\n }\n query += encodeURIComponent(i) + '=' + encodeURIComponent(params[i]);\n }\n }\n if (query.length > 0) {\n query = '?' + query;\n }\n xhr.open('POST', url + query, true);\n if ('withCredentials' in xhr) {\n xhr.withCredentials = true;\n }\n\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.setRequestHeader('Content-Type', 'application/json');\n for (const headerName in headers) {\n if (headers.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, headers[headerName]);\n }\n }\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data, parsed = false;\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback({\n error: 'Invalid JSON. Data was: ' + xhr.responseText,\n status: 200,\n data: null\n });\n }\n if (parsed) { // prevents double execution.\n callback({\n data: data,\n status: 200\n });\n }\n } else {\n this._log('wrong status code in AJAX response', xhr.status);\n callback({\n status: xhr.status,\n data: null\n });\n }\n }\n };\n setTimeout(() => xhr.send(JSON.stringify(data)), 20);\n return xhr;\n };\n\n _log() {\n log('info', arguments);\n };\n\n _debug() {\n if (this._config.debug === true) {\n log('debug', arguments);\n }\n };\n\n _websocketSupported() {\n if (this._config.websocket !== null) {\n return true;\n }\n return !(typeof WebSocket !== 'function' && typeof WebSocket !== 'object');\n };\n\n _setFormat(format) {\n if (this._formatOverride(format)) {\n return;\n }\n if (format === 'protobuf') {\n throw new Error('not implemented by JSON only Centrifuge client – use client with Protobuf');\n }\n this._binary = false;\n this._methodType = JsonMethodType;\n this._pushType = JsonPushType;\n this._encoder = new JsonEncoder();\n this._decoder = new JsonDecoder();\n }\n\n _formatOverride(format) {\n return false;\n }\n\n _configure(configuration) {\n if (!('Promise' in global)) {\n throw new Error('Promise polyfill required');\n }\n\n extend(this._config, configuration || {});\n this._debug('centrifuge config', this._config);\n\n if (!this._url) {\n throw new Error('url required');\n }\n\n if (startsWith(this._url, 'ws') && this._url.indexOf('format=protobuf') > -1) {\n this._setFormat('protobuf');\n } else {\n this._setFormat('json');\n }\n\n if (startsWith(this._url, 'http')) {\n this._debug('client will try to connect to SockJS endpoint');\n if (this._config.sockjs !== null) {\n this._debug('SockJS explicitly provided in options');\n this._sockjs = this._config.sockjs;\n } else {\n if (typeof global.SockJS === 'undefined') {\n throw new Error('SockJS not found, use ws:// in url or include SockJS');\n }\n this._debug('use globally defined SockJS');\n this._sockjs = global.SockJS;\n }\n } else {\n this._debug('client will connect to websocket endpoint');\n }\n };\n\n _setStatus(newStatus) {\n if (this._status !== newStatus) {\n this._debug('Status', this._status, '->', newStatus);\n this._status = newStatus;\n }\n };\n\n _isDisconnected() {\n return this._status === 'disconnected';\n };\n\n _isConnecting() {\n return this._status === 'connecting';\n };\n\n _isConnected() {\n return this._status === 'connected';\n };\n\n _nextMessageId() {\n return ++this._messageId;\n };\n\n _resetRetry() {\n this._debug('reset retries count to 0');\n this._retries = 0;\n };\n\n _getRetryInterval() {\n const interval = backoff(this._retries, this._config.minRetry, this._config.maxRetry);\n\n this._retries += 1;\n return interval;\n };\n\n _abortInflightXHRs() {\n for (const xhrID in this._xhrs) {\n try {\n this._xhrs[xhrID].abort();\n } catch (e) {\n this._debug('error aborting xhr', e);\n }\n delete this._xhrs[xhrID];\n }\n };\n\n _clearConnectedState(reconnect) {\n this._clientID = null;\n this._stopPing();\n\n // fire errbacks of registered outgoing calls.\n for (const id in this._callbacks) {\n if (this._callbacks.hasOwnProperty(id)) {\n const callbacks = this._callbacks[id];\n clearTimeout(callbacks.timeout);\n const errback = callbacks.errback;\n if (!errback) {\n continue;\n }\n errback({error: this._createErrorObject('disconnected')});\n }\n }\n this._callbacks = {};\n\n // fire unsubscribe events\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n\n if (reconnect) {\n if (sub._isSuccess()) {\n sub._triggerUnsubscribe();\n sub._recover = true;\n }\n if (sub._shouldResubscribe()) {\n sub._setSubscribing();\n }\n } else {\n sub._setUnsubscribed();\n }\n }\n }\n\n this._abortInflightXHRs();\n\n // clear refresh timer\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n // clear sub refresh timers\n for (const channel in this._subRefreshTimeouts) {\n if (this._subRefreshTimeouts.hasOwnProperty(channel) && this._subRefreshTimeouts[channel]) {\n this._clearSubRefreshTimeout(channel);\n }\n }\n this._subRefreshTimeouts = {};\n\n if (!this._reconnect) {\n // completely clear subscriptions\n this._subs = {};\n }\n };\n\n _isTransportOpen() {\n if (this._isSockjs) {\n return this._transport &&\n this._transport.transport &&\n this._transport.transport.readyState === this._transport.transport.OPEN;\n }\n return this._transport && this._transport.readyState === this._transport.OPEN;\n };\n\n _transportSend(commands) {\n if (!commands.length) {\n return true;\n }\n\n if (!this._isTransportOpen()) {\n // resolve pending commands with error if transport is not open\n for (let command in commands) {\n let id = command.id;\n if (!(id in this._callbacks)) {\n continue;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n const errback = callbacks.errback;\n errback({error: this._createErrorObject(_errorConnectionClosed, 0)});\n }\n return false;\n }\n this._transport.send(this._encoder.encodeCommands(commands));\n return true;\n }\n\n _setupTransport() {\n this._isSockjs = false;\n\n // detect transport to use - SockJS or Websocket\n if (this._sockjs !== null) {\n const sockjsOptions = {\n transports: this._config.sockjsTransports\n };\n\n if (this._config.sockjsServer !== null) {\n sockjsOptions.server = this._config.sockjsServer;\n }\n this._isSockjs = true;\n this._transport = new this._sockjs(this._url, null, sockjsOptions);\n } else {\n if (!this._websocketSupported()) {\n this._debug('No Websocket support and no SockJS configured, can not connect');\n return;\n }\n if (this._config.websocket !== null) {\n this._websocket = this._config.websocket;\n } else {\n this._websocket = WebSocket;\n }\n this._transport = new this._websocket(this._url);\n if (this._binary === true) {\n this._transport.binaryType = 'arraybuffer';\n }\n }\n\n this._transport.onopen = () => {\n this._transportClosed = false;\n\n if (this._isSockjs) {\n this._transportName = 'sockjs-' + this._transport.transport;\n this._transport.onheartbeat = () => this._restartPing();\n } else {\n this._transportName = 'websocket';\n }\n\n // Can omit method here due to zero value.\n const msg = {\n // method: this._methodType.CONNECT\n };\n\n if (this._token || this._connectData || this._config.name || this._config.version) {\n msg.params = {};\n }\n if (this._token) {\n msg.params.token = this._token;\n }\n if (this._connectData) {\n msg.params.data = this._connectData;\n }\n if (this._config.name) {\n msg.params.name = this._config.name;\n }\n if (this._config.version) {\n msg.params.version = this._config.version;\n }\n\n let subs = {};\n let hasSubs = false;\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel) && this._serverSubs[channel].recoverable) {\n hasSubs = true;\n let sub = {\n 'recover': true\n };\n if (this._serverSubs[channel].seq || this._serverSubs[channel].gen) {\n if (this._serverSubs[channel].seq) {\n sub['seq'] = this._serverSubs[channel].seq;\n }\n if (this._serverSubs[channel].gen) {\n sub['gen'] = this._serverSubs[channel].gen;\n }\n } else {\n if (this._serverSubs[channel].offset) {\n sub['offset'] = this._serverSubs[channel].offset;\n }\n }\n if (this._serverSubs[channel].epoch) {\n sub['epoch'] = this._serverSubs[channel].epoch;\n }\n subs[channel] = sub;\n }\n }\n if (hasSubs) {\n if (!msg.params) {msg.params = {};}\n msg.params.subs = subs;\n }\n\n this._latencyStart = new Date();\n this._call(msg).then(resolveCtx => {\n this._connectResponse(this._decoder.decodeCommandResult(this._methodType.CONNECT, resolveCtx.result), hasSubs);\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n const err = rejectCtx.error;\n if (err.code === 109) { // token expired.\n this._refreshRequired = true;\n }\n this._disconnect('connect error', true);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n this._transport.onerror = error => {\n this._debug('transport level error', error);\n };\n\n this._transport.onclose = closeEvent => {\n this._transportClosed = true;\n let reason = _errorConnectionClosed;\n let needReconnect = true;\n\n if (closeEvent && 'reason' in closeEvent && closeEvent.reason) {\n try {\n const advice = JSON.parse(closeEvent.reason);\n this._debug('reason is an advice object', advice);\n reason = advice.reason;\n needReconnect = advice.reconnect;\n } catch (e) {\n reason = closeEvent.reason;\n this._debug('reason is a plain string', reason);\n }\n }\n\n // onTransportClose callback should be executed every time transport was closed.\n // This can be helpful to catch failed connection events (because our disconnect\n // event only called once and every future attempts to connect do not fire disconnect\n // event again).\n if (this._config.onTransportClose !== null) {\n this._config.onTransportClose({\n event: closeEvent,\n reason: reason,\n reconnect: needReconnect\n });\n }\n\n this._disconnect(reason, needReconnect);\n\n if (this._reconnect === true) {\n this._reconnecting = true;\n const interval = this._getRetryInterval();\n\n this._debug('reconnect after ' + interval + ' milliseconds');\n setTimeout(() => {\n if (this._reconnect === true) {\n if (this._refreshRequired) {\n this._refresh();\n } else {\n this._connect();\n }\n }\n }, interval);\n }\n };\n\n this._transport.onmessage = event => {\n this._dataReceived(event.data);\n };\n };\n\n rpc(data) {\n return this._rpc('', data);\n }\n\n namedRPC(method, data) {\n return this._rpc(method, data);\n }\n\n _rpc(method, data) {\n let params = {\n data: data\n };\n if (method !== '') {\n params.method = method;\n };\n const msg = {\n method: this._methodType.RPC,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return result;\n });\n }\n\n send(data) {\n const msg = {\n method: this._methodType.SEND,\n params: {\n data: data\n }\n };\n\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n\n const sent = this._transportSend([msg]); // can send async message to server without id set\n if (!sent) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n };\n return Promise.resolve({});\n }\n\n _getHistoryParams(channel, options) {\n let params = {\n channel: channel\n };\n if (options !== undefined) {\n if (options.since) {\n params['use_since'] = true;\n if (options.since.offset) {\n params['offset'] = options.since.offset;\n }\n if (options.since.epoch) {\n params['epoch'] = options.since.epoch;\n }\n };\n if (options.limit !== undefined) {\n params['use_limit'] = true;\n params['limit'] = options.limit;\n }\n };\n return params;\n }\n\n _methodCall(msg, resultCB) {\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n return new Promise((resolve, reject) => {\n this._call(msg).then(resolveCtx => {\n resolve(resultCB(this._decoder.decodeCommandResult(msg.method, resolveCtx.result)));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n reject(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n });\n }\n\n publish(channel, data) {\n const msg = {\n method: this._methodType.PUBLISH,\n params: {\n channel: channel,\n data: data\n }\n };\n return this._methodCall(msg, function () {\n return {};\n });\n }\n\n history(channel, options) {\n const params = this._getHistoryParams(channel, options);\n const msg = {\n method: this._methodType.HISTORY,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return {\n 'publications': result.publications,\n 'epoch': result.epoch || '',\n 'offset': result.offset || 0\n };\n });\n }\n\n presence(channel) {\n const msg = {\n method: this._methodType.PRESENCE,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'presence': result.presence\n };\n });\n }\n\n presenceStats(channel) {\n const msg = {\n method: this._methodType.PRESENCE_STATS,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'num_users': result.num_users,\n 'num_clients': result.num_clients\n };\n });\n }\n\n _dataReceived(data) {\n const replies = this._decoder.decodeReplies(data);\n // we have to guarantee order of events in replies processing - i.e. start processing\n // next reply only when we finished processing of current one. Without syncing things in\n // this way we could get wrong publication events order as reply promises resolve\n // on next loop tick so for loop continues before we finished emitting all reply events.\n this._dispatchPromise = this._dispatchPromise.then(() => {\n let finishDispatch;\n this._dispatchPromise = new Promise(resolve =>{\n finishDispatch = resolve;\n });\n this._dispatchSynchronized(replies, finishDispatch);\n });\n this._restartPing();\n }\n\n _dispatchSynchronized(replies, finishDispatch) {\n let p = Promise.resolve();\n for (const i in replies) {\n if (replies.hasOwnProperty(i)) {\n p = p.then(() => {\n return this._dispatchReply(replies[i]);\n });\n }\n }\n p = p.then(() => {\n finishDispatch();\n });\n }\n\n _dispatchReply(reply) {\n var next;\n const p = new Promise(resolve =>{\n next = resolve;\n });\n\n if (reply === undefined || reply === null) {\n this._debug('dispatch: got undefined or null reply');\n next();\n return p;\n }\n\n const id = reply.id;\n\n if (id && id > 0) {\n this._handleReply(reply, next);\n } else {\n this._handlePush(reply.result, next);\n }\n\n return p;\n };\n\n _call(msg) {\n return new Promise((resolve, reject) => {\n const id = this._addMessage(msg);\n this._registerCall(id, resolve, reject);\n });\n }\n\n _connect() {\n if (this.isConnected()) {\n this._debug('connect called when already connected');\n return;\n }\n if (this._status === 'connecting') {\n return;\n }\n\n this._debug('start connecting');\n this._setStatus('connecting');\n this._clientID = null;\n this._reconnect = true;\n this._setupTransport();\n };\n\n _disconnect(reason, shouldReconnect) {\n\n const reconnect = shouldReconnect || false;\n if (reconnect === false) {\n this._reconnect = false;\n }\n\n if (this._isDisconnected()) {\n if (!reconnect) {\n this._clearConnectedState(reconnect);\n }\n return;\n }\n\n this._clearConnectedState(reconnect);\n\n this._debug('disconnected:', reason, shouldReconnect);\n this._setStatus('disconnected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._reconnecting === false) {\n // fire unsubscribe events for server side subs.\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel)) {\n this.emit('unsubscribe', {channel: channel});\n }\n }\n this.emit('disconnect', {\n reason: reason,\n reconnect: reconnect\n });\n }\n\n if (reconnect === false) {\n this._subs = {};\n this._serverSubs = {};\n }\n\n if (!this._transportClosed) {\n this._transport.close();\n }\n };\n\n _refreshFailed() {\n this._numRefreshFailed = 0;\n if (!this._isDisconnected()) {\n this._disconnect('refresh failed', false);\n }\n if (this._config.onRefreshFailed !== null) {\n this._config.onRefreshFailed();\n }\n };\n\n _refresh() {\n // ask application for new connection token.\n this._debug('refresh token');\n\n if (this._config.refreshAttempts === 0) {\n this._debug('refresh attempts set to 0, do not send refresh request at all');\n this._refreshFailed();\n return;\n }\n\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n // We don't perform any connection status related actions here as we are\n // relying on server that must close connection eventually.\n if (resp.error) {\n this._debug('error refreshing connection token', resp.error);\n } else {\n this._debug('error refreshing connection token: wrong status code', resp.status);\n }\n this._numRefreshFailed++;\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._config.refreshAttempts !== null && this._numRefreshFailed >= this._config.refreshAttempts) {\n this._refreshFailed();\n return;\n }\n const jitter = Math.round(Math.random() * 1000 * Math.max(this._numRefreshFailed, 20));\n const interval = this._config.refreshInterval + jitter;\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n return;\n }\n this._numRefreshFailed = 0;\n this._token = resp.data.token;\n if (!this._token) {\n this._refreshFailed();\n return;\n }\n if (this._isDisconnected() && this._reconnect) {\n this._debug('token refreshed, connect from scratch');\n this._connect();\n } else {\n this._debug('send refreshed token');\n const msg = {\n method: this._methodType.REFRESH,\n params: {\n token: this._token\n }\n };\n this._call(msg).then(resolveCtx => {\n this._refreshResponse(this._decoder.decodeCommandResult(this._methodType.REFRESH, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n if (this._config.onRefresh !== null) {\n const context = {};\n this._config.onRefresh(context, cb);\n } else {\n const xhr = this._ajax(\n this._config.refreshEndpoint,\n this._config.refreshParams,\n this._config.refreshHeaders,\n this._config.refreshData,\n cb\n );\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _refreshError(err) {\n this._debug('refresh error', err);\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n const interval = this._config.refreshInterval + Math.round(Math.random() * 1000);\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n }\n\n _refreshResponse(result) {\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (result.expires) {\n this._clientID = result.client;\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n };\n\n _newXHRID() {\n this._xhrID++;\n return this._xhrID;\n }\n\n _subRefresh(channel) {\n this._debug('refresh subscription token for channel', channel);\n\n if (this._subRefreshTimeouts[channel] !== undefined) {\n this._clearSubRefreshTimeout(channel);\n } else {\n return;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (resp.error || resp.status !== 200 || this._clientID !== clientID) {\n return;\n }\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n const token = channelsData[channel];\n if (!token) {\n return;\n }\n const msg = {\n method: this._methodType.SUB_REFRESH,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n\n this._call(msg).then(resolveCtx => {\n this._subRefreshResponse(\n channel,\n this._decoder.decodeCommandResult(this._methodType.SUB_REFRESH, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subRefreshError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n const data = {\n client: this._clientID,\n channels: [channel]\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _clearSubRefreshTimeout(channel) {\n if (this._subRefreshTimeouts[channel] !== undefined) {\n clearTimeout(this._subRefreshTimeouts[channel]);\n delete this._subRefreshTimeouts[channel];\n }\n }\n\n _subRefreshError(channel, err) {\n this._debug('subscription refresh error', channel, err);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n const jitter = Math.round(Math.random() * 1000);\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._config.subRefreshInterval + jitter);\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n return;\n }\n\n _subRefreshResponse(channel, result) {\n this._debug('subscription refresh success', channel);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n return;\n };\n\n _subscribe(sub, isResubscribe) {\n this._debug('subscribing on', sub.channel);\n const channel = sub.channel;\n\n if (!(channel in this._subs)) {\n this._subs[channel] = sub;\n }\n\n if (!this.isConnected()) {\n // subscribe will be called later\n sub._setNew();\n return;\n }\n\n sub._setSubscribing(isResubscribe);\n\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel\n }\n };\n\n // If channel name does not start with privateChannelPrefix - then we\n // can just send subscription message to Centrifuge. If channel name\n // starts with privateChannelPrefix - then this is a private channel\n // and we should ask web application backend for permission first.\n if (startsWith(channel, this._config.privateChannelPrefix)) {\n // private channel.\n if (this._isSubscribeBatching) {\n this._privateChannels[channel] = true;\n } else {\n this.startSubscribeBatching();\n this._subscribe(sub);\n this.stopSubscribeBatching();\n }\n } else {\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n _unsubscribe(sub) {\n delete this._subs[sub.channel];\n delete this._lastOffset[sub.channel];\n delete this._lastSeq[sub.channel];\n delete this._lastGen[sub.channel];\n if (this.isConnected()) {\n // No need to unsubscribe in disconnected state - i.e. client already unsubscribed.\n this._addMessage({\n method: this._methodType.UNSUBSCRIBE,\n params: {\n channel: sub.channel\n }\n });\n }\n };\n\n _getTTLMilliseconds(ttl) {\n // https://stackoverflow.com/questions/12633405/what-is-the-maximum-delay-for-setinterval\n return Math.min(ttl * 1000, 2147483647);\n }\n\n getSub(channel) {\n return this._getSub(channel);\n }\n\n _getSub(channel) {\n const sub = this._subs[channel];\n if (!sub) {\n return null;\n }\n return sub;\n };\n\n _isServerSub(channel) {\n return this._serverSubs[channel] !== undefined;\n };\n\n _connectResponse(result, isRecover) {\n const wasReconnecting = this._reconnecting;\n this._reconnecting = false;\n this._resetRetry();\n this._refreshRequired = false;\n\n if (this.isConnected()) {\n return;\n }\n\n if (this._latencyStart !== null) {\n this._latency = (new Date()).getTime() - this._latencyStart.getTime();\n this._latencyStart = null;\n }\n\n this._clientID = result.client;\n this._setStatus('connected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n }\n\n if (result.expires) {\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n\n this.startBatching();\n this.startSubscribeBatching();\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n if (sub._shouldResubscribe()) {\n this._subscribe(sub, wasReconnecting);\n }\n }\n }\n this.stopSubscribeBatching();\n this.stopBatching();\n\n this._startPing();\n\n const ctx = {\n client: result.client,\n transport: this._transportName,\n latency: this._latency\n };\n if (result.data) {\n ctx.data = result.data;\n }\n\n this.emit('connect', ctx);\n\n if (result.subs) {\n this._processServerSubs(result.subs);\n }\n };\n\n _processServerSubs(subs) {\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n const isResubscribe = this._serverSubs[channel] !== undefined;\n let subCtx = {channel: channel, isResubscribe: isResubscribe};\n subCtx = this._expandSubscribeContext(subCtx, sub);\n this.emit('subscribe', subCtx);\n }\n }\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n if (sub.recovered) {\n let pubs = sub.publications;\n if (pubs && pubs.length > 0) {\n\n // handle legacy order.\n // TODO: remove as soon as Centrifuge v1 released.\n if (pubs.length > 1 && (!pubs[0].offset || pubs[0].offset > pubs[1].offset)) {\n pubs = pubs.reverse();\n }\n\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n }\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n }\n }\n };\n\n _stopPing() {\n if (this._pongTimeout !== null) {\n clearTimeout(this._pongTimeout);\n this._pongTimeout = null;\n }\n if (this._pingTimeout !== null) {\n clearTimeout(this._pingTimeout);\n this._pingTimeout = null;\n }\n };\n\n _startPing() {\n if (this._config.ping !== true || this._config.pingInterval <= 0) {\n return;\n }\n if (!this.isConnected()) {\n return;\n }\n\n this._pingTimeout = setTimeout(() => {\n if (!this.isConnected()) {\n this._stopPing();\n return;\n }\n this.ping();\n this._pongTimeout = setTimeout(() => {\n this._disconnect('no ping', true);\n }, this._config.pongWaitTimeout);\n }, this._config.pingInterval);\n };\n\n _restartPing() {\n this._stopPing();\n this._startPing();\n };\n\n _subscribeError(channel, error) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n if (error.code === 0 && error.message === _errorTimeout) { // client side timeout.\n this._disconnect('timeout', true);\n return;\n }\n sub._setSubscribeError(error);\n };\n\n _expandSubscribeContext(ctx, result) {\n let recovered = false;\n if ('recovered' in result) {\n recovered = result.recovered;\n }\n ctx.recovered = recovered;\n\n let positioned = false;\n if ('positioned' in result) {\n positioned = result.positioned;\n }\n let epoch = '';\n if ('epoch' in result) {\n epoch = result.epoch;\n }\n let offset = 0;\n if ('offset' in result) {\n offset = result.offset;\n }\n if (positioned) {\n ctx.streamPosition = {\n 'offset': offset,\n 'epoch': epoch\n };\n };\n return ctx;\n }\n\n _subscribeResponse(channel, isRecover, result) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n sub._setSubscribeSuccess(result);\n\n let pubs = result.publications;\n if (pubs && pubs.length > 0) {\n if (pubs.length >= 2 && !pubs[0].offset && !pubs[1].offset) {\n // handle legacy order.\n pubs = pubs.reverse();\n }\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n\n if (result.recoverable && (!isRecover || !result.recovered)) {\n this._lastSeq[channel] = result.seq || 0;\n this._lastGen[channel] = result.gen || 0;\n this._lastOffset[channel] = result.offset || 0;\n }\n\n this._lastEpoch[channel] = result.epoch || '';\n\n if (result.recoverable) {\n sub._recoverable = true;\n }\n\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n };\n\n _handleReply(reply, next) {\n const id = reply.id;\n const result = reply.result;\n\n if (!(id in this._callbacks)) {\n next();\n return;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n\n if (!errorExists(reply)) {\n const callback = callbacks.callback;\n if (!callback) {\n return;\n }\n callback({result, next});\n } else {\n const errback = callbacks.errback;\n if (!errback) {\n next();\n return;\n }\n const error = reply.error;\n errback({error, next});\n }\n }\n\n _handleJoin(channel, join) {\n const ctx = {'info': join.info};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('join', ctx);\n }\n return;\n }\n sub.emit('join', ctx);\n };\n\n _handleLeave(channel, leave) {\n const ctx = {'info': leave.info};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('leave', ctx);\n }\n return;\n }\n sub.emit('leave', ctx);\n };\n\n _handleUnsub(channel, unsub) {\n const ctx = {};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n delete this._serverSubs[channel];\n ctx.channel = channel;\n this.emit('unsubscribe', ctx);\n }\n return;\n }\n sub.unsubscribe();\n if (unsub.resubscribe === true) {\n sub.subscribe();\n }\n };\n\n _handleSub(channel, sub) {\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n let ctx = {'channel': channel, isResubscribe: false};\n ctx = this._expandSubscribeContext(ctx, sub);\n this.emit('subscribe', ctx);\n };\n\n _handlePublication(channel, pub) {\n const sub = this._getSub(channel);\n const ctx = {\n 'data': pub.data,\n 'seq': pub.seq,\n 'gen': pub.gen,\n 'offset': pub.offset\n };\n if (pub.info) {\n ctx.info = pub.info;\n }\n if (!sub) {\n if (this._isServerSub(channel)) {\n if (pub.seq !== undefined) {\n this._serverSubs[channel].seq = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._serverSubs[channel].gen = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._serverSubs[channel].offset = pub.offset;\n }\n ctx.channel = channel;\n this.emit('publish', ctx);\n }\n return;\n }\n if (pub.seq !== undefined) {\n this._lastSeq[channel] = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._lastGen[channel] = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._lastOffset[channel] = pub.offset;\n }\n sub.emit('publish', ctx);\n };\n\n _handleMessage(message) {\n this.emit('message', message.data);\n };\n\n _handlePush(data, next) {\n const push = this._decoder.decodePush(data);\n let type = 0;\n if ('type' in push) {\n type = push['type'];\n }\n const channel = push.channel;\n\n if (type === this._pushType.PUBLICATION) {\n const pub = this._decoder.decodePushData(this._pushType.PUBLICATION, push.data);\n this._handlePublication(channel, pub);\n } else if (type === this._pushType.MESSAGE) {\n const message = this._decoder.decodePushData(this._pushType.MESSAGE, push.data);\n this._handleMessage(message);\n } else if (type === this._pushType.JOIN) {\n const join = this._decoder.decodePushData(this._pushType.JOIN, push.data);\n this._handleJoin(channel, join);\n } else if (type === this._pushType.LEAVE) {\n const leave = this._decoder.decodePushData(this._pushType.LEAVE, push.data);\n this._handleLeave(channel, leave);\n } else if (type === this._pushType.UNSUB) {\n const unsub = this._decoder.decodePushData(this._pushType.UNSUB, push.data);\n this._handleUnsub(channel, unsub);\n } else if (type === this._pushType.SUB) {\n const sub = this._decoder.decodePushData(this._pushType.SUB, push.data);\n this._handleSub(channel, sub);\n }\n next();\n }\n\n _flush() {\n const messages = this._messages.slice(0);\n this._messages = [];\n this._transportSend(messages);\n };\n\n _ping() {\n const msg = {\n method: this._methodType.PING\n };\n this._call(msg).then(resolveCtx => {\n this._pingResponse(this._decoder.decodeCommandResult(this._methodType.PING, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._debug('ping error', rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n _pingResponse(result) {\n if (!this.isConnected()) {\n return;\n }\n this._stopPing();\n this._startPing();\n }\n\n _getLastSeq(channel) {\n const lastSeq = this._lastSeq[channel];\n if (lastSeq) {\n return lastSeq;\n }\n return 0;\n };\n\n _getLastOffset(channel) {\n const lastOffset = this._lastOffset[channel];\n if (lastOffset) {\n return lastOffset;\n }\n return 0;\n };\n\n _getLastGen(channel) {\n const lastGen = this._lastGen[channel];\n if (lastGen) {\n return lastGen;\n }\n return 0;\n };\n\n _getLastEpoch(channel) {\n const lastEpoch = this._lastEpoch[channel];\n if (lastEpoch) {\n return lastEpoch;\n }\n return '';\n };\n\n _createErrorObject(message, code) {\n const errObject = {\n message: message,\n code: code || 0\n };\n\n return errObject;\n };\n\n _registerCall(id, callback, errback) {\n this._callbacks[id] = {\n callback: callback,\n errback: errback,\n timeout: null\n };\n this._callbacks[id].timeout = setTimeout(() => {\n delete this._callbacks[id];\n if (isFunction(errback)) {\n errback({error: this._createErrorObject(_errorTimeout)});\n }\n }, this._config.timeout);\n };\n\n _addMessage(message) {\n let id = this._nextMessageId();\n message.id = id;\n if (this._isBatching === true) {\n this._messages.push(message);\n } else {\n this._transportSend([message]);\n }\n return id;\n };\n\n isConnected() {\n return this._isConnected();\n }\n\n connect() {\n this._connect();\n };\n\n disconnect() {\n this._disconnect('client', false);\n };\n\n ping() {\n return this._ping();\n }\n\n startBatching() {\n // start collecting messages without sending them to Centrifuge until flush\n // method called\n this._isBatching = true;\n };\n\n stopBatching() {\n this._isBatching = false;\n this._flush();\n };\n\n startSubscribeBatching() {\n // start collecting private channels to create bulk authentication\n // request to subscribeEndpoint when stopSubscribeBatching will be called\n this._isSubscribeBatching = true;\n };\n\n stopSubscribeBatching() {\n // create request to subscribeEndpoint with collected private channels\n // to ask if this client can subscribe on each channel\n this._isSubscribeBatching = false;\n const authChannels = this._privateChannels;\n this._privateChannels = {};\n\n const channels = [];\n\n for (const channel in authChannels) {\n if (authChannels.hasOwnProperty(channel)) {\n const sub = this._getSub(channel);\n if (!sub) {\n continue;\n }\n channels.push(channel);\n }\n }\n\n if (channels.length === 0) {\n this._debug('no private channels found, no need to make request');\n return;\n }\n\n const data = {\n client: this._clientID,\n channels: channels\n };\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n this._debug('authorization request failed');\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n this._subscribeError(channel, this._createErrorObject('authorization request failed'));\n }\n }\n return;\n }\n\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n // try to send all subscriptions in one request.\n let batch = false;\n\n if (!this._isBatching) {\n this.startBatching();\n batch = true;\n }\n\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n const token = channelsData[channel];\n\n if (!token) {\n // subscription:error\n this._subscribeError(channel, this._createErrorObject('permission denied', 103));\n continue;\n } else {\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n continue;\n }\n\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n }\n }\n\n if (batch) {\n this.stopBatching();\n }\n\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n subscribe(channel, events) {\n const currentSub = this._getSub(channel);\n if (currentSub !== null) {\n currentSub._setEvents(events);\n if (currentSub._isUnsubscribed()) {\n currentSub.subscribe();\n }\n return currentSub;\n }\n const sub = new Subscription(this, channel, events);\n this._subs[channel] = sub;\n sub.subscribe();\n return sub;\n };\n}\n","import {Centrifuge} from './centrifuge.js';\nexport default Centrifuge;\n","export const JsonMethodType = {\n CONNECT: 0,\n SUBSCRIBE: 1,\n UNSUBSCRIBE: 2,\n PUBLISH: 3,\n PRESENCE: 4,\n PRESENCE_STATS: 5,\n HISTORY: 6,\n PING: 7,\n SEND: 8,\n RPC: 9,\n REFRESH: 10,\n SUB_REFRESH: 11\n};\n\nexport const JsonPushType = {\n PUBLICATION: 0,\n JOIN: 1,\n LEAVE: 2,\n UNSUB: 3,\n MESSAGE: 4,\n SUB: 5\n};\n\nexport class JsonEncoder {\n encodeCommands(commands) {\n const encodedCommands = [];\n for (const i in commands) {\n if (commands.hasOwnProperty(i)) {\n encodedCommands.push(JSON.stringify(commands[i]));\n }\n }\n return encodedCommands.join('\\n');\n }\n}\n\nexport class JsonDecoder {\n decodeReplies(data) {\n const replies = [];\n const encodedReplies = data.split('\\n');\n for (const i in encodedReplies) {\n if (encodedReplies.hasOwnProperty(i)) {\n if (!encodedReplies[i]) {\n continue;\n }\n const reply = JSON.parse(encodedReplies[i]);\n replies.push(reply);\n }\n }\n return replies;\n }\n\n decodeCommandResult(methodType, data) {\n return data;\n }\n\n decodePush(data) {\n return data;\n }\n\n decodePushData(pushType, data) {\n return data;\n }\n}\n\n","import EventEmitter from 'events';\n\nimport {\n isFunction\n} from './utils';\n\nconst _STATE_NEW = 0;\nconst _STATE_SUBSCRIBING = 1;\nconst _STATE_SUCCESS = 2;\nconst _STATE_ERROR = 3;\nconst _STATE_UNSUBSCRIBED = 4;\n\nexport default class Subscription extends EventEmitter {\n constructor(centrifuge, channel, events) {\n super();\n this.channel = channel;\n this._centrifuge = centrifuge;\n this._status = _STATE_NEW;\n this._error = null;\n this._isResubscribe = false;\n this._ready = false;\n this._subscriptionPromise = null;\n this._noResubscribe = false;\n this._recoverable = false;\n this._recover = false;\n this._setEvents(events);\n this._initializePromise();\n this._promises = {};\n this._promiseId = 0;\n this.on('error', function (errContext) {\n this._centrifuge._debug('subscription error', errContext);\n });\n }\n\n _nextPromiseId() {\n return ++this._promiseId;\n }\n\n _initializePromise() {\n // this helps us to wait until subscription will successfully\n // subscribe and call actions such as presence, history etc in\n // synchronous way.\n this._ready = false;\n\n this._subscriptionPromise = new Promise((resolve, reject) => {\n this._resolve = value => {\n this._ready = true;\n resolve(value);\n };\n this._reject = err => {\n this._ready = true;\n reject(err);\n };\n }).then(function () {}, function () {});\n };\n\n _needRecover() {\n return this._recoverable === true && this._recover === true;\n };\n\n _setEvents(events) {\n if (!events) {\n return;\n }\n if (isFunction(events)) {\n // events is just a function to handle publication received from channel.\n this.on('publish', events);\n } else if (Object.prototype.toString.call(events) === Object.prototype.toString.call({})) {\n const knownEvents = ['publish', 'join', 'leave', 'unsubscribe', 'subscribe', 'error'];\n for (let i = 0, l = knownEvents.length; i < l; i++) {\n const ev = knownEvents[i];\n if (ev in events) {\n this.on(ev, events[ev]);\n }\n }\n }\n };\n\n _isNew() {\n return this._status === _STATE_NEW;\n };\n\n _isUnsubscribed() {\n return this._status === _STATE_UNSUBSCRIBED;\n };\n\n _isSubscribing() {\n return this._status === _STATE_SUBSCRIBING;\n };\n\n _isReady() {\n return this._status === _STATE_SUCCESS || this._status === _STATE_ERROR;\n };\n\n _isSuccess() {\n return this._status === _STATE_SUCCESS;\n };\n\n _isError() {\n return this._status === _STATE_ERROR;\n };\n\n _setNew() {\n this._status = _STATE_NEW;\n };\n\n _setSubscribing(isResubscribe) {\n this._isResubscribe = isResubscribe || false;\n if (this._ready === true) {\n // new promise for this subscription\n this._initializePromise();\n }\n this._status = _STATE_SUBSCRIBING;\n };\n\n _setSubscribeSuccess(subscribeResult) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._status = _STATE_SUCCESS;\n const successContext = this._getSubscribeSuccessContext(subscribeResult);\n this._recover = false;\n this.emit('subscribe', successContext);\n this._resolve(successContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].resolve();\n delete this._promises[id];\n }\n };\n\n _setSubscribeError(err) {\n if (this._status === _STATE_ERROR) {\n return;\n }\n this._status = _STATE_ERROR;\n this._error = err;\n const errContext = this._getSubscribeErrorContext();\n this.emit('error', errContext);\n this._reject(errContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n };\n\n _triggerUnsubscribe() {\n this.emit('unsubscribe', {\n channel: this.channel\n });\n };\n\n _setUnsubscribed(noResubscribe) {\n this._centrifuge._clearSubRefreshTimeout(this.channel);\n if (this._status === _STATE_UNSUBSCRIBED) {\n return;\n }\n const needTrigger = this._status === _STATE_SUCCESS;\n this._status = _STATE_UNSUBSCRIBED;\n if (noResubscribe === true) {\n this._recover = false;\n this._noResubscribe = true;\n delete this._centrifuge._lastSeq[this.channel];\n delete this._centrifuge._lastGen[this.channel];\n delete this._centrifuge._lastEpoch[this.channel];\n }\n if (needTrigger) {\n this._triggerUnsubscribe();\n }\n };\n\n _shouldResubscribe() {\n return !this._noResubscribe;\n };\n\n _getSubscribeSuccessContext(subscribeResult) {\n let ctx = {\n channel: this.channel,\n isResubscribe: this._isResubscribe\n };\n if (subscribeResult) {\n // subscribeResult not available when called from Subscription.ready method at the moment.\n ctx = this._centrifuge._expandSubscribeContext(ctx, subscribeResult);\n }\n return ctx;\n };\n\n _getSubscribeErrorContext() {\n const subscribeErrorContext = this._error;\n subscribeErrorContext.channel = this.channel;\n subscribeErrorContext.isResubscribe = this._isResubscribe;\n return subscribeErrorContext;\n };\n\n ready(callback, errback) {\n if (this._ready) {\n if (this._isSuccess()) {\n callback(this._getSubscribeSuccessContext());\n } else {\n errback(this._getSubscribeErrorContext());\n }\n }\n };\n\n subscribe() {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._noResubscribe = false;\n this._centrifuge._subscribe(this);\n };\n\n unsubscribe() {\n this._setUnsubscribed(true);\n this._centrifuge._unsubscribe(this);\n };\n\n _methodCall() {\n if (this._isSuccess()) {\n return Promise.resolve();\n } else if (this._isError()) {\n return Promise.reject(this._error);\n }\n let subPromise = new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({'code': 0, 'message': 'timeout'});\n }, this._centrifuge._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n return subPromise;\n }\n\n publish(data) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.publish(self.channel, data);\n });\n };\n\n presence() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presence(self.channel);\n });\n };\n\n presenceStats() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presenceStats(self.channel);\n });\n };\n\n history(options) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.history(self.channel, options);\n });\n };\n}\n","export function startsWith(value, prefix) {\n return value.lastIndexOf(prefix, 0) === 0;\n};\n\nexport function isFunction(value) {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'function';\n};\n\nexport function log(level, args) {\n if (global.console) {\n const logger = global.console[level];\n\n if (isFunction(logger)) {\n logger.apply(global.console, args);\n }\n }\n};\n\nexport function backoff(step, min, max) {\n const jitter = 0.5 * Math.random();\n const interval = Math.min(max, min * Math.pow(2, step + 1));\n\n return Math.floor((1 - jitter) * interval);\n};\n\nexport function errorExists(data) {\n return 'error' in data && data.error !== null;\n};\n\nexport function extend(a, b) {\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n return a;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function eventListener() {\n if (errorListener !== undefined) {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n var errorListener;\n\n // Adding an error listener is not optional because\n // if an error is thrown on an event emitter we cannot\n // guarantee that the actual event we are waiting will\n // be fired. The result could be a silent way to create\n // memory or file descriptor leaks, which is something\n // we should avoid.\n if (name !== 'error') {\n errorListener = function errorListener(err) {\n emitter.removeListener(name, eventListener);\n reject(err);\n };\n\n emitter.once('error', errorListener);\n }\n\n emitter.once(name, eventListener);\n });\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(579);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://Centrifuge/webpack/universalModuleDefinition","webpack://Centrifuge/./src/centrifuge.js","webpack://Centrifuge/./src/index.js","webpack://Centrifuge/./src/json.js","webpack://Centrifuge/./src/subscription.js","webpack://Centrifuge/./src/utils.js","webpack://Centrifuge/./node_modules/events/events.js","webpack://Centrifuge/webpack/bootstrap","webpack://Centrifuge/webpack/runtime/global","webpack://Centrifuge/webpack/startup"],"names":["_errorTimeout","_errorConnectionClosed","Centrifuge","url","options","_url","_websocket","_sockjs","_isSockjs","_binary","_methodType","_pushType","_encoder","_decoder","_status","_reconnect","_reconnecting","_transport","_transportName","_transportClosed","_messageId","_clientID","_refreshRequired","_subs","_serverSubs","_lastSeq","_lastGen","_lastOffset","_lastEpoch","_messages","_isBatching","_isSubscribeBatching","_privateChannels","_numRefreshFailed","_refreshTimeout","_pingTimeout","_pongTimeout","_subRefreshTimeouts","_retries","_callbacks","_latency","_latencyStart","_connectData","_token","_xhrID","_xhrs","_dispatchPromise","Promise","resolve","_config","debug","name","version","websocket","sockjs","minRetry","maxRetry","timeout","ping","pingInterval","pongWaitTimeout","privateChannelPrefix","onTransportClose","sockjsServer","sockjsTransports","refreshEndpoint","refreshHeaders","refreshParams","refreshData","refreshAttempts","refreshInterval","onRefreshFailed","onRefresh","subscribeEndpoint","subscribeHeaders","subscribeParams","subRefreshInterval","onPrivateSubscribe","_configure","token","data","headers","params","callback","query","_debug","JSON","stringify","xhr","global","XMLHttpRequest","ActiveXObject","i","hasOwnProperty","length","encodeURIComponent","open","withCredentials","setRequestHeader","headerName","onreadystatechange","readyState","status","parsed","parse","responseText","e","error","_log","setTimeout","send","arguments","WebSocket","format","_formatOverride","Error","JsonMethodType","JsonPushType","JsonEncoder","JsonDecoder","configuration","indexOf","_setFormat","SockJS","newStatus","interval","xhrID","abort","reconnect","_stopPing","id","callbacks","clearTimeout","errback","_createErrorObject","channel","sub","_isSuccess","_triggerUnsubscribe","_recover","_shouldResubscribe","_setSubscribing","_setUnsubscribed","_abortInflightXHRs","_clearSubRefreshTimeout","transport","OPEN","commands","_isTransportOpen","command","encodeCommands","sockjsOptions","transports","server","_websocketSupported","binaryType","onopen","onheartbeat","_restartPing","msg","subs","hasSubs","recoverable","seq","gen","offset","epoch","Date","_call","then","resolveCtx","_connectResponse","decodeCommandResult","CONNECT","result","next","rejectCtx","err","code","_disconnect","onerror","onclose","closeEvent","reason","needReconnect","advice","event","_getRetryInterval","_refresh","_connect","onmessage","_dataReceived","_rpc","method","RPC","_methodCall","SEND","isConnected","reject","sent","_transportSend","undefined","since","limit","resultCB","PUBLISH","_getHistoryParams","HISTORY","publications","PRESENCE","presence","PRESENCE_STATS","num_users","num_clients","replies","decodeReplies","finishDispatch","_dispatchSynchronized","p","_dispatchReply","reply","_handleReply","_handlePush","_addMessage","_registerCall","_setStatus","_setupTransport","shouldReconnect","_isDisconnected","_clearConnectedState","emit","close","_refreshFailed","clientID","_newXHRID","cb","resp","jitter","Math","round","random","max","REFRESH","_refreshResponse","_refreshError","context","_ajax","expires","client","_getTTLMilliseconds","ttl","channelsData","channels","channelData","SUB_REFRESH","_getSub","_subRefreshResponse","_subRefreshError","subRefreshTimeout","_subRefresh","isResubscribe","_setNew","SUBSCRIBE","startSubscribeBatching","_subscribe","stopSubscribeBatching","recover","_needRecover","_getLastSeq","_getLastGen","_getLastOffset","_getLastEpoch","_subscribeResponse","_subscribeError","UNSUBSCRIBE","min","isRecover","wasReconnecting","_resetRetry","getTime","startBatching","stopBatching","_startPing","ctx","latency","_processServerSubs","subCtx","_expandSubscribeContext","recovered","pubs","reverse","_handlePublication","_isSubscribing","message","_setSubscribeError","positioned","streamPosition","_setSubscribeSuccess","_recoverable","join","info","_isServerSub","leave","unsub","unsubscribe","resubscribe","subscribe","pub","push","decodePush","type","PUBLICATION","decodePushData","MESSAGE","_handleMessage","JOIN","_handleJoin","LEAVE","_handleLeave","UNSUB","_handleUnsub","SUB","_handleSub","messages","slice","PING","_pingResponse","lastSeq","lastOffset","lastGen","lastEpoch","errObject","_nextMessageId","_isConnected","_ping","_flush","authChannels","batch","events","currentSub","_setEvents","_isUnsubscribed","Subscription","EventEmitter","encodedCommands","encodedReplies","split","methodType","pushType","_STATE_NEW","_STATE_SUBSCRIBING","_STATE_SUCCESS","_STATE_ERROR","_STATE_UNSUBSCRIBED","centrifuge","_centrifuge","_error","_isResubscribe","_ready","_subscriptionPromise","_noResubscribe","_initializePromise","_promises","_promiseId","on","errContext","_resolve","value","_reject","Object","prototype","toString","call","knownEvents","l","ev","subscribeResult","successContext","_getSubscribeSuccessContext","_getSubscribeErrorContext","noResubscribe","needTrigger","subscribeErrorContext","_unsubscribe","_isError","subPromise","res","rej","_nextPromiseId","self","publish","presenceStats","history","startsWith","prefix","lastIndexOf","isFunction","log","level","args","console","logger","apply","backoff","step","pow","floor","errorExists","extend","a","b","key"],"mappings":"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ACA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,cAAc;AACd;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,OAAO;AACP;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;;AAEA;AACA,QAAQ,yBAAyB;AACjC;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;AACH;;;;;;;UC3dA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCrBA;WACA;WACA;WACA;WACA,EAAE;WACF;WACA;WACA,CAAC,I;;;;UCPD;UACA;UACA;UACA","file":"centrifuge.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Centrifuge\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Centrifuge\"] = factory();\n\telse\n\t\troot[\"Centrifuge\"] = factory();\n})(this, function() {\nreturn ","import EventEmitter from 'events';\nimport Subscription from './subscription';\n\nimport {\n JsonEncoder,\n JsonDecoder,\n JsonMethodType,\n JsonPushType\n} from './json';\n\nimport {\n isFunction,\n log,\n startsWith,\n errorExists,\n backoff,\n extend\n} from './utils';\n\nconst _errorTimeout = 'timeout';\nconst _errorConnectionClosed = 'connection closed';\n\nexport class Centrifuge extends EventEmitter {\n\n constructor(url, options) {\n super();\n this._url = url;\n this._websocket = null;\n this._sockjs = null;\n this._isSockjs = false;\n this._binary = false;\n this._methodType = null;\n this._pushType = null;\n this._encoder = null;\n this._decoder = null;\n this._status = 'disconnected';\n this._reconnect = true;\n this._reconnecting = false;\n this._transport = null;\n this._transportName = null;\n this._transportClosed = true;\n this._messageId = 0;\n this._clientID = null;\n this._refreshRequired = false;\n this._subs = {};\n this._serverSubs = {};\n this._lastSeq = {};\n this._lastGen = {};\n this._lastOffset = {};\n this._lastEpoch = {};\n this._messages = [];\n this._isBatching = false;\n this._isSubscribeBatching = false;\n this._privateChannels = {};\n this._numRefreshFailed = 0;\n this._refreshTimeout = null;\n this._pingTimeout = null;\n this._pongTimeout = null;\n this._subRefreshTimeouts = {};\n this._retries = 0;\n this._callbacks = {};\n this._latency = null;\n this._latencyStart = null;\n this._connectData = null;\n this._token = null;\n this._xhrID = 0;\n this._xhrs = {};\n this._dispatchPromise = Promise.resolve();\n this._config = {\n debug: false,\n name: '',\n version: '',\n websocket: null,\n sockjs: null,\n minRetry: 1000,\n maxRetry: 20000,\n timeout: 5000,\n ping: true,\n pingInterval: 25000,\n pongWaitTimeout: 5000,\n privateChannelPrefix: '$',\n onTransportClose: null,\n sockjsServer: null,\n sockjsTransports: [\n 'websocket',\n 'xdr-streaming',\n 'xhr-streaming',\n 'eventsource',\n 'iframe-eventsource',\n 'iframe-htmlfile',\n 'xdr-polling',\n 'xhr-polling',\n 'iframe-xhr-polling',\n 'jsonp-polling'\n ],\n refreshEndpoint: '/centrifuge/refresh',\n refreshHeaders: {},\n refreshParams: {},\n refreshData: {},\n refreshAttempts: null,\n refreshInterval: 1000,\n onRefreshFailed: null,\n onRefresh: null,\n subscribeEndpoint: '/centrifuge/subscribe',\n subscribeHeaders: {},\n subscribeParams: {},\n subRefreshInterval: 1000,\n onPrivateSubscribe: null\n };\n this._configure(options);\n }\n\n setToken(token) {\n this._token = token;\n }\n\n setConnectData(data) {\n this._connectData = data;\n }\n\n setRefreshHeaders(headers) {\n this._config.refreshHeaders = headers;\n }\n setRefreshParams(params) {\n this._config.refreshParams = params;\n }\n setRefreshData(data) {\n this._config.refreshData = data;\n }\n\n setSubscribeHeaders(headers) {\n this._config.subscribeHeaders = headers;\n }\n setSubscribeParams(params) {\n this._config.subscribeParams = params;\n }\n\n _ajax(url, params, headers, data, callback) {\n let query = '';\n this._debug('sending AJAX request to', url, 'with data', JSON.stringify(data));\n\n const xhr = (global.XMLHttpRequest ? new global.XMLHttpRequest() : new global.ActiveXObject('Microsoft.XMLHTTP'));\n\n for (const i in params) {\n if (params.hasOwnProperty(i)) {\n if (query.length > 0) {\n query += '&';\n }\n query += encodeURIComponent(i) + '=' + encodeURIComponent(params[i]);\n }\n }\n if (query.length > 0) {\n query = '?' + query;\n }\n xhr.open('POST', url + query, true);\n if ('withCredentials' in xhr) {\n xhr.withCredentials = true;\n }\n\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.setRequestHeader('Content-Type', 'application/json');\n for (const headerName in headers) {\n if (headers.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, headers[headerName]);\n }\n }\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data, parsed = false;\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback({\n error: 'Invalid JSON. Data was: ' + xhr.responseText,\n status: 200,\n data: null\n });\n }\n if (parsed) { // prevents double execution.\n callback({\n data: data,\n status: 200\n });\n }\n } else {\n this._log('wrong status code in AJAX response', xhr.status);\n callback({\n status: xhr.status,\n data: null\n });\n }\n }\n };\n setTimeout(() => xhr.send(JSON.stringify(data)), 20);\n return xhr;\n };\n\n _log() {\n log('info', arguments);\n };\n\n _debug() {\n if (this._config.debug === true) {\n log('debug', arguments);\n }\n };\n\n _websocketSupported() {\n if (this._config.websocket !== null) {\n return true;\n }\n return !(typeof WebSocket !== 'function' && typeof WebSocket !== 'object');\n };\n\n _setFormat(format) {\n if (this._formatOverride(format)) {\n return;\n }\n if (format === 'protobuf') {\n throw new Error('not implemented by JSON only Centrifuge client – use client with Protobuf');\n }\n this._binary = false;\n this._methodType = JsonMethodType;\n this._pushType = JsonPushType;\n this._encoder = new JsonEncoder();\n this._decoder = new JsonDecoder();\n }\n\n _formatOverride(format) {\n return false;\n }\n\n _configure(configuration) {\n if (!('Promise' in global)) {\n throw new Error('Promise polyfill required');\n }\n\n extend(this._config, configuration || {});\n this._debug('centrifuge config', this._config);\n\n if (!this._url) {\n throw new Error('url required');\n }\n\n if (startsWith(this._url, 'ws') && this._url.indexOf('format=protobuf') > -1) {\n this._setFormat('protobuf');\n } else {\n this._setFormat('json');\n }\n\n if (startsWith(this._url, 'http')) {\n this._debug('client will try to connect to SockJS endpoint');\n if (this._config.sockjs !== null) {\n this._debug('SockJS explicitly provided in options');\n this._sockjs = this._config.sockjs;\n } else {\n if (typeof global.SockJS === 'undefined') {\n throw new Error('SockJS not found, use ws:// in url or include SockJS');\n }\n this._debug('use globally defined SockJS');\n this._sockjs = global.SockJS;\n }\n } else {\n this._debug('client will connect to websocket endpoint');\n }\n };\n\n _setStatus(newStatus) {\n if (this._status !== newStatus) {\n this._debug('Status', this._status, '->', newStatus);\n this._status = newStatus;\n }\n };\n\n _isDisconnected() {\n return this._status === 'disconnected';\n };\n\n _isConnecting() {\n return this._status === 'connecting';\n };\n\n _isConnected() {\n return this._status === 'connected';\n };\n\n _nextMessageId() {\n return ++this._messageId;\n };\n\n _resetRetry() {\n this._debug('reset retries count to 0');\n this._retries = 0;\n };\n\n _getRetryInterval() {\n const interval = backoff(this._retries, this._config.minRetry, this._config.maxRetry);\n\n this._retries += 1;\n return interval;\n };\n\n _abortInflightXHRs() {\n for (const xhrID in this._xhrs) {\n try {\n this._xhrs[xhrID].abort();\n } catch (e) {\n this._debug('error aborting xhr', e);\n }\n delete this._xhrs[xhrID];\n }\n };\n\n _clearConnectedState(reconnect) {\n this._clientID = null;\n this._stopPing();\n\n // fire errbacks of registered outgoing calls.\n for (const id in this._callbacks) {\n if (this._callbacks.hasOwnProperty(id)) {\n const callbacks = this._callbacks[id];\n clearTimeout(callbacks.timeout);\n const errback = callbacks.errback;\n if (!errback) {\n continue;\n }\n errback({error: this._createErrorObject('disconnected')});\n }\n }\n this._callbacks = {};\n\n // fire unsubscribe events\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n\n if (reconnect) {\n if (sub._isSuccess()) {\n sub._triggerUnsubscribe();\n sub._recover = true;\n }\n if (sub._shouldResubscribe()) {\n sub._setSubscribing();\n }\n } else {\n sub._setUnsubscribed();\n }\n }\n }\n\n this._abortInflightXHRs();\n\n // clear refresh timer\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n // clear sub refresh timers\n for (const channel in this._subRefreshTimeouts) {\n if (this._subRefreshTimeouts.hasOwnProperty(channel) && this._subRefreshTimeouts[channel]) {\n this._clearSubRefreshTimeout(channel);\n }\n }\n this._subRefreshTimeouts = {};\n\n if (!this._reconnect) {\n // completely clear subscriptions\n this._subs = {};\n }\n };\n\n _isTransportOpen() {\n if (this._isSockjs) {\n return this._transport &&\n this._transport.transport &&\n this._transport.transport.readyState === this._transport.transport.OPEN;\n }\n return this._transport && this._transport.readyState === this._transport.OPEN;\n };\n\n _transportSend(commands) {\n if (!commands.length) {\n return true;\n }\n\n if (!this._isTransportOpen()) {\n // resolve pending commands with error if transport is not open\n for (let command in commands) {\n let id = command.id;\n if (!(id in this._callbacks)) {\n continue;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n const errback = callbacks.errback;\n errback({error: this._createErrorObject(_errorConnectionClosed, 0)});\n }\n return false;\n }\n this._transport.send(this._encoder.encodeCommands(commands));\n return true;\n }\n\n _setupTransport() {\n this._isSockjs = false;\n\n // detect transport to use - SockJS or Websocket\n if (this._sockjs !== null) {\n const sockjsOptions = {\n transports: this._config.sockjsTransports\n };\n\n if (this._config.sockjsServer !== null) {\n sockjsOptions.server = this._config.sockjsServer;\n }\n this._isSockjs = true;\n this._transport = new this._sockjs(this._url, null, sockjsOptions);\n } else {\n if (!this._websocketSupported()) {\n this._debug('No Websocket support and no SockJS configured, can not connect');\n return;\n }\n if (this._config.websocket !== null) {\n this._websocket = this._config.websocket;\n } else {\n this._websocket = WebSocket;\n }\n this._transport = new this._websocket(this._url);\n if (this._binary === true) {\n this._transport.binaryType = 'arraybuffer';\n }\n }\n\n this._transport.onopen = () => {\n this._transportClosed = false;\n\n if (this._isSockjs) {\n this._transportName = 'sockjs-' + this._transport.transport;\n this._transport.onheartbeat = () => this._restartPing();\n } else {\n this._transportName = 'websocket';\n }\n\n // Can omit method here due to zero value.\n const msg = {\n // method: this._methodType.CONNECT\n };\n\n if (this._token || this._connectData || this._config.name || this._config.version) {\n msg.params = {};\n }\n if (this._token) {\n msg.params.token = this._token;\n }\n if (this._connectData) {\n msg.params.data = this._connectData;\n }\n if (this._config.name) {\n msg.params.name = this._config.name;\n }\n if (this._config.version) {\n msg.params.version = this._config.version;\n }\n\n let subs = {};\n let hasSubs = false;\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel) && this._serverSubs[channel].recoverable) {\n hasSubs = true;\n let sub = {\n 'recover': true\n };\n if (this._serverSubs[channel].seq || this._serverSubs[channel].gen) {\n if (this._serverSubs[channel].seq) {\n sub['seq'] = this._serverSubs[channel].seq;\n }\n if (this._serverSubs[channel].gen) {\n sub['gen'] = this._serverSubs[channel].gen;\n }\n } else {\n if (this._serverSubs[channel].offset) {\n sub['offset'] = this._serverSubs[channel].offset;\n }\n }\n if (this._serverSubs[channel].epoch) {\n sub['epoch'] = this._serverSubs[channel].epoch;\n }\n subs[channel] = sub;\n }\n }\n if (hasSubs) {\n if (!msg.params) {msg.params = {};}\n msg.params.subs = subs;\n }\n\n this._latencyStart = new Date();\n this._call(msg).then(resolveCtx => {\n this._connectResponse(this._decoder.decodeCommandResult(this._methodType.CONNECT, resolveCtx.result), hasSubs);\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n const err = rejectCtx.error;\n if (err.code === 109) { // token expired.\n this._refreshRequired = true;\n }\n this._disconnect('connect error', true);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n this._transport.onerror = error => {\n this._debug('transport level error', error);\n };\n\n this._transport.onclose = closeEvent => {\n this._transportClosed = true;\n let reason = _errorConnectionClosed;\n let needReconnect = true;\n\n if (closeEvent && 'reason' in closeEvent && closeEvent.reason) {\n try {\n const advice = JSON.parse(closeEvent.reason);\n this._debug('reason is an advice object', advice);\n reason = advice.reason;\n needReconnect = advice.reconnect;\n } catch (e) {\n reason = closeEvent.reason;\n this._debug('reason is a plain string', reason);\n }\n }\n\n // onTransportClose callback should be executed every time transport was closed.\n // This can be helpful to catch failed connection events (because our disconnect\n // event only called once and every future attempts to connect do not fire disconnect\n // event again).\n if (this._config.onTransportClose !== null) {\n this._config.onTransportClose({\n event: closeEvent,\n reason: reason,\n reconnect: needReconnect\n });\n }\n\n this._disconnect(reason, needReconnect);\n\n if (this._reconnect === true) {\n this._reconnecting = true;\n const interval = this._getRetryInterval();\n\n this._debug('reconnect after ' + interval + ' milliseconds');\n setTimeout(() => {\n if (this._reconnect === true) {\n if (this._refreshRequired) {\n this._refresh();\n } else {\n this._connect();\n }\n }\n }, interval);\n }\n };\n\n this._transport.onmessage = event => {\n this._dataReceived(event.data);\n };\n };\n\n rpc(data) {\n return this._rpc('', data);\n }\n\n namedRPC(method, data) {\n return this._rpc(method, data);\n }\n\n _rpc(method, data) {\n let params = {\n data: data\n };\n if (method !== '') {\n params.method = method;\n };\n const msg = {\n method: this._methodType.RPC,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return result;\n });\n }\n\n send(data) {\n const msg = {\n method: this._methodType.SEND,\n params: {\n data: data\n }\n };\n\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n\n const sent = this._transportSend([msg]); // can send async message to server without id set\n if (!sent) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n };\n return Promise.resolve({});\n }\n\n _getHistoryParams(channel, options) {\n let params = {\n channel: channel\n };\n if (options !== undefined) {\n if (options.since) {\n params['use_since'] = true;\n if (options.since.offset) {\n params['offset'] = options.since.offset;\n }\n if (options.since.epoch) {\n params['epoch'] = options.since.epoch;\n }\n };\n if (options.limit !== undefined) {\n params['use_limit'] = true;\n params['limit'] = options.limit;\n }\n };\n return params;\n }\n\n _methodCall(msg, resultCB) {\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n return new Promise((resolve, reject) => {\n this._call(msg).then(resolveCtx => {\n resolve(resultCB(this._decoder.decodeCommandResult(msg.method, resolveCtx.result)));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n reject(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n });\n }\n\n publish(channel, data) {\n const msg = {\n method: this._methodType.PUBLISH,\n params: {\n channel: channel,\n data: data\n }\n };\n return this._methodCall(msg, function () {\n return {};\n });\n }\n\n history(channel, options) {\n const params = this._getHistoryParams(channel, options);\n const msg = {\n method: this._methodType.HISTORY,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return {\n 'publications': result.publications,\n 'epoch': result.epoch || '',\n 'offset': result.offset || 0\n };\n });\n }\n\n presence(channel) {\n const msg = {\n method: this._methodType.PRESENCE,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'presence': result.presence\n };\n });\n }\n\n presenceStats(channel) {\n const msg = {\n method: this._methodType.PRESENCE_STATS,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'num_users': result.num_users,\n 'num_clients': result.num_clients\n };\n });\n }\n\n _dataReceived(data) {\n const replies = this._decoder.decodeReplies(data);\n // we have to guarantee order of events in replies processing - i.e. start processing\n // next reply only when we finished processing of current one. Without syncing things in\n // this way we could get wrong publication events order as reply promises resolve\n // on next loop tick so for loop continues before we finished emitting all reply events.\n this._dispatchPromise = this._dispatchPromise.then(() => {\n let finishDispatch;\n this._dispatchPromise = new Promise(resolve =>{\n finishDispatch = resolve;\n });\n this._dispatchSynchronized(replies, finishDispatch);\n });\n this._restartPing();\n }\n\n _dispatchSynchronized(replies, finishDispatch) {\n let p = Promise.resolve();\n for (const i in replies) {\n if (replies.hasOwnProperty(i)) {\n p = p.then(() => {\n return this._dispatchReply(replies[i]);\n });\n }\n }\n p = p.then(() => {\n finishDispatch();\n });\n }\n\n _dispatchReply(reply) {\n var next;\n const p = new Promise(resolve =>{\n next = resolve;\n });\n\n if (reply === undefined || reply === null) {\n this._debug('dispatch: got undefined or null reply');\n next();\n return p;\n }\n\n const id = reply.id;\n\n if (id && id > 0) {\n this._handleReply(reply, next);\n } else {\n this._handlePush(reply.result, next);\n }\n\n return p;\n };\n\n _call(msg) {\n return new Promise((resolve, reject) => {\n const id = this._addMessage(msg);\n this._registerCall(id, resolve, reject);\n });\n }\n\n _connect() {\n if (this.isConnected()) {\n this._debug('connect called when already connected');\n return;\n }\n if (this._status === 'connecting') {\n return;\n }\n\n this._debug('start connecting');\n this._setStatus('connecting');\n this._clientID = null;\n this._reconnect = true;\n this._setupTransport();\n };\n\n _disconnect(reason, shouldReconnect) {\n\n const reconnect = shouldReconnect || false;\n if (reconnect === false) {\n this._reconnect = false;\n }\n\n if (this._isDisconnected()) {\n if (!reconnect) {\n this._clearConnectedState(reconnect);\n }\n return;\n }\n\n this._clearConnectedState(reconnect);\n\n this._debug('disconnected:', reason, shouldReconnect);\n this._setStatus('disconnected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._reconnecting === false) {\n // fire unsubscribe events for server side subs.\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel)) {\n this.emit('unsubscribe', {channel: channel});\n }\n }\n this.emit('disconnect', {\n reason: reason,\n reconnect: reconnect\n });\n }\n\n if (reconnect === false) {\n this._subs = {};\n this._serverSubs = {};\n }\n\n if (!this._transportClosed) {\n this._transport.close();\n }\n };\n\n _refreshFailed() {\n this._numRefreshFailed = 0;\n if (!this._isDisconnected()) {\n this._disconnect('refresh failed', false);\n }\n if (this._config.onRefreshFailed !== null) {\n this._config.onRefreshFailed();\n }\n };\n\n _refresh() {\n // ask application for new connection token.\n this._debug('refresh token');\n\n if (this._config.refreshAttempts === 0) {\n this._debug('refresh attempts set to 0, do not send refresh request at all');\n this._refreshFailed();\n return;\n }\n\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n // We don't perform any connection status related actions here as we are\n // relying on server that must close connection eventually.\n if (resp.error) {\n this._debug('error refreshing connection token', resp.error);\n } else {\n this._debug('error refreshing connection token: wrong status code', resp.status);\n }\n this._numRefreshFailed++;\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._config.refreshAttempts !== null && this._numRefreshFailed >= this._config.refreshAttempts) {\n this._refreshFailed();\n return;\n }\n const jitter = Math.round(Math.random() * 1000 * Math.max(this._numRefreshFailed, 20));\n const interval = this._config.refreshInterval + jitter;\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n return;\n }\n this._numRefreshFailed = 0;\n this._token = resp.data.token;\n if (!this._token) {\n this._refreshFailed();\n return;\n }\n if (this._isDisconnected() && this._reconnect) {\n this._debug('token refreshed, connect from scratch');\n this._connect();\n } else {\n this._debug('send refreshed token');\n const msg = {\n method: this._methodType.REFRESH,\n params: {\n token: this._token\n }\n };\n this._call(msg).then(resolveCtx => {\n this._refreshResponse(this._decoder.decodeCommandResult(this._methodType.REFRESH, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n if (this._config.onRefresh !== null) {\n const context = {};\n this._config.onRefresh(context, cb);\n } else {\n const xhr = this._ajax(\n this._config.refreshEndpoint,\n this._config.refreshParams,\n this._config.refreshHeaders,\n this._config.refreshData,\n cb\n );\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _refreshError(err) {\n this._debug('refresh error', err);\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n const interval = this._config.refreshInterval + Math.round(Math.random() * 1000);\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n }\n\n _refreshResponse(result) {\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (result.expires) {\n this._clientID = result.client;\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n };\n\n _newXHRID() {\n this._xhrID++;\n return this._xhrID;\n }\n\n _subRefresh(channel) {\n this._debug('refresh subscription token for channel', channel);\n\n if (this._subRefreshTimeouts[channel] !== undefined) {\n this._clearSubRefreshTimeout(channel);\n } else {\n return;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (resp.error || resp.status !== 200 || this._clientID !== clientID) {\n return;\n }\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n const token = channelsData[channel];\n if (!token) {\n return;\n }\n const msg = {\n method: this._methodType.SUB_REFRESH,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n\n this._call(msg).then(resolveCtx => {\n this._subRefreshResponse(\n channel,\n this._decoder.decodeCommandResult(this._methodType.SUB_REFRESH, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subRefreshError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n const data = {\n client: this._clientID,\n channels: [channel]\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _clearSubRefreshTimeout(channel) {\n if (this._subRefreshTimeouts[channel] !== undefined) {\n clearTimeout(this._subRefreshTimeouts[channel]);\n delete this._subRefreshTimeouts[channel];\n }\n }\n\n _subRefreshError(channel, err) {\n this._debug('subscription refresh error', channel, err);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n const jitter = Math.round(Math.random() * 1000);\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._config.subRefreshInterval + jitter);\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n return;\n }\n\n _subRefreshResponse(channel, result) {\n this._debug('subscription refresh success', channel);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n return;\n };\n\n _subscribe(sub, isResubscribe) {\n this._debug('subscribing on', sub.channel);\n const channel = sub.channel;\n\n if (!(channel in this._subs)) {\n this._subs[channel] = sub;\n }\n\n if (!this.isConnected()) {\n // subscribe will be called later\n sub._setNew();\n return;\n }\n\n sub._setSubscribing(isResubscribe);\n\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel\n }\n };\n\n // If channel name does not start with privateChannelPrefix - then we\n // can just send subscription message to Centrifuge. If channel name\n // starts with privateChannelPrefix - then this is a private channel\n // and we should ask web application backend for permission first.\n if (startsWith(channel, this._config.privateChannelPrefix)) {\n // private channel.\n if (this._isSubscribeBatching) {\n this._privateChannels[channel] = true;\n } else {\n this.startSubscribeBatching();\n this._subscribe(sub);\n this.stopSubscribeBatching();\n }\n } else {\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n _unsubscribe(sub) {\n delete this._subs[sub.channel];\n delete this._lastOffset[sub.channel];\n delete this._lastSeq[sub.channel];\n delete this._lastGen[sub.channel];\n if (this.isConnected()) {\n // No need to unsubscribe in disconnected state - i.e. client already unsubscribed.\n this._addMessage({\n method: this._methodType.UNSUBSCRIBE,\n params: {\n channel: sub.channel\n }\n });\n }\n };\n\n _getTTLMilliseconds(ttl) {\n // https://stackoverflow.com/questions/12633405/what-is-the-maximum-delay-for-setinterval\n return Math.min(ttl * 1000, 2147483647);\n }\n\n getSub(channel) {\n return this._getSub(channel);\n }\n\n _getSub(channel) {\n const sub = this._subs[channel];\n if (!sub) {\n return null;\n }\n return sub;\n };\n\n _isServerSub(channel) {\n return this._serverSubs[channel] !== undefined;\n };\n\n _connectResponse(result, isRecover) {\n const wasReconnecting = this._reconnecting;\n this._reconnecting = false;\n this._resetRetry();\n this._refreshRequired = false;\n\n if (this.isConnected()) {\n return;\n }\n\n if (this._latencyStart !== null) {\n this._latency = (new Date()).getTime() - this._latencyStart.getTime();\n this._latencyStart = null;\n }\n\n this._clientID = result.client;\n this._setStatus('connected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n }\n\n if (result.expires) {\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n\n this.startBatching();\n this.startSubscribeBatching();\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n if (sub._shouldResubscribe()) {\n this._subscribe(sub, wasReconnecting);\n }\n }\n }\n this.stopSubscribeBatching();\n this.stopBatching();\n\n this._startPing();\n\n const ctx = {\n client: result.client,\n transport: this._transportName,\n latency: this._latency\n };\n if (result.data) {\n ctx.data = result.data;\n }\n\n this.emit('connect', ctx);\n\n if (result.subs) {\n this._processServerSubs(result.subs);\n }\n };\n\n _processServerSubs(subs) {\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n const isResubscribe = this._serverSubs[channel] !== undefined;\n let subCtx = {channel: channel, isResubscribe: isResubscribe};\n subCtx = this._expandSubscribeContext(subCtx, sub);\n this.emit('subscribe', subCtx);\n }\n }\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n if (sub.recovered) {\n let pubs = sub.publications;\n if (pubs && pubs.length > 0) {\n\n // handle legacy order.\n // TODO: remove as soon as Centrifuge v1 released.\n if (pubs.length > 1 && (!pubs[0].offset || pubs[0].offset > pubs[1].offset)) {\n pubs = pubs.reverse();\n }\n\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n }\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n }\n }\n };\n\n _stopPing() {\n if (this._pongTimeout !== null) {\n clearTimeout(this._pongTimeout);\n this._pongTimeout = null;\n }\n if (this._pingTimeout !== null) {\n clearTimeout(this._pingTimeout);\n this._pingTimeout = null;\n }\n };\n\n _startPing() {\n if (this._config.ping !== true || this._config.pingInterval <= 0) {\n return;\n }\n if (!this.isConnected()) {\n return;\n }\n\n this._pingTimeout = setTimeout(() => {\n if (!this.isConnected()) {\n this._stopPing();\n return;\n }\n this.ping();\n this._pongTimeout = setTimeout(() => {\n this._disconnect('no ping', true);\n }, this._config.pongWaitTimeout);\n }, this._config.pingInterval);\n };\n\n _restartPing() {\n this._stopPing();\n this._startPing();\n };\n\n _subscribeError(channel, error) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n if (error.code === 0 && error.message === _errorTimeout) { // client side timeout.\n this._disconnect('timeout', true);\n return;\n }\n sub._setSubscribeError(error);\n };\n\n _expandSubscribeContext(ctx, result) {\n let recovered = false;\n if ('recovered' in result) {\n recovered = result.recovered;\n }\n ctx.recovered = recovered;\n\n let positioned = false;\n if ('positioned' in result) {\n positioned = result.positioned;\n }\n let epoch = '';\n if ('epoch' in result) {\n epoch = result.epoch;\n }\n let offset = 0;\n if ('offset' in result) {\n offset = result.offset;\n }\n if (positioned) {\n ctx.streamPosition = {\n 'offset': offset,\n 'epoch': epoch\n };\n };\n if (result.data) {\n ctx.data = result.data;\n }\n return ctx;\n }\n\n _subscribeResponse(channel, isRecover, result) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n sub._setSubscribeSuccess(result);\n\n let pubs = result.publications;\n if (pubs && pubs.length > 0) {\n if (pubs.length >= 2 && !pubs[0].offset && !pubs[1].offset) {\n // handle legacy order.\n pubs = pubs.reverse();\n }\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n\n if (result.recoverable && (!isRecover || !result.recovered)) {\n this._lastSeq[channel] = result.seq || 0;\n this._lastGen[channel] = result.gen || 0;\n this._lastOffset[channel] = result.offset || 0;\n }\n\n this._lastEpoch[channel] = result.epoch || '';\n\n if (result.recoverable) {\n sub._recoverable = true;\n }\n\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n };\n\n _handleReply(reply, next) {\n const id = reply.id;\n const result = reply.result;\n\n if (!(id in this._callbacks)) {\n next();\n return;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n\n if (!errorExists(reply)) {\n const callback = callbacks.callback;\n if (!callback) {\n return;\n }\n callback({result, next});\n } else {\n const errback = callbacks.errback;\n if (!errback) {\n next();\n return;\n }\n const error = reply.error;\n errback({error, next});\n }\n }\n\n _handleJoin(channel, join) {\n const ctx = {'info': join.info};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('join', ctx);\n }\n return;\n }\n sub.emit('join', ctx);\n };\n\n _handleLeave(channel, leave) {\n const ctx = {'info': leave.info};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('leave', ctx);\n }\n return;\n }\n sub.emit('leave', ctx);\n };\n\n _handleUnsub(channel, unsub) {\n const ctx = {};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n delete this._serverSubs[channel];\n ctx.channel = channel;\n this.emit('unsubscribe', ctx);\n }\n return;\n }\n sub.unsubscribe();\n if (unsub.resubscribe === true) {\n sub.subscribe();\n }\n };\n\n _handleSub(channel, sub) {\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n let ctx = {'channel': channel, isResubscribe: false};\n ctx = this._expandSubscribeContext(ctx, sub);\n this.emit('subscribe', ctx);\n };\n\n _handlePublication(channel, pub) {\n const sub = this._getSub(channel);\n const ctx = {\n 'data': pub.data,\n 'seq': pub.seq,\n 'gen': pub.gen,\n 'offset': pub.offset\n };\n if (pub.info) {\n ctx.info = pub.info;\n }\n if (!sub) {\n if (this._isServerSub(channel)) {\n if (pub.seq !== undefined) {\n this._serverSubs[channel].seq = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._serverSubs[channel].gen = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._serverSubs[channel].offset = pub.offset;\n }\n ctx.channel = channel;\n this.emit('publish', ctx);\n }\n return;\n }\n if (pub.seq !== undefined) {\n this._lastSeq[channel] = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._lastGen[channel] = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._lastOffset[channel] = pub.offset;\n }\n sub.emit('publish', ctx);\n };\n\n _handleMessage(message) {\n this.emit('message', message.data);\n };\n\n _handlePush(data, next) {\n const push = this._decoder.decodePush(data);\n let type = 0;\n if ('type' in push) {\n type = push['type'];\n }\n const channel = push.channel;\n\n if (type === this._pushType.PUBLICATION) {\n const pub = this._decoder.decodePushData(this._pushType.PUBLICATION, push.data);\n this._handlePublication(channel, pub);\n } else if (type === this._pushType.MESSAGE) {\n const message = this._decoder.decodePushData(this._pushType.MESSAGE, push.data);\n this._handleMessage(message);\n } else if (type === this._pushType.JOIN) {\n const join = this._decoder.decodePushData(this._pushType.JOIN, push.data);\n this._handleJoin(channel, join);\n } else if (type === this._pushType.LEAVE) {\n const leave = this._decoder.decodePushData(this._pushType.LEAVE, push.data);\n this._handleLeave(channel, leave);\n } else if (type === this._pushType.UNSUB) {\n const unsub = this._decoder.decodePushData(this._pushType.UNSUB, push.data);\n this._handleUnsub(channel, unsub);\n } else if (type === this._pushType.SUB) {\n const sub = this._decoder.decodePushData(this._pushType.SUB, push.data);\n this._handleSub(channel, sub);\n }\n next();\n }\n\n _flush() {\n const messages = this._messages.slice(0);\n this._messages = [];\n this._transportSend(messages);\n };\n\n _ping() {\n const msg = {\n method: this._methodType.PING\n };\n this._call(msg).then(resolveCtx => {\n this._pingResponse(this._decoder.decodeCommandResult(this._methodType.PING, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._debug('ping error', rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n _pingResponse(result) {\n if (!this.isConnected()) {\n return;\n }\n this._stopPing();\n this._startPing();\n }\n\n _getLastSeq(channel) {\n const lastSeq = this._lastSeq[channel];\n if (lastSeq) {\n return lastSeq;\n }\n return 0;\n };\n\n _getLastOffset(channel) {\n const lastOffset = this._lastOffset[channel];\n if (lastOffset) {\n return lastOffset;\n }\n return 0;\n };\n\n _getLastGen(channel) {\n const lastGen = this._lastGen[channel];\n if (lastGen) {\n return lastGen;\n }\n return 0;\n };\n\n _getLastEpoch(channel) {\n const lastEpoch = this._lastEpoch[channel];\n if (lastEpoch) {\n return lastEpoch;\n }\n return '';\n };\n\n _createErrorObject(message, code) {\n const errObject = {\n message: message,\n code: code || 0\n };\n\n return errObject;\n };\n\n _registerCall(id, callback, errback) {\n this._callbacks[id] = {\n callback: callback,\n errback: errback,\n timeout: null\n };\n this._callbacks[id].timeout = setTimeout(() => {\n delete this._callbacks[id];\n if (isFunction(errback)) {\n errback({error: this._createErrorObject(_errorTimeout)});\n }\n }, this._config.timeout);\n };\n\n _addMessage(message) {\n let id = this._nextMessageId();\n message.id = id;\n if (this._isBatching === true) {\n this._messages.push(message);\n } else {\n this._transportSend([message]);\n }\n return id;\n };\n\n isConnected() {\n return this._isConnected();\n }\n\n connect() {\n this._connect();\n };\n\n disconnect() {\n this._disconnect('client', false);\n };\n\n ping() {\n return this._ping();\n }\n\n startBatching() {\n // start collecting messages without sending them to Centrifuge until flush\n // method called\n this._isBatching = true;\n };\n\n stopBatching() {\n this._isBatching = false;\n this._flush();\n };\n\n startSubscribeBatching() {\n // start collecting private channels to create bulk authentication\n // request to subscribeEndpoint when stopSubscribeBatching will be called\n this._isSubscribeBatching = true;\n };\n\n stopSubscribeBatching() {\n // create request to subscribeEndpoint with collected private channels\n // to ask if this client can subscribe on each channel\n this._isSubscribeBatching = false;\n const authChannels = this._privateChannels;\n this._privateChannels = {};\n\n const channels = [];\n\n for (const channel in authChannels) {\n if (authChannels.hasOwnProperty(channel)) {\n const sub = this._getSub(channel);\n if (!sub) {\n continue;\n }\n channels.push(channel);\n }\n }\n\n if (channels.length === 0) {\n this._debug('no private channels found, no need to make request');\n return;\n }\n\n const data = {\n client: this._clientID,\n channels: channels\n };\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n this._debug('authorization request failed');\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n this._subscribeError(channel, this._createErrorObject('authorization request failed'));\n }\n }\n return;\n }\n\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n // try to send all subscriptions in one request.\n let batch = false;\n\n if (!this._isBatching) {\n this.startBatching();\n batch = true;\n }\n\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n const token = channelsData[channel];\n\n if (!token) {\n // subscription:error\n this._subscribeError(channel, this._createErrorObject('permission denied', 103));\n continue;\n } else {\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n continue;\n }\n\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n }\n }\n\n if (batch) {\n this.stopBatching();\n }\n\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n subscribe(channel, events) {\n const currentSub = this._getSub(channel);\n if (currentSub !== null) {\n currentSub._setEvents(events);\n if (currentSub._isUnsubscribed()) {\n currentSub.subscribe();\n }\n return currentSub;\n }\n const sub = new Subscription(this, channel, events);\n this._subs[channel] = sub;\n sub.subscribe();\n return sub;\n };\n}\n","import {Centrifuge} from './centrifuge.js';\nexport default Centrifuge;\n","export const JsonMethodType = {\n CONNECT: 0,\n SUBSCRIBE: 1,\n UNSUBSCRIBE: 2,\n PUBLISH: 3,\n PRESENCE: 4,\n PRESENCE_STATS: 5,\n HISTORY: 6,\n PING: 7,\n SEND: 8,\n RPC: 9,\n REFRESH: 10,\n SUB_REFRESH: 11\n};\n\nexport const JsonPushType = {\n PUBLICATION: 0,\n JOIN: 1,\n LEAVE: 2,\n UNSUB: 3,\n MESSAGE: 4,\n SUB: 5\n};\n\nexport class JsonEncoder {\n encodeCommands(commands) {\n const encodedCommands = [];\n for (const i in commands) {\n if (commands.hasOwnProperty(i)) {\n encodedCommands.push(JSON.stringify(commands[i]));\n }\n }\n return encodedCommands.join('\\n');\n }\n}\n\nexport class JsonDecoder {\n decodeReplies(data) {\n const replies = [];\n const encodedReplies = data.split('\\n');\n for (const i in encodedReplies) {\n if (encodedReplies.hasOwnProperty(i)) {\n if (!encodedReplies[i]) {\n continue;\n }\n const reply = JSON.parse(encodedReplies[i]);\n replies.push(reply);\n }\n }\n return replies;\n }\n\n decodeCommandResult(methodType, data) {\n return data;\n }\n\n decodePush(data) {\n return data;\n }\n\n decodePushData(pushType, data) {\n return data;\n }\n}\n\n","import EventEmitter from 'events';\n\nimport {\n isFunction\n} from './utils';\n\nconst _STATE_NEW = 0;\nconst _STATE_SUBSCRIBING = 1;\nconst _STATE_SUCCESS = 2;\nconst _STATE_ERROR = 3;\nconst _STATE_UNSUBSCRIBED = 4;\n\nexport default class Subscription extends EventEmitter {\n constructor(centrifuge, channel, events) {\n super();\n this.channel = channel;\n this._centrifuge = centrifuge;\n this._status = _STATE_NEW;\n this._error = null;\n this._isResubscribe = false;\n this._ready = false;\n this._subscriptionPromise = null;\n this._noResubscribe = false;\n this._recoverable = false;\n this._recover = false;\n this._setEvents(events);\n this._initializePromise();\n this._promises = {};\n this._promiseId = 0;\n this.on('error', function (errContext) {\n this._centrifuge._debug('subscription error', errContext);\n });\n }\n\n _nextPromiseId() {\n return ++this._promiseId;\n }\n\n _initializePromise() {\n // this helps us to wait until subscription will successfully\n // subscribe and call actions such as presence, history etc in\n // synchronous way.\n this._ready = false;\n\n this._subscriptionPromise = new Promise((resolve, reject) => {\n this._resolve = value => {\n this._ready = true;\n resolve(value);\n };\n this._reject = err => {\n this._ready = true;\n reject(err);\n };\n }).then(function () {}, function () {});\n };\n\n _needRecover() {\n return this._recoverable === true && this._recover === true;\n };\n\n _setEvents(events) {\n if (!events) {\n return;\n }\n if (isFunction(events)) {\n // events is just a function to handle publication received from channel.\n this.on('publish', events);\n } else if (Object.prototype.toString.call(events) === Object.prototype.toString.call({})) {\n const knownEvents = ['publish', 'join', 'leave', 'unsubscribe', 'subscribe', 'error'];\n for (let i = 0, l = knownEvents.length; i < l; i++) {\n const ev = knownEvents[i];\n if (ev in events) {\n this.on(ev, events[ev]);\n }\n }\n }\n };\n\n _isNew() {\n return this._status === _STATE_NEW;\n };\n\n _isUnsubscribed() {\n return this._status === _STATE_UNSUBSCRIBED;\n };\n\n _isSubscribing() {\n return this._status === _STATE_SUBSCRIBING;\n };\n\n _isReady() {\n return this._status === _STATE_SUCCESS || this._status === _STATE_ERROR;\n };\n\n _isSuccess() {\n return this._status === _STATE_SUCCESS;\n };\n\n _isError() {\n return this._status === _STATE_ERROR;\n };\n\n _setNew() {\n this._status = _STATE_NEW;\n };\n\n _setSubscribing(isResubscribe) {\n this._isResubscribe = isResubscribe || false;\n if (this._ready === true) {\n // new promise for this subscription\n this._initializePromise();\n }\n this._status = _STATE_SUBSCRIBING;\n };\n\n _setSubscribeSuccess(subscribeResult) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._status = _STATE_SUCCESS;\n const successContext = this._getSubscribeSuccessContext(subscribeResult);\n this._recover = false;\n this.emit('subscribe', successContext);\n this._resolve(successContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].resolve();\n delete this._promises[id];\n }\n };\n\n _setSubscribeError(err) {\n if (this._status === _STATE_ERROR) {\n return;\n }\n this._status = _STATE_ERROR;\n this._error = err;\n const errContext = this._getSubscribeErrorContext();\n this.emit('error', errContext);\n this._reject(errContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n };\n\n _triggerUnsubscribe() {\n this.emit('unsubscribe', {\n channel: this.channel\n });\n };\n\n _setUnsubscribed(noResubscribe) {\n this._centrifuge._clearSubRefreshTimeout(this.channel);\n if (this._status === _STATE_UNSUBSCRIBED) {\n return;\n }\n const needTrigger = this._status === _STATE_SUCCESS;\n this._status = _STATE_UNSUBSCRIBED;\n if (noResubscribe === true) {\n this._recover = false;\n this._noResubscribe = true;\n delete this._centrifuge._lastSeq[this.channel];\n delete this._centrifuge._lastGen[this.channel];\n delete this._centrifuge._lastEpoch[this.channel];\n }\n if (needTrigger) {\n this._triggerUnsubscribe();\n }\n };\n\n _shouldResubscribe() {\n return !this._noResubscribe;\n };\n\n _getSubscribeSuccessContext(subscribeResult) {\n let ctx = {\n channel: this.channel,\n isResubscribe: this._isResubscribe\n };\n if (subscribeResult) {\n // subscribeResult not available when called from Subscription.ready method at the moment.\n ctx = this._centrifuge._expandSubscribeContext(ctx, subscribeResult);\n }\n return ctx;\n };\n\n _getSubscribeErrorContext() {\n const subscribeErrorContext = this._error;\n subscribeErrorContext.channel = this.channel;\n subscribeErrorContext.isResubscribe = this._isResubscribe;\n return subscribeErrorContext;\n };\n\n ready(callback, errback) {\n if (this._ready) {\n if (this._isSuccess()) {\n callback(this._getSubscribeSuccessContext());\n } else {\n errback(this._getSubscribeErrorContext());\n }\n }\n };\n\n subscribe() {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._noResubscribe = false;\n this._centrifuge._subscribe(this);\n };\n\n unsubscribe() {\n this._setUnsubscribed(true);\n this._centrifuge._unsubscribe(this);\n };\n\n _methodCall() {\n if (this._isSuccess()) {\n return Promise.resolve();\n } else if (this._isError()) {\n return Promise.reject(this._error);\n }\n let subPromise = new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({'code': 0, 'message': 'timeout'});\n }, this._centrifuge._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n return subPromise;\n }\n\n publish(data) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.publish(self.channel, data);\n });\n };\n\n presence() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presence(self.channel);\n });\n };\n\n presenceStats() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presenceStats(self.channel);\n });\n };\n\n history(options) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.history(self.channel, options);\n });\n };\n}\n","export function startsWith(value, prefix) {\n return value.lastIndexOf(prefix, 0) === 0;\n};\n\nexport function isFunction(value) {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'function';\n};\n\nexport function log(level, args) {\n if (global.console) {\n const logger = global.console[level];\n\n if (isFunction(logger)) {\n logger.apply(global.console, args);\n }\n }\n};\n\nexport function backoff(step, min, max) {\n const jitter = 0.5 * Math.random();\n const interval = Math.min(max, min * Math.pow(2, step + 1));\n\n return Math.floor((1 - jitter) * interval);\n};\n\nexport function errorExists(data) {\n return 'error' in data && data.error !== null;\n};\n\nexport function extend(a, b) {\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n return a;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function eventListener() {\n if (errorListener !== undefined) {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n var errorListener;\n\n // Adding an error listener is not optional because\n // if an error is thrown on an event emitter we cannot\n // guarantee that the actual event we are waiting will\n // be fired. The result could be a silent way to create\n // memory or file descriptor leaks, which is something\n // we should avoid.\n if (name !== 'error') {\n errorListener = function errorListener(err) {\n emitter.removeListener(name, eventListener);\n reject(err);\n };\n\n emitter.once('error', errorListener);\n }\n\n emitter.once(name, eventListener);\n });\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(579);\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/centrifuge.min.js b/dist/centrifuge.min.js index 80fc76d1..fd98c113 100644 --- a/dist/centrifuge.min.js +++ b/dist/centrifuge.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Centrifuge",[],t):"object"==typeof exports?exports.Centrifuge=t():e.Centrifuge=t()}(this,(function(){return function(){"use strict";var e={382:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.Centrifuge=void 0;var s=u(n(187)),r=u(n(471)),i=n(147),o=n(853);function u(e){return e&&e.__esModule?e:{default:e}}function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function c(e,t){for(var n=0;n0&&(u+="&"),u+=encodeURIComponent(c)+"="+encodeURIComponent(t[c]));for(var h in u.length>0&&(u="?"+u),a.open("POST",e+u,!0),"withCredentials"in a&&(a.withCredentials=!0),a.setRequestHeader("X-Requested-With","XMLHttpRequest"),a.setRequestHeader("Content-Type","application/json"),s)s.hasOwnProperty(h)&&a.setRequestHeader(h,s[h]);return a.onreadystatechange=function(){if(4===a.readyState)if(200===a.status){var e,t=!1;try{e=JSON.parse(a.responseText),t=!0}catch(e){i({error:"Invalid JSON. Data was: "+a.responseText,status:200,data:null})}t&&i({data:e,status:200})}else o._log("wrong status code in AJAX response",a.status),i({status:a.status,data:null})},setTimeout((function(){return a.send(JSON.stringify(r))}),20),a}},{key:"_log",value:function(){(0,o.log)("info",arguments)}},{key:"_debug",value:function(){!0===this._config.debug&&(0,o.log)("debug",arguments)}},{key:"_websocketSupported",value:function(){return null!==this._config.websocket||!("function"!=typeof WebSocket&&"object"!==("undefined"==typeof WebSocket?"undefined":a(WebSocket)))}},{key:"_setFormat",value:function(e){if(!this._formatOverride(e)){if("protobuf"===e)throw new Error("not implemented by JSON only Centrifuge client – use client with Protobuf");this._binary=!1,this._methodType=i.JsonMethodType,this._pushType=i.JsonPushType,this._encoder=new i.JsonEncoder,this._decoder=new i.JsonDecoder}}},{key:"_formatOverride",value:function(e){return!1}},{key:"_configure",value:function(e){if(!("Promise"in n.g))throw new Error("Promise polyfill required");if((0,o.extend)(this._config,e||{}),this._debug("centrifuge config",this._config),!this._url)throw new Error("url required");if((0,o.startsWith)(this._url,"ws")&&this._url.indexOf("format=protobuf")>-1?this._setFormat("protobuf"):this._setFormat("json"),(0,o.startsWith)(this._url,"http"))if(this._debug("client will try to connect to SockJS endpoint"),null!==this._config.sockjs)this._debug("SockJS explicitly provided in options"),this._sockjs=this._config.sockjs;else{if(void 0===n.g.SockJS)throw new Error("SockJS not found, use ws:// in url or include SockJS");this._debug("use globally defined SockJS"),this._sockjs=n.g.SockJS}else this._debug("client will connect to websocket endpoint")}},{key:"_setStatus",value:function(e){this._status!==e&&(this._debug("Status",this._status,"->",e),this._status=e)}},{key:"_isDisconnected",value:function(){return"disconnected"===this._status}},{key:"_isConnecting",value:function(){return"connecting"===this._status}},{key:"_isConnected",value:function(){return"connected"===this._status}},{key:"_nextMessageId",value:function(){return++this._messageId}},{key:"_resetRetry",value:function(){this._debug("reset retries count to 0"),this._retries=0}},{key:"_getRetryInterval",value:function(){var e=(0,o.backoff)(this._retries,this._config.minRetry,this._config.maxRetry);return this._retries+=1,e}},{key:"_abortInflightXHRs",value:function(){for(var e in this._xhrs){try{this._xhrs[e].abort()}catch(e){this._debug("error aborting xhr",e)}delete this._xhrs[e]}}},{key:"_clearConnectedState",value:function(e){for(var t in this._clientID=null,this._stopPing(),this._callbacks)if(this._callbacks.hasOwnProperty(t)){var n=this._callbacks[t];clearTimeout(n.timeout);var s=n.errback;if(!s)continue;s({error:this._createErrorObject("disconnected")})}for(var r in this._callbacks={},this._subs)if(this._subs.hasOwnProperty(r)){var i=this._subs[r];e?(i._isSuccess()&&(i._triggerUnsubscribe(),i._recover=!0),i._shouldResubscribe()&&i._setSubscribing()):i._setUnsubscribed()}for(var o in this._abortInflightXHRs(),null!==this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),this._subRefreshTimeouts)this._subRefreshTimeouts.hasOwnProperty(o)&&this._subRefreshTimeouts[o]&&this._clearSubRefreshTimeout(o);this._subRefreshTimeouts={},this._reconnect||(this._subs={})}},{key:"_isTransportOpen",value:function(){return this._isSockjs?this._transport&&this._transport.transport&&this._transport.transport.readyState===this._transport.transport.OPEN:this._transport&&this._transport.readyState===this._transport.OPEN}},{key:"_transportSend",value:function(e){if(!e.length)return!0;if(!this._isTransportOpen()){for(var t in e){var n=t.id;if(n in this._callbacks){var s=this._callbacks[n];clearTimeout(this._callbacks[n].timeout),delete this._callbacks[n],(0,s.errback)({error:this._createErrorObject(d,0)})}}return!1}return this._transport.send(this._encoder.encodeCommands(e)),!0}},{key:"_setupTransport",value:function(){var e=this;if(this._isSockjs=!1,null!==this._sockjs){var t={transports:this._config.sockjsTransports};null!==this._config.sockjsServer&&(t.server=this._config.sockjsServer),this._isSockjs=!0,this._transport=new this._sockjs(this._url,null,t)}else{if(!this._websocketSupported())return void this._debug("No Websocket support and no SockJS configured, can not connect");null!==this._config.websocket?this._websocket=this._config.websocket:this._websocket=WebSocket,this._transport=new this._websocket(this._url),!0===this._binary&&(this._transport.binaryType="arraybuffer")}this._transport.onopen=function(){e._transportClosed=!1,e._isSockjs?(e._transportName="sockjs-"+e._transport.transport,e._transport.onheartbeat=function(){return e._restartPing()}):e._transportName="websocket";var t={};(e._token||e._connectData||e._config.name||e._config.version)&&(t.params={}),e._token&&(t.params.token=e._token),e._connectData&&(t.params.data=e._connectData),e._config.name&&(t.params.name=e._config.name),e._config.version&&(t.params.version=e._config.version);var n={},s=!1;for(var r in e._serverSubs)if(e._serverSubs.hasOwnProperty(r)&&e._serverSubs[r].recoverable){s=!0;var i={recover:!0};e._serverSubs[r].seq||e._serverSubs[r].gen?(e._serverSubs[r].seq&&(i.seq=e._serverSubs[r].seq),e._serverSubs[r].gen&&(i.gen=e._serverSubs[r].gen)):e._serverSubs[r].offset&&(i.offset=e._serverSubs[r].offset),e._serverSubs[r].epoch&&(i.epoch=e._serverSubs[r].epoch),n[r]=i}s&&(t.params||(t.params={}),t.params.subs=n),e._latencyStart=new Date,e._call(t).then((function(t){e._connectResponse(e._decoder.decodeCommandResult(e._methodType.CONNECT,t.result),s),t.next&&t.next()}),(function(t){109===t.error.code&&(e._refreshRequired=!0),e._disconnect("connect error",!0),t.next&&t.next()}))},this._transport.onerror=function(t){e._debug("transport level error",t)},this._transport.onclose=function(t){e._transportClosed=!0;var n=d,s=!0;if(t&&"reason"in t&&t.reason)try{var r=JSON.parse(t.reason);e._debug("reason is an advice object",r),n=r.reason,s=r.reconnect}catch(s){n=t.reason,e._debug("reason is a plain string",n)}if(null!==e._config.onTransportClose&&e._config.onTransportClose({event:t,reason:n,reconnect:s}),e._disconnect(n,s),!0===e._reconnect){e._reconnecting=!0;var i=e._getRetryInterval();e._debug("reconnect after "+i+" milliseconds"),setTimeout((function(){!0===e._reconnect&&(e._refreshRequired?e._refresh():e._connect())}),i)}},this._transport.onmessage=function(t){e._dataReceived(t.data)}}},{key:"rpc",value:function(e){return this._rpc("",e)}},{key:"namedRPC",value:function(e,t){return this._rpc(e,t)}},{key:"_rpc",value:function(e,t){var n={data:t};""!==e&&(n.method=e);var s={method:this._methodType.RPC,params:n};return this._methodCall(s,(function(e){return e}))}},{key:"send",value:function(e){var t={method:this._methodType.SEND,params:{data:e}};return this.isConnected()&&this._transportSend([t])?Promise.resolve({}):Promise.reject(this._createErrorObject(d,0))}},{key:"_getHistoryParams",value:function(e,t){var n={channel:e};return void 0!==t&&(t.since&&(n.use_since=!0,t.since.offset&&(n.offset=t.since.offset),t.since.epoch&&(n.epoch=t.since.epoch)),void 0!==t.limit&&(n.use_limit=!0,n.limit=t.limit)),n}},{key:"_methodCall",value:function(e,t){var n=this;return this.isConnected()?new Promise((function(s,r){n._call(e).then((function(r){s(t(n._decoder.decodeCommandResult(e.method,r.result))),r.next&&r.next()}),(function(e){r(e.error),e.next&&e.next()}))})):Promise.reject(this._createErrorObject(d,0))}},{key:"publish",value:function(e,t){var n={method:this._methodType.PUBLISH,params:{channel:e,data:t}};return this._methodCall(n,(function(){return{}}))}},{key:"history",value:function(e,t){var n=this._getHistoryParams(e,t),s={method:this._methodType.HISTORY,params:n};return this._methodCall(s,(function(e){return{publications:e.publications,epoch:e.epoch||"",offset:e.offset||0}}))}},{key:"presence",value:function(e){var t={method:this._methodType.PRESENCE,params:{channel:e}};return this._methodCall(t,(function(e){return{presence:e.presence}}))}},{key:"presenceStats",value:function(e){var t={method:this._methodType.PRESENCE_STATS,params:{channel:e}};return this._methodCall(t,(function(e){return{num_users:e.num_users,num_clients:e.num_clients}}))}},{key:"_dataReceived",value:function(e){var t=this,n=this._decoder.decodeReplies(e);this._dispatchPromise=this._dispatchPromise.then((function(){var e;t._dispatchPromise=new Promise((function(t){e=t})),t._dispatchSynchronized(n,e)})),this._restartPing()}},{key:"_dispatchSynchronized",value:function(e,t){var n=this,s=Promise.resolve(),r=function(t){e.hasOwnProperty(t)&&(s=s.then((function(){return n._dispatchReply(e[t])})))};for(var i in e)r(i);s=s.then((function(){t()}))}},{key:"_dispatchReply",value:function(e){var t,n=new Promise((function(e){t=e}));if(null==e)return this._debug("dispatch: got undefined or null reply"),t(),n;var s=e.id;return s&&s>0?this._handleReply(e,t):this._handlePush(e.result,t),n}},{key:"_call",value:function(e){var t=this;return new Promise((function(n,s){var r=t._addMessage(e);t._registerCall(r,n,s)}))}},{key:"_connect",value:function(){this.isConnected()?this._debug("connect called when already connected"):"connecting"!==this._status&&(this._debug("start connecting"),this._setStatus("connecting"),this._clientID=null,this._reconnect=!0,this._setupTransport())}},{key:"_disconnect",value:function(e,t){var n=t||!1;if(!1===n&&(this._reconnect=!1),this._isDisconnected())n||this._clearConnectedState(n);else{if(this._clearConnectedState(n),this._debug("disconnected:",e,t),this._setStatus("disconnected"),this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),!1===this._reconnecting){for(var s in this._serverSubs)this._serverSubs.hasOwnProperty(s)&&this.emit("unsubscribe",{channel:s});this.emit("disconnect",{reason:e,reconnect:n})}!1===n&&(this._subs={},this._serverSubs={}),this._transportClosed||this._transport.close()}}},{key:"_refreshFailed",value:function(){this._numRefreshFailed=0,this._isDisconnected()||this._disconnect("refresh failed",!1),null!==this._config.onRefreshFailed&&this._config.onRefreshFailed()}},{key:"_refresh",value:function(){var e=this;if(this._debug("refresh token"),0===this._config.refreshAttempts)return this._debug("refresh attempts set to 0, do not send refresh request at all"),void this._refreshFailed();null!==this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null);var t=this._clientID,n=this._newXHRID(),s=function(s){if(n in e._xhrs&&delete e._xhrs[n],e._clientID===t)if(s.error||200!==s.status){if(s.error?e._debug("error refreshing connection token",s.error):e._debug("error refreshing connection token: wrong status code",s.status),e._numRefreshFailed++,null!==e._refreshTimeout&&(clearTimeout(e._refreshTimeout),e._refreshTimeout=null),null!==e._config.refreshAttempts&&e._numRefreshFailed>=e._config.refreshAttempts)return void e._refreshFailed();var r=Math.round(1e3*Math.random()*Math.max(e._numRefreshFailed,20)),i=e._config.refreshInterval+r;e._refreshTimeout=setTimeout((function(){return e._refresh()}),i)}else if(e._numRefreshFailed=0,e._token=s.data.token,e._token)if(e._isDisconnected()&&e._reconnect)e._debug("token refreshed, connect from scratch"),e._connect();else{e._debug("send refreshed token");var o={method:e._methodType.REFRESH,params:{token:e._token}};e._call(o).then((function(t){e._refreshResponse(e._decoder.decodeCommandResult(e._methodType.REFRESH,t.result)),t.next&&t.next()}),(function(t){e._refreshError(t.error),t.next&&t.next()}))}else e._refreshFailed()};if(null!==this._config.onRefresh)this._config.onRefresh({},s);else{var r=this._ajax(this._config.refreshEndpoint,this._config.refreshParams,this._config.refreshHeaders,this._config.refreshData,s);this._xhrs[n]=r}}},{key:"_refreshError",value:function(e){var t=this;this._debug("refresh error",e),this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null);var n=this._config.refreshInterval+Math.round(1e3*Math.random());this._refreshTimeout=setTimeout((function(){return t._refresh()}),n)}},{key:"_refreshResponse",value:function(e){var t=this;this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),e.expires&&(this._clientID=e.client,this._refreshTimeout=setTimeout((function(){return t._refresh()}),this._getTTLMilliseconds(e.ttl)))}},{key:"_newXHRID",value:function(){return this._xhrID++,this._xhrID}},{key:"_subRefresh",value:function(e){var t=this;if(this._debug("refresh subscription token for channel",e),void 0!==this._subRefreshTimeouts[e]){this._clearSubRefreshTimeout(e);var n=this._clientID,s=this._newXHRID(),r=function(r){if(s in t._xhrs&&delete t._xhrs[s],!r.error&&200===r.status&&t._clientID===n){var i={};if(r.data.channels)for(var o in r.data.channels){var u=r.data.channels[o];u.channel&&(i[u.channel]=u.token)}var a=i[e];if(a){var c={method:t._methodType.SUB_REFRESH,params:{channel:e,token:a}};null!==t._getSub(e)&&t._call(c).then((function(n){t._subRefreshResponse(e,t._decoder.decodeCommandResult(t._methodType.SUB_REFRESH,n.result)),n.next&&n.next()}),(function(n){t._subRefreshError(e,n.error),n.next&&n.next()}))}}},i={client:this._clientID,channels:[e]};if(null!==this._config.onPrivateSubscribe)this._config.onPrivateSubscribe({data:i},r);else{var o=this._ajax(this._config.subscribeEndpoint,this._config.subscribeParams,this._config.subscribeHeaders,i,r);this._xhrs[s]=o}}}},{key:"_clearSubRefreshTimeout",value:function(e){void 0!==this._subRefreshTimeouts[e]&&(clearTimeout(this._subRefreshTimeouts[e]),delete this._subRefreshTimeouts[e])}},{key:"_subRefreshError",value:function(e,t){var n=this;if(this._debug("subscription refresh error",e,t),this._clearSubRefreshTimeout(e),null!==this._getSub(e)){var s=Math.round(1e3*Math.random()),r=setTimeout((function(){return n._subRefresh(e)}),this._config.subRefreshInterval+s);this._subRefreshTimeouts[e]=r}}},{key:"_subRefreshResponse",value:function(e,t){var n=this;if(this._debug("subscription refresh success",e),this._clearSubRefreshTimeout(e),null!==this._getSub(e)&&!0===t.expires){var s=setTimeout((function(){return n._subRefresh(e)}),this._getTTLMilliseconds(t.ttl));this._subRefreshTimeouts[e]=s}}},{key:"_subscribe",value:function(e,t){var n=this;this._debug("subscribing on",e.channel);var s=e.channel;if(s in this._subs||(this._subs[s]=e),this.isConnected()){e._setSubscribing(t);var r={method:this._methodType.SUBSCRIBE,params:{channel:s}};if((0,o.startsWith)(s,this._config.privateChannelPrefix))this._isSubscribeBatching?this._privateChannels[s]=!0:(this.startSubscribeBatching(),this._subscribe(e),this.stopSubscribeBatching());else{var i=e._needRecover();if(!0===i){r.params.recover=!0;var u=this._getLastSeq(s),a=this._getLastGen(s);if(u||a)u&&(r.params.seq=u),a&&(r.params.gen=a);else{var c=this._getLastOffset(s);c&&(r.params.offset=c)}var h=this._getLastEpoch(s);h&&(r.params.epoch=h)}this._call(r).then((function(e){n._subscribeResponse(s,i,n._decoder.decodeCommandResult(n._methodType.SUBSCRIBE,e.result)),e.next&&e.next()}),(function(e){n._subscribeError(s,e.error),e.next&&e.next()}))}}else e._setNew()}},{key:"_unsubscribe",value:function(e){delete this._subs[e.channel],delete this._lastOffset[e.channel],delete this._lastSeq[e.channel],delete this._lastGen[e.channel],this.isConnected()&&this._addMessage({method:this._methodType.UNSUBSCRIBE,params:{channel:e.channel}})}},{key:"_getTTLMilliseconds",value:function(e){return Math.min(1e3*e,2147483647)}},{key:"getSub",value:function(e){return this._getSub(e)}},{key:"_getSub",value:function(e){return this._subs[e]||null}},{key:"_isServerSub",value:function(e){return void 0!==this._serverSubs[e]}},{key:"_connectResponse",value:function(e,t){var n=this,s=this._reconnecting;if(this._reconnecting=!1,this._resetRetry(),this._refreshRequired=!1,!this.isConnected()){for(var r in null!==this._latencyStart&&(this._latency=(new Date).getTime()-this._latencyStart.getTime(),this._latencyStart=null),this._clientID=e.client,this._setStatus("connected"),this._refreshTimeout&&clearTimeout(this._refreshTimeout),e.expires&&(this._refreshTimeout=setTimeout((function(){return n._refresh()}),this._getTTLMilliseconds(e.ttl))),this.startBatching(),this.startSubscribeBatching(),this._subs)if(this._subs.hasOwnProperty(r)){var i=this._subs[r];i._shouldResubscribe()&&this._subscribe(i,s)}this.stopSubscribeBatching(),this.stopBatching(),this._startPing();var o={client:e.client,transport:this._transportName,latency:this._latency};e.data&&(o.data=e.data),this.emit("connect",o),e.subs&&this._processServerSubs(e.subs)}}},{key:"_processServerSubs",value:function(e){for(var t in e)if(e.hasOwnProperty(t)){var n=e[t],s={channel:t,isResubscribe:void 0!==this._serverSubs[t]};s=this._expandSubscribeContext(s,n),this.emit("subscribe",s)}for(var r in e)if(e.hasOwnProperty(r)){var i=e[r];if(i.recovered){var o=i.publications;if(o&&o.length>0)for(var u in o.length>1&&(!o[0].offset||o[0].offset>o[1].offset)&&(o=o.reverse()),o)o.hasOwnProperty(u)&&this._handlePublication(r,o[u])}this._serverSubs[r]={seq:i.seq,gen:i.gen,offset:i.offset,epoch:i.epoch,recoverable:i.recoverable}}}},{key:"_stopPing",value:function(){null!==this._pongTimeout&&(clearTimeout(this._pongTimeout),this._pongTimeout=null),null!==this._pingTimeout&&(clearTimeout(this._pingTimeout),this._pingTimeout=null)}},{key:"_startPing",value:function(){var e=this;!0!==this._config.ping||this._config.pingInterval<=0||this.isConnected()&&(this._pingTimeout=setTimeout((function(){e.isConnected()?(e.ping(),e._pongTimeout=setTimeout((function(){e._disconnect("no ping",!0)}),e._config.pongWaitTimeout)):e._stopPing()}),this._config.pingInterval))}},{key:"_restartPing",value:function(){this._stopPing(),this._startPing()}},{key:"_subscribeError",value:function(e,t){var n=this._getSub(e);n&&n._isSubscribing()&&(0!==t.code||t.message!==_?n._setSubscribeError(t):this._disconnect("timeout",!0))}},{key:"_expandSubscribeContext",value:function(e,t){var n=!1;"recovered"in t&&(n=t.recovered),e.recovered=n;var s=!1;"positioned"in t&&(s=t.positioned);var r="";"epoch"in t&&(r=t.epoch);var i=0;return"offset"in t&&(i=t.offset),s&&(e.streamPosition={offset:i,epoch:r}),e}},{key:"_subscribeResponse",value:function(e,t,n){var s=this,r=this._getSub(e);if(r&&r._isSubscribing()){r._setSubscribeSuccess(n);var i=n.publications;if(i&&i.length>0)for(var o in i.length>=2&&!i[0].offset&&!i[1].offset&&(i=i.reverse()),i)i.hasOwnProperty(o)&&this._handlePublication(e,i[o]);if(!n.recoverable||t&&n.recovered||(this._lastSeq[e]=n.seq||0,this._lastGen[e]=n.gen||0,this._lastOffset[e]=n.offset||0),this._lastEpoch[e]=n.epoch||"",n.recoverable&&(r._recoverable=!0),!0===n.expires){var u=setTimeout((function(){return s._subRefresh(e)}),this._getTTLMilliseconds(n.ttl));this._subRefreshTimeouts[e]=u}}}},{key:"_handleReply",value:function(e,t){var n=e.id,s=e.result;if(n in this._callbacks){var r=this._callbacks[n];if(clearTimeout(this._callbacks[n].timeout),delete this._callbacks[n],(0,o.errorExists)(e)){var i=r.errback;if(!i)return void t();i({error:e.error,next:t})}else{var u=r.callback;if(!u)return;u({result:s,next:t})}}else t()}},{key:"_handleJoin",value:function(e,t){var n={info:t.info},s=this._getSub(e);s?s.emit("join",n):this._isServerSub(e)&&(n.channel=e,this.emit("join",n))}},{key:"_handleLeave",value:function(e,t){var n={info:t.info},s=this._getSub(e);s?s.emit("leave",n):this._isServerSub(e)&&(n.channel=e,this.emit("leave",n))}},{key:"_handleUnsub",value:function(e,t){var n={},s=this._getSub(e);s?(s.unsubscribe(),!0===t.resubscribe&&s.subscribe()):this._isServerSub(e)&&(delete this._serverSubs[e],n.channel=e,this.emit("unsubscribe",n))}},{key:"_handleSub",value:function(e,t){this._serverSubs[e]={seq:t.seq,gen:t.gen,offset:t.offset,epoch:t.epoch,recoverable:t.recoverable};var n={channel:e,isResubscribe:!1};n=this._expandSubscribeContext(n,t),this.emit("subscribe",n)}},{key:"_handlePublication",value:function(e,t){var n=this._getSub(e),s={data:t.data,seq:t.seq,gen:t.gen,offset:t.offset};t.info&&(s.info=t.info),n?(void 0!==t.seq&&(this._lastSeq[e]=t.seq),void 0!==t.gen&&(this._lastGen[e]=t.gen),void 0!==t.offset&&(this._lastOffset[e]=t.offset),n.emit("publish",s)):this._isServerSub(e)&&(void 0!==t.seq&&(this._serverSubs[e].seq=t.seq),void 0!==t.gen&&(this._serverSubs[e].gen=t.gen),void 0!==t.offset&&(this._serverSubs[e].offset=t.offset),s.channel=e,this.emit("publish",s))}},{key:"_handleMessage",value:function(e){this.emit("message",e.data)}},{key:"_handlePush",value:function(e,t){var n=this._decoder.decodePush(e),s=0;"type"in n&&(s=n.type);var r=n.channel;if(s===this._pushType.PUBLICATION){var i=this._decoder.decodePushData(this._pushType.PUBLICATION,n.data);this._handlePublication(r,i)}else if(s===this._pushType.MESSAGE){var o=this._decoder.decodePushData(this._pushType.MESSAGE,n.data);this._handleMessage(o)}else if(s===this._pushType.JOIN){var u=this._decoder.decodePushData(this._pushType.JOIN,n.data);this._handleJoin(r,u)}else if(s===this._pushType.LEAVE){var a=this._decoder.decodePushData(this._pushType.LEAVE,n.data);this._handleLeave(r,a)}else if(s===this._pushType.UNSUB){var c=this._decoder.decodePushData(this._pushType.UNSUB,n.data);this._handleUnsub(r,c)}else if(s===this._pushType.SUB){var h=this._decoder.decodePushData(this._pushType.SUB,n.data);this._handleSub(r,h)}t()}},{key:"_flush",value:function(){var e=this._messages.slice(0);this._messages=[],this._transportSend(e)}},{key:"_ping",value:function(){var e=this,t={method:this._methodType.PING};this._call(t).then((function(t){e._pingResponse(e._decoder.decodeCommandResult(e._methodType.PING,t.result)),t.next&&t.next()}),(function(t){e._debug("ping error",t.error),t.next&&t.next()}))}},{key:"_pingResponse",value:function(e){this.isConnected()&&(this._stopPing(),this._startPing())}},{key:"_getLastSeq",value:function(e){return this._lastSeq[e]||0}},{key:"_getLastOffset",value:function(e){return this._lastOffset[e]||0}},{key:"_getLastGen",value:function(e){return this._lastGen[e]||0}},{key:"_getLastEpoch",value:function(e){return this._lastEpoch[e]||""}},{key:"_createErrorObject",value:function(e,t){return{message:e,code:t||0}}},{key:"_registerCall",value:function(e,t,n){var s=this;this._callbacks[e]={callback:t,errback:n,timeout:null},this._callbacks[e].timeout=setTimeout((function(){delete s._callbacks[e],(0,o.isFunction)(n)&&n({error:s._createErrorObject(_)})}),this._config.timeout)}},{key:"_addMessage",value:function(e){var t=this._nextMessageId();return e.id=t,!0===this._isBatching?this._messages.push(e):this._transportSend([e]),t}},{key:"isConnected",value:function(){return this._isConnected()}},{key:"connect",value:function(){this._connect()}},{key:"disconnect",value:function(){this._disconnect("client",!1)}},{key:"ping",value:function(){return this._ping()}},{key:"startBatching",value:function(){this._isBatching=!0}},{key:"stopBatching",value:function(){this._isBatching=!1,this._flush()}},{key:"startSubscribeBatching",value:function(){this._isSubscribeBatching=!0}},{key:"stopSubscribeBatching",value:function(){var e=this;this._isSubscribeBatching=!1;var t=this._privateChannels;this._privateChannels={};var n=[];for(var s in t)if(t.hasOwnProperty(s)){if(!this._getSub(s))continue;n.push(s)}if(0!==n.length){var r={client:this._clientID,channels:n},i=this._clientID,o=this._newXHRID(),u=function(t){if(o in e._xhrs&&delete e._xhrs[o],e._clientID===i)if(t.error||200!==t.status){for(var s in e._debug("authorization request failed"),n)if(n.hasOwnProperty(s)){var r=n[s];e._subscribeError(r,e._createErrorObject("authorization request failed"))}}else{var u={};if(t.data.channels)for(var a in t.data.channels){var c=t.data.channels[a];c.channel&&(u[c.channel]=c.token)}var h=!1;for(var l in e._isBatching||(e.startBatching(),h=!0),n)!n.hasOwnProperty(l)||function(){var t=n[l],s=u[t];if(!s)return e._subscribeError(t,e._createErrorObject("permission denied",103)),"continue";var r={method:e._methodType.SUBSCRIBE,params:{channel:t,token:s}},i=e._getSub(t);if(null===i)return"continue";var o=i._needRecover();if(!0===o){r.params.recover=!0;var a=e._getLastSeq(t),c=e._getLastGen(t);if(a||c)a&&(r.params.seq=a),c&&(r.params.gen=c);else{var h=e._getLastOffset(t);h&&(r.params.offset=h)}var f=e._getLastEpoch(t);f&&(r.params.epoch=f)}e._call(r).then((function(n){e._subscribeResponse(t,o,e._decoder.decodeCommandResult(e._methodType.SUBSCRIBE,n.result)),n.next&&n.next()}),(function(n){e._subscribeError(t,n.error),n.next&&n.next()}))}();h&&e.stopBatching()}};if(null!==this._config.onPrivateSubscribe)this._config.onPrivateSubscribe({data:r},u);else{var a=this._ajax(this._config.subscribeEndpoint,this._config.subscribeParams,this._config.subscribeHeaders,r,u);this._xhrs[o]=a}}else this._debug("no private channels found, no need to make request")}},{key:"subscribe",value:function(e,t){var n=this._getSub(e);if(null!==n)return n._setEvents(t),n._isUnsubscribed()&&n.subscribe(),n;var s=new r.default(this,e,t);return this._subs[e]=s,s.subscribe(),s}}])&&c(t.prototype,s),b}(s.default);t.Centrifuge=v},579:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=n(382).Centrifuge;t.default=s,e.exports=t.default},147:function(e,t){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var n=0;n0&&o.length>r&&!o.warned){o.warned=!0;var h=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");h.name="MaxListenersExceededWarning",h.emitter=e,h.type=t,h.count=o.length,c=h,console&&console.warn&&console.warn(c)}return e}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function l(e,t,n){var s={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},r=h.bind(s);return r.listener=n,s.wrapFn=r,r}function f(e,t,n){var s=e._events;if(void 0===s)return[];var r=s[t];return void 0===r?[]:"function"==typeof r?n?[r.listener||r]:[r]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(o=t[0]),o instanceof Error)throw o;var u=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw u.context=o,u}var a=i[e];if(void 0===a)return!1;if("function"==typeof a)s(a,this,t);else{var c=a.length,h=d(a,c);for(n=0;n=0;i--)if(n[i]===t||n[i].listener===t){o=n[i].listener,r=i;break}if(r<0)return this;0===r?n.shift():function(e,t){for(;t+1=0;s--)this.removeListener(e,t[s]);return this},i.prototype.listeners=function(e){return f(this,e,!0)},i.prototype.rawListeners=function(e){return f(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):_.call(e,t)},i.prototype.listenerCount=_,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}}},t={};function n(s){if(t[s])return t[s].exports;var r=t[s]={exports:{}};return e[s](r,r.exports,n),r.exports}return n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n(579)}()})); +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Centrifuge",[],t):"object"==typeof exports?exports.Centrifuge=t():e.Centrifuge=t()}(this,(function(){return function(){"use strict";var e={382:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.Centrifuge=void 0;var s=u(n(187)),r=u(n(471)),i=n(147),o=n(853);function u(e){return e&&e.__esModule?e:{default:e}}function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function c(e,t){for(var n=0;n0&&(u+="&"),u+=encodeURIComponent(c)+"="+encodeURIComponent(t[c]));for(var h in u.length>0&&(u="?"+u),a.open("POST",e+u,!0),"withCredentials"in a&&(a.withCredentials=!0),a.setRequestHeader("X-Requested-With","XMLHttpRequest"),a.setRequestHeader("Content-Type","application/json"),s)s.hasOwnProperty(h)&&a.setRequestHeader(h,s[h]);return a.onreadystatechange=function(){if(4===a.readyState)if(200===a.status){var e,t=!1;try{e=JSON.parse(a.responseText),t=!0}catch(e){i({error:"Invalid JSON. Data was: "+a.responseText,status:200,data:null})}t&&i({data:e,status:200})}else o._log("wrong status code in AJAX response",a.status),i({status:a.status,data:null})},setTimeout((function(){return a.send(JSON.stringify(r))}),20),a}},{key:"_log",value:function(){(0,o.log)("info",arguments)}},{key:"_debug",value:function(){!0===this._config.debug&&(0,o.log)("debug",arguments)}},{key:"_websocketSupported",value:function(){return null!==this._config.websocket||!("function"!=typeof WebSocket&&"object"!==("undefined"==typeof WebSocket?"undefined":a(WebSocket)))}},{key:"_setFormat",value:function(e){if(!this._formatOverride(e)){if("protobuf"===e)throw new Error("not implemented by JSON only Centrifuge client – use client with Protobuf");this._binary=!1,this._methodType=i.JsonMethodType,this._pushType=i.JsonPushType,this._encoder=new i.JsonEncoder,this._decoder=new i.JsonDecoder}}},{key:"_formatOverride",value:function(e){return!1}},{key:"_configure",value:function(e){if(!("Promise"in n.g))throw new Error("Promise polyfill required");if((0,o.extend)(this._config,e||{}),this._debug("centrifuge config",this._config),!this._url)throw new Error("url required");if((0,o.startsWith)(this._url,"ws")&&this._url.indexOf("format=protobuf")>-1?this._setFormat("protobuf"):this._setFormat("json"),(0,o.startsWith)(this._url,"http"))if(this._debug("client will try to connect to SockJS endpoint"),null!==this._config.sockjs)this._debug("SockJS explicitly provided in options"),this._sockjs=this._config.sockjs;else{if(void 0===n.g.SockJS)throw new Error("SockJS not found, use ws:// in url or include SockJS");this._debug("use globally defined SockJS"),this._sockjs=n.g.SockJS}else this._debug("client will connect to websocket endpoint")}},{key:"_setStatus",value:function(e){this._status!==e&&(this._debug("Status",this._status,"->",e),this._status=e)}},{key:"_isDisconnected",value:function(){return"disconnected"===this._status}},{key:"_isConnecting",value:function(){return"connecting"===this._status}},{key:"_isConnected",value:function(){return"connected"===this._status}},{key:"_nextMessageId",value:function(){return++this._messageId}},{key:"_resetRetry",value:function(){this._debug("reset retries count to 0"),this._retries=0}},{key:"_getRetryInterval",value:function(){var e=(0,o.backoff)(this._retries,this._config.minRetry,this._config.maxRetry);return this._retries+=1,e}},{key:"_abortInflightXHRs",value:function(){for(var e in this._xhrs){try{this._xhrs[e].abort()}catch(e){this._debug("error aborting xhr",e)}delete this._xhrs[e]}}},{key:"_clearConnectedState",value:function(e){for(var t in this._clientID=null,this._stopPing(),this._callbacks)if(this._callbacks.hasOwnProperty(t)){var n=this._callbacks[t];clearTimeout(n.timeout);var s=n.errback;if(!s)continue;s({error:this._createErrorObject("disconnected")})}for(var r in this._callbacks={},this._subs)if(this._subs.hasOwnProperty(r)){var i=this._subs[r];e?(i._isSuccess()&&(i._triggerUnsubscribe(),i._recover=!0),i._shouldResubscribe()&&i._setSubscribing()):i._setUnsubscribed()}for(var o in this._abortInflightXHRs(),null!==this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),this._subRefreshTimeouts)this._subRefreshTimeouts.hasOwnProperty(o)&&this._subRefreshTimeouts[o]&&this._clearSubRefreshTimeout(o);this._subRefreshTimeouts={},this._reconnect||(this._subs={})}},{key:"_isTransportOpen",value:function(){return this._isSockjs?this._transport&&this._transport.transport&&this._transport.transport.readyState===this._transport.transport.OPEN:this._transport&&this._transport.readyState===this._transport.OPEN}},{key:"_transportSend",value:function(e){if(!e.length)return!0;if(!this._isTransportOpen()){for(var t in e){var n=t.id;if(n in this._callbacks){var s=this._callbacks[n];clearTimeout(this._callbacks[n].timeout),delete this._callbacks[n],(0,s.errback)({error:this._createErrorObject(d,0)})}}return!1}return this._transport.send(this._encoder.encodeCommands(e)),!0}},{key:"_setupTransport",value:function(){var e=this;if(this._isSockjs=!1,null!==this._sockjs){var t={transports:this._config.sockjsTransports};null!==this._config.sockjsServer&&(t.server=this._config.sockjsServer),this._isSockjs=!0,this._transport=new this._sockjs(this._url,null,t)}else{if(!this._websocketSupported())return void this._debug("No Websocket support and no SockJS configured, can not connect");null!==this._config.websocket?this._websocket=this._config.websocket:this._websocket=WebSocket,this._transport=new this._websocket(this._url),!0===this._binary&&(this._transport.binaryType="arraybuffer")}this._transport.onopen=function(){e._transportClosed=!1,e._isSockjs?(e._transportName="sockjs-"+e._transport.transport,e._transport.onheartbeat=function(){return e._restartPing()}):e._transportName="websocket";var t={};(e._token||e._connectData||e._config.name||e._config.version)&&(t.params={}),e._token&&(t.params.token=e._token),e._connectData&&(t.params.data=e._connectData),e._config.name&&(t.params.name=e._config.name),e._config.version&&(t.params.version=e._config.version);var n={},s=!1;for(var r in e._serverSubs)if(e._serverSubs.hasOwnProperty(r)&&e._serverSubs[r].recoverable){s=!0;var i={recover:!0};e._serverSubs[r].seq||e._serverSubs[r].gen?(e._serverSubs[r].seq&&(i.seq=e._serverSubs[r].seq),e._serverSubs[r].gen&&(i.gen=e._serverSubs[r].gen)):e._serverSubs[r].offset&&(i.offset=e._serverSubs[r].offset),e._serverSubs[r].epoch&&(i.epoch=e._serverSubs[r].epoch),n[r]=i}s&&(t.params||(t.params={}),t.params.subs=n),e._latencyStart=new Date,e._call(t).then((function(t){e._connectResponse(e._decoder.decodeCommandResult(e._methodType.CONNECT,t.result),s),t.next&&t.next()}),(function(t){109===t.error.code&&(e._refreshRequired=!0),e._disconnect("connect error",!0),t.next&&t.next()}))},this._transport.onerror=function(t){e._debug("transport level error",t)},this._transport.onclose=function(t){e._transportClosed=!0;var n=d,s=!0;if(t&&"reason"in t&&t.reason)try{var r=JSON.parse(t.reason);e._debug("reason is an advice object",r),n=r.reason,s=r.reconnect}catch(s){n=t.reason,e._debug("reason is a plain string",n)}if(null!==e._config.onTransportClose&&e._config.onTransportClose({event:t,reason:n,reconnect:s}),e._disconnect(n,s),!0===e._reconnect){e._reconnecting=!0;var i=e._getRetryInterval();e._debug("reconnect after "+i+" milliseconds"),setTimeout((function(){!0===e._reconnect&&(e._refreshRequired?e._refresh():e._connect())}),i)}},this._transport.onmessage=function(t){e._dataReceived(t.data)}}},{key:"rpc",value:function(e){return this._rpc("",e)}},{key:"namedRPC",value:function(e,t){return this._rpc(e,t)}},{key:"_rpc",value:function(e,t){var n={data:t};""!==e&&(n.method=e);var s={method:this._methodType.RPC,params:n};return this._methodCall(s,(function(e){return e}))}},{key:"send",value:function(e){var t={method:this._methodType.SEND,params:{data:e}};return this.isConnected()&&this._transportSend([t])?Promise.resolve({}):Promise.reject(this._createErrorObject(d,0))}},{key:"_getHistoryParams",value:function(e,t){var n={channel:e};return void 0!==t&&(t.since&&(n.use_since=!0,t.since.offset&&(n.offset=t.since.offset),t.since.epoch&&(n.epoch=t.since.epoch)),void 0!==t.limit&&(n.use_limit=!0,n.limit=t.limit)),n}},{key:"_methodCall",value:function(e,t){var n=this;return this.isConnected()?new Promise((function(s,r){n._call(e).then((function(r){s(t(n._decoder.decodeCommandResult(e.method,r.result))),r.next&&r.next()}),(function(e){r(e.error),e.next&&e.next()}))})):Promise.reject(this._createErrorObject(d,0))}},{key:"publish",value:function(e,t){var n={method:this._methodType.PUBLISH,params:{channel:e,data:t}};return this._methodCall(n,(function(){return{}}))}},{key:"history",value:function(e,t){var n=this._getHistoryParams(e,t),s={method:this._methodType.HISTORY,params:n};return this._methodCall(s,(function(e){return{publications:e.publications,epoch:e.epoch||"",offset:e.offset||0}}))}},{key:"presence",value:function(e){var t={method:this._methodType.PRESENCE,params:{channel:e}};return this._methodCall(t,(function(e){return{presence:e.presence}}))}},{key:"presenceStats",value:function(e){var t={method:this._methodType.PRESENCE_STATS,params:{channel:e}};return this._methodCall(t,(function(e){return{num_users:e.num_users,num_clients:e.num_clients}}))}},{key:"_dataReceived",value:function(e){var t=this,n=this._decoder.decodeReplies(e);this._dispatchPromise=this._dispatchPromise.then((function(){var e;t._dispatchPromise=new Promise((function(t){e=t})),t._dispatchSynchronized(n,e)})),this._restartPing()}},{key:"_dispatchSynchronized",value:function(e,t){var n=this,s=Promise.resolve(),r=function(t){e.hasOwnProperty(t)&&(s=s.then((function(){return n._dispatchReply(e[t])})))};for(var i in e)r(i);s=s.then((function(){t()}))}},{key:"_dispatchReply",value:function(e){var t,n=new Promise((function(e){t=e}));if(null==e)return this._debug("dispatch: got undefined or null reply"),t(),n;var s=e.id;return s&&s>0?this._handleReply(e,t):this._handlePush(e.result,t),n}},{key:"_call",value:function(e){var t=this;return new Promise((function(n,s){var r=t._addMessage(e);t._registerCall(r,n,s)}))}},{key:"_connect",value:function(){this.isConnected()?this._debug("connect called when already connected"):"connecting"!==this._status&&(this._debug("start connecting"),this._setStatus("connecting"),this._clientID=null,this._reconnect=!0,this._setupTransport())}},{key:"_disconnect",value:function(e,t){var n=t||!1;if(!1===n&&(this._reconnect=!1),this._isDisconnected())n||this._clearConnectedState(n);else{if(this._clearConnectedState(n),this._debug("disconnected:",e,t),this._setStatus("disconnected"),this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),!1===this._reconnecting){for(var s in this._serverSubs)this._serverSubs.hasOwnProperty(s)&&this.emit("unsubscribe",{channel:s});this.emit("disconnect",{reason:e,reconnect:n})}!1===n&&(this._subs={},this._serverSubs={}),this._transportClosed||this._transport.close()}}},{key:"_refreshFailed",value:function(){this._numRefreshFailed=0,this._isDisconnected()||this._disconnect("refresh failed",!1),null!==this._config.onRefreshFailed&&this._config.onRefreshFailed()}},{key:"_refresh",value:function(){var e=this;if(this._debug("refresh token"),0===this._config.refreshAttempts)return this._debug("refresh attempts set to 0, do not send refresh request at all"),void this._refreshFailed();null!==this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null);var t=this._clientID,n=this._newXHRID(),s=function(s){if(n in e._xhrs&&delete e._xhrs[n],e._clientID===t)if(s.error||200!==s.status){if(s.error?e._debug("error refreshing connection token",s.error):e._debug("error refreshing connection token: wrong status code",s.status),e._numRefreshFailed++,null!==e._refreshTimeout&&(clearTimeout(e._refreshTimeout),e._refreshTimeout=null),null!==e._config.refreshAttempts&&e._numRefreshFailed>=e._config.refreshAttempts)return void e._refreshFailed();var r=Math.round(1e3*Math.random()*Math.max(e._numRefreshFailed,20)),i=e._config.refreshInterval+r;e._refreshTimeout=setTimeout((function(){return e._refresh()}),i)}else if(e._numRefreshFailed=0,e._token=s.data.token,e._token)if(e._isDisconnected()&&e._reconnect)e._debug("token refreshed, connect from scratch"),e._connect();else{e._debug("send refreshed token");var o={method:e._methodType.REFRESH,params:{token:e._token}};e._call(o).then((function(t){e._refreshResponse(e._decoder.decodeCommandResult(e._methodType.REFRESH,t.result)),t.next&&t.next()}),(function(t){e._refreshError(t.error),t.next&&t.next()}))}else e._refreshFailed()};if(null!==this._config.onRefresh)this._config.onRefresh({},s);else{var r=this._ajax(this._config.refreshEndpoint,this._config.refreshParams,this._config.refreshHeaders,this._config.refreshData,s);this._xhrs[n]=r}}},{key:"_refreshError",value:function(e){var t=this;this._debug("refresh error",e),this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null);var n=this._config.refreshInterval+Math.round(1e3*Math.random());this._refreshTimeout=setTimeout((function(){return t._refresh()}),n)}},{key:"_refreshResponse",value:function(e){var t=this;this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),e.expires&&(this._clientID=e.client,this._refreshTimeout=setTimeout((function(){return t._refresh()}),this._getTTLMilliseconds(e.ttl)))}},{key:"_newXHRID",value:function(){return this._xhrID++,this._xhrID}},{key:"_subRefresh",value:function(e){var t=this;if(this._debug("refresh subscription token for channel",e),void 0!==this._subRefreshTimeouts[e]){this._clearSubRefreshTimeout(e);var n=this._clientID,s=this._newXHRID(),r=function(r){if(s in t._xhrs&&delete t._xhrs[s],!r.error&&200===r.status&&t._clientID===n){var i={};if(r.data.channels)for(var o in r.data.channels){var u=r.data.channels[o];u.channel&&(i[u.channel]=u.token)}var a=i[e];if(a){var c={method:t._methodType.SUB_REFRESH,params:{channel:e,token:a}};null!==t._getSub(e)&&t._call(c).then((function(n){t._subRefreshResponse(e,t._decoder.decodeCommandResult(t._methodType.SUB_REFRESH,n.result)),n.next&&n.next()}),(function(n){t._subRefreshError(e,n.error),n.next&&n.next()}))}}},i={client:this._clientID,channels:[e]};if(null!==this._config.onPrivateSubscribe)this._config.onPrivateSubscribe({data:i},r);else{var o=this._ajax(this._config.subscribeEndpoint,this._config.subscribeParams,this._config.subscribeHeaders,i,r);this._xhrs[s]=o}}}},{key:"_clearSubRefreshTimeout",value:function(e){void 0!==this._subRefreshTimeouts[e]&&(clearTimeout(this._subRefreshTimeouts[e]),delete this._subRefreshTimeouts[e])}},{key:"_subRefreshError",value:function(e,t){var n=this;if(this._debug("subscription refresh error",e,t),this._clearSubRefreshTimeout(e),null!==this._getSub(e)){var s=Math.round(1e3*Math.random()),r=setTimeout((function(){return n._subRefresh(e)}),this._config.subRefreshInterval+s);this._subRefreshTimeouts[e]=r}}},{key:"_subRefreshResponse",value:function(e,t){var n=this;if(this._debug("subscription refresh success",e),this._clearSubRefreshTimeout(e),null!==this._getSub(e)&&!0===t.expires){var s=setTimeout((function(){return n._subRefresh(e)}),this._getTTLMilliseconds(t.ttl));this._subRefreshTimeouts[e]=s}}},{key:"_subscribe",value:function(e,t){var n=this;this._debug("subscribing on",e.channel);var s=e.channel;if(s in this._subs||(this._subs[s]=e),this.isConnected()){e._setSubscribing(t);var r={method:this._methodType.SUBSCRIBE,params:{channel:s}};if((0,o.startsWith)(s,this._config.privateChannelPrefix))this._isSubscribeBatching?this._privateChannels[s]=!0:(this.startSubscribeBatching(),this._subscribe(e),this.stopSubscribeBatching());else{var i=e._needRecover();if(!0===i){r.params.recover=!0;var u=this._getLastSeq(s),a=this._getLastGen(s);if(u||a)u&&(r.params.seq=u),a&&(r.params.gen=a);else{var c=this._getLastOffset(s);c&&(r.params.offset=c)}var h=this._getLastEpoch(s);h&&(r.params.epoch=h)}this._call(r).then((function(e){n._subscribeResponse(s,i,n._decoder.decodeCommandResult(n._methodType.SUBSCRIBE,e.result)),e.next&&e.next()}),(function(e){n._subscribeError(s,e.error),e.next&&e.next()}))}}else e._setNew()}},{key:"_unsubscribe",value:function(e){delete this._subs[e.channel],delete this._lastOffset[e.channel],delete this._lastSeq[e.channel],delete this._lastGen[e.channel],this.isConnected()&&this._addMessage({method:this._methodType.UNSUBSCRIBE,params:{channel:e.channel}})}},{key:"_getTTLMilliseconds",value:function(e){return Math.min(1e3*e,2147483647)}},{key:"getSub",value:function(e){return this._getSub(e)}},{key:"_getSub",value:function(e){return this._subs[e]||null}},{key:"_isServerSub",value:function(e){return void 0!==this._serverSubs[e]}},{key:"_connectResponse",value:function(e,t){var n=this,s=this._reconnecting;if(this._reconnecting=!1,this._resetRetry(),this._refreshRequired=!1,!this.isConnected()){for(var r in null!==this._latencyStart&&(this._latency=(new Date).getTime()-this._latencyStart.getTime(),this._latencyStart=null),this._clientID=e.client,this._setStatus("connected"),this._refreshTimeout&&clearTimeout(this._refreshTimeout),e.expires&&(this._refreshTimeout=setTimeout((function(){return n._refresh()}),this._getTTLMilliseconds(e.ttl))),this.startBatching(),this.startSubscribeBatching(),this._subs)if(this._subs.hasOwnProperty(r)){var i=this._subs[r];i._shouldResubscribe()&&this._subscribe(i,s)}this.stopSubscribeBatching(),this.stopBatching(),this._startPing();var o={client:e.client,transport:this._transportName,latency:this._latency};e.data&&(o.data=e.data),this.emit("connect",o),e.subs&&this._processServerSubs(e.subs)}}},{key:"_processServerSubs",value:function(e){for(var t in e)if(e.hasOwnProperty(t)){var n=e[t],s={channel:t,isResubscribe:void 0!==this._serverSubs[t]};s=this._expandSubscribeContext(s,n),this.emit("subscribe",s)}for(var r in e)if(e.hasOwnProperty(r)){var i=e[r];if(i.recovered){var o=i.publications;if(o&&o.length>0)for(var u in o.length>1&&(!o[0].offset||o[0].offset>o[1].offset)&&(o=o.reverse()),o)o.hasOwnProperty(u)&&this._handlePublication(r,o[u])}this._serverSubs[r]={seq:i.seq,gen:i.gen,offset:i.offset,epoch:i.epoch,recoverable:i.recoverable}}}},{key:"_stopPing",value:function(){null!==this._pongTimeout&&(clearTimeout(this._pongTimeout),this._pongTimeout=null),null!==this._pingTimeout&&(clearTimeout(this._pingTimeout),this._pingTimeout=null)}},{key:"_startPing",value:function(){var e=this;!0!==this._config.ping||this._config.pingInterval<=0||this.isConnected()&&(this._pingTimeout=setTimeout((function(){e.isConnected()?(e.ping(),e._pongTimeout=setTimeout((function(){e._disconnect("no ping",!0)}),e._config.pongWaitTimeout)):e._stopPing()}),this._config.pingInterval))}},{key:"_restartPing",value:function(){this._stopPing(),this._startPing()}},{key:"_subscribeError",value:function(e,t){var n=this._getSub(e);n&&n._isSubscribing()&&(0!==t.code||t.message!==_?n._setSubscribeError(t):this._disconnect("timeout",!0))}},{key:"_expandSubscribeContext",value:function(e,t){var n=!1;"recovered"in t&&(n=t.recovered),e.recovered=n;var s=!1;"positioned"in t&&(s=t.positioned);var r="";"epoch"in t&&(r=t.epoch);var i=0;return"offset"in t&&(i=t.offset),s&&(e.streamPosition={offset:i,epoch:r}),t.data&&(e.data=t.data),e}},{key:"_subscribeResponse",value:function(e,t,n){var s=this,r=this._getSub(e);if(r&&r._isSubscribing()){r._setSubscribeSuccess(n);var i=n.publications;if(i&&i.length>0)for(var o in i.length>=2&&!i[0].offset&&!i[1].offset&&(i=i.reverse()),i)i.hasOwnProperty(o)&&this._handlePublication(e,i[o]);if(!n.recoverable||t&&n.recovered||(this._lastSeq[e]=n.seq||0,this._lastGen[e]=n.gen||0,this._lastOffset[e]=n.offset||0),this._lastEpoch[e]=n.epoch||"",n.recoverable&&(r._recoverable=!0),!0===n.expires){var u=setTimeout((function(){return s._subRefresh(e)}),this._getTTLMilliseconds(n.ttl));this._subRefreshTimeouts[e]=u}}}},{key:"_handleReply",value:function(e,t){var n=e.id,s=e.result;if(n in this._callbacks){var r=this._callbacks[n];if(clearTimeout(this._callbacks[n].timeout),delete this._callbacks[n],(0,o.errorExists)(e)){var i=r.errback;if(!i)return void t();i({error:e.error,next:t})}else{var u=r.callback;if(!u)return;u({result:s,next:t})}}else t()}},{key:"_handleJoin",value:function(e,t){var n={info:t.info},s=this._getSub(e);s?s.emit("join",n):this._isServerSub(e)&&(n.channel=e,this.emit("join",n))}},{key:"_handleLeave",value:function(e,t){var n={info:t.info},s=this._getSub(e);s?s.emit("leave",n):this._isServerSub(e)&&(n.channel=e,this.emit("leave",n))}},{key:"_handleUnsub",value:function(e,t){var n={},s=this._getSub(e);s?(s.unsubscribe(),!0===t.resubscribe&&s.subscribe()):this._isServerSub(e)&&(delete this._serverSubs[e],n.channel=e,this.emit("unsubscribe",n))}},{key:"_handleSub",value:function(e,t){this._serverSubs[e]={seq:t.seq,gen:t.gen,offset:t.offset,epoch:t.epoch,recoverable:t.recoverable};var n={channel:e,isResubscribe:!1};n=this._expandSubscribeContext(n,t),this.emit("subscribe",n)}},{key:"_handlePublication",value:function(e,t){var n=this._getSub(e),s={data:t.data,seq:t.seq,gen:t.gen,offset:t.offset};t.info&&(s.info=t.info),n?(void 0!==t.seq&&(this._lastSeq[e]=t.seq),void 0!==t.gen&&(this._lastGen[e]=t.gen),void 0!==t.offset&&(this._lastOffset[e]=t.offset),n.emit("publish",s)):this._isServerSub(e)&&(void 0!==t.seq&&(this._serverSubs[e].seq=t.seq),void 0!==t.gen&&(this._serverSubs[e].gen=t.gen),void 0!==t.offset&&(this._serverSubs[e].offset=t.offset),s.channel=e,this.emit("publish",s))}},{key:"_handleMessage",value:function(e){this.emit("message",e.data)}},{key:"_handlePush",value:function(e,t){var n=this._decoder.decodePush(e),s=0;"type"in n&&(s=n.type);var r=n.channel;if(s===this._pushType.PUBLICATION){var i=this._decoder.decodePushData(this._pushType.PUBLICATION,n.data);this._handlePublication(r,i)}else if(s===this._pushType.MESSAGE){var o=this._decoder.decodePushData(this._pushType.MESSAGE,n.data);this._handleMessage(o)}else if(s===this._pushType.JOIN){var u=this._decoder.decodePushData(this._pushType.JOIN,n.data);this._handleJoin(r,u)}else if(s===this._pushType.LEAVE){var a=this._decoder.decodePushData(this._pushType.LEAVE,n.data);this._handleLeave(r,a)}else if(s===this._pushType.UNSUB){var c=this._decoder.decodePushData(this._pushType.UNSUB,n.data);this._handleUnsub(r,c)}else if(s===this._pushType.SUB){var h=this._decoder.decodePushData(this._pushType.SUB,n.data);this._handleSub(r,h)}t()}},{key:"_flush",value:function(){var e=this._messages.slice(0);this._messages=[],this._transportSend(e)}},{key:"_ping",value:function(){var e=this,t={method:this._methodType.PING};this._call(t).then((function(t){e._pingResponse(e._decoder.decodeCommandResult(e._methodType.PING,t.result)),t.next&&t.next()}),(function(t){e._debug("ping error",t.error),t.next&&t.next()}))}},{key:"_pingResponse",value:function(e){this.isConnected()&&(this._stopPing(),this._startPing())}},{key:"_getLastSeq",value:function(e){return this._lastSeq[e]||0}},{key:"_getLastOffset",value:function(e){return this._lastOffset[e]||0}},{key:"_getLastGen",value:function(e){return this._lastGen[e]||0}},{key:"_getLastEpoch",value:function(e){return this._lastEpoch[e]||""}},{key:"_createErrorObject",value:function(e,t){return{message:e,code:t||0}}},{key:"_registerCall",value:function(e,t,n){var s=this;this._callbacks[e]={callback:t,errback:n,timeout:null},this._callbacks[e].timeout=setTimeout((function(){delete s._callbacks[e],(0,o.isFunction)(n)&&n({error:s._createErrorObject(_)})}),this._config.timeout)}},{key:"_addMessage",value:function(e){var t=this._nextMessageId();return e.id=t,!0===this._isBatching?this._messages.push(e):this._transportSend([e]),t}},{key:"isConnected",value:function(){return this._isConnected()}},{key:"connect",value:function(){this._connect()}},{key:"disconnect",value:function(){this._disconnect("client",!1)}},{key:"ping",value:function(){return this._ping()}},{key:"startBatching",value:function(){this._isBatching=!0}},{key:"stopBatching",value:function(){this._isBatching=!1,this._flush()}},{key:"startSubscribeBatching",value:function(){this._isSubscribeBatching=!0}},{key:"stopSubscribeBatching",value:function(){var e=this;this._isSubscribeBatching=!1;var t=this._privateChannels;this._privateChannels={};var n=[];for(var s in t)if(t.hasOwnProperty(s)){if(!this._getSub(s))continue;n.push(s)}if(0!==n.length){var r={client:this._clientID,channels:n},i=this._clientID,o=this._newXHRID(),u=function(t){if(o in e._xhrs&&delete e._xhrs[o],e._clientID===i)if(t.error||200!==t.status){for(var s in e._debug("authorization request failed"),n)if(n.hasOwnProperty(s)){var r=n[s];e._subscribeError(r,e._createErrorObject("authorization request failed"))}}else{var u={};if(t.data.channels)for(var a in t.data.channels){var c=t.data.channels[a];c.channel&&(u[c.channel]=c.token)}var h=!1;for(var l in e._isBatching||(e.startBatching(),h=!0),n)!n.hasOwnProperty(l)||function(){var t=n[l],s=u[t];if(!s)return e._subscribeError(t,e._createErrorObject("permission denied",103)),"continue";var r={method:e._methodType.SUBSCRIBE,params:{channel:t,token:s}},i=e._getSub(t);if(null===i)return"continue";var o=i._needRecover();if(!0===o){r.params.recover=!0;var a=e._getLastSeq(t),c=e._getLastGen(t);if(a||c)a&&(r.params.seq=a),c&&(r.params.gen=c);else{var h=e._getLastOffset(t);h&&(r.params.offset=h)}var f=e._getLastEpoch(t);f&&(r.params.epoch=f)}e._call(r).then((function(n){e._subscribeResponse(t,o,e._decoder.decodeCommandResult(e._methodType.SUBSCRIBE,n.result)),n.next&&n.next()}),(function(n){e._subscribeError(t,n.error),n.next&&n.next()}))}();h&&e.stopBatching()}};if(null!==this._config.onPrivateSubscribe)this._config.onPrivateSubscribe({data:r},u);else{var a=this._ajax(this._config.subscribeEndpoint,this._config.subscribeParams,this._config.subscribeHeaders,r,u);this._xhrs[o]=a}}else this._debug("no private channels found, no need to make request")}},{key:"subscribe",value:function(e,t){var n=this._getSub(e);if(null!==n)return n._setEvents(t),n._isUnsubscribed()&&n.subscribe(),n;var s=new r.default(this,e,t);return this._subs[e]=s,s.subscribe(),s}}])&&c(t.prototype,s),b}(s.default);t.Centrifuge=v},579:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=n(382).Centrifuge;t.default=s,e.exports=t.default},147:function(e,t){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var n=0;n0&&o.length>r&&!o.warned){o.warned=!0;var h=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");h.name="MaxListenersExceededWarning",h.emitter=e,h.type=t,h.count=o.length,c=h,console&&console.warn&&console.warn(c)}return e}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function l(e,t,n){var s={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},r=h.bind(s);return r.listener=n,s.wrapFn=r,r}function f(e,t,n){var s=e._events;if(void 0===s)return[];var r=s[t];return void 0===r?[]:"function"==typeof r?n?[r.listener||r]:[r]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(o=t[0]),o instanceof Error)throw o;var u=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw u.context=o,u}var a=i[e];if(void 0===a)return!1;if("function"==typeof a)s(a,this,t);else{var c=a.length,h=d(a,c);for(n=0;n=0;i--)if(n[i]===t||n[i].listener===t){o=n[i].listener,r=i;break}if(r<0)return this;0===r?n.shift():function(e,t){for(;t+1=0;s--)this.removeListener(e,t[s]);return this},i.prototype.listeners=function(e){return f(this,e,!0)},i.prototype.rawListeners=function(e){return f(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):_.call(e,t)},i.prototype.listenerCount=_,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}}},t={};function n(s){if(t[s])return t[s].exports;var r=t[s]={exports:{}};return e[s](r,r.exports,n),r.exports}return n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n(579)}()})); //# sourceMappingURL=centrifuge.min.js.map \ No newline at end of file diff --git a/dist/centrifuge.min.js.map b/dist/centrifuge.min.js.map index 53d27613..9768cabb 100644 --- a/dist/centrifuge.min.js.map +++ b/dist/centrifuge.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://Centrifuge/webpack/universalModuleDefinition","webpack://Centrifuge/./src/centrifuge.js","webpack://Centrifuge/./src/index.js","webpack://Centrifuge/./src/json.js","webpack://Centrifuge/./src/subscription.js","webpack://Centrifuge/./src/utils.js","webpack://Centrifuge/./node_modules/events/events.js","webpack://Centrifuge/webpack/bootstrap","webpack://Centrifuge/webpack/startup","webpack://Centrifuge/webpack/runtime/global"],"names":["root","factory","exports","module","define","amd","this","_errorTimeout","_errorConnectionClosed","Centrifuge","url","options","_url","_websocket","_sockjs","_isSockjs","_binary","_methodType","_pushType","_encoder","_decoder","_status","_reconnect","_reconnecting","_transport","_transportName","_transportClosed","_messageId","_clientID","_refreshRequired","_subs","_serverSubs","_lastSeq","_lastGen","_lastOffset","_lastEpoch","_messages","_isBatching","_isSubscribeBatching","_privateChannels","_numRefreshFailed","_refreshTimeout","_pingTimeout","_pongTimeout","_subRefreshTimeouts","_retries","_callbacks","_latency","_latencyStart","_connectData","_token","_xhrID","_xhrs","_dispatchPromise","Promise","resolve","_config","debug","name","version","websocket","sockjs","minRetry","maxRetry","timeout","ping","pingInterval","pongWaitTimeout","privateChannelPrefix","onTransportClose","sockjsServer","sockjsTransports","refreshEndpoint","refreshHeaders","refreshParams","refreshData","refreshAttempts","refreshInterval","onRefreshFailed","onRefresh","subscribeEndpoint","subscribeHeaders","subscribeParams","subRefreshInterval","onPrivateSubscribe","_configure","token","data","headers","params","callback","query","_debug","JSON","stringify","xhr","global","XMLHttpRequest","ActiveXObject","i","hasOwnProperty","length","encodeURIComponent","headerName","open","withCredentials","setRequestHeader","onreadystatechange","readyState","status","parsed","parse","responseText","e","error","_log","setTimeout","send","log","arguments","WebSocket","format","_formatOverride","Error","JsonMethodType","JsonPushType","JsonEncoder","JsonDecoder","configuration","extend","startsWith","indexOf","_setFormat","SockJS","newStatus","interval","backoff","xhrID","abort","reconnect","id","_stopPing","callbacks","clearTimeout","errback","_createErrorObject","channel","sub","_isSuccess","_triggerUnsubscribe","_recover","_shouldResubscribe","_setSubscribing","_setUnsubscribed","_abortInflightXHRs","_clearSubRefreshTimeout","transport","OPEN","commands","_isTransportOpen","command","encodeCommands","sockjsOptions","transports","server","_websocketSupported","binaryType","onopen","onheartbeat","_restartPing","msg","subs","hasSubs","recoverable","seq","gen","offset","epoch","Date","_call","then","resolveCtx","_connectResponse","decodeCommandResult","CONNECT","result","next","rejectCtx","code","_disconnect","onerror","onclose","closeEvent","reason","needReconnect","advice","event","_getRetryInterval","_refresh","_connect","onmessage","_dataReceived","_rpc","method","RPC","_methodCall","SEND","isConnected","_transportSend","reject","undefined","since","limit","resultCB","PUBLISH","_getHistoryParams","HISTORY","publications","PRESENCE","presence","PRESENCE_STATS","num_users","num_clients","replies","decodeReplies","finishDispatch","_dispatchSynchronized","p","_dispatchReply","reply","_handleReply","_handlePush","_addMessage","_registerCall","_setStatus","_setupTransport","shouldReconnect","_isDisconnected","_clearConnectedState","emit","close","_refreshFailed","clientID","_newXHRID","cb","resp","jitter","Math","round","random","max","REFRESH","_refreshResponse","_refreshError","_ajax","err","expires","client","_getTTLMilliseconds","ttl","channelsData","channels","channelData","SUB_REFRESH","_getSub","_subRefreshResponse","_subRefreshError","subRefreshTimeout","_subRefresh","isResubscribe","SUBSCRIBE","startSubscribeBatching","_subscribe","stopSubscribeBatching","recover","_needRecover","_getLastSeq","_getLastGen","_getLastOffset","_getLastEpoch","_subscribeResponse","_subscribeError","_setNew","UNSUBSCRIBE","min","isRecover","wasReconnecting","_resetRetry","getTime","startBatching","stopBatching","_startPing","ctx","latency","_processServerSubs","subCtx","_expandSubscribeContext","recovered","pubs","reverse","_handlePublication","_isSubscribing","message","_setSubscribeError","positioned","streamPosition","_setSubscribeSuccess","_recoverable","errorExists","join","info","_isServerSub","leave","unsub","unsubscribe","resubscribe","subscribe","pub","push","decodePush","type","PUBLICATION","decodePushData","MESSAGE","_handleMessage","JOIN","_handleJoin","LEAVE","_handleLeave","UNSUB","_handleUnsub","SUB","_handleSub","messages","slice","PING","_pingResponse","isFunction","_nextMessageId","_isConnected","_ping","_flush","authChannels","batch","events","currentSub","_setEvents","_isUnsubscribed","Subscription","EventEmitter","encodedCommands","encodedReplies","split","methodType","pushType","centrifuge","_centrifuge","_error","_isResubscribe","_ready","_subscriptionPromise","_noResubscribe","_initializePromise","_promises","_promiseId","on","errContext","_resolve","value","_reject","Object","prototype","toString","call","knownEvents","l","ev","subscribeResult","successContext","_getSubscribeSuccessContext","_getSubscribeErrorContext","noResubscribe","needTrigger","subscribeErrorContext","_unsubscribe","_isError","res","rej","_nextPromiseId","self","publish","presenceStats","history","prefix","lastIndexOf","level","args","console","logger","apply","step","pow","floor","a","b","key","ReflectOwnKeys","R","Reflect","ReflectApply","target","receiver","Function","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","concat","NumberIsNaN","Number","isNaN","init","once","emitter","eventListener","errorListener","removeListener","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","TypeError","_getMaxListeners","that","_addListener","prepend","m","existing","warning","create","newListener","unshift","warned","w","String","count","warn","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","bind","_listeners","unwrap","evlistener","arr","ret","Array","unwrapListeners","arrayClone","listenerCount","n","copy","defineProperty","enumerable","get","set","arg","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","context","handler","len","listeners","addListener","prependListener","prependOnceListener","list","position","originalListener","shift","index","pop","spliceOne","off","removeAllListeners","keys","rawListeners","eventNames","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__","g","globalThis","window"],"mappings":"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","file":"centrifuge.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Centrifuge\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Centrifuge\"] = factory();\n\telse\n\t\troot[\"Centrifuge\"] = factory();\n})(this, function() {\nreturn ","import EventEmitter from 'events';\nimport Subscription from './subscription';\n\nimport {\n JsonEncoder,\n JsonDecoder,\n JsonMethodType,\n JsonPushType\n} from './json';\n\nimport {\n isFunction,\n log,\n startsWith,\n errorExists,\n backoff,\n extend\n} from './utils';\n\nconst _errorTimeout = 'timeout';\nconst _errorConnectionClosed = 'connection closed';\n\nexport class Centrifuge extends EventEmitter {\n\n constructor(url, options) {\n super();\n this._url = url;\n this._websocket = null;\n this._sockjs = null;\n this._isSockjs = false;\n this._binary = false;\n this._methodType = null;\n this._pushType = null;\n this._encoder = null;\n this._decoder = null;\n this._status = 'disconnected';\n this._reconnect = true;\n this._reconnecting = false;\n this._transport = null;\n this._transportName = null;\n this._transportClosed = true;\n this._messageId = 0;\n this._clientID = null;\n this._refreshRequired = false;\n this._subs = {};\n this._serverSubs = {};\n this._lastSeq = {};\n this._lastGen = {};\n this._lastOffset = {};\n this._lastEpoch = {};\n this._messages = [];\n this._isBatching = false;\n this._isSubscribeBatching = false;\n this._privateChannels = {};\n this._numRefreshFailed = 0;\n this._refreshTimeout = null;\n this._pingTimeout = null;\n this._pongTimeout = null;\n this._subRefreshTimeouts = {};\n this._retries = 0;\n this._callbacks = {};\n this._latency = null;\n this._latencyStart = null;\n this._connectData = null;\n this._token = null;\n this._xhrID = 0;\n this._xhrs = {};\n this._dispatchPromise = Promise.resolve();\n this._config = {\n debug: false,\n name: '',\n version: '',\n websocket: null,\n sockjs: null,\n minRetry: 1000,\n maxRetry: 20000,\n timeout: 5000,\n ping: true,\n pingInterval: 25000,\n pongWaitTimeout: 5000,\n privateChannelPrefix: '$',\n onTransportClose: null,\n sockjsServer: null,\n sockjsTransports: [\n 'websocket',\n 'xdr-streaming',\n 'xhr-streaming',\n 'eventsource',\n 'iframe-eventsource',\n 'iframe-htmlfile',\n 'xdr-polling',\n 'xhr-polling',\n 'iframe-xhr-polling',\n 'jsonp-polling'\n ],\n refreshEndpoint: '/centrifuge/refresh',\n refreshHeaders: {},\n refreshParams: {},\n refreshData: {},\n refreshAttempts: null,\n refreshInterval: 1000,\n onRefreshFailed: null,\n onRefresh: null,\n subscribeEndpoint: '/centrifuge/subscribe',\n subscribeHeaders: {},\n subscribeParams: {},\n subRefreshInterval: 1000,\n onPrivateSubscribe: null\n };\n this._configure(options);\n }\n\n setToken(token) {\n this._token = token;\n }\n\n setConnectData(data) {\n this._connectData = data;\n }\n\n setRefreshHeaders(headers) {\n this._config.refreshHeaders = headers;\n }\n setRefreshParams(params) {\n this._config.refreshParams = params;\n }\n setRefreshData(data) {\n this._config.refreshData = data;\n }\n\n setSubscribeHeaders(headers) {\n this._config.subscribeHeaders = headers;\n }\n setSubscribeParams(params) {\n this._config.subscribeParams = params;\n }\n\n _ajax(url, params, headers, data, callback) {\n let query = '';\n this._debug('sending AJAX request to', url, 'with data', JSON.stringify(data));\n\n const xhr = (global.XMLHttpRequest ? new global.XMLHttpRequest() : new global.ActiveXObject('Microsoft.XMLHTTP'));\n\n for (const i in params) {\n if (params.hasOwnProperty(i)) {\n if (query.length > 0) {\n query += '&';\n }\n query += encodeURIComponent(i) + '=' + encodeURIComponent(params[i]);\n }\n }\n if (query.length > 0) {\n query = '?' + query;\n }\n xhr.open('POST', url + query, true);\n if ('withCredentials' in xhr) {\n xhr.withCredentials = true;\n }\n\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.setRequestHeader('Content-Type', 'application/json');\n for (const headerName in headers) {\n if (headers.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, headers[headerName]);\n }\n }\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data, parsed = false;\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback({\n error: 'Invalid JSON. Data was: ' + xhr.responseText,\n status: 200,\n data: null\n });\n }\n if (parsed) { // prevents double execution.\n callback({\n data: data,\n status: 200\n });\n }\n } else {\n this._log('wrong status code in AJAX response', xhr.status);\n callback({\n status: xhr.status,\n data: null\n });\n }\n }\n };\n setTimeout(() => xhr.send(JSON.stringify(data)), 20);\n return xhr;\n };\n\n _log() {\n log('info', arguments);\n };\n\n _debug() {\n if (this._config.debug === true) {\n log('debug', arguments);\n }\n };\n\n _websocketSupported() {\n if (this._config.websocket !== null) {\n return true;\n }\n return !(typeof WebSocket !== 'function' && typeof WebSocket !== 'object');\n };\n\n _setFormat(format) {\n if (this._formatOverride(format)) {\n return;\n }\n if (format === 'protobuf') {\n throw new Error('not implemented by JSON only Centrifuge client – use client with Protobuf');\n }\n this._binary = false;\n this._methodType = JsonMethodType;\n this._pushType = JsonPushType;\n this._encoder = new JsonEncoder();\n this._decoder = new JsonDecoder();\n }\n\n _formatOverride(format) {\n return false;\n }\n\n _configure(configuration) {\n if (!('Promise' in global)) {\n throw new Error('Promise polyfill required');\n }\n\n extend(this._config, configuration || {});\n this._debug('centrifuge config', this._config);\n\n if (!this._url) {\n throw new Error('url required');\n }\n\n if (startsWith(this._url, 'ws') && this._url.indexOf('format=protobuf') > -1) {\n this._setFormat('protobuf');\n } else {\n this._setFormat('json');\n }\n\n if (startsWith(this._url, 'http')) {\n this._debug('client will try to connect to SockJS endpoint');\n if (this._config.sockjs !== null) {\n this._debug('SockJS explicitly provided in options');\n this._sockjs = this._config.sockjs;\n } else {\n if (typeof global.SockJS === 'undefined') {\n throw new Error('SockJS not found, use ws:// in url or include SockJS');\n }\n this._debug('use globally defined SockJS');\n this._sockjs = global.SockJS;\n }\n } else {\n this._debug('client will connect to websocket endpoint');\n }\n };\n\n _setStatus(newStatus) {\n if (this._status !== newStatus) {\n this._debug('Status', this._status, '->', newStatus);\n this._status = newStatus;\n }\n };\n\n _isDisconnected() {\n return this._status === 'disconnected';\n };\n\n _isConnecting() {\n return this._status === 'connecting';\n };\n\n _isConnected() {\n return this._status === 'connected';\n };\n\n _nextMessageId() {\n return ++this._messageId;\n };\n\n _resetRetry() {\n this._debug('reset retries count to 0');\n this._retries = 0;\n };\n\n _getRetryInterval() {\n const interval = backoff(this._retries, this._config.minRetry, this._config.maxRetry);\n\n this._retries += 1;\n return interval;\n };\n\n _abortInflightXHRs() {\n for (const xhrID in this._xhrs) {\n try {\n this._xhrs[xhrID].abort();\n } catch (e) {\n this._debug('error aborting xhr', e);\n }\n delete this._xhrs[xhrID];\n }\n };\n\n _clearConnectedState(reconnect) {\n this._clientID = null;\n this._stopPing();\n\n // fire errbacks of registered outgoing calls.\n for (const id in this._callbacks) {\n if (this._callbacks.hasOwnProperty(id)) {\n const callbacks = this._callbacks[id];\n clearTimeout(callbacks.timeout);\n const errback = callbacks.errback;\n if (!errback) {\n continue;\n }\n errback({error: this._createErrorObject('disconnected')});\n }\n }\n this._callbacks = {};\n\n // fire unsubscribe events\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n\n if (reconnect) {\n if (sub._isSuccess()) {\n sub._triggerUnsubscribe();\n sub._recover = true;\n }\n if (sub._shouldResubscribe()) {\n sub._setSubscribing();\n }\n } else {\n sub._setUnsubscribed();\n }\n }\n }\n\n this._abortInflightXHRs();\n\n // clear refresh timer\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n // clear sub refresh timers\n for (const channel in this._subRefreshTimeouts) {\n if (this._subRefreshTimeouts.hasOwnProperty(channel) && this._subRefreshTimeouts[channel]) {\n this._clearSubRefreshTimeout(channel);\n }\n }\n this._subRefreshTimeouts = {};\n\n if (!this._reconnect) {\n // completely clear subscriptions\n this._subs = {};\n }\n };\n\n _isTransportOpen() {\n if (this._isSockjs) {\n return this._transport &&\n this._transport.transport &&\n this._transport.transport.readyState === this._transport.transport.OPEN;\n }\n return this._transport && this._transport.readyState === this._transport.OPEN;\n };\n\n _transportSend(commands) {\n if (!commands.length) {\n return true;\n }\n\n if (!this._isTransportOpen()) {\n // resolve pending commands with error if transport is not open\n for (let command in commands) {\n let id = command.id;\n if (!(id in this._callbacks)) {\n continue;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n const errback = callbacks.errback;\n errback({error: this._createErrorObject(_errorConnectionClosed, 0)});\n }\n return false;\n }\n this._transport.send(this._encoder.encodeCommands(commands));\n return true;\n }\n\n _setupTransport() {\n this._isSockjs = false;\n\n // detect transport to use - SockJS or Websocket\n if (this._sockjs !== null) {\n const sockjsOptions = {\n transports: this._config.sockjsTransports\n };\n\n if (this._config.sockjsServer !== null) {\n sockjsOptions.server = this._config.sockjsServer;\n }\n this._isSockjs = true;\n this._transport = new this._sockjs(this._url, null, sockjsOptions);\n } else {\n if (!this._websocketSupported()) {\n this._debug('No Websocket support and no SockJS configured, can not connect');\n return;\n }\n if (this._config.websocket !== null) {\n this._websocket = this._config.websocket;\n } else {\n this._websocket = WebSocket;\n }\n this._transport = new this._websocket(this._url);\n if (this._binary === true) {\n this._transport.binaryType = 'arraybuffer';\n }\n }\n\n this._transport.onopen = () => {\n this._transportClosed = false;\n\n if (this._isSockjs) {\n this._transportName = 'sockjs-' + this._transport.transport;\n this._transport.onheartbeat = () => this._restartPing();\n } else {\n this._transportName = 'websocket';\n }\n\n // Can omit method here due to zero value.\n const msg = {\n // method: this._methodType.CONNECT\n };\n\n if (this._token || this._connectData || this._config.name || this._config.version) {\n msg.params = {};\n }\n if (this._token) {\n msg.params.token = this._token;\n }\n if (this._connectData) {\n msg.params.data = this._connectData;\n }\n if (this._config.name) {\n msg.params.name = this._config.name;\n }\n if (this._config.version) {\n msg.params.version = this._config.version;\n }\n\n let subs = {};\n let hasSubs = false;\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel) && this._serverSubs[channel].recoverable) {\n hasSubs = true;\n let sub = {\n 'recover': true\n };\n if (this._serverSubs[channel].seq || this._serverSubs[channel].gen) {\n if (this._serverSubs[channel].seq) {\n sub['seq'] = this._serverSubs[channel].seq;\n }\n if (this._serverSubs[channel].gen) {\n sub['gen'] = this._serverSubs[channel].gen;\n }\n } else {\n if (this._serverSubs[channel].offset) {\n sub['offset'] = this._serverSubs[channel].offset;\n }\n }\n if (this._serverSubs[channel].epoch) {\n sub['epoch'] = this._serverSubs[channel].epoch;\n }\n subs[channel] = sub;\n }\n }\n if (hasSubs) {\n if (!msg.params) {msg.params = {};}\n msg.params.subs = subs;\n }\n\n this._latencyStart = new Date();\n this._call(msg).then(resolveCtx => {\n this._connectResponse(this._decoder.decodeCommandResult(this._methodType.CONNECT, resolveCtx.result), hasSubs);\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n const err = rejectCtx.error;\n if (err.code === 109) { // token expired.\n this._refreshRequired = true;\n }\n this._disconnect('connect error', true);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n this._transport.onerror = error => {\n this._debug('transport level error', error);\n };\n\n this._transport.onclose = closeEvent => {\n this._transportClosed = true;\n let reason = _errorConnectionClosed;\n let needReconnect = true;\n\n if (closeEvent && 'reason' in closeEvent && closeEvent.reason) {\n try {\n const advice = JSON.parse(closeEvent.reason);\n this._debug('reason is an advice object', advice);\n reason = advice.reason;\n needReconnect = advice.reconnect;\n } catch (e) {\n reason = closeEvent.reason;\n this._debug('reason is a plain string', reason);\n }\n }\n\n // onTransportClose callback should be executed every time transport was closed.\n // This can be helpful to catch failed connection events (because our disconnect\n // event only called once and every future attempts to connect do not fire disconnect\n // event again).\n if (this._config.onTransportClose !== null) {\n this._config.onTransportClose({\n event: closeEvent,\n reason: reason,\n reconnect: needReconnect\n });\n }\n\n this._disconnect(reason, needReconnect);\n\n if (this._reconnect === true) {\n this._reconnecting = true;\n const interval = this._getRetryInterval();\n\n this._debug('reconnect after ' + interval + ' milliseconds');\n setTimeout(() => {\n if (this._reconnect === true) {\n if (this._refreshRequired) {\n this._refresh();\n } else {\n this._connect();\n }\n }\n }, interval);\n }\n };\n\n this._transport.onmessage = event => {\n this._dataReceived(event.data);\n };\n };\n\n rpc(data) {\n return this._rpc('', data);\n }\n\n namedRPC(method, data) {\n return this._rpc(method, data);\n }\n\n _rpc(method, data) {\n let params = {\n data: data\n };\n if (method !== '') {\n params.method = method;\n };\n const msg = {\n method: this._methodType.RPC,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return result;\n });\n }\n\n send(data) {\n const msg = {\n method: this._methodType.SEND,\n params: {\n data: data\n }\n };\n\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n\n const sent = this._transportSend([msg]); // can send async message to server without id set\n if (!sent) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n };\n return Promise.resolve({});\n }\n\n _getHistoryParams(channel, options) {\n let params = {\n channel: channel\n };\n if (options !== undefined) {\n if (options.since) {\n params['use_since'] = true;\n if (options.since.offset) {\n params['offset'] = options.since.offset;\n }\n if (options.since.epoch) {\n params['epoch'] = options.since.epoch;\n }\n };\n if (options.limit !== undefined) {\n params['use_limit'] = true;\n params['limit'] = options.limit;\n }\n };\n return params;\n }\n\n _methodCall(msg, resultCB) {\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n return new Promise((resolve, reject) => {\n this._call(msg).then(resolveCtx => {\n resolve(resultCB(this._decoder.decodeCommandResult(msg.method, resolveCtx.result)));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n reject(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n });\n }\n\n publish(channel, data) {\n const msg = {\n method: this._methodType.PUBLISH,\n params: {\n channel: channel,\n data: data\n }\n };\n return this._methodCall(msg, function () {\n return {};\n });\n }\n\n history(channel, options) {\n const params = this._getHistoryParams(channel, options);\n const msg = {\n method: this._methodType.HISTORY,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return {\n 'publications': result.publications,\n 'epoch': result.epoch || '',\n 'offset': result.offset || 0\n };\n });\n }\n\n presence(channel) {\n const msg = {\n method: this._methodType.PRESENCE,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'presence': result.presence\n };\n });\n }\n\n presenceStats(channel) {\n const msg = {\n method: this._methodType.PRESENCE_STATS,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'num_users': result.num_users,\n 'num_clients': result.num_clients\n };\n });\n }\n\n _dataReceived(data) {\n const replies = this._decoder.decodeReplies(data);\n // we have to guarantee order of events in replies processing - i.e. start processing\n // next reply only when we finished processing of current one. Without syncing things in\n // this way we could get wrong publication events order as reply promises resolve\n // on next loop tick so for loop continues before we finished emitting all reply events.\n this._dispatchPromise = this._dispatchPromise.then(() => {\n let finishDispatch;\n this._dispatchPromise = new Promise(resolve =>{\n finishDispatch = resolve;\n });\n this._dispatchSynchronized(replies, finishDispatch);\n });\n this._restartPing();\n }\n\n _dispatchSynchronized(replies, finishDispatch) {\n let p = Promise.resolve();\n for (const i in replies) {\n if (replies.hasOwnProperty(i)) {\n p = p.then(() => {\n return this._dispatchReply(replies[i]);\n });\n }\n }\n p = p.then(() => {\n finishDispatch();\n });\n }\n\n _dispatchReply(reply) {\n var next;\n const p = new Promise(resolve =>{\n next = resolve;\n });\n\n if (reply === undefined || reply === null) {\n this._debug('dispatch: got undefined or null reply');\n next();\n return p;\n }\n\n const id = reply.id;\n\n if (id && id > 0) {\n this._handleReply(reply, next);\n } else {\n this._handlePush(reply.result, next);\n }\n\n return p;\n };\n\n _call(msg) {\n return new Promise((resolve, reject) => {\n const id = this._addMessage(msg);\n this._registerCall(id, resolve, reject);\n });\n }\n\n _connect() {\n if (this.isConnected()) {\n this._debug('connect called when already connected');\n return;\n }\n if (this._status === 'connecting') {\n return;\n }\n\n this._debug('start connecting');\n this._setStatus('connecting');\n this._clientID = null;\n this._reconnect = true;\n this._setupTransport();\n };\n\n _disconnect(reason, shouldReconnect) {\n\n const reconnect = shouldReconnect || false;\n if (reconnect === false) {\n this._reconnect = false;\n }\n\n if (this._isDisconnected()) {\n if (!reconnect) {\n this._clearConnectedState(reconnect);\n }\n return;\n }\n\n this._clearConnectedState(reconnect);\n\n this._debug('disconnected:', reason, shouldReconnect);\n this._setStatus('disconnected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._reconnecting === false) {\n // fire unsubscribe events for server side subs.\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel)) {\n this.emit('unsubscribe', {channel: channel});\n }\n }\n this.emit('disconnect', {\n reason: reason,\n reconnect: reconnect\n });\n }\n\n if (reconnect === false) {\n this._subs = {};\n this._serverSubs = {};\n }\n\n if (!this._transportClosed) {\n this._transport.close();\n }\n };\n\n _refreshFailed() {\n this._numRefreshFailed = 0;\n if (!this._isDisconnected()) {\n this._disconnect('refresh failed', false);\n }\n if (this._config.onRefreshFailed !== null) {\n this._config.onRefreshFailed();\n }\n };\n\n _refresh() {\n // ask application for new connection token.\n this._debug('refresh token');\n\n if (this._config.refreshAttempts === 0) {\n this._debug('refresh attempts set to 0, do not send refresh request at all');\n this._refreshFailed();\n return;\n }\n\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n // We don't perform any connection status related actions here as we are\n // relying on server that must close connection eventually.\n if (resp.error) {\n this._debug('error refreshing connection token', resp.error);\n } else {\n this._debug('error refreshing connection token: wrong status code', resp.status);\n }\n this._numRefreshFailed++;\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._config.refreshAttempts !== null && this._numRefreshFailed >= this._config.refreshAttempts) {\n this._refreshFailed();\n return;\n }\n const jitter = Math.round(Math.random() * 1000 * Math.max(this._numRefreshFailed, 20));\n const interval = this._config.refreshInterval + jitter;\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n return;\n }\n this._numRefreshFailed = 0;\n this._token = resp.data.token;\n if (!this._token) {\n this._refreshFailed();\n return;\n }\n if (this._isDisconnected() && this._reconnect) {\n this._debug('token refreshed, connect from scratch');\n this._connect();\n } else {\n this._debug('send refreshed token');\n const msg = {\n method: this._methodType.REFRESH,\n params: {\n token: this._token\n }\n };\n this._call(msg).then(resolveCtx => {\n this._refreshResponse(this._decoder.decodeCommandResult(this._methodType.REFRESH, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n if (this._config.onRefresh !== null) {\n const context = {};\n this._config.onRefresh(context, cb);\n } else {\n const xhr = this._ajax(\n this._config.refreshEndpoint,\n this._config.refreshParams,\n this._config.refreshHeaders,\n this._config.refreshData,\n cb\n );\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _refreshError(err) {\n this._debug('refresh error', err);\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n const interval = this._config.refreshInterval + Math.round(Math.random() * 1000);\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n }\n\n _refreshResponse(result) {\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (result.expires) {\n this._clientID = result.client;\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n };\n\n _newXHRID() {\n this._xhrID++;\n return this._xhrID;\n }\n\n _subRefresh(channel) {\n this._debug('refresh subscription token for channel', channel);\n\n if (this._subRefreshTimeouts[channel] !== undefined) {\n this._clearSubRefreshTimeout(channel);\n } else {\n return;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (resp.error || resp.status !== 200 || this._clientID !== clientID) {\n return;\n }\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n const token = channelsData[channel];\n if (!token) {\n return;\n }\n const msg = {\n method: this._methodType.SUB_REFRESH,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n\n this._call(msg).then(resolveCtx => {\n this._subRefreshResponse(\n channel,\n this._decoder.decodeCommandResult(this._methodType.SUB_REFRESH, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subRefreshError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n const data = {\n client: this._clientID,\n channels: [channel]\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _clearSubRefreshTimeout(channel) {\n if (this._subRefreshTimeouts[channel] !== undefined) {\n clearTimeout(this._subRefreshTimeouts[channel]);\n delete this._subRefreshTimeouts[channel];\n }\n }\n\n _subRefreshError(channel, err) {\n this._debug('subscription refresh error', channel, err);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n const jitter = Math.round(Math.random() * 1000);\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._config.subRefreshInterval + jitter);\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n return;\n }\n\n _subRefreshResponse(channel, result) {\n this._debug('subscription refresh success', channel);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n return;\n };\n\n _subscribe(sub, isResubscribe) {\n this._debug('subscribing on', sub.channel);\n const channel = sub.channel;\n\n if (!(channel in this._subs)) {\n this._subs[channel] = sub;\n }\n\n if (!this.isConnected()) {\n // subscribe will be called later\n sub._setNew();\n return;\n }\n\n sub._setSubscribing(isResubscribe);\n\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel\n }\n };\n\n // If channel name does not start with privateChannelPrefix - then we\n // can just send subscription message to Centrifuge. If channel name\n // starts with privateChannelPrefix - then this is a private channel\n // and we should ask web application backend for permission first.\n if (startsWith(channel, this._config.privateChannelPrefix)) {\n // private channel.\n if (this._isSubscribeBatching) {\n this._privateChannels[channel] = true;\n } else {\n this.startSubscribeBatching();\n this._subscribe(sub);\n this.stopSubscribeBatching();\n }\n } else {\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n _unsubscribe(sub) {\n delete this._subs[sub.channel];\n delete this._lastOffset[sub.channel];\n delete this._lastSeq[sub.channel];\n delete this._lastGen[sub.channel];\n if (this.isConnected()) {\n // No need to unsubscribe in disconnected state - i.e. client already unsubscribed.\n this._addMessage({\n method: this._methodType.UNSUBSCRIBE,\n params: {\n channel: sub.channel\n }\n });\n }\n };\n\n _getTTLMilliseconds(ttl) {\n // https://stackoverflow.com/questions/12633405/what-is-the-maximum-delay-for-setinterval\n return Math.min(ttl * 1000, 2147483647);\n }\n\n getSub(channel) {\n return this._getSub(channel);\n }\n\n _getSub(channel) {\n const sub = this._subs[channel];\n if (!sub) {\n return null;\n }\n return sub;\n };\n\n _isServerSub(channel) {\n return this._serverSubs[channel] !== undefined;\n };\n\n _connectResponse(result, isRecover) {\n const wasReconnecting = this._reconnecting;\n this._reconnecting = false;\n this._resetRetry();\n this._refreshRequired = false;\n\n if (this.isConnected()) {\n return;\n }\n\n if (this._latencyStart !== null) {\n this._latency = (new Date()).getTime() - this._latencyStart.getTime();\n this._latencyStart = null;\n }\n\n this._clientID = result.client;\n this._setStatus('connected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n }\n\n if (result.expires) {\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n\n this.startBatching();\n this.startSubscribeBatching();\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n if (sub._shouldResubscribe()) {\n this._subscribe(sub, wasReconnecting);\n }\n }\n }\n this.stopSubscribeBatching();\n this.stopBatching();\n\n this._startPing();\n\n const ctx = {\n client: result.client,\n transport: this._transportName,\n latency: this._latency\n };\n if (result.data) {\n ctx.data = result.data;\n }\n\n this.emit('connect', ctx);\n\n if (result.subs) {\n this._processServerSubs(result.subs);\n }\n };\n\n _processServerSubs(subs) {\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n const isResubscribe = this._serverSubs[channel] !== undefined;\n let subCtx = {channel: channel, isResubscribe: isResubscribe};\n subCtx = this._expandSubscribeContext(subCtx, sub);\n this.emit('subscribe', subCtx);\n }\n }\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n if (sub.recovered) {\n let pubs = sub.publications;\n if (pubs && pubs.length > 0) {\n\n // handle legacy order.\n // TODO: remove as soon as Centrifuge v1 released.\n if (pubs.length > 1 && (!pubs[0].offset || pubs[0].offset > pubs[1].offset)) {\n pubs = pubs.reverse();\n }\n\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n }\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n }\n }\n };\n\n _stopPing() {\n if (this._pongTimeout !== null) {\n clearTimeout(this._pongTimeout);\n this._pongTimeout = null;\n }\n if (this._pingTimeout !== null) {\n clearTimeout(this._pingTimeout);\n this._pingTimeout = null;\n }\n };\n\n _startPing() {\n if (this._config.ping !== true || this._config.pingInterval <= 0) {\n return;\n }\n if (!this.isConnected()) {\n return;\n }\n\n this._pingTimeout = setTimeout(() => {\n if (!this.isConnected()) {\n this._stopPing();\n return;\n }\n this.ping();\n this._pongTimeout = setTimeout(() => {\n this._disconnect('no ping', true);\n }, this._config.pongWaitTimeout);\n }, this._config.pingInterval);\n };\n\n _restartPing() {\n this._stopPing();\n this._startPing();\n };\n\n _subscribeError(channel, error) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n if (error.code === 0 && error.message === _errorTimeout) { // client side timeout.\n this._disconnect('timeout', true);\n return;\n }\n sub._setSubscribeError(error);\n };\n\n _expandSubscribeContext(ctx, result) {\n let recovered = false;\n if ('recovered' in result) {\n recovered = result.recovered;\n }\n ctx.recovered = recovered;\n\n let positioned = false;\n if ('positioned' in result) {\n positioned = result.positioned;\n }\n let epoch = '';\n if ('epoch' in result) {\n epoch = result.epoch;\n }\n let offset = 0;\n if ('offset' in result) {\n offset = result.offset;\n }\n if (positioned) {\n ctx.streamPosition = {\n 'offset': offset,\n 'epoch': epoch\n };\n };\n return ctx;\n }\n\n _subscribeResponse(channel, isRecover, result) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n sub._setSubscribeSuccess(result);\n\n let pubs = result.publications;\n if (pubs && pubs.length > 0) {\n if (pubs.length >= 2 && !pubs[0].offset && !pubs[1].offset) {\n // handle legacy order.\n pubs = pubs.reverse();\n }\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n\n if (result.recoverable && (!isRecover || !result.recovered)) {\n this._lastSeq[channel] = result.seq || 0;\n this._lastGen[channel] = result.gen || 0;\n this._lastOffset[channel] = result.offset || 0;\n }\n\n this._lastEpoch[channel] = result.epoch || '';\n\n if (result.recoverable) {\n sub._recoverable = true;\n }\n\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n };\n\n _handleReply(reply, next) {\n const id = reply.id;\n const result = reply.result;\n\n if (!(id in this._callbacks)) {\n next();\n return;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n\n if (!errorExists(reply)) {\n const callback = callbacks.callback;\n if (!callback) {\n return;\n }\n callback({result, next});\n } else {\n const errback = callbacks.errback;\n if (!errback) {\n next();\n return;\n }\n const error = reply.error;\n errback({error, next});\n }\n }\n\n _handleJoin(channel, join) {\n const ctx = {'info': join.info};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('join', ctx);\n }\n return;\n }\n sub.emit('join', ctx);\n };\n\n _handleLeave(channel, leave) {\n const ctx = {'info': leave.info};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('leave', ctx);\n }\n return;\n }\n sub.emit('leave', ctx);\n };\n\n _handleUnsub(channel, unsub) {\n const ctx = {};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n delete this._serverSubs[channel];\n ctx.channel = channel;\n this.emit('unsubscribe', ctx);\n }\n return;\n }\n sub.unsubscribe();\n if (unsub.resubscribe === true) {\n sub.subscribe();\n }\n };\n\n _handleSub(channel, sub) {\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n let ctx = {'channel': channel, isResubscribe: false};\n ctx = this._expandSubscribeContext(ctx, sub);\n this.emit('subscribe', ctx);\n };\n\n _handlePublication(channel, pub) {\n const sub = this._getSub(channel);\n const ctx = {\n 'data': pub.data,\n 'seq': pub.seq,\n 'gen': pub.gen,\n 'offset': pub.offset\n };\n if (pub.info) {\n ctx.info = pub.info;\n }\n if (!sub) {\n if (this._isServerSub(channel)) {\n if (pub.seq !== undefined) {\n this._serverSubs[channel].seq = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._serverSubs[channel].gen = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._serverSubs[channel].offset = pub.offset;\n }\n ctx.channel = channel;\n this.emit('publish', ctx);\n }\n return;\n }\n if (pub.seq !== undefined) {\n this._lastSeq[channel] = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._lastGen[channel] = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._lastOffset[channel] = pub.offset;\n }\n sub.emit('publish', ctx);\n };\n\n _handleMessage(message) {\n this.emit('message', message.data);\n };\n\n _handlePush(data, next) {\n const push = this._decoder.decodePush(data);\n let type = 0;\n if ('type' in push) {\n type = push['type'];\n }\n const channel = push.channel;\n\n if (type === this._pushType.PUBLICATION) {\n const pub = this._decoder.decodePushData(this._pushType.PUBLICATION, push.data);\n this._handlePublication(channel, pub);\n } else if (type === this._pushType.MESSAGE) {\n const message = this._decoder.decodePushData(this._pushType.MESSAGE, push.data);\n this._handleMessage(message);\n } else if (type === this._pushType.JOIN) {\n const join = this._decoder.decodePushData(this._pushType.JOIN, push.data);\n this._handleJoin(channel, join);\n } else if (type === this._pushType.LEAVE) {\n const leave = this._decoder.decodePushData(this._pushType.LEAVE, push.data);\n this._handleLeave(channel, leave);\n } else if (type === this._pushType.UNSUB) {\n const unsub = this._decoder.decodePushData(this._pushType.UNSUB, push.data);\n this._handleUnsub(channel, unsub);\n } else if (type === this._pushType.SUB) {\n const sub = this._decoder.decodePushData(this._pushType.SUB, push.data);\n this._handleSub(channel, sub);\n }\n next();\n }\n\n _flush() {\n const messages = this._messages.slice(0);\n this._messages = [];\n this._transportSend(messages);\n };\n\n _ping() {\n const msg = {\n method: this._methodType.PING\n };\n this._call(msg).then(resolveCtx => {\n this._pingResponse(this._decoder.decodeCommandResult(this._methodType.PING, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._debug('ping error', rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n _pingResponse(result) {\n if (!this.isConnected()) {\n return;\n }\n this._stopPing();\n this._startPing();\n }\n\n _getLastSeq(channel) {\n const lastSeq = this._lastSeq[channel];\n if (lastSeq) {\n return lastSeq;\n }\n return 0;\n };\n\n _getLastOffset(channel) {\n const lastOffset = this._lastOffset[channel];\n if (lastOffset) {\n return lastOffset;\n }\n return 0;\n };\n\n _getLastGen(channel) {\n const lastGen = this._lastGen[channel];\n if (lastGen) {\n return lastGen;\n }\n return 0;\n };\n\n _getLastEpoch(channel) {\n const lastEpoch = this._lastEpoch[channel];\n if (lastEpoch) {\n return lastEpoch;\n }\n return '';\n };\n\n _createErrorObject(message, code) {\n const errObject = {\n message: message,\n code: code || 0\n };\n\n return errObject;\n };\n\n _registerCall(id, callback, errback) {\n this._callbacks[id] = {\n callback: callback,\n errback: errback,\n timeout: null\n };\n this._callbacks[id].timeout = setTimeout(() => {\n delete this._callbacks[id];\n if (isFunction(errback)) {\n errback({error: this._createErrorObject(_errorTimeout)});\n }\n }, this._config.timeout);\n };\n\n _addMessage(message) {\n let id = this._nextMessageId();\n message.id = id;\n if (this._isBatching === true) {\n this._messages.push(message);\n } else {\n this._transportSend([message]);\n }\n return id;\n };\n\n isConnected() {\n return this._isConnected();\n }\n\n connect() {\n this._connect();\n };\n\n disconnect() {\n this._disconnect('client', false);\n };\n\n ping() {\n return this._ping();\n }\n\n startBatching() {\n // start collecting messages without sending them to Centrifuge until flush\n // method called\n this._isBatching = true;\n };\n\n stopBatching() {\n this._isBatching = false;\n this._flush();\n };\n\n startSubscribeBatching() {\n // start collecting private channels to create bulk authentication\n // request to subscribeEndpoint when stopSubscribeBatching will be called\n this._isSubscribeBatching = true;\n };\n\n stopSubscribeBatching() {\n // create request to subscribeEndpoint with collected private channels\n // to ask if this client can subscribe on each channel\n this._isSubscribeBatching = false;\n const authChannels = this._privateChannels;\n this._privateChannels = {};\n\n const channels = [];\n\n for (const channel in authChannels) {\n if (authChannels.hasOwnProperty(channel)) {\n const sub = this._getSub(channel);\n if (!sub) {\n continue;\n }\n channels.push(channel);\n }\n }\n\n if (channels.length === 0) {\n this._debug('no private channels found, no need to make request');\n return;\n }\n\n const data = {\n client: this._clientID,\n channels: channels\n };\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n this._debug('authorization request failed');\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n this._subscribeError(channel, this._createErrorObject('authorization request failed'));\n }\n }\n return;\n }\n\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n // try to send all subscriptions in one request.\n let batch = false;\n\n if (!this._isBatching) {\n this.startBatching();\n batch = true;\n }\n\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n const token = channelsData[channel];\n\n if (!token) {\n // subscription:error\n this._subscribeError(channel, this._createErrorObject('permission denied', 103));\n continue;\n } else {\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n continue;\n }\n\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n }\n }\n\n if (batch) {\n this.stopBatching();\n }\n\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n subscribe(channel, events) {\n const currentSub = this._getSub(channel);\n if (currentSub !== null) {\n currentSub._setEvents(events);\n if (currentSub._isUnsubscribed()) {\n currentSub.subscribe();\n }\n return currentSub;\n }\n const sub = new Subscription(this, channel, events);\n this._subs[channel] = sub;\n sub.subscribe();\n return sub;\n };\n}\n","import {Centrifuge} from './centrifuge.js';\nexport default Centrifuge;\n","export const JsonMethodType = {\n CONNECT: 0,\n SUBSCRIBE: 1,\n UNSUBSCRIBE: 2,\n PUBLISH: 3,\n PRESENCE: 4,\n PRESENCE_STATS: 5,\n HISTORY: 6,\n PING: 7,\n SEND: 8,\n RPC: 9,\n REFRESH: 10,\n SUB_REFRESH: 11\n};\n\nexport const JsonPushType = {\n PUBLICATION: 0,\n JOIN: 1,\n LEAVE: 2,\n UNSUB: 3,\n MESSAGE: 4,\n SUB: 5\n};\n\nexport class JsonEncoder {\n encodeCommands(commands) {\n const encodedCommands = [];\n for (const i in commands) {\n if (commands.hasOwnProperty(i)) {\n encodedCommands.push(JSON.stringify(commands[i]));\n }\n }\n return encodedCommands.join('\\n');\n }\n}\n\nexport class JsonDecoder {\n decodeReplies(data) {\n const replies = [];\n const encodedReplies = data.split('\\n');\n for (const i in encodedReplies) {\n if (encodedReplies.hasOwnProperty(i)) {\n if (!encodedReplies[i]) {\n continue;\n }\n const reply = JSON.parse(encodedReplies[i]);\n replies.push(reply);\n }\n }\n return replies;\n }\n\n decodeCommandResult(methodType, data) {\n return data;\n }\n\n decodePush(data) {\n return data;\n }\n\n decodePushData(pushType, data) {\n return data;\n }\n}\n\n","import EventEmitter from 'events';\n\nimport {\n isFunction\n} from './utils';\n\nconst _STATE_NEW = 0;\nconst _STATE_SUBSCRIBING = 1;\nconst _STATE_SUCCESS = 2;\nconst _STATE_ERROR = 3;\nconst _STATE_UNSUBSCRIBED = 4;\n\nexport default class Subscription extends EventEmitter {\n constructor(centrifuge, channel, events) {\n super();\n this.channel = channel;\n this._centrifuge = centrifuge;\n this._status = _STATE_NEW;\n this._error = null;\n this._isResubscribe = false;\n this._ready = false;\n this._subscriptionPromise = null;\n this._noResubscribe = false;\n this._recoverable = false;\n this._recover = false;\n this._setEvents(events);\n this._initializePromise();\n this._promises = {};\n this._promiseId = 0;\n this.on('error', function (errContext) {\n this._centrifuge._debug('subscription error', errContext);\n });\n }\n\n _nextPromiseId() {\n return ++this._promiseId;\n }\n\n _initializePromise() {\n // this helps us to wait until subscription will successfully\n // subscribe and call actions such as presence, history etc in\n // synchronous way.\n this._ready = false;\n\n this._subscriptionPromise = new Promise((resolve, reject) => {\n this._resolve = value => {\n this._ready = true;\n resolve(value);\n };\n this._reject = err => {\n this._ready = true;\n reject(err);\n };\n }).then(function () {}, function () {});\n };\n\n _needRecover() {\n return this._recoverable === true && this._recover === true;\n };\n\n _setEvents(events) {\n if (!events) {\n return;\n }\n if (isFunction(events)) {\n // events is just a function to handle publication received from channel.\n this.on('publish', events);\n } else if (Object.prototype.toString.call(events) === Object.prototype.toString.call({})) {\n const knownEvents = ['publish', 'join', 'leave', 'unsubscribe', 'subscribe', 'error'];\n for (let i = 0, l = knownEvents.length; i < l; i++) {\n const ev = knownEvents[i];\n if (ev in events) {\n this.on(ev, events[ev]);\n }\n }\n }\n };\n\n _isNew() {\n return this._status === _STATE_NEW;\n };\n\n _isUnsubscribed() {\n return this._status === _STATE_UNSUBSCRIBED;\n };\n\n _isSubscribing() {\n return this._status === _STATE_SUBSCRIBING;\n };\n\n _isReady() {\n return this._status === _STATE_SUCCESS || this._status === _STATE_ERROR;\n };\n\n _isSuccess() {\n return this._status === _STATE_SUCCESS;\n };\n\n _isError() {\n return this._status === _STATE_ERROR;\n };\n\n _setNew() {\n this._status = _STATE_NEW;\n };\n\n _setSubscribing(isResubscribe) {\n this._isResubscribe = isResubscribe || false;\n if (this._ready === true) {\n // new promise for this subscription\n this._initializePromise();\n }\n this._status = _STATE_SUBSCRIBING;\n };\n\n _setSubscribeSuccess(subscribeResult) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._status = _STATE_SUCCESS;\n const successContext = this._getSubscribeSuccessContext(subscribeResult);\n this._recover = false;\n this.emit('subscribe', successContext);\n this._resolve(successContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].resolve();\n delete this._promises[id];\n }\n };\n\n _setSubscribeError(err) {\n if (this._status === _STATE_ERROR) {\n return;\n }\n this._status = _STATE_ERROR;\n this._error = err;\n const errContext = this._getSubscribeErrorContext();\n this.emit('error', errContext);\n this._reject(errContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n };\n\n _triggerUnsubscribe() {\n this.emit('unsubscribe', {\n channel: this.channel\n });\n };\n\n _setUnsubscribed(noResubscribe) {\n this._centrifuge._clearSubRefreshTimeout(this.channel);\n if (this._status === _STATE_UNSUBSCRIBED) {\n return;\n }\n const needTrigger = this._status === _STATE_SUCCESS;\n this._status = _STATE_UNSUBSCRIBED;\n if (noResubscribe === true) {\n this._recover = false;\n this._noResubscribe = true;\n delete this._centrifuge._lastSeq[this.channel];\n delete this._centrifuge._lastGen[this.channel];\n delete this._centrifuge._lastEpoch[this.channel];\n }\n if (needTrigger) {\n this._triggerUnsubscribe();\n }\n };\n\n _shouldResubscribe() {\n return !this._noResubscribe;\n };\n\n _getSubscribeSuccessContext(subscribeResult) {\n let ctx = {\n channel: this.channel,\n isResubscribe: this._isResubscribe\n };\n if (subscribeResult) {\n // subscribeResult not available when called from Subscription.ready method at the moment.\n ctx = this._centrifuge._expandSubscribeContext(ctx, subscribeResult);\n }\n return ctx;\n };\n\n _getSubscribeErrorContext() {\n const subscribeErrorContext = this._error;\n subscribeErrorContext.channel = this.channel;\n subscribeErrorContext.isResubscribe = this._isResubscribe;\n return subscribeErrorContext;\n };\n\n ready(callback, errback) {\n if (this._ready) {\n if (this._isSuccess()) {\n callback(this._getSubscribeSuccessContext());\n } else {\n errback(this._getSubscribeErrorContext());\n }\n }\n };\n\n subscribe() {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._noResubscribe = false;\n this._centrifuge._subscribe(this);\n };\n\n unsubscribe() {\n this._setUnsubscribed(true);\n this._centrifuge._unsubscribe(this);\n };\n\n _methodCall() {\n if (this._isSuccess()) {\n return Promise.resolve();\n } else if (this._isError()) {\n return Promise.reject(this._error);\n }\n let subPromise = new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({'code': 0, 'message': 'timeout'});\n }, this._centrifuge._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n return subPromise;\n }\n\n publish(data) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.publish(self.channel, data);\n });\n };\n\n presence() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presence(self.channel);\n });\n };\n\n presenceStats() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presenceStats(self.channel);\n });\n };\n\n history(options) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.history(self.channel, options);\n });\n };\n}\n","export function startsWith(value, prefix) {\n return value.lastIndexOf(prefix, 0) === 0;\n};\n\nexport function isFunction(value) {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'function';\n};\n\nexport function log(level, args) {\n if (global.console) {\n const logger = global.console[level];\n\n if (isFunction(logger)) {\n logger.apply(global.console, args);\n }\n }\n};\n\nexport function backoff(step, min, max) {\n const jitter = 0.5 * Math.random();\n const interval = Math.min(max, min * Math.pow(2, step + 1));\n\n return Math.floor((1 - jitter) * interval);\n};\n\nexport function errorExists(data) {\n return 'error' in data && data.error !== null;\n};\n\nexport function extend(a, b) {\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n return a;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function eventListener() {\n if (errorListener !== undefined) {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n var errorListener;\n\n // Adding an error listener is not optional because\n // if an error is thrown on an event emitter we cannot\n // guarantee that the actual event we are waiting will\n // be fired. The result could be a silent way to create\n // memory or file descriptor leaks, which is something\n // we should avoid.\n if (name !== 'error') {\n errorListener = function errorListener(err) {\n emitter.removeListener(name, eventListener);\n reject(err);\n };\n\n emitter.once('error', errorListener);\n }\n\n emitter.once(name, eventListener);\n });\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(579);\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://Centrifuge/webpack/universalModuleDefinition","webpack://Centrifuge/./src/centrifuge.js","webpack://Centrifuge/./src/index.js","webpack://Centrifuge/./src/json.js","webpack://Centrifuge/./src/subscription.js","webpack://Centrifuge/./src/utils.js","webpack://Centrifuge/./node_modules/events/events.js","webpack://Centrifuge/webpack/bootstrap","webpack://Centrifuge/webpack/startup","webpack://Centrifuge/webpack/runtime/global"],"names":["root","factory","exports","module","define","amd","this","_errorTimeout","_errorConnectionClosed","Centrifuge","url","options","_url","_websocket","_sockjs","_isSockjs","_binary","_methodType","_pushType","_encoder","_decoder","_status","_reconnect","_reconnecting","_transport","_transportName","_transportClosed","_messageId","_clientID","_refreshRequired","_subs","_serverSubs","_lastSeq","_lastGen","_lastOffset","_lastEpoch","_messages","_isBatching","_isSubscribeBatching","_privateChannels","_numRefreshFailed","_refreshTimeout","_pingTimeout","_pongTimeout","_subRefreshTimeouts","_retries","_callbacks","_latency","_latencyStart","_connectData","_token","_xhrID","_xhrs","_dispatchPromise","Promise","resolve","_config","debug","name","version","websocket","sockjs","minRetry","maxRetry","timeout","ping","pingInterval","pongWaitTimeout","privateChannelPrefix","onTransportClose","sockjsServer","sockjsTransports","refreshEndpoint","refreshHeaders","refreshParams","refreshData","refreshAttempts","refreshInterval","onRefreshFailed","onRefresh","subscribeEndpoint","subscribeHeaders","subscribeParams","subRefreshInterval","onPrivateSubscribe","_configure","token","data","headers","params","callback","query","_debug","JSON","stringify","xhr","global","XMLHttpRequest","ActiveXObject","i","hasOwnProperty","length","encodeURIComponent","headerName","open","withCredentials","setRequestHeader","onreadystatechange","readyState","status","parsed","parse","responseText","e","error","_log","setTimeout","send","log","arguments","WebSocket","format","_formatOverride","Error","JsonMethodType","JsonPushType","JsonEncoder","JsonDecoder","configuration","extend","startsWith","indexOf","_setFormat","SockJS","newStatus","interval","backoff","xhrID","abort","reconnect","id","_stopPing","callbacks","clearTimeout","errback","_createErrorObject","channel","sub","_isSuccess","_triggerUnsubscribe","_recover","_shouldResubscribe","_setSubscribing","_setUnsubscribed","_abortInflightXHRs","_clearSubRefreshTimeout","transport","OPEN","commands","_isTransportOpen","command","encodeCommands","sockjsOptions","transports","server","_websocketSupported","binaryType","onopen","onheartbeat","_restartPing","msg","subs","hasSubs","recoverable","seq","gen","offset","epoch","Date","_call","then","resolveCtx","_connectResponse","decodeCommandResult","CONNECT","result","next","rejectCtx","code","_disconnect","onerror","onclose","closeEvent","reason","needReconnect","advice","event","_getRetryInterval","_refresh","_connect","onmessage","_dataReceived","_rpc","method","RPC","_methodCall","SEND","isConnected","_transportSend","reject","undefined","since","limit","resultCB","PUBLISH","_getHistoryParams","HISTORY","publications","PRESENCE","presence","PRESENCE_STATS","num_users","num_clients","replies","decodeReplies","finishDispatch","_dispatchSynchronized","p","_dispatchReply","reply","_handleReply","_handlePush","_addMessage","_registerCall","_setStatus","_setupTransport","shouldReconnect","_isDisconnected","_clearConnectedState","emit","close","_refreshFailed","clientID","_newXHRID","cb","resp","jitter","Math","round","random","max","REFRESH","_refreshResponse","_refreshError","_ajax","err","expires","client","_getTTLMilliseconds","ttl","channelsData","channels","channelData","SUB_REFRESH","_getSub","_subRefreshResponse","_subRefreshError","subRefreshTimeout","_subRefresh","isResubscribe","SUBSCRIBE","startSubscribeBatching","_subscribe","stopSubscribeBatching","recover","_needRecover","_getLastSeq","_getLastGen","_getLastOffset","_getLastEpoch","_subscribeResponse","_subscribeError","_setNew","UNSUBSCRIBE","min","isRecover","wasReconnecting","_resetRetry","getTime","startBatching","stopBatching","_startPing","ctx","latency","_processServerSubs","subCtx","_expandSubscribeContext","recovered","pubs","reverse","_handlePublication","_isSubscribing","message","_setSubscribeError","positioned","streamPosition","_setSubscribeSuccess","_recoverable","errorExists","join","info","_isServerSub","leave","unsub","unsubscribe","resubscribe","subscribe","pub","push","decodePush","type","PUBLICATION","decodePushData","MESSAGE","_handleMessage","JOIN","_handleJoin","LEAVE","_handleLeave","UNSUB","_handleUnsub","SUB","_handleSub","messages","slice","PING","_pingResponse","isFunction","_nextMessageId","_isConnected","_ping","_flush","authChannels","batch","events","currentSub","_setEvents","_isUnsubscribed","Subscription","EventEmitter","encodedCommands","encodedReplies","split","methodType","pushType","centrifuge","_centrifuge","_error","_isResubscribe","_ready","_subscriptionPromise","_noResubscribe","_initializePromise","_promises","_promiseId","on","errContext","_resolve","value","_reject","Object","prototype","toString","call","knownEvents","l","ev","subscribeResult","successContext","_getSubscribeSuccessContext","_getSubscribeErrorContext","noResubscribe","needTrigger","subscribeErrorContext","_unsubscribe","_isError","res","rej","_nextPromiseId","self","publish","presenceStats","history","prefix","lastIndexOf","level","args","console","logger","apply","step","pow","floor","a","b","key","ReflectOwnKeys","R","Reflect","ReflectApply","target","receiver","Function","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","concat","NumberIsNaN","Number","isNaN","init","once","emitter","eventListener","errorListener","removeListener","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","TypeError","_getMaxListeners","that","_addListener","prepend","m","existing","warning","create","newListener","unshift","warned","w","String","count","warn","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","bind","_listeners","unwrap","evlistener","arr","ret","Array","unwrapListeners","arrayClone","listenerCount","n","copy","defineProperty","enumerable","get","set","arg","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","context","handler","len","listeners","addListener","prependListener","prependOnceListener","list","position","originalListener","shift","index","pop","spliceOne","off","removeAllListeners","keys","rawListeners","eventNames","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__","g","globalThis","window"],"mappings":"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","file":"centrifuge.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Centrifuge\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Centrifuge\"] = factory();\n\telse\n\t\troot[\"Centrifuge\"] = factory();\n})(this, function() {\nreturn ","import EventEmitter from 'events';\nimport Subscription from './subscription';\n\nimport {\n JsonEncoder,\n JsonDecoder,\n JsonMethodType,\n JsonPushType\n} from './json';\n\nimport {\n isFunction,\n log,\n startsWith,\n errorExists,\n backoff,\n extend\n} from './utils';\n\nconst _errorTimeout = 'timeout';\nconst _errorConnectionClosed = 'connection closed';\n\nexport class Centrifuge extends EventEmitter {\n\n constructor(url, options) {\n super();\n this._url = url;\n this._websocket = null;\n this._sockjs = null;\n this._isSockjs = false;\n this._binary = false;\n this._methodType = null;\n this._pushType = null;\n this._encoder = null;\n this._decoder = null;\n this._status = 'disconnected';\n this._reconnect = true;\n this._reconnecting = false;\n this._transport = null;\n this._transportName = null;\n this._transportClosed = true;\n this._messageId = 0;\n this._clientID = null;\n this._refreshRequired = false;\n this._subs = {};\n this._serverSubs = {};\n this._lastSeq = {};\n this._lastGen = {};\n this._lastOffset = {};\n this._lastEpoch = {};\n this._messages = [];\n this._isBatching = false;\n this._isSubscribeBatching = false;\n this._privateChannels = {};\n this._numRefreshFailed = 0;\n this._refreshTimeout = null;\n this._pingTimeout = null;\n this._pongTimeout = null;\n this._subRefreshTimeouts = {};\n this._retries = 0;\n this._callbacks = {};\n this._latency = null;\n this._latencyStart = null;\n this._connectData = null;\n this._token = null;\n this._xhrID = 0;\n this._xhrs = {};\n this._dispatchPromise = Promise.resolve();\n this._config = {\n debug: false,\n name: '',\n version: '',\n websocket: null,\n sockjs: null,\n minRetry: 1000,\n maxRetry: 20000,\n timeout: 5000,\n ping: true,\n pingInterval: 25000,\n pongWaitTimeout: 5000,\n privateChannelPrefix: '$',\n onTransportClose: null,\n sockjsServer: null,\n sockjsTransports: [\n 'websocket',\n 'xdr-streaming',\n 'xhr-streaming',\n 'eventsource',\n 'iframe-eventsource',\n 'iframe-htmlfile',\n 'xdr-polling',\n 'xhr-polling',\n 'iframe-xhr-polling',\n 'jsonp-polling'\n ],\n refreshEndpoint: '/centrifuge/refresh',\n refreshHeaders: {},\n refreshParams: {},\n refreshData: {},\n refreshAttempts: null,\n refreshInterval: 1000,\n onRefreshFailed: null,\n onRefresh: null,\n subscribeEndpoint: '/centrifuge/subscribe',\n subscribeHeaders: {},\n subscribeParams: {},\n subRefreshInterval: 1000,\n onPrivateSubscribe: null\n };\n this._configure(options);\n }\n\n setToken(token) {\n this._token = token;\n }\n\n setConnectData(data) {\n this._connectData = data;\n }\n\n setRefreshHeaders(headers) {\n this._config.refreshHeaders = headers;\n }\n setRefreshParams(params) {\n this._config.refreshParams = params;\n }\n setRefreshData(data) {\n this._config.refreshData = data;\n }\n\n setSubscribeHeaders(headers) {\n this._config.subscribeHeaders = headers;\n }\n setSubscribeParams(params) {\n this._config.subscribeParams = params;\n }\n\n _ajax(url, params, headers, data, callback) {\n let query = '';\n this._debug('sending AJAX request to', url, 'with data', JSON.stringify(data));\n\n const xhr = (global.XMLHttpRequest ? new global.XMLHttpRequest() : new global.ActiveXObject('Microsoft.XMLHTTP'));\n\n for (const i in params) {\n if (params.hasOwnProperty(i)) {\n if (query.length > 0) {\n query += '&';\n }\n query += encodeURIComponent(i) + '=' + encodeURIComponent(params[i]);\n }\n }\n if (query.length > 0) {\n query = '?' + query;\n }\n xhr.open('POST', url + query, true);\n if ('withCredentials' in xhr) {\n xhr.withCredentials = true;\n }\n\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.setRequestHeader('Content-Type', 'application/json');\n for (const headerName in headers) {\n if (headers.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, headers[headerName]);\n }\n }\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data, parsed = false;\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback({\n error: 'Invalid JSON. Data was: ' + xhr.responseText,\n status: 200,\n data: null\n });\n }\n if (parsed) { // prevents double execution.\n callback({\n data: data,\n status: 200\n });\n }\n } else {\n this._log('wrong status code in AJAX response', xhr.status);\n callback({\n status: xhr.status,\n data: null\n });\n }\n }\n };\n setTimeout(() => xhr.send(JSON.stringify(data)), 20);\n return xhr;\n };\n\n _log() {\n log('info', arguments);\n };\n\n _debug() {\n if (this._config.debug === true) {\n log('debug', arguments);\n }\n };\n\n _websocketSupported() {\n if (this._config.websocket !== null) {\n return true;\n }\n return !(typeof WebSocket !== 'function' && typeof WebSocket !== 'object');\n };\n\n _setFormat(format) {\n if (this._formatOverride(format)) {\n return;\n }\n if (format === 'protobuf') {\n throw new Error('not implemented by JSON only Centrifuge client – use client with Protobuf');\n }\n this._binary = false;\n this._methodType = JsonMethodType;\n this._pushType = JsonPushType;\n this._encoder = new JsonEncoder();\n this._decoder = new JsonDecoder();\n }\n\n _formatOverride(format) {\n return false;\n }\n\n _configure(configuration) {\n if (!('Promise' in global)) {\n throw new Error('Promise polyfill required');\n }\n\n extend(this._config, configuration || {});\n this._debug('centrifuge config', this._config);\n\n if (!this._url) {\n throw new Error('url required');\n }\n\n if (startsWith(this._url, 'ws') && this._url.indexOf('format=protobuf') > -1) {\n this._setFormat('protobuf');\n } else {\n this._setFormat('json');\n }\n\n if (startsWith(this._url, 'http')) {\n this._debug('client will try to connect to SockJS endpoint');\n if (this._config.sockjs !== null) {\n this._debug('SockJS explicitly provided in options');\n this._sockjs = this._config.sockjs;\n } else {\n if (typeof global.SockJS === 'undefined') {\n throw new Error('SockJS not found, use ws:// in url or include SockJS');\n }\n this._debug('use globally defined SockJS');\n this._sockjs = global.SockJS;\n }\n } else {\n this._debug('client will connect to websocket endpoint');\n }\n };\n\n _setStatus(newStatus) {\n if (this._status !== newStatus) {\n this._debug('Status', this._status, '->', newStatus);\n this._status = newStatus;\n }\n };\n\n _isDisconnected() {\n return this._status === 'disconnected';\n };\n\n _isConnecting() {\n return this._status === 'connecting';\n };\n\n _isConnected() {\n return this._status === 'connected';\n };\n\n _nextMessageId() {\n return ++this._messageId;\n };\n\n _resetRetry() {\n this._debug('reset retries count to 0');\n this._retries = 0;\n };\n\n _getRetryInterval() {\n const interval = backoff(this._retries, this._config.minRetry, this._config.maxRetry);\n\n this._retries += 1;\n return interval;\n };\n\n _abortInflightXHRs() {\n for (const xhrID in this._xhrs) {\n try {\n this._xhrs[xhrID].abort();\n } catch (e) {\n this._debug('error aborting xhr', e);\n }\n delete this._xhrs[xhrID];\n }\n };\n\n _clearConnectedState(reconnect) {\n this._clientID = null;\n this._stopPing();\n\n // fire errbacks of registered outgoing calls.\n for (const id in this._callbacks) {\n if (this._callbacks.hasOwnProperty(id)) {\n const callbacks = this._callbacks[id];\n clearTimeout(callbacks.timeout);\n const errback = callbacks.errback;\n if (!errback) {\n continue;\n }\n errback({error: this._createErrorObject('disconnected')});\n }\n }\n this._callbacks = {};\n\n // fire unsubscribe events\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n\n if (reconnect) {\n if (sub._isSuccess()) {\n sub._triggerUnsubscribe();\n sub._recover = true;\n }\n if (sub._shouldResubscribe()) {\n sub._setSubscribing();\n }\n } else {\n sub._setUnsubscribed();\n }\n }\n }\n\n this._abortInflightXHRs();\n\n // clear refresh timer\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n // clear sub refresh timers\n for (const channel in this._subRefreshTimeouts) {\n if (this._subRefreshTimeouts.hasOwnProperty(channel) && this._subRefreshTimeouts[channel]) {\n this._clearSubRefreshTimeout(channel);\n }\n }\n this._subRefreshTimeouts = {};\n\n if (!this._reconnect) {\n // completely clear subscriptions\n this._subs = {};\n }\n };\n\n _isTransportOpen() {\n if (this._isSockjs) {\n return this._transport &&\n this._transport.transport &&\n this._transport.transport.readyState === this._transport.transport.OPEN;\n }\n return this._transport && this._transport.readyState === this._transport.OPEN;\n };\n\n _transportSend(commands) {\n if (!commands.length) {\n return true;\n }\n\n if (!this._isTransportOpen()) {\n // resolve pending commands with error if transport is not open\n for (let command in commands) {\n let id = command.id;\n if (!(id in this._callbacks)) {\n continue;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n const errback = callbacks.errback;\n errback({error: this._createErrorObject(_errorConnectionClosed, 0)});\n }\n return false;\n }\n this._transport.send(this._encoder.encodeCommands(commands));\n return true;\n }\n\n _setupTransport() {\n this._isSockjs = false;\n\n // detect transport to use - SockJS or Websocket\n if (this._sockjs !== null) {\n const sockjsOptions = {\n transports: this._config.sockjsTransports\n };\n\n if (this._config.sockjsServer !== null) {\n sockjsOptions.server = this._config.sockjsServer;\n }\n this._isSockjs = true;\n this._transport = new this._sockjs(this._url, null, sockjsOptions);\n } else {\n if (!this._websocketSupported()) {\n this._debug('No Websocket support and no SockJS configured, can not connect');\n return;\n }\n if (this._config.websocket !== null) {\n this._websocket = this._config.websocket;\n } else {\n this._websocket = WebSocket;\n }\n this._transport = new this._websocket(this._url);\n if (this._binary === true) {\n this._transport.binaryType = 'arraybuffer';\n }\n }\n\n this._transport.onopen = () => {\n this._transportClosed = false;\n\n if (this._isSockjs) {\n this._transportName = 'sockjs-' + this._transport.transport;\n this._transport.onheartbeat = () => this._restartPing();\n } else {\n this._transportName = 'websocket';\n }\n\n // Can omit method here due to zero value.\n const msg = {\n // method: this._methodType.CONNECT\n };\n\n if (this._token || this._connectData || this._config.name || this._config.version) {\n msg.params = {};\n }\n if (this._token) {\n msg.params.token = this._token;\n }\n if (this._connectData) {\n msg.params.data = this._connectData;\n }\n if (this._config.name) {\n msg.params.name = this._config.name;\n }\n if (this._config.version) {\n msg.params.version = this._config.version;\n }\n\n let subs = {};\n let hasSubs = false;\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel) && this._serverSubs[channel].recoverable) {\n hasSubs = true;\n let sub = {\n 'recover': true\n };\n if (this._serverSubs[channel].seq || this._serverSubs[channel].gen) {\n if (this._serverSubs[channel].seq) {\n sub['seq'] = this._serverSubs[channel].seq;\n }\n if (this._serverSubs[channel].gen) {\n sub['gen'] = this._serverSubs[channel].gen;\n }\n } else {\n if (this._serverSubs[channel].offset) {\n sub['offset'] = this._serverSubs[channel].offset;\n }\n }\n if (this._serverSubs[channel].epoch) {\n sub['epoch'] = this._serverSubs[channel].epoch;\n }\n subs[channel] = sub;\n }\n }\n if (hasSubs) {\n if (!msg.params) {msg.params = {};}\n msg.params.subs = subs;\n }\n\n this._latencyStart = new Date();\n this._call(msg).then(resolveCtx => {\n this._connectResponse(this._decoder.decodeCommandResult(this._methodType.CONNECT, resolveCtx.result), hasSubs);\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n const err = rejectCtx.error;\n if (err.code === 109) { // token expired.\n this._refreshRequired = true;\n }\n this._disconnect('connect error', true);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n this._transport.onerror = error => {\n this._debug('transport level error', error);\n };\n\n this._transport.onclose = closeEvent => {\n this._transportClosed = true;\n let reason = _errorConnectionClosed;\n let needReconnect = true;\n\n if (closeEvent && 'reason' in closeEvent && closeEvent.reason) {\n try {\n const advice = JSON.parse(closeEvent.reason);\n this._debug('reason is an advice object', advice);\n reason = advice.reason;\n needReconnect = advice.reconnect;\n } catch (e) {\n reason = closeEvent.reason;\n this._debug('reason is a plain string', reason);\n }\n }\n\n // onTransportClose callback should be executed every time transport was closed.\n // This can be helpful to catch failed connection events (because our disconnect\n // event only called once and every future attempts to connect do not fire disconnect\n // event again).\n if (this._config.onTransportClose !== null) {\n this._config.onTransportClose({\n event: closeEvent,\n reason: reason,\n reconnect: needReconnect\n });\n }\n\n this._disconnect(reason, needReconnect);\n\n if (this._reconnect === true) {\n this._reconnecting = true;\n const interval = this._getRetryInterval();\n\n this._debug('reconnect after ' + interval + ' milliseconds');\n setTimeout(() => {\n if (this._reconnect === true) {\n if (this._refreshRequired) {\n this._refresh();\n } else {\n this._connect();\n }\n }\n }, interval);\n }\n };\n\n this._transport.onmessage = event => {\n this._dataReceived(event.data);\n };\n };\n\n rpc(data) {\n return this._rpc('', data);\n }\n\n namedRPC(method, data) {\n return this._rpc(method, data);\n }\n\n _rpc(method, data) {\n let params = {\n data: data\n };\n if (method !== '') {\n params.method = method;\n };\n const msg = {\n method: this._methodType.RPC,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return result;\n });\n }\n\n send(data) {\n const msg = {\n method: this._methodType.SEND,\n params: {\n data: data\n }\n };\n\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n\n const sent = this._transportSend([msg]); // can send async message to server without id set\n if (!sent) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n };\n return Promise.resolve({});\n }\n\n _getHistoryParams(channel, options) {\n let params = {\n channel: channel\n };\n if (options !== undefined) {\n if (options.since) {\n params['use_since'] = true;\n if (options.since.offset) {\n params['offset'] = options.since.offset;\n }\n if (options.since.epoch) {\n params['epoch'] = options.since.epoch;\n }\n };\n if (options.limit !== undefined) {\n params['use_limit'] = true;\n params['limit'] = options.limit;\n }\n };\n return params;\n }\n\n _methodCall(msg, resultCB) {\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n return new Promise((resolve, reject) => {\n this._call(msg).then(resolveCtx => {\n resolve(resultCB(this._decoder.decodeCommandResult(msg.method, resolveCtx.result)));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n reject(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n });\n }\n\n publish(channel, data) {\n const msg = {\n method: this._methodType.PUBLISH,\n params: {\n channel: channel,\n data: data\n }\n };\n return this._methodCall(msg, function () {\n return {};\n });\n }\n\n history(channel, options) {\n const params = this._getHistoryParams(channel, options);\n const msg = {\n method: this._methodType.HISTORY,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return {\n 'publications': result.publications,\n 'epoch': result.epoch || '',\n 'offset': result.offset || 0\n };\n });\n }\n\n presence(channel) {\n const msg = {\n method: this._methodType.PRESENCE,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'presence': result.presence\n };\n });\n }\n\n presenceStats(channel) {\n const msg = {\n method: this._methodType.PRESENCE_STATS,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'num_users': result.num_users,\n 'num_clients': result.num_clients\n };\n });\n }\n\n _dataReceived(data) {\n const replies = this._decoder.decodeReplies(data);\n // we have to guarantee order of events in replies processing - i.e. start processing\n // next reply only when we finished processing of current one. Without syncing things in\n // this way we could get wrong publication events order as reply promises resolve\n // on next loop tick so for loop continues before we finished emitting all reply events.\n this._dispatchPromise = this._dispatchPromise.then(() => {\n let finishDispatch;\n this._dispatchPromise = new Promise(resolve =>{\n finishDispatch = resolve;\n });\n this._dispatchSynchronized(replies, finishDispatch);\n });\n this._restartPing();\n }\n\n _dispatchSynchronized(replies, finishDispatch) {\n let p = Promise.resolve();\n for (const i in replies) {\n if (replies.hasOwnProperty(i)) {\n p = p.then(() => {\n return this._dispatchReply(replies[i]);\n });\n }\n }\n p = p.then(() => {\n finishDispatch();\n });\n }\n\n _dispatchReply(reply) {\n var next;\n const p = new Promise(resolve =>{\n next = resolve;\n });\n\n if (reply === undefined || reply === null) {\n this._debug('dispatch: got undefined or null reply');\n next();\n return p;\n }\n\n const id = reply.id;\n\n if (id && id > 0) {\n this._handleReply(reply, next);\n } else {\n this._handlePush(reply.result, next);\n }\n\n return p;\n };\n\n _call(msg) {\n return new Promise((resolve, reject) => {\n const id = this._addMessage(msg);\n this._registerCall(id, resolve, reject);\n });\n }\n\n _connect() {\n if (this.isConnected()) {\n this._debug('connect called when already connected');\n return;\n }\n if (this._status === 'connecting') {\n return;\n }\n\n this._debug('start connecting');\n this._setStatus('connecting');\n this._clientID = null;\n this._reconnect = true;\n this._setupTransport();\n };\n\n _disconnect(reason, shouldReconnect) {\n\n const reconnect = shouldReconnect || false;\n if (reconnect === false) {\n this._reconnect = false;\n }\n\n if (this._isDisconnected()) {\n if (!reconnect) {\n this._clearConnectedState(reconnect);\n }\n return;\n }\n\n this._clearConnectedState(reconnect);\n\n this._debug('disconnected:', reason, shouldReconnect);\n this._setStatus('disconnected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._reconnecting === false) {\n // fire unsubscribe events for server side subs.\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel)) {\n this.emit('unsubscribe', {channel: channel});\n }\n }\n this.emit('disconnect', {\n reason: reason,\n reconnect: reconnect\n });\n }\n\n if (reconnect === false) {\n this._subs = {};\n this._serverSubs = {};\n }\n\n if (!this._transportClosed) {\n this._transport.close();\n }\n };\n\n _refreshFailed() {\n this._numRefreshFailed = 0;\n if (!this._isDisconnected()) {\n this._disconnect('refresh failed', false);\n }\n if (this._config.onRefreshFailed !== null) {\n this._config.onRefreshFailed();\n }\n };\n\n _refresh() {\n // ask application for new connection token.\n this._debug('refresh token');\n\n if (this._config.refreshAttempts === 0) {\n this._debug('refresh attempts set to 0, do not send refresh request at all');\n this._refreshFailed();\n return;\n }\n\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n // We don't perform any connection status related actions here as we are\n // relying on server that must close connection eventually.\n if (resp.error) {\n this._debug('error refreshing connection token', resp.error);\n } else {\n this._debug('error refreshing connection token: wrong status code', resp.status);\n }\n this._numRefreshFailed++;\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._config.refreshAttempts !== null && this._numRefreshFailed >= this._config.refreshAttempts) {\n this._refreshFailed();\n return;\n }\n const jitter = Math.round(Math.random() * 1000 * Math.max(this._numRefreshFailed, 20));\n const interval = this._config.refreshInterval + jitter;\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n return;\n }\n this._numRefreshFailed = 0;\n this._token = resp.data.token;\n if (!this._token) {\n this._refreshFailed();\n return;\n }\n if (this._isDisconnected() && this._reconnect) {\n this._debug('token refreshed, connect from scratch');\n this._connect();\n } else {\n this._debug('send refreshed token');\n const msg = {\n method: this._methodType.REFRESH,\n params: {\n token: this._token\n }\n };\n this._call(msg).then(resolveCtx => {\n this._refreshResponse(this._decoder.decodeCommandResult(this._methodType.REFRESH, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n if (this._config.onRefresh !== null) {\n const context = {};\n this._config.onRefresh(context, cb);\n } else {\n const xhr = this._ajax(\n this._config.refreshEndpoint,\n this._config.refreshParams,\n this._config.refreshHeaders,\n this._config.refreshData,\n cb\n );\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _refreshError(err) {\n this._debug('refresh error', err);\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n const interval = this._config.refreshInterval + Math.round(Math.random() * 1000);\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n }\n\n _refreshResponse(result) {\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (result.expires) {\n this._clientID = result.client;\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n };\n\n _newXHRID() {\n this._xhrID++;\n return this._xhrID;\n }\n\n _subRefresh(channel) {\n this._debug('refresh subscription token for channel', channel);\n\n if (this._subRefreshTimeouts[channel] !== undefined) {\n this._clearSubRefreshTimeout(channel);\n } else {\n return;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (resp.error || resp.status !== 200 || this._clientID !== clientID) {\n return;\n }\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n const token = channelsData[channel];\n if (!token) {\n return;\n }\n const msg = {\n method: this._methodType.SUB_REFRESH,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n\n this._call(msg).then(resolveCtx => {\n this._subRefreshResponse(\n channel,\n this._decoder.decodeCommandResult(this._methodType.SUB_REFRESH, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subRefreshError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n const data = {\n client: this._clientID,\n channels: [channel]\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _clearSubRefreshTimeout(channel) {\n if (this._subRefreshTimeouts[channel] !== undefined) {\n clearTimeout(this._subRefreshTimeouts[channel]);\n delete this._subRefreshTimeouts[channel];\n }\n }\n\n _subRefreshError(channel, err) {\n this._debug('subscription refresh error', channel, err);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n const jitter = Math.round(Math.random() * 1000);\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._config.subRefreshInterval + jitter);\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n return;\n }\n\n _subRefreshResponse(channel, result) {\n this._debug('subscription refresh success', channel);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n return;\n };\n\n _subscribe(sub, isResubscribe) {\n this._debug('subscribing on', sub.channel);\n const channel = sub.channel;\n\n if (!(channel in this._subs)) {\n this._subs[channel] = sub;\n }\n\n if (!this.isConnected()) {\n // subscribe will be called later\n sub._setNew();\n return;\n }\n\n sub._setSubscribing(isResubscribe);\n\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel\n }\n };\n\n // If channel name does not start with privateChannelPrefix - then we\n // can just send subscription message to Centrifuge. If channel name\n // starts with privateChannelPrefix - then this is a private channel\n // and we should ask web application backend for permission first.\n if (startsWith(channel, this._config.privateChannelPrefix)) {\n // private channel.\n if (this._isSubscribeBatching) {\n this._privateChannels[channel] = true;\n } else {\n this.startSubscribeBatching();\n this._subscribe(sub);\n this.stopSubscribeBatching();\n }\n } else {\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n _unsubscribe(sub) {\n delete this._subs[sub.channel];\n delete this._lastOffset[sub.channel];\n delete this._lastSeq[sub.channel];\n delete this._lastGen[sub.channel];\n if (this.isConnected()) {\n // No need to unsubscribe in disconnected state - i.e. client already unsubscribed.\n this._addMessage({\n method: this._methodType.UNSUBSCRIBE,\n params: {\n channel: sub.channel\n }\n });\n }\n };\n\n _getTTLMilliseconds(ttl) {\n // https://stackoverflow.com/questions/12633405/what-is-the-maximum-delay-for-setinterval\n return Math.min(ttl * 1000, 2147483647);\n }\n\n getSub(channel) {\n return this._getSub(channel);\n }\n\n _getSub(channel) {\n const sub = this._subs[channel];\n if (!sub) {\n return null;\n }\n return sub;\n };\n\n _isServerSub(channel) {\n return this._serverSubs[channel] !== undefined;\n };\n\n _connectResponse(result, isRecover) {\n const wasReconnecting = this._reconnecting;\n this._reconnecting = false;\n this._resetRetry();\n this._refreshRequired = false;\n\n if (this.isConnected()) {\n return;\n }\n\n if (this._latencyStart !== null) {\n this._latency = (new Date()).getTime() - this._latencyStart.getTime();\n this._latencyStart = null;\n }\n\n this._clientID = result.client;\n this._setStatus('connected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n }\n\n if (result.expires) {\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n\n this.startBatching();\n this.startSubscribeBatching();\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n if (sub._shouldResubscribe()) {\n this._subscribe(sub, wasReconnecting);\n }\n }\n }\n this.stopSubscribeBatching();\n this.stopBatching();\n\n this._startPing();\n\n const ctx = {\n client: result.client,\n transport: this._transportName,\n latency: this._latency\n };\n if (result.data) {\n ctx.data = result.data;\n }\n\n this.emit('connect', ctx);\n\n if (result.subs) {\n this._processServerSubs(result.subs);\n }\n };\n\n _processServerSubs(subs) {\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n const isResubscribe = this._serverSubs[channel] !== undefined;\n let subCtx = {channel: channel, isResubscribe: isResubscribe};\n subCtx = this._expandSubscribeContext(subCtx, sub);\n this.emit('subscribe', subCtx);\n }\n }\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n if (sub.recovered) {\n let pubs = sub.publications;\n if (pubs && pubs.length > 0) {\n\n // handle legacy order.\n // TODO: remove as soon as Centrifuge v1 released.\n if (pubs.length > 1 && (!pubs[0].offset || pubs[0].offset > pubs[1].offset)) {\n pubs = pubs.reverse();\n }\n\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n }\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n }\n }\n };\n\n _stopPing() {\n if (this._pongTimeout !== null) {\n clearTimeout(this._pongTimeout);\n this._pongTimeout = null;\n }\n if (this._pingTimeout !== null) {\n clearTimeout(this._pingTimeout);\n this._pingTimeout = null;\n }\n };\n\n _startPing() {\n if (this._config.ping !== true || this._config.pingInterval <= 0) {\n return;\n }\n if (!this.isConnected()) {\n return;\n }\n\n this._pingTimeout = setTimeout(() => {\n if (!this.isConnected()) {\n this._stopPing();\n return;\n }\n this.ping();\n this._pongTimeout = setTimeout(() => {\n this._disconnect('no ping', true);\n }, this._config.pongWaitTimeout);\n }, this._config.pingInterval);\n };\n\n _restartPing() {\n this._stopPing();\n this._startPing();\n };\n\n _subscribeError(channel, error) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n if (error.code === 0 && error.message === _errorTimeout) { // client side timeout.\n this._disconnect('timeout', true);\n return;\n }\n sub._setSubscribeError(error);\n };\n\n _expandSubscribeContext(ctx, result) {\n let recovered = false;\n if ('recovered' in result) {\n recovered = result.recovered;\n }\n ctx.recovered = recovered;\n\n let positioned = false;\n if ('positioned' in result) {\n positioned = result.positioned;\n }\n let epoch = '';\n if ('epoch' in result) {\n epoch = result.epoch;\n }\n let offset = 0;\n if ('offset' in result) {\n offset = result.offset;\n }\n if (positioned) {\n ctx.streamPosition = {\n 'offset': offset,\n 'epoch': epoch\n };\n };\n if (result.data) {\n ctx.data = result.data;\n }\n return ctx;\n }\n\n _subscribeResponse(channel, isRecover, result) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n sub._setSubscribeSuccess(result);\n\n let pubs = result.publications;\n if (pubs && pubs.length > 0) {\n if (pubs.length >= 2 && !pubs[0].offset && !pubs[1].offset) {\n // handle legacy order.\n pubs = pubs.reverse();\n }\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n\n if (result.recoverable && (!isRecover || !result.recovered)) {\n this._lastSeq[channel] = result.seq || 0;\n this._lastGen[channel] = result.gen || 0;\n this._lastOffset[channel] = result.offset || 0;\n }\n\n this._lastEpoch[channel] = result.epoch || '';\n\n if (result.recoverable) {\n sub._recoverable = true;\n }\n\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n };\n\n _handleReply(reply, next) {\n const id = reply.id;\n const result = reply.result;\n\n if (!(id in this._callbacks)) {\n next();\n return;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n\n if (!errorExists(reply)) {\n const callback = callbacks.callback;\n if (!callback) {\n return;\n }\n callback({result, next});\n } else {\n const errback = callbacks.errback;\n if (!errback) {\n next();\n return;\n }\n const error = reply.error;\n errback({error, next});\n }\n }\n\n _handleJoin(channel, join) {\n const ctx = {'info': join.info};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('join', ctx);\n }\n return;\n }\n sub.emit('join', ctx);\n };\n\n _handleLeave(channel, leave) {\n const ctx = {'info': leave.info};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('leave', ctx);\n }\n return;\n }\n sub.emit('leave', ctx);\n };\n\n _handleUnsub(channel, unsub) {\n const ctx = {};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n delete this._serverSubs[channel];\n ctx.channel = channel;\n this.emit('unsubscribe', ctx);\n }\n return;\n }\n sub.unsubscribe();\n if (unsub.resubscribe === true) {\n sub.subscribe();\n }\n };\n\n _handleSub(channel, sub) {\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n let ctx = {'channel': channel, isResubscribe: false};\n ctx = this._expandSubscribeContext(ctx, sub);\n this.emit('subscribe', ctx);\n };\n\n _handlePublication(channel, pub) {\n const sub = this._getSub(channel);\n const ctx = {\n 'data': pub.data,\n 'seq': pub.seq,\n 'gen': pub.gen,\n 'offset': pub.offset\n };\n if (pub.info) {\n ctx.info = pub.info;\n }\n if (!sub) {\n if (this._isServerSub(channel)) {\n if (pub.seq !== undefined) {\n this._serverSubs[channel].seq = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._serverSubs[channel].gen = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._serverSubs[channel].offset = pub.offset;\n }\n ctx.channel = channel;\n this.emit('publish', ctx);\n }\n return;\n }\n if (pub.seq !== undefined) {\n this._lastSeq[channel] = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._lastGen[channel] = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._lastOffset[channel] = pub.offset;\n }\n sub.emit('publish', ctx);\n };\n\n _handleMessage(message) {\n this.emit('message', message.data);\n };\n\n _handlePush(data, next) {\n const push = this._decoder.decodePush(data);\n let type = 0;\n if ('type' in push) {\n type = push['type'];\n }\n const channel = push.channel;\n\n if (type === this._pushType.PUBLICATION) {\n const pub = this._decoder.decodePushData(this._pushType.PUBLICATION, push.data);\n this._handlePublication(channel, pub);\n } else if (type === this._pushType.MESSAGE) {\n const message = this._decoder.decodePushData(this._pushType.MESSAGE, push.data);\n this._handleMessage(message);\n } else if (type === this._pushType.JOIN) {\n const join = this._decoder.decodePushData(this._pushType.JOIN, push.data);\n this._handleJoin(channel, join);\n } else if (type === this._pushType.LEAVE) {\n const leave = this._decoder.decodePushData(this._pushType.LEAVE, push.data);\n this._handleLeave(channel, leave);\n } else if (type === this._pushType.UNSUB) {\n const unsub = this._decoder.decodePushData(this._pushType.UNSUB, push.data);\n this._handleUnsub(channel, unsub);\n } else if (type === this._pushType.SUB) {\n const sub = this._decoder.decodePushData(this._pushType.SUB, push.data);\n this._handleSub(channel, sub);\n }\n next();\n }\n\n _flush() {\n const messages = this._messages.slice(0);\n this._messages = [];\n this._transportSend(messages);\n };\n\n _ping() {\n const msg = {\n method: this._methodType.PING\n };\n this._call(msg).then(resolveCtx => {\n this._pingResponse(this._decoder.decodeCommandResult(this._methodType.PING, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._debug('ping error', rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n _pingResponse(result) {\n if (!this.isConnected()) {\n return;\n }\n this._stopPing();\n this._startPing();\n }\n\n _getLastSeq(channel) {\n const lastSeq = this._lastSeq[channel];\n if (lastSeq) {\n return lastSeq;\n }\n return 0;\n };\n\n _getLastOffset(channel) {\n const lastOffset = this._lastOffset[channel];\n if (lastOffset) {\n return lastOffset;\n }\n return 0;\n };\n\n _getLastGen(channel) {\n const lastGen = this._lastGen[channel];\n if (lastGen) {\n return lastGen;\n }\n return 0;\n };\n\n _getLastEpoch(channel) {\n const lastEpoch = this._lastEpoch[channel];\n if (lastEpoch) {\n return lastEpoch;\n }\n return '';\n };\n\n _createErrorObject(message, code) {\n const errObject = {\n message: message,\n code: code || 0\n };\n\n return errObject;\n };\n\n _registerCall(id, callback, errback) {\n this._callbacks[id] = {\n callback: callback,\n errback: errback,\n timeout: null\n };\n this._callbacks[id].timeout = setTimeout(() => {\n delete this._callbacks[id];\n if (isFunction(errback)) {\n errback({error: this._createErrorObject(_errorTimeout)});\n }\n }, this._config.timeout);\n };\n\n _addMessage(message) {\n let id = this._nextMessageId();\n message.id = id;\n if (this._isBatching === true) {\n this._messages.push(message);\n } else {\n this._transportSend([message]);\n }\n return id;\n };\n\n isConnected() {\n return this._isConnected();\n }\n\n connect() {\n this._connect();\n };\n\n disconnect() {\n this._disconnect('client', false);\n };\n\n ping() {\n return this._ping();\n }\n\n startBatching() {\n // start collecting messages without sending them to Centrifuge until flush\n // method called\n this._isBatching = true;\n };\n\n stopBatching() {\n this._isBatching = false;\n this._flush();\n };\n\n startSubscribeBatching() {\n // start collecting private channels to create bulk authentication\n // request to subscribeEndpoint when stopSubscribeBatching will be called\n this._isSubscribeBatching = true;\n };\n\n stopSubscribeBatching() {\n // create request to subscribeEndpoint with collected private channels\n // to ask if this client can subscribe on each channel\n this._isSubscribeBatching = false;\n const authChannels = this._privateChannels;\n this._privateChannels = {};\n\n const channels = [];\n\n for (const channel in authChannels) {\n if (authChannels.hasOwnProperty(channel)) {\n const sub = this._getSub(channel);\n if (!sub) {\n continue;\n }\n channels.push(channel);\n }\n }\n\n if (channels.length === 0) {\n this._debug('no private channels found, no need to make request');\n return;\n }\n\n const data = {\n client: this._clientID,\n channels: channels\n };\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n this._debug('authorization request failed');\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n this._subscribeError(channel, this._createErrorObject('authorization request failed'));\n }\n }\n return;\n }\n\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n // try to send all subscriptions in one request.\n let batch = false;\n\n if (!this._isBatching) {\n this.startBatching();\n batch = true;\n }\n\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n const token = channelsData[channel];\n\n if (!token) {\n // subscription:error\n this._subscribeError(channel, this._createErrorObject('permission denied', 103));\n continue;\n } else {\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n continue;\n }\n\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n }\n }\n\n if (batch) {\n this.stopBatching();\n }\n\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n subscribe(channel, events) {\n const currentSub = this._getSub(channel);\n if (currentSub !== null) {\n currentSub._setEvents(events);\n if (currentSub._isUnsubscribed()) {\n currentSub.subscribe();\n }\n return currentSub;\n }\n const sub = new Subscription(this, channel, events);\n this._subs[channel] = sub;\n sub.subscribe();\n return sub;\n };\n}\n","import {Centrifuge} from './centrifuge.js';\nexport default Centrifuge;\n","export const JsonMethodType = {\n CONNECT: 0,\n SUBSCRIBE: 1,\n UNSUBSCRIBE: 2,\n PUBLISH: 3,\n PRESENCE: 4,\n PRESENCE_STATS: 5,\n HISTORY: 6,\n PING: 7,\n SEND: 8,\n RPC: 9,\n REFRESH: 10,\n SUB_REFRESH: 11\n};\n\nexport const JsonPushType = {\n PUBLICATION: 0,\n JOIN: 1,\n LEAVE: 2,\n UNSUB: 3,\n MESSAGE: 4,\n SUB: 5\n};\n\nexport class JsonEncoder {\n encodeCommands(commands) {\n const encodedCommands = [];\n for (const i in commands) {\n if (commands.hasOwnProperty(i)) {\n encodedCommands.push(JSON.stringify(commands[i]));\n }\n }\n return encodedCommands.join('\\n');\n }\n}\n\nexport class JsonDecoder {\n decodeReplies(data) {\n const replies = [];\n const encodedReplies = data.split('\\n');\n for (const i in encodedReplies) {\n if (encodedReplies.hasOwnProperty(i)) {\n if (!encodedReplies[i]) {\n continue;\n }\n const reply = JSON.parse(encodedReplies[i]);\n replies.push(reply);\n }\n }\n return replies;\n }\n\n decodeCommandResult(methodType, data) {\n return data;\n }\n\n decodePush(data) {\n return data;\n }\n\n decodePushData(pushType, data) {\n return data;\n }\n}\n\n","import EventEmitter from 'events';\n\nimport {\n isFunction\n} from './utils';\n\nconst _STATE_NEW = 0;\nconst _STATE_SUBSCRIBING = 1;\nconst _STATE_SUCCESS = 2;\nconst _STATE_ERROR = 3;\nconst _STATE_UNSUBSCRIBED = 4;\n\nexport default class Subscription extends EventEmitter {\n constructor(centrifuge, channel, events) {\n super();\n this.channel = channel;\n this._centrifuge = centrifuge;\n this._status = _STATE_NEW;\n this._error = null;\n this._isResubscribe = false;\n this._ready = false;\n this._subscriptionPromise = null;\n this._noResubscribe = false;\n this._recoverable = false;\n this._recover = false;\n this._setEvents(events);\n this._initializePromise();\n this._promises = {};\n this._promiseId = 0;\n this.on('error', function (errContext) {\n this._centrifuge._debug('subscription error', errContext);\n });\n }\n\n _nextPromiseId() {\n return ++this._promiseId;\n }\n\n _initializePromise() {\n // this helps us to wait until subscription will successfully\n // subscribe and call actions such as presence, history etc in\n // synchronous way.\n this._ready = false;\n\n this._subscriptionPromise = new Promise((resolve, reject) => {\n this._resolve = value => {\n this._ready = true;\n resolve(value);\n };\n this._reject = err => {\n this._ready = true;\n reject(err);\n };\n }).then(function () {}, function () {});\n };\n\n _needRecover() {\n return this._recoverable === true && this._recover === true;\n };\n\n _setEvents(events) {\n if (!events) {\n return;\n }\n if (isFunction(events)) {\n // events is just a function to handle publication received from channel.\n this.on('publish', events);\n } else if (Object.prototype.toString.call(events) === Object.prototype.toString.call({})) {\n const knownEvents = ['publish', 'join', 'leave', 'unsubscribe', 'subscribe', 'error'];\n for (let i = 0, l = knownEvents.length; i < l; i++) {\n const ev = knownEvents[i];\n if (ev in events) {\n this.on(ev, events[ev]);\n }\n }\n }\n };\n\n _isNew() {\n return this._status === _STATE_NEW;\n };\n\n _isUnsubscribed() {\n return this._status === _STATE_UNSUBSCRIBED;\n };\n\n _isSubscribing() {\n return this._status === _STATE_SUBSCRIBING;\n };\n\n _isReady() {\n return this._status === _STATE_SUCCESS || this._status === _STATE_ERROR;\n };\n\n _isSuccess() {\n return this._status === _STATE_SUCCESS;\n };\n\n _isError() {\n return this._status === _STATE_ERROR;\n };\n\n _setNew() {\n this._status = _STATE_NEW;\n };\n\n _setSubscribing(isResubscribe) {\n this._isResubscribe = isResubscribe || false;\n if (this._ready === true) {\n // new promise for this subscription\n this._initializePromise();\n }\n this._status = _STATE_SUBSCRIBING;\n };\n\n _setSubscribeSuccess(subscribeResult) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._status = _STATE_SUCCESS;\n const successContext = this._getSubscribeSuccessContext(subscribeResult);\n this._recover = false;\n this.emit('subscribe', successContext);\n this._resolve(successContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].resolve();\n delete this._promises[id];\n }\n };\n\n _setSubscribeError(err) {\n if (this._status === _STATE_ERROR) {\n return;\n }\n this._status = _STATE_ERROR;\n this._error = err;\n const errContext = this._getSubscribeErrorContext();\n this.emit('error', errContext);\n this._reject(errContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n };\n\n _triggerUnsubscribe() {\n this.emit('unsubscribe', {\n channel: this.channel\n });\n };\n\n _setUnsubscribed(noResubscribe) {\n this._centrifuge._clearSubRefreshTimeout(this.channel);\n if (this._status === _STATE_UNSUBSCRIBED) {\n return;\n }\n const needTrigger = this._status === _STATE_SUCCESS;\n this._status = _STATE_UNSUBSCRIBED;\n if (noResubscribe === true) {\n this._recover = false;\n this._noResubscribe = true;\n delete this._centrifuge._lastSeq[this.channel];\n delete this._centrifuge._lastGen[this.channel];\n delete this._centrifuge._lastEpoch[this.channel];\n }\n if (needTrigger) {\n this._triggerUnsubscribe();\n }\n };\n\n _shouldResubscribe() {\n return !this._noResubscribe;\n };\n\n _getSubscribeSuccessContext(subscribeResult) {\n let ctx = {\n channel: this.channel,\n isResubscribe: this._isResubscribe\n };\n if (subscribeResult) {\n // subscribeResult not available when called from Subscription.ready method at the moment.\n ctx = this._centrifuge._expandSubscribeContext(ctx, subscribeResult);\n }\n return ctx;\n };\n\n _getSubscribeErrorContext() {\n const subscribeErrorContext = this._error;\n subscribeErrorContext.channel = this.channel;\n subscribeErrorContext.isResubscribe = this._isResubscribe;\n return subscribeErrorContext;\n };\n\n ready(callback, errback) {\n if (this._ready) {\n if (this._isSuccess()) {\n callback(this._getSubscribeSuccessContext());\n } else {\n errback(this._getSubscribeErrorContext());\n }\n }\n };\n\n subscribe() {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._noResubscribe = false;\n this._centrifuge._subscribe(this);\n };\n\n unsubscribe() {\n this._setUnsubscribed(true);\n this._centrifuge._unsubscribe(this);\n };\n\n _methodCall() {\n if (this._isSuccess()) {\n return Promise.resolve();\n } else if (this._isError()) {\n return Promise.reject(this._error);\n }\n let subPromise = new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({'code': 0, 'message': 'timeout'});\n }, this._centrifuge._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n return subPromise;\n }\n\n publish(data) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.publish(self.channel, data);\n });\n };\n\n presence() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presence(self.channel);\n });\n };\n\n presenceStats() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presenceStats(self.channel);\n });\n };\n\n history(options) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.history(self.channel, options);\n });\n };\n}\n","export function startsWith(value, prefix) {\n return value.lastIndexOf(prefix, 0) === 0;\n};\n\nexport function isFunction(value) {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'function';\n};\n\nexport function log(level, args) {\n if (global.console) {\n const logger = global.console[level];\n\n if (isFunction(logger)) {\n logger.apply(global.console, args);\n }\n }\n};\n\nexport function backoff(step, min, max) {\n const jitter = 0.5 * Math.random();\n const interval = Math.min(max, min * Math.pow(2, step + 1));\n\n return Math.floor((1 - jitter) * interval);\n};\n\nexport function errorExists(data) {\n return 'error' in data && data.error !== null;\n};\n\nexport function extend(a, b) {\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n return a;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function eventListener() {\n if (errorListener !== undefined) {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n var errorListener;\n\n // Adding an error listener is not optional because\n // if an error is thrown on an event emitter we cannot\n // guarantee that the actual event we are waiting will\n // be fired. The result could be a silent way to create\n // memory or file descriptor leaks, which is something\n // we should avoid.\n if (name !== 'error') {\n errorListener = function errorListener(err) {\n emitter.removeListener(name, eventListener);\n reject(err);\n };\n\n emitter.once('error', errorListener);\n }\n\n emitter.once(name, eventListener);\n });\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(579);\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/centrifuge.protobuf.js b/dist/centrifuge.protobuf.js index 638d27f1..f6263791 100644 --- a/dist/centrifuge.protobuf.js +++ b/dist/centrifuge.protobuf.js @@ -2827,6 +2827,11 @@ var Centrifuge = /*#__PURE__*/function (_EventEmitter) { } ; + + if (result.data) { + ctx.data = result.data; + } + return ctx; } }, { diff --git a/dist/centrifuge.protobuf.js.map b/dist/centrifuge.protobuf.js.map index e608fd3d..0a1ca93c 100644 --- a/dist/centrifuge.protobuf.js.map +++ b/dist/centrifuge.protobuf.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://Centrifuge/webpack/universalModuleDefinition","webpack://Centrifuge/./node_modules/@protobufjs/aspromise/index.js","webpack://Centrifuge/./node_modules/@protobufjs/base64/index.js","webpack://Centrifuge/./node_modules/@protobufjs/codegen/index.js","webpack://Centrifuge/./node_modules/@protobufjs/eventemitter/index.js","webpack://Centrifuge/./node_modules/@protobufjs/fetch/index.js","webpack://Centrifuge/./node_modules/@protobufjs/float/index.js","webpack://Centrifuge/./node_modules/@protobufjs/inquire/index.js","webpack://Centrifuge/./node_modules/@protobufjs/path/index.js","webpack://Centrifuge/./node_modules/@protobufjs/pool/index.js","webpack://Centrifuge/./node_modules/@protobufjs/utf8/index.js","webpack://Centrifuge/./src/centrifuge.js","webpack://Centrifuge/./src/index_protobuf.js","webpack://Centrifuge/./src/json.js","webpack://Centrifuge/./src/protobuf.js","webpack://Centrifuge/./src/subscription.js","webpack://Centrifuge/./src/utils.js","webpack://Centrifuge/./node_modules/events/events.js","webpack://Centrifuge/./node_modules/protobufjs/light.js","webpack://Centrifuge/./node_modules/protobufjs/src/converter.js","webpack://Centrifuge/./node_modules/protobufjs/src/decoder.js","webpack://Centrifuge/./node_modules/protobufjs/src/encoder.js","webpack://Centrifuge/./node_modules/protobufjs/src/enum.js","webpack://Centrifuge/./node_modules/protobufjs/src/field.js","webpack://Centrifuge/./node_modules/protobufjs/src/index-light.js","webpack://Centrifuge/./node_modules/protobufjs/src/index-minimal.js","webpack://Centrifuge/./node_modules/protobufjs/src/mapfield.js","webpack://Centrifuge/./node_modules/protobufjs/src/message.js","webpack://Centrifuge/./node_modules/protobufjs/src/method.js","webpack://Centrifuge/./node_modules/protobufjs/src/namespace.js","webpack://Centrifuge/./node_modules/protobufjs/src/object.js","webpack://Centrifuge/./node_modules/protobufjs/src/oneof.js","webpack://Centrifuge/./node_modules/protobufjs/src/reader.js","webpack://Centrifuge/./node_modules/protobufjs/src/reader_buffer.js","webpack://Centrifuge/./node_modules/protobufjs/src/root.js","webpack://Centrifuge/./node_modules/protobufjs/src/roots.js","webpack://Centrifuge/./node_modules/protobufjs/src/rpc.js","webpack://Centrifuge/./node_modules/protobufjs/src/rpc/service.js","webpack://Centrifuge/./node_modules/protobufjs/src/service.js","webpack://Centrifuge/./node_modules/protobufjs/src/type.js","webpack://Centrifuge/./node_modules/protobufjs/src/types.js","webpack://Centrifuge/./node_modules/protobufjs/src/util.js","webpack://Centrifuge/./node_modules/protobufjs/src/util/longbits.js","webpack://Centrifuge/./node_modules/protobufjs/src/util/minimal.js","webpack://Centrifuge/./node_modules/protobufjs/src/verifier.js","webpack://Centrifuge/./node_modules/protobufjs/src/wrappers.js","webpack://Centrifuge/./node_modules/protobufjs/src/writer.js","webpack://Centrifuge/./node_modules/protobufjs/src/writer_buffer.js","webpack://Centrifuge/webpack/bootstrap","webpack://Centrifuge/webpack/runtime/global","webpack://Centrifuge/webpack/startup"],"names":["_errorTimeout","_errorConnectionClosed","Centrifuge","url","options","_url","_websocket","_sockjs","_isSockjs","_binary","_methodType","_pushType","_encoder","_decoder","_status","_reconnect","_reconnecting","_transport","_transportName","_transportClosed","_messageId","_clientID","_refreshRequired","_subs","_serverSubs","_lastSeq","_lastGen","_lastOffset","_lastEpoch","_messages","_isBatching","_isSubscribeBatching","_privateChannels","_numRefreshFailed","_refreshTimeout","_pingTimeout","_pongTimeout","_subRefreshTimeouts","_retries","_callbacks","_latency","_latencyStart","_connectData","_token","_xhrID","_xhrs","_dispatchPromise","Promise","resolve","_config","debug","name","version","websocket","sockjs","minRetry","maxRetry","timeout","ping","pingInterval","pongWaitTimeout","privateChannelPrefix","onTransportClose","sockjsServer","sockjsTransports","refreshEndpoint","refreshHeaders","refreshParams","refreshData","refreshAttempts","refreshInterval","onRefreshFailed","onRefresh","subscribeEndpoint","subscribeHeaders","subscribeParams","subRefreshInterval","onPrivateSubscribe","_configure","token","data","headers","params","callback","query","_debug","JSON","stringify","xhr","global","XMLHttpRequest","ActiveXObject","i","hasOwnProperty","length","encodeURIComponent","open","withCredentials","setRequestHeader","headerName","onreadystatechange","readyState","status","parsed","parse","responseText","e","error","_log","setTimeout","send","arguments","WebSocket","format","_formatOverride","Error","JsonMethodType","JsonPushType","JsonEncoder","JsonDecoder","configuration","indexOf","_setFormat","SockJS","newStatus","interval","xhrID","abort","reconnect","_stopPing","id","callbacks","clearTimeout","errback","_createErrorObject","channel","sub","_isSuccess","_triggerUnsubscribe","_recover","_shouldResubscribe","_setSubscribing","_setUnsubscribed","_abortInflightXHRs","_clearSubRefreshTimeout","transport","OPEN","commands","_isTransportOpen","command","encodeCommands","sockjsOptions","transports","server","_websocketSupported","binaryType","onopen","onheartbeat","_restartPing","msg","subs","hasSubs","recoverable","seq","gen","offset","epoch","Date","_call","then","resolveCtx","_connectResponse","decodeCommandResult","CONNECT","result","next","rejectCtx","err","code","_disconnect","onerror","onclose","closeEvent","reason","needReconnect","advice","event","_getRetryInterval","_refresh","_connect","onmessage","_dataReceived","_rpc","method","RPC","_methodCall","SEND","isConnected","reject","sent","_transportSend","undefined","since","limit","resultCB","PUBLISH","_getHistoryParams","HISTORY","publications","PRESENCE","presence","PRESENCE_STATS","num_users","num_clients","replies","decodeReplies","finishDispatch","_dispatchSynchronized","p","_dispatchReply","reply","_handleReply","_handlePush","_addMessage","_registerCall","_setStatus","_setupTransport","shouldReconnect","_isDisconnected","_clearConnectedState","emit","close","_refreshFailed","clientID","_newXHRID","cb","resp","jitter","Math","round","random","max","REFRESH","_refreshResponse","_refreshError","context","_ajax","expires","client","_getTTLMilliseconds","ttl","channelsData","channels","channelData","SUB_REFRESH","_getSub","_subRefreshResponse","_subRefreshError","subRefreshTimeout","_subRefresh","isResubscribe","_setNew","SUBSCRIBE","startSubscribeBatching","_subscribe","stopSubscribeBatching","recover","_needRecover","_getLastSeq","_getLastGen","_getLastOffset","_getLastEpoch","_subscribeResponse","_subscribeError","UNSUBSCRIBE","min","isRecover","wasReconnecting","_resetRetry","getTime","startBatching","stopBatching","_startPing","ctx","latency","_processServerSubs","subCtx","_expandSubscribeContext","recovered","pubs","reverse","_handlePublication","_isSubscribing","message","_setSubscribeError","positioned","streamPosition","_setSubscribeSuccess","_recoverable","join","info","_isServerSub","leave","unsub","unsubscribe","resubscribe","subscribe","pub","push","decodePush","type","PUBLICATION","decodePushData","MESSAGE","_handleMessage","JOIN","_handleJoin","LEAVE","_handleLeave","UNSUB","_handleUnsub","SUB","_handleSub","messages","slice","PING","_pingResponse","lastSeq","lastOffset","lastGen","lastEpoch","errObject","_nextMessageId","_isConnected","_ping","_flush","authChannels","batch","events","currentSub","_setEvents","_isUnsubscribed","Subscription","EventEmitter","CentrifugeProtobuf","encodedCommands","encodedReplies","split","methodType","pushType","protobuf","require","proto","Root","fromJSON","methodValues","lookupEnum","values","protobufMethodType","methodSchema","lookupType","protobufPushType","PushSchema","Push","Command","Reply","ProtobufEncoder","writer","Writer","create","Object","assign","encode","finish","encodeDelimited","ProtobufDecoder","reader","Reader","Uint8Array","pos","len","decodeDelimited","_decode","res","decode","_STATE_NEW","_STATE_SUBSCRIBING","_STATE_SUCCESS","_STATE_ERROR","_STATE_UNSUBSCRIBED","centrifuge","_centrifuge","_error","_isResubscribe","_ready","_subscriptionPromise","_noResubscribe","_initializePromise","_promises","_promiseId","on","errContext","_resolve","value","_reject","prototype","toString","call","knownEvents","l","ev","subscribeResult","successContext","_getSubscribeSuccessContext","_getSubscribeErrorContext","noResubscribe","needTrigger","subscribeErrorContext","_unsubscribe","_isError","subPromise","rej","_nextPromiseId","self","publish","presenceStats","history","startsWith","prefix","lastIndexOf","isFunction","log","level","args","console","logger","apply","backoff","step","pow","floor","errorExists","extend","a","b","key"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;;ACVa;AACb;;AAEA;AACA,wBAAwB,qBAAqB;AAC7C;AACA,UAAU;AACV,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,aAAa;AACb;;AAEA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,EAAE;AACb,WAAW,KAAK;AAChB,aAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;;;;;;;ACnDa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,eAAe,QAAQ;AACvB;;AAEA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA,UAAU;AACV,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA,8BAA8B,EAAE,mBAAmB,EAAE,iBAAiB,EAAE;AACxE;;;;;;;;AC1Ia;AACb;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc;AACd,eAAe,yBAAyB;AACxC,eAAe,KAAK;AACpB,iBAAiB,iBAAiB;AAClC,gBAAgB,MAAM;AACtB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF;AAClF;AACA,sCAAsC;AACtC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA,0IAA0I,gCAAgC;AAC1K;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;;;;;;;AClGa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,sBAAsB;AACpC;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;;;;;;;;AC3Ea;AACb;;AAEA,gBAAgB,mBAAO,CAAC,GAAuB;AAC/C,gBAAgB,mBAAO,CAAC,GAAqB;;AAE7C;;AAEA;AACA,mCAAmC,iBAAiB;AACpD;AACA,UAAU;AACV,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;;AAEA;AACA,uBAAuB,iBAAiB;AACxC;AACA,UAAU;AACV,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,cAAc;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,yDAAyD;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,cAAc;AACzB,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,aAAa,2BAA2B;AACxC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6BAA6B;AAC5D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;;AAEA;AACA;AACA;;;;;;;;AClHa;;AAEb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK,IAAI;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK,IAAI;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa,0CAA0C;AACvD;AACA;AACA,aAAa;AACb;AACA,oDAAoD;AACpD;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,KAAK;;AAEL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC9Ua;AACb;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA,8DAA8D;AAC9D;AACA;AACA,KAAK,aAAa;AAClB;AACA;;;;;;;;AChBa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA,4BAA4B,GAAG;AAC/B;AACA;AACA;AACA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChEa;AACb;;AAEA;AACA,4BAA4B,gBAAgB;AAC5C;AACA,UAAU;AACV,WAAW,OAAO;AAClB,aAAa,WAAW;AACxB;;AAEA;AACA,wBAAwB,gBAAgB;AACxC;AACA,UAAU;AACV,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,WAAW;AACxB,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/Ca;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,WAAW;AACX,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACxGA;;AACA;;AAEA;;AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,IAAMA,aAAa,GAAG,SAAtB;AACA,IAAMC,sBAAsB,GAAG,mBAA/B;;IAEaC,U;;;;;AAEX,sBAAYC,GAAZ,EAAiBC,OAAjB,EAA0B;AAAA;;AAAA;;AACxB;AACA,UAAKC,IAAL,GAAYF,GAAZ;AACA,UAAKG,UAAL,GAAkB,IAAlB;AACA,UAAKC,OAAL,GAAe,IAAf;AACA,UAAKC,SAAL,GAAiB,KAAjB;AACA,UAAKC,OAAL,GAAe,KAAf;AACA,UAAKC,WAAL,GAAmB,IAAnB;AACA,UAAKC,SAAL,GAAiB,IAAjB;AACA,UAAKC,QAAL,GAAgB,IAAhB;AACA,UAAKC,QAAL,GAAgB,IAAhB;AACA,UAAKC,OAAL,GAAe,cAAf;AACA,UAAKC,UAAL,GAAkB,IAAlB;AACA,UAAKC,aAAL,GAAqB,KAArB;AACA,UAAKC,UAAL,GAAkB,IAAlB;AACA,UAAKC,cAAL,GAAsB,IAAtB;AACA,UAAKC,gBAAL,GAAwB,IAAxB;AACA,UAAKC,UAAL,GAAkB,CAAlB;AACA,UAAKC,SAAL,GAAiB,IAAjB;AACA,UAAKC,gBAAL,GAAwB,KAAxB;AACA,UAAKC,KAAL,GAAa,EAAb;AACA,UAAKC,WAAL,GAAmB,EAAnB;AACA,UAAKC,QAAL,GAAgB,EAAhB;AACA,UAAKC,QAAL,GAAgB,EAAhB;AACA,UAAKC,WAAL,GAAmB,EAAnB;AACA,UAAKC,UAAL,GAAkB,EAAlB;AACA,UAAKC,SAAL,GAAiB,EAAjB;AACA,UAAKC,WAAL,GAAmB,KAAnB;AACA,UAAKC,oBAAL,GAA4B,KAA5B;AACA,UAAKC,gBAAL,GAAwB,EAAxB;AACA,UAAKC,iBAAL,GAAyB,CAAzB;AACA,UAAKC,eAAL,GAAuB,IAAvB;AACA,UAAKC,YAAL,GAAoB,IAApB;AACA,UAAKC,YAAL,GAAoB,IAApB;AACA,UAAKC,mBAAL,GAA2B,EAA3B;AACA,UAAKC,QAAL,GAAgB,CAAhB;AACA,UAAKC,UAAL,GAAkB,EAAlB;AACA,UAAKC,QAAL,GAAgB,IAAhB;AACA,UAAKC,aAAL,GAAqB,IAArB;AACA,UAAKC,YAAL,GAAoB,IAApB;AACA,UAAKC,MAAL,GAAc,IAAd;AACA,UAAKC,MAAL,GAAc,CAAd;AACA,UAAKC,KAAL,GAAa,EAAb;AACA,UAAKC,gBAAL,GAAwBC,OAAO,CAACC,OAAR,EAAxB;AACA,UAAKC,OAAL,GAAe;AACbC,WAAK,EAAE,KADM;AAEbC,UAAI,EAAE,EAFO;AAGbC,aAAO,EAAE,EAHI;AAIbC,eAAS,EAAE,IAJE;AAKbC,YAAM,EAAE,IALK;AAMbC,cAAQ,EAAE,IANG;AAObC,cAAQ,EAAE,KAPG;AAQbC,aAAO,EAAE,IARI;AASbC,UAAI,EAAE,IATO;AAUbC,kBAAY,EAAE,KAVD;AAWbC,qBAAe,EAAE,IAXJ;AAYbC,0BAAoB,EAAE,GAZT;AAabC,sBAAgB,EAAE,IAbL;AAcbC,kBAAY,EAAE,IAdD;AAebC,sBAAgB,EAAE,CAChB,WADgB,EAEhB,eAFgB,EAGhB,eAHgB,EAIhB,aAJgB,EAKhB,oBALgB,EAMhB,iBANgB,EAOhB,aAPgB,EAQhB,aARgB,EAShB,oBATgB,EAUhB,eAVgB,CAfL;AA2BbC,qBAAe,EAAE,qBA3BJ;AA4BbC,oBAAc,EAAE,EA5BH;AA6BbC,mBAAa,EAAE,EA7BF;AA8BbC,iBAAW,EAAE,EA9BA;AA+BbC,qBAAe,EAAE,IA/BJ;AAgCbC,qBAAe,EAAE,IAhCJ;AAiCbC,qBAAe,EAAE,IAjCJ;AAkCbC,eAAS,EAAE,IAlCE;AAmCbC,uBAAiB,EAAE,uBAnCN;AAoCbC,sBAAgB,EAAE,EApCL;AAqCbC,qBAAe,EAAE,EArCJ;AAsCbC,wBAAkB,EAAE,IAtCP;AAuCbC,wBAAkB,EAAE;AAvCP,KAAf;;AAyCA,UAAKC,UAAL,CAAgB1E,OAAhB;;AArFwB;AAsFzB;;;;6BAEQ2E,K,EAAO;AACd,WAAKpC,MAAL,GAAcoC,KAAd;AACD;;;mCAEcC,I,EAAM;AACnB,WAAKtC,YAAL,GAAoBsC,IAApB;AACD;;;sCAEiBC,O,EAAS;AACzB,WAAKhC,OAAL,CAAaiB,cAAb,GAA8Be,OAA9B;AACD;;;qCACgBC,M,EAAQ;AACvB,WAAKjC,OAAL,CAAakB,aAAb,GAA6Be,MAA7B;AACD;;;mCACcF,I,EAAM;AACnB,WAAK/B,OAAL,CAAamB,WAAb,GAA2BY,IAA3B;AACD;;;wCAEmBC,O,EAAS;AAC3B,WAAKhC,OAAL,CAAayB,gBAAb,GAAgCO,OAAhC;AACD;;;uCACkBC,M,EAAQ;AACzB,WAAKjC,OAAL,CAAa0B,eAAb,GAA+BO,MAA/B;AACD;;;0BAEK/E,G,EAAK+E,M,EAAQD,O,EAASD,I,EAAMG,Q,EAAU;AAAA;;AAC1C,UAAIC,KAAK,GAAG,EAAZ;;AACA,WAAKC,MAAL,CAAY,yBAAZ,EAAuClF,GAAvC,EAA4C,WAA5C,EAAyDmF,IAAI,CAACC,SAAL,CAAeP,IAAf,CAAzD;;AAEA,UAAMQ,GAAG,GAAIC,qBAAM,CAACC,cAAP,GAAwB,IAAID,qBAAM,CAACC,cAAX,EAAxB,GAAsD,IAAID,qBAAM,CAACE,aAAX,CAAyB,mBAAzB,CAAnE;;AAEA,WAAK,IAAMC,CAAX,IAAgBV,MAAhB,EAAwB;AACtB,YAAIA,MAAM,CAACW,cAAP,CAAsBD,CAAtB,CAAJ,EAA8B;AAC5B,cAAIR,KAAK,CAACU,MAAN,GAAe,CAAnB,EAAsB;AACpBV,iBAAK,IAAI,GAAT;AACD;;AACDA,eAAK,IAAIW,kBAAkB,CAACH,CAAD,CAAlB,GAAwB,GAAxB,GAA8BG,kBAAkB,CAACb,MAAM,CAACU,CAAD,CAAP,CAAzD;AACD;AACF;;AACD,UAAIR,KAAK,CAACU,MAAN,GAAe,CAAnB,EAAsB;AACpBV,aAAK,GAAG,MAAMA,KAAd;AACD;;AACDI,SAAG,CAACQ,IAAJ,CAAS,MAAT,EAAiB7F,GAAG,GAAGiF,KAAvB,EAA8B,IAA9B;;AACA,UAAI,qBAAqBI,GAAzB,EAA8B;AAC5BA,WAAG,CAACS,eAAJ,GAAsB,IAAtB;AACD;;AAEDT,SAAG,CAACU,gBAAJ,CAAqB,kBAArB,EAAyC,gBAAzC;AACAV,SAAG,CAACU,gBAAJ,CAAqB,cAArB,EAAqC,kBAArC;;AACA,WAAK,IAAMC,UAAX,IAAyBlB,OAAzB,EAAkC;AAChC,YAAIA,OAAO,CAACY,cAAR,CAAuBM,UAAvB,CAAJ,EAAwC;AACtCX,aAAG,CAACU,gBAAJ,CAAqBC,UAArB,EAAiClB,OAAO,CAACkB,UAAD,CAAxC;AACD;AACF;;AAEDX,SAAG,CAACY,kBAAJ,GAAyB,YAAM;AAC7B,YAAIZ,GAAG,CAACa,UAAJ,KAAmB,CAAvB,EAA0B;AACxB,cAAIb,GAAG,CAACc,MAAJ,KAAe,GAAnB,EAAwB;AACtB,gBAAItB,KAAJ;AAAA,gBAAUuB,MAAM,GAAG,KAAnB;;AACA,gBAAI;AACFvB,mBAAI,GAAGM,IAAI,CAACkB,KAAL,CAAWhB,GAAG,CAACiB,YAAf,CAAP;AACAF,oBAAM,GAAG,IAAT;AACD,aAHD,CAGE,OAAOG,CAAP,EAAU;AACVvB,sBAAQ,CAAC;AACPwB,qBAAK,EAAE,6BAA6BnB,GAAG,CAACiB,YADjC;AAEPH,sBAAM,EAAE,GAFD;AAGPtB,oBAAI,EAAE;AAHC,eAAD,CAAR;AAKD;;AACD,gBAAIuB,MAAJ,EAAY;AAAE;AACZpB,sBAAQ,CAAC;AACPH,oBAAI,EAAEA,KADC;AAEPsB,sBAAM,EAAE;AAFD,eAAD,CAAR;AAID;AACF,WAlBD,MAkBO;AACL,kBAAI,CAACM,IAAL,CAAU,oCAAV,EAAgDpB,GAAG,CAACc,MAApD;;AACAnB,oBAAQ,CAAC;AACPmB,oBAAM,EAAEd,GAAG,CAACc,MADL;AAEPtB,kBAAI,EAAE;AAFC,aAAD,CAAR;AAID;AACF;AACF,OA5BD;;AA6BA6B,gBAAU,CAAC;AAAA,eAAMrB,GAAG,CAACsB,IAAJ,CAASxB,IAAI,CAACC,SAAL,CAAeP,IAAf,CAAT,CAAN;AAAA,OAAD,EAAuC,EAAvC,CAAV;AACA,aAAOQ,GAAP;AACD;;;2BAEM;AACL,sBAAI,MAAJ,EAAYuB,SAAZ;AACD;;;6BAEQ;AACP,UAAI,KAAK9D,OAAL,CAAaC,KAAb,KAAuB,IAA3B,EAAiC;AAC/B,wBAAI,OAAJ,EAAa6D,SAAb;AACD;AACF;;;0CAEqB;AACpB,UAAI,KAAK9D,OAAL,CAAaI,SAAb,KAA2B,IAA/B,EAAqC;AACnC,eAAO,IAAP;AACD;;AACD,aAAO,EAAE,OAAO2D,SAAP,KAAqB,UAArB,IAAmC,QAAOA,SAAP,yCAAOA,SAAP,OAAqB,QAA1D,CAAP;AACD;;;+BAEUC,M,EAAQ;AACjB,UAAI,KAAKC,eAAL,CAAqBD,MAArB,CAAJ,EAAkC;AAChC;AACD;;AACD,UAAIA,MAAM,KAAK,UAAf,EAA2B;AACzB,cAAM,IAAIE,KAAJ,CAAU,2EAAV,CAAN;AACD;;AACD,WAAK1G,OAAL,GAAe,KAAf;AACA,WAAKC,WAAL,GAAmB0G,oBAAnB;AACA,WAAKzG,SAAL,GAAiB0G,kBAAjB;AACA,WAAKzG,QAAL,GAAgB,IAAI0G,iBAAJ,EAAhB;AACA,WAAKzG,QAAL,GAAgB,IAAI0G,iBAAJ,EAAhB;AACD;;;oCAEeN,M,EAAQ;AACtB,aAAO,KAAP;AACD;;;+BAEUO,a,EAAe;AACxB,UAAI,EAAE,aAAa/B,qBAAf,CAAJ,EAA4B;AAC1B,cAAM,IAAI0B,KAAJ,CAAU,2BAAV,CAAN;AACD;;AAED,yBAAO,KAAKlE,OAAZ,EAAqBuE,aAAa,IAAI,EAAtC;;AACA,WAAKnC,MAAL,CAAY,mBAAZ,EAAiC,KAAKpC,OAAtC;;AAEA,UAAI,CAAC,KAAK5C,IAAV,EAAgB;AACd,cAAM,IAAI8G,KAAJ,CAAU,cAAV,CAAN;AACD;;AAED,UAAI,uBAAW,KAAK9G,IAAhB,EAAsB,IAAtB,KAA+B,KAAKA,IAAL,CAAUoH,OAAV,CAAkB,iBAAlB,IAAuC,CAAC,CAA3E,EAA8E;AAC5E,aAAKC,UAAL,CAAgB,UAAhB;AACD,OAFD,MAEO;AACL,aAAKA,UAAL,CAAgB,MAAhB;AACD;;AAED,UAAI,uBAAW,KAAKrH,IAAhB,EAAsB,MAAtB,CAAJ,EAAmC;AACjC,aAAKgF,MAAL,CAAY,+CAAZ;;AACA,YAAI,KAAKpC,OAAL,CAAaK,MAAb,KAAwB,IAA5B,EAAkC;AAChC,eAAK+B,MAAL,CAAY,uCAAZ;;AACA,eAAK9E,OAAL,GAAe,KAAK0C,OAAL,CAAaK,MAA5B;AACD,SAHD,MAGO;AACL,cAAI,OAAOmC,qBAAM,CAACkC,MAAd,KAAyB,WAA7B,EAA0C;AACxC,kBAAM,IAAIR,KAAJ,CAAU,sDAAV,CAAN;AACD;;AACD,eAAK9B,MAAL,CAAY,6BAAZ;;AACA,eAAK9E,OAAL,GAAekF,qBAAM,CAACkC,MAAtB;AACD;AACF,OAZD,MAYO;AACL,aAAKtC,MAAL,CAAY,2CAAZ;AACD;AACF;;;+BAEUuC,S,EAAW;AACpB,UAAI,KAAK9G,OAAL,KAAiB8G,SAArB,EAAgC;AAC9B,aAAKvC,MAAL,CAAY,QAAZ,EAAsB,KAAKvE,OAA3B,EAAoC,IAApC,EAA0C8G,SAA1C;;AACA,aAAK9G,OAAL,GAAe8G,SAAf;AACD;AACF;;;sCAEiB;AAChB,aAAO,KAAK9G,OAAL,KAAiB,cAAxB;AACD;;;oCAEe;AACd,aAAO,KAAKA,OAAL,KAAiB,YAAxB;AACD;;;mCAEc;AACb,aAAO,KAAKA,OAAL,KAAiB,WAAxB;AACD;;;qCAEgB;AACf,aAAO,EAAE,KAAKM,UAAd;AACD;;;kCAEa;AACZ,WAAKiE,MAAL,CAAY,0BAAZ;;AACA,WAAK/C,QAAL,GAAgB,CAAhB;AACD;;;wCAEmB;AAClB,UAAMuF,QAAQ,GAAG,oBAAQ,KAAKvF,QAAb,EAAuB,KAAKW,OAAL,CAAaM,QAApC,EAA8C,KAAKN,OAAL,CAAaO,QAA3D,CAAjB;AAEA,WAAKlB,QAAL,IAAiB,CAAjB;AACA,aAAOuF,QAAP;AACD;;;yCAEoB;AACnB,WAAK,IAAMC,KAAX,IAAoB,KAAKjF,KAAzB,EAAgC;AAC9B,YAAI;AACF,eAAKA,KAAL,CAAWiF,KAAX,EAAkBC,KAAlB;AACD,SAFD,CAEE,OAAOrB,CAAP,EAAU;AACV,eAAKrB,MAAL,CAAY,oBAAZ,EAAkCqB,CAAlC;AACD;;AACD,eAAO,KAAK7D,KAAL,CAAWiF,KAAX,CAAP;AACD;AACF;;;yCAEoBE,S,EAAW;AAC9B,WAAK3G,SAAL,GAAiB,IAAjB;;AACA,WAAK4G,SAAL,GAF8B,CAI9B;;;AACA,WAAK,IAAMC,EAAX,IAAiB,KAAK3F,UAAtB,EAAkC;AAChC,YAAI,KAAKA,UAAL,CAAgBsD,cAAhB,CAA+BqC,EAA/B,CAAJ,EAAwC;AACtC,cAAMC,SAAS,GAAG,KAAK5F,UAAL,CAAgB2F,EAAhB,CAAlB;AACAE,sBAAY,CAACD,SAAS,CAAC1E,OAAX,CAAZ;AACA,cAAM4E,OAAO,GAAGF,SAAS,CAACE,OAA1B;;AACA,cAAI,CAACA,OAAL,EAAc;AACZ;AACD;;AACDA,iBAAO,CAAC;AAAC1B,iBAAK,EAAE,KAAK2B,kBAAL,CAAwB,cAAxB;AAAR,WAAD,CAAP;AACD;AACF;;AACD,WAAK/F,UAAL,GAAkB,EAAlB,CAhB8B,CAkB9B;;AACA,WAAK,IAAMgG,OAAX,IAAsB,KAAKhH,KAA3B,EAAkC;AAChC,YAAI,KAAKA,KAAL,CAAWsE,cAAX,CAA0B0C,OAA1B,CAAJ,EAAwC;AACtC,cAAMC,GAAG,GAAG,KAAKjH,KAAL,CAAWgH,OAAX,CAAZ;;AAEA,cAAIP,SAAJ,EAAe;AACb,gBAAIQ,GAAG,CAACC,UAAJ,EAAJ,EAAsB;AACpBD,iBAAG,CAACE,mBAAJ;;AACAF,iBAAG,CAACG,QAAJ,GAAe,IAAf;AACD;;AACD,gBAAIH,GAAG,CAACI,kBAAJ,EAAJ,EAA8B;AAC5BJ,iBAAG,CAACK,eAAJ;AACD;AACF,WARD,MAQO;AACLL,eAAG,CAACM,gBAAJ;AACD;AACF;AACF;;AAED,WAAKC,kBAAL,GArC8B,CAuC9B;;;AACA,UAAI,KAAK7G,eAAL,KAAyB,IAA7B,EAAmC;AACjCkG,oBAAY,CAAC,KAAKlG,eAAN,CAAZ;AACA,aAAKA,eAAL,GAAuB,IAAvB;AACD,OA3C6B,CA6C9B;;;AACA,WAAK,IAAMqG,QAAX,IAAsB,KAAKlG,mBAA3B,EAAgD;AAC9C,YAAI,KAAKA,mBAAL,CAAyBwD,cAAzB,CAAwC0C,QAAxC,KAAoD,KAAKlG,mBAAL,CAAyBkG,QAAzB,CAAxD,EAA2F;AACzF,eAAKS,uBAAL,CAA6BT,QAA7B;AACD;AACF;;AACD,WAAKlG,mBAAL,GAA2B,EAA3B;;AAEA,UAAI,CAAC,KAAKtB,UAAV,EAAsB;AACpB;AACA,aAAKQ,KAAL,GAAa,EAAb;AACD;AACF;;;uCAEkB;AACjB,UAAI,KAAKf,SAAT,EAAoB;AAClB,eAAO,KAAKS,UAAL,IACL,KAAKA,UAAL,CAAgBgI,SADX,IAEL,KAAKhI,UAAL,CAAgBgI,SAAhB,CAA0B5C,UAA1B,KAAyC,KAAKpF,UAAL,CAAgBgI,SAAhB,CAA0BC,IAFrE;AAGD;;AACD,aAAO,KAAKjI,UAAL,IAAmB,KAAKA,UAAL,CAAgBoF,UAAhB,KAA+B,KAAKpF,UAAL,CAAgBiI,IAAzE;AACD;;;mCAEcC,Q,EAAU;AACvB,UAAI,CAACA,QAAQ,CAACrD,MAAd,EAAsB;AACpB,eAAO,IAAP;AACD;;AAED,UAAI,CAAC,KAAKsD,gBAAL,EAAL,EAA8B;AAC5B;AACA,aAAK,IAAIC,OAAT,IAAoBF,QAApB,EAA8B;AAC5B,cAAIjB,EAAE,GAAGmB,OAAO,CAACnB,EAAjB;;AACA,cAAI,EAAEA,EAAE,IAAI,KAAK3F,UAAb,CAAJ,EAA8B;AAC5B;AACD;;AACD,cAAM4F,SAAS,GAAG,KAAK5F,UAAL,CAAgB2F,EAAhB,CAAlB;AACAE,sBAAY,CAAC,KAAK7F,UAAL,CAAgB2F,EAAhB,EAAoBzE,OAArB,CAAZ;AACA,iBAAO,KAAKlB,UAAL,CAAgB2F,EAAhB,CAAP;AACA,cAAMG,OAAO,GAAGF,SAAS,CAACE,OAA1B;AACAA,iBAAO,CAAC;AAAC1B,iBAAK,EAAE,KAAK2B,kBAAL,CAAwBrI,sBAAxB,EAAgD,CAAhD;AAAR,WAAD,CAAP;AACD;;AACD,eAAO,KAAP;AACD;;AACD,WAAKgB,UAAL,CAAgB6F,IAAhB,CAAqB,KAAKlG,QAAL,CAAc0I,cAAd,CAA6BH,QAA7B,CAArB;;AACA,aAAO,IAAP;AACD;;;sCAEiB;AAAA;;AAChB,WAAK3I,SAAL,GAAiB,KAAjB,CADgB,CAGhB;;AACA,UAAI,KAAKD,OAAL,KAAiB,IAArB,EAA2B;AACzB,YAAMgJ,aAAa,GAAG;AACpBC,oBAAU,EAAE,KAAKvG,OAAL,CAAae;AADL,SAAtB;;AAIA,YAAI,KAAKf,OAAL,CAAac,YAAb,KAA8B,IAAlC,EAAwC;AACtCwF,uBAAa,CAACE,MAAd,GAAuB,KAAKxG,OAAL,CAAac,YAApC;AACD;;AACD,aAAKvD,SAAL,GAAiB,IAAjB;AACA,aAAKS,UAAL,GAAkB,IAAI,KAAKV,OAAT,CAAiB,KAAKF,IAAtB,EAA4B,IAA5B,EAAkCkJ,aAAlC,CAAlB;AACD,OAVD,MAUO;AACL,YAAI,CAAC,KAAKG,mBAAL,EAAL,EAAiC;AAC/B,eAAKrE,MAAL,CAAY,gEAAZ;;AACA;AACD;;AACD,YAAI,KAAKpC,OAAL,CAAaI,SAAb,KAA2B,IAA/B,EAAqC;AACnC,eAAK/C,UAAL,GAAkB,KAAK2C,OAAL,CAAaI,SAA/B;AACD,SAFD,MAEO;AACL,eAAK/C,UAAL,GAAkB0G,SAAlB;AACD;;AACD,aAAK/F,UAAL,GAAkB,IAAI,KAAKX,UAAT,CAAoB,KAAKD,IAAzB,CAAlB;;AACA,YAAI,KAAKI,OAAL,KAAiB,IAArB,EAA2B;AACzB,eAAKQ,UAAL,CAAgB0I,UAAhB,GAA6B,aAA7B;AACD;AACF;;AAED,WAAK1I,UAAL,CAAgB2I,MAAhB,GAAyB,YAAM;AAC7B,cAAI,CAACzI,gBAAL,GAAwB,KAAxB;;AAEA,YAAI,MAAI,CAACX,SAAT,EAAoB;AAClB,gBAAI,CAACU,cAAL,GAAsB,YAAY,MAAI,CAACD,UAAL,CAAgBgI,SAAlD;;AACA,gBAAI,CAAChI,UAAL,CAAgB4I,WAAhB,GAA8B;AAAA,mBAAM,MAAI,CAACC,YAAL,EAAN;AAAA,WAA9B;AACD,SAHD,MAGO;AACL,gBAAI,CAAC5I,cAAL,GAAsB,WAAtB;AACD,SAR4B,CAU7B;;;AACA,YAAM6I,GAAG,GAAG,CACV;AADU,SAAZ;;AAIA,YAAI,MAAI,CAACpH,MAAL,IAAe,MAAI,CAACD,YAApB,IAAoC,MAAI,CAACO,OAAL,CAAaE,IAAjD,IAAyD,MAAI,CAACF,OAAL,CAAaG,OAA1E,EAAmF;AACjF2G,aAAG,CAAC7E,MAAJ,GAAa,EAAb;AACD;;AACD,YAAI,MAAI,CAACvC,MAAT,EAAiB;AACfoH,aAAG,CAAC7E,MAAJ,CAAWH,KAAX,GAAmB,MAAI,CAACpC,MAAxB;AACD;;AACD,YAAI,MAAI,CAACD,YAAT,EAAuB;AACrBqH,aAAG,CAAC7E,MAAJ,CAAWF,IAAX,GAAkB,MAAI,CAACtC,YAAvB;AACD;;AACD,YAAI,MAAI,CAACO,OAAL,CAAaE,IAAjB,EAAuB;AACrB4G,aAAG,CAAC7E,MAAJ,CAAW/B,IAAX,GAAkB,MAAI,CAACF,OAAL,CAAaE,IAA/B;AACD;;AACD,YAAI,MAAI,CAACF,OAAL,CAAaG,OAAjB,EAA0B;AACxB2G,aAAG,CAAC7E,MAAJ,CAAW9B,OAAX,GAAqB,MAAI,CAACH,OAAL,CAAaG,OAAlC;AACD;;AAED,YAAI4G,IAAI,GAAG,EAAX;AACA,YAAIC,OAAO,GAAG,KAAd;;AACA,aAAK,IAAM1B,OAAX,IAAsB,MAAI,CAAC/G,WAA3B,EAAwC;AACtC,cAAI,MAAI,CAACA,WAAL,CAAiBqE,cAAjB,CAAgC0C,OAAhC,KAA4C,MAAI,CAAC/G,WAAL,CAAiB+G,OAAjB,EAA0B2B,WAA1E,EAAuF;AACrFD,mBAAO,GAAG,IAAV;AACA,gBAAIzB,GAAG,GAAG;AACR,yBAAW;AADH,aAAV;;AAGA,gBAAI,MAAI,CAAChH,WAAL,CAAiB+G,OAAjB,EAA0B4B,GAA1B,IAAiC,MAAI,CAAC3I,WAAL,CAAiB+G,OAAjB,EAA0B6B,GAA/D,EAAoE;AAClE,kBAAI,MAAI,CAAC5I,WAAL,CAAiB+G,OAAjB,EAA0B4B,GAA9B,EAAmC;AACjC3B,mBAAG,CAAC,KAAD,CAAH,GAAa,MAAI,CAAChH,WAAL,CAAiB+G,OAAjB,EAA0B4B,GAAvC;AACD;;AACD,kBAAI,MAAI,CAAC3I,WAAL,CAAiB+G,OAAjB,EAA0B6B,GAA9B,EAAmC;AACjC5B,mBAAG,CAAC,KAAD,CAAH,GAAa,MAAI,CAAChH,WAAL,CAAiB+G,OAAjB,EAA0B6B,GAAvC;AACD;AACF,aAPD,MAOO;AACL,kBAAI,MAAI,CAAC5I,WAAL,CAAiB+G,OAAjB,EAA0B8B,MAA9B,EAAsC;AACpC7B,mBAAG,CAAC,QAAD,CAAH,GAAgB,MAAI,CAAChH,WAAL,CAAiB+G,OAAjB,EAA0B8B,MAA1C;AACD;AACF;;AACD,gBAAI,MAAI,CAAC7I,WAAL,CAAiB+G,OAAjB,EAA0B+B,KAA9B,EAAqC;AACnC9B,iBAAG,CAAC,OAAD,CAAH,GAAe,MAAI,CAAChH,WAAL,CAAiB+G,OAAjB,EAA0B+B,KAAzC;AACD;;AACDN,gBAAI,CAACzB,OAAD,CAAJ,GAAgBC,GAAhB;AACD;AACF;;AACD,YAAIyB,OAAJ,EAAa;AACX,cAAI,CAACF,GAAG,CAAC7E,MAAT,EAAiB;AAAC6E,eAAG,CAAC7E,MAAJ,GAAa,EAAb;AAAiB;;AACnC6E,aAAG,CAAC7E,MAAJ,CAAW8E,IAAX,GAAkBA,IAAlB;AACD;;AAED,cAAI,CAACvH,aAAL,GAAqB,IAAI8H,IAAJ,EAArB;;AACA,cAAI,CAACC,KAAL,CAAWT,GAAX,EAAgBU,IAAhB,CAAqB,UAAAC,UAAU,EAAI;AACjC,gBAAI,CAACC,gBAAL,CAAsB,MAAI,CAAC9J,QAAL,CAAc+J,mBAAd,CAAkC,MAAI,CAAClK,WAAL,CAAiBmK,OAAnD,EAA4DH,UAAU,CAACI,MAAvE,CAAtB,EAAsGb,OAAtG;;AACA,cAAIS,UAAU,CAACK,IAAf,EAAqB;AACnBL,sBAAU,CAACK,IAAX;AACD;AACF,SALD,EAKG,UAAAC,SAAS,EAAI;AACd,cAAMC,GAAG,GAAGD,SAAS,CAACrE,KAAtB;;AACA,cAAIsE,GAAG,CAACC,IAAJ,KAAa,GAAjB,EAAsB;AAAE;AACtB,kBAAI,CAAC5J,gBAAL,GAAwB,IAAxB;AACD;;AACD,gBAAI,CAAC6J,WAAL,CAAiB,eAAjB,EAAkC,IAAlC;;AACA,cAAIH,SAAS,CAACD,IAAd,EAAoB;AAClBC,qBAAS,CAACD,IAAV;AACD;AACF,SAdD;AAeD,OA9ED;;AAgFA,WAAK9J,UAAL,CAAgBmK,OAAhB,GAA0B,UAAAzE,KAAK,EAAI;AACjC,cAAI,CAACtB,MAAL,CAAY,uBAAZ,EAAqCsB,KAArC;AACD,OAFD;;AAIA,WAAK1F,UAAL,CAAgBoK,OAAhB,GAA0B,UAAAC,UAAU,EAAI;AACtC,cAAI,CAACnK,gBAAL,GAAwB,IAAxB;AACA,YAAIoK,MAAM,GAAGtL,sBAAb;AACA,YAAIuL,aAAa,GAAG,IAApB;;AAEA,YAAIF,UAAU,IAAI,YAAYA,UAA1B,IAAwCA,UAAU,CAACC,MAAvD,EAA+D;AAC7D,cAAI;AACF,gBAAME,MAAM,GAAGnG,IAAI,CAACkB,KAAL,CAAW8E,UAAU,CAACC,MAAtB,CAAf;;AACA,kBAAI,CAAClG,MAAL,CAAY,4BAAZ,EAA0CoG,MAA1C;;AACAF,kBAAM,GAAGE,MAAM,CAACF,MAAhB;AACAC,yBAAa,GAAGC,MAAM,CAACzD,SAAvB;AACD,WALD,CAKE,OAAOtB,CAAP,EAAU;AACV6E,kBAAM,GAAGD,UAAU,CAACC,MAApB;;AACA,kBAAI,CAAClG,MAAL,CAAY,0BAAZ,EAAwCkG,MAAxC;AACD;AACF,SAfqC,CAiBtC;AACA;AACA;AACA;;;AACA,YAAI,MAAI,CAACtI,OAAL,CAAaa,gBAAb,KAAkC,IAAtC,EAA4C;AAC1C,gBAAI,CAACb,OAAL,CAAaa,gBAAb,CAA8B;AAC5B4H,iBAAK,EAAEJ,UADqB;AAE5BC,kBAAM,EAAEA,MAFoB;AAG5BvD,qBAAS,EAAEwD;AAHiB,WAA9B;AAKD;;AAED,cAAI,CAACL,WAAL,CAAiBI,MAAjB,EAAyBC,aAAzB;;AAEA,YAAI,MAAI,CAACzK,UAAL,KAAoB,IAAxB,EAA8B;AAC5B,gBAAI,CAACC,aAAL,GAAqB,IAArB;;AACA,cAAM6G,QAAQ,GAAG,MAAI,CAAC8D,iBAAL,EAAjB;;AAEA,gBAAI,CAACtG,MAAL,CAAY,qBAAqBwC,QAArB,GAAgC,eAA5C;;AACAhB,oBAAU,CAAC,YAAM;AACf,gBAAI,MAAI,CAAC9F,UAAL,KAAoB,IAAxB,EAA8B;AAC5B,kBAAI,MAAI,CAACO,gBAAT,EAA2B;AACzB,sBAAI,CAACsK,QAAL;AACD,eAFD,MAEO;AACL,sBAAI,CAACC,QAAL;AACD;AACF;AACF,WARS,EAQPhE,QARO,CAAV;AASD;AACF,OA9CD;;AAgDA,WAAK5G,UAAL,CAAgB6K,SAAhB,GAA4B,UAAAJ,KAAK,EAAI;AACnC,cAAI,CAACK,aAAL,CAAmBL,KAAK,CAAC1G,IAAzB;AACD,OAFD;AAGD;;;wBAEGA,I,EAAM;AACR,aAAO,KAAKgH,IAAL,CAAU,EAAV,EAAchH,IAAd,CAAP;AACD;;;6BAEQiH,M,EAAQjH,I,EAAM;AACrB,aAAO,KAAKgH,IAAL,CAAUC,MAAV,EAAkBjH,IAAlB,CAAP;AACD;;;yBAEIiH,M,EAAQjH,I,EAAM;AACjB,UAAIE,MAAM,GAAG;AACXF,YAAI,EAAEA;AADK,OAAb;;AAGA,UAAIiH,MAAM,KAAK,EAAf,EAAmB;AACjB/G,cAAM,CAAC+G,MAAP,GAAgBA,MAAhB;AACD;;AAAA;AACD,UAAMlC,GAAG,GAAG;AACVkC,cAAM,EAAE,KAAKvL,WAAL,CAAiBwL,GADf;AAEVhH,cAAM,EAAEA;AAFE,OAAZ;AAIA,aAAO,KAAKiH,WAAL,CAAiBpC,GAAjB,EAAsB,UAAUe,MAAV,EAAkB;AAC7C,eAAOA,MAAP;AACD,OAFM,CAAP;AAGD;;;yBAEI9F,I,EAAM;AACT,UAAM+E,GAAG,GAAG;AACVkC,cAAM,EAAE,KAAKvL,WAAL,CAAiB0L,IADf;AAEVlH,cAAM,EAAE;AACNF,cAAI,EAAEA;AADA;AAFE,OAAZ;;AAOA,UAAI,CAAC,KAAKqH,WAAL,EAAL,EAAyB;AACvB,eAAOtJ,OAAO,CAACuJ,MAAR,CAAe,KAAKhE,kBAAL,CAAwBrI,sBAAxB,EAAgD,CAAhD,CAAf,CAAP;AACD;;AAED,UAAMsM,IAAI,GAAG,KAAKC,cAAL,CAAoB,CAACzC,GAAD,CAApB,CAAb,CAZS,CAYgC;;;AACzC,UAAI,CAACwC,IAAL,EAAW;AACT,eAAOxJ,OAAO,CAACuJ,MAAR,CAAe,KAAKhE,kBAAL,CAAwBrI,sBAAxB,EAAgD,CAAhD,CAAf,CAAP;AACD;;AAAA;AACD,aAAO8C,OAAO,CAACC,OAAR,CAAgB,EAAhB,CAAP;AACD;;;sCAEiBuF,O,EAASnI,O,EAAS;AAClC,UAAI8E,MAAM,GAAG;AACXqD,eAAO,EAAEA;AADE,OAAb;;AAGA,UAAInI,OAAO,KAAKqM,SAAhB,EAA2B;AACzB,YAAIrM,OAAO,CAACsM,KAAZ,EAAmB;AACjBxH,gBAAM,CAAC,WAAD,CAAN,GAAsB,IAAtB;;AACA,cAAI9E,OAAO,CAACsM,KAAR,CAAcrC,MAAlB,EAA0B;AACxBnF,kBAAM,CAAC,QAAD,CAAN,GAAmB9E,OAAO,CAACsM,KAAR,CAAcrC,MAAjC;AACD;;AACD,cAAIjK,OAAO,CAACsM,KAAR,CAAcpC,KAAlB,EAAyB;AACvBpF,kBAAM,CAAC,OAAD,CAAN,GAAkB9E,OAAO,CAACsM,KAAR,CAAcpC,KAAhC;AACD;AACF;;AAAA;;AACD,YAAIlK,OAAO,CAACuM,KAAR,KAAkBF,SAAtB,EAAiC;AAC/BvH,gBAAM,CAAC,WAAD,CAAN,GAAsB,IAAtB;AACAA,gBAAM,CAAC,OAAD,CAAN,GAAkB9E,OAAO,CAACuM,KAA1B;AACD;AACF;;AAAA;AACD,aAAOzH,MAAP;AACD;;;gCAEW6E,G,EAAK6C,Q,EAAU;AAAA;;AACzB,UAAI,CAAC,KAAKP,WAAL,EAAL,EAAyB;AACvB,eAAOtJ,OAAO,CAACuJ,MAAR,CAAe,KAAKhE,kBAAL,CAAwBrI,sBAAxB,EAAgD,CAAhD,CAAf,CAAP;AACD;;AACD,aAAO,IAAI8C,OAAJ,CAAY,UAACC,OAAD,EAAUsJ,MAAV,EAAqB;AACtC,cAAI,CAAC9B,KAAL,CAAWT,GAAX,EAAgBU,IAAhB,CAAqB,UAAAC,UAAU,EAAI;AACjC1H,iBAAO,CAAC4J,QAAQ,CAAC,MAAI,CAAC/L,QAAL,CAAc+J,mBAAd,CAAkCb,GAAG,CAACkC,MAAtC,EAA8CvB,UAAU,CAACI,MAAzD,CAAD,CAAT,CAAP;;AACA,cAAIJ,UAAU,CAACK,IAAf,EAAqB;AACnBL,sBAAU,CAACK,IAAX;AACD;AACF,SALD,EAKG,UAAAC,SAAS,EAAI;AACdsB,gBAAM,CAACtB,SAAS,CAACrE,KAAX,CAAN;;AACA,cAAIqE,SAAS,CAACD,IAAd,EAAoB;AAClBC,qBAAS,CAACD,IAAV;AACD;AACF,SAVD;AAWD,OAZM,CAAP;AAaD;;;4BAEOxC,O,EAASvD,I,EAAM;AACrB,UAAM+E,GAAG,GAAG;AACVkC,cAAM,EAAE,KAAKvL,WAAL,CAAiBmM,OADf;AAEV3H,cAAM,EAAE;AACNqD,iBAAO,EAAEA,OADH;AAENvD,cAAI,EAAEA;AAFA;AAFE,OAAZ;AAOA,aAAO,KAAKmH,WAAL,CAAiBpC,GAAjB,EAAsB,YAAY;AACvC,eAAO,EAAP;AACD,OAFM,CAAP;AAGD;;;4BAEOxB,O,EAASnI,O,EAAS;AACxB,UAAM8E,MAAM,GAAG,KAAK4H,iBAAL,CAAuBvE,OAAvB,EAAgCnI,OAAhC,CAAf;;AACA,UAAM2J,GAAG,GAAG;AACVkC,cAAM,EAAE,KAAKvL,WAAL,CAAiBqM,OADf;AAEV7H,cAAM,EAAEA;AAFE,OAAZ;AAIA,aAAO,KAAKiH,WAAL,CAAiBpC,GAAjB,EAAsB,UAAUe,MAAV,EAAkB;AAC7C,eAAO;AACL,0BAAgBA,MAAM,CAACkC,YADlB;AAEL,mBAASlC,MAAM,CAACR,KAAP,IAAgB,EAFpB;AAGL,oBAAUQ,MAAM,CAACT,MAAP,IAAiB;AAHtB,SAAP;AAKD,OANM,CAAP;AAOD;;;6BAEQ9B,O,EAAS;AAChB,UAAMwB,GAAG,GAAG;AACVkC,cAAM,EAAE,KAAKvL,WAAL,CAAiBuM,QADf;AAEV/H,cAAM,EAAE;AACNqD,iBAAO,EAAEA;AADH;AAFE,OAAZ;AAMA,aAAO,KAAK4D,WAAL,CAAiBpC,GAAjB,EAAsB,UAAUe,MAAV,EAAkB;AAC7C,eAAO;AACL,sBAAYA,MAAM,CAACoC;AADd,SAAP;AAGD,OAJM,CAAP;AAKD;;;kCAEa3E,O,EAAS;AACrB,UAAMwB,GAAG,GAAG;AACVkC,cAAM,EAAE,KAAKvL,WAAL,CAAiByM,cADf;AAEVjI,cAAM,EAAE;AACNqD,iBAAO,EAAEA;AADH;AAFE,OAAZ;AAMA,aAAO,KAAK4D,WAAL,CAAiBpC,GAAjB,EAAsB,UAAUe,MAAV,EAAkB;AAC7C,eAAO;AACL,uBAAaA,MAAM,CAACsC,SADf;AAEL,yBAAetC,MAAM,CAACuC;AAFjB,SAAP;AAID,OALM,CAAP;AAMD;;;kCAEarI,I,EAAM;AAAA;;AAClB,UAAMsI,OAAO,GAAG,KAAKzM,QAAL,CAAc0M,aAAd,CAA4BvI,IAA5B,CAAhB,CADkB,CAElB;AACA;AACA;AACA;;;AACA,WAAKlC,gBAAL,GAAwB,KAAKA,gBAAL,CAAsB2H,IAAtB,CAA2B,YAAM;AACvD,YAAI+C,cAAJ;AACA,cAAI,CAAC1K,gBAAL,GAAwB,IAAIC,OAAJ,CAAY,UAAAC,OAAO,EAAG;AAC5CwK,wBAAc,GAAGxK,OAAjB;AACD,SAFuB,CAAxB;;AAGA,cAAI,CAACyK,qBAAL,CAA2BH,OAA3B,EAAoCE,cAApC;AACD,OANuB,CAAxB;;AAOA,WAAK1D,YAAL;AACD;;;0CAEqBwD,O,EAASE,c,EAAgB;AAAA;;AAC7C,UAAIE,CAAC,GAAG3K,OAAO,CAACC,OAAR,EAAR;;AAD6C,iCAElC4C,CAFkC;AAG3C,YAAI0H,OAAO,CAACzH,cAAR,CAAuBD,CAAvB,CAAJ,EAA+B;AAC7B8H,WAAC,GAAGA,CAAC,CAACjD,IAAF,CAAO,YAAM;AACf,mBAAO,MAAI,CAACkD,cAAL,CAAoBL,OAAO,CAAC1H,CAAD,CAA3B,CAAP;AACD,WAFG,CAAJ;AAGD;AAP0C;;AAE7C,WAAK,IAAMA,CAAX,IAAgB0H,OAAhB,EAAyB;AAAA,cAAd1H,CAAc;AAMxB;;AACD8H,OAAC,GAAGA,CAAC,CAACjD,IAAF,CAAO,YAAM;AACf+C,sBAAc;AACf,OAFG,CAAJ;AAGD;;;mCAEcI,K,EAAO;AACpB,UAAI7C,IAAJ;AACA,UAAM2C,CAAC,GAAG,IAAI3K,OAAJ,CAAY,UAAAC,OAAO,EAAG;AAC9B+H,YAAI,GAAG/H,OAAP;AACD,OAFS,CAAV;;AAIA,UAAI4K,KAAK,KAAKnB,SAAV,IAAuBmB,KAAK,KAAK,IAArC,EAA2C;AACzC,aAAKvI,MAAL,CAAY,uCAAZ;;AACA0F,YAAI;AACJ,eAAO2C,CAAP;AACD;;AAED,UAAMxF,EAAE,GAAG0F,KAAK,CAAC1F,EAAjB;;AAEA,UAAIA,EAAE,IAAIA,EAAE,GAAG,CAAf,EAAkB;AAChB,aAAK2F,YAAL,CAAkBD,KAAlB,EAAyB7C,IAAzB;AACD,OAFD,MAEO;AACL,aAAK+C,WAAL,CAAiBF,KAAK,CAAC9C,MAAvB,EAA+BC,IAA/B;AACD;;AAED,aAAO2C,CAAP;AACD;;;0BAEK3D,G,EAAK;AAAA;;AACT,aAAO,IAAIhH,OAAJ,CAAY,UAACC,OAAD,EAAUsJ,MAAV,EAAqB;AACtC,YAAMpE,EAAE,GAAG,MAAI,CAAC6F,WAAL,CAAiBhE,GAAjB,CAAX;;AACA,cAAI,CAACiE,aAAL,CAAmB9F,EAAnB,EAAuBlF,OAAvB,EAAgCsJ,MAAhC;AACD,OAHM,CAAP;AAID;;;+BAEU;AACT,UAAI,KAAKD,WAAL,EAAJ,EAAwB;AACtB,aAAKhH,MAAL,CAAY,uCAAZ;;AACA;AACD;;AACD,UAAI,KAAKvE,OAAL,KAAiB,YAArB,EAAmC;AACjC;AACD;;AAED,WAAKuE,MAAL,CAAY,kBAAZ;;AACA,WAAK4I,UAAL,CAAgB,YAAhB;;AACA,WAAK5M,SAAL,GAAiB,IAAjB;AACA,WAAKN,UAAL,GAAkB,IAAlB;;AACA,WAAKmN,eAAL;AACD;;;gCAEW3C,M,EAAQ4C,e,EAAiB;AAEnC,UAAMnG,SAAS,GAAGmG,eAAe,IAAI,KAArC;;AACA,UAAInG,SAAS,KAAK,KAAlB,EAAyB;AACvB,aAAKjH,UAAL,GAAkB,KAAlB;AACD;;AAED,UAAI,KAAKqN,eAAL,EAAJ,EAA4B;AAC1B,YAAI,CAACpG,SAAL,EAAgB;AACd,eAAKqG,oBAAL,CAA0BrG,SAA1B;AACD;;AACD;AACD;;AAED,WAAKqG,oBAAL,CAA0BrG,SAA1B;;AAEA,WAAK3C,MAAL,CAAY,eAAZ,EAA6BkG,MAA7B,EAAqC4C,eAArC;;AACA,WAAKF,UAAL,CAAgB,cAAhB;;AAEA,UAAI,KAAK/L,eAAT,EAA0B;AACxBkG,oBAAY,CAAC,KAAKlG,eAAN,CAAZ;AACA,aAAKA,eAAL,GAAuB,IAAvB;AACD;;AACD,UAAI,KAAKlB,aAAL,KAAuB,KAA3B,EAAkC;AAChC;AACA,aAAK,IAAMuH,OAAX,IAAsB,KAAK/G,WAA3B,EAAwC;AACtC,cAAI,KAAKA,WAAL,CAAiBqE,cAAjB,CAAgC0C,OAAhC,CAAJ,EAA8C;AAC5C,iBAAK+F,IAAL,CAAU,aAAV,EAAyB;AAAC/F,qBAAO,EAAEA;AAAV,aAAzB;AACD;AACF;;AACD,aAAK+F,IAAL,CAAU,YAAV,EAAwB;AACtB/C,gBAAM,EAAEA,MADc;AAEtBvD,mBAAS,EAAEA;AAFW,SAAxB;AAID;;AAED,UAAIA,SAAS,KAAK,KAAlB,EAAyB;AACvB,aAAKzG,KAAL,GAAa,EAAb;AACA,aAAKC,WAAL,GAAmB,EAAnB;AACD;;AAED,UAAI,CAAC,KAAKL,gBAAV,EAA4B;AAC1B,aAAKF,UAAL,CAAgBsN,KAAhB;AACD;AACF;;;qCAEgB;AACf,WAAKtM,iBAAL,GAAyB,CAAzB;;AACA,UAAI,CAAC,KAAKmM,eAAL,EAAL,EAA6B;AAC3B,aAAKjD,WAAL,CAAiB,gBAAjB,EAAmC,KAAnC;AACD;;AACD,UAAI,KAAKlI,OAAL,CAAasB,eAAb,KAAiC,IAArC,EAA2C;AACzC,aAAKtB,OAAL,CAAasB,eAAb;AACD;AACF;;;+BAEU;AAAA;;AACT;AACA,WAAKc,MAAL,CAAY,eAAZ;;AAEA,UAAI,KAAKpC,OAAL,CAAaoB,eAAb,KAAiC,CAArC,EAAwC;AACtC,aAAKgB,MAAL,CAAY,+DAAZ;;AACA,aAAKmJ,cAAL;;AACA;AACD;;AAED,UAAI,KAAKtM,eAAL,KAAyB,IAA7B,EAAmC;AACjCkG,oBAAY,CAAC,KAAKlG,eAAN,CAAZ;AACA,aAAKA,eAAL,GAAuB,IAAvB;AACD;;AAED,UAAMuM,QAAQ,GAAG,KAAKpN,SAAtB;;AACA,UAAMyG,KAAK,GAAG,KAAK4G,SAAL,EAAd;;AAEA,UAAMC,EAAE,GAAG,SAALA,EAAK,CAACC,IAAD,EAAU;AACnB,YAAI9G,KAAK,IAAI,MAAI,CAACjF,KAAlB,EAAyB;AACvB,iBAAO,MAAI,CAACA,KAAL,CAAWiF,KAAX,CAAP;AACD;;AACD,YAAI,MAAI,CAACzG,SAAL,KAAmBoN,QAAvB,EAAiC;AAC/B;AACD;;AACD,YAAIG,IAAI,CAACjI,KAAL,IAAciI,IAAI,CAACtI,MAAL,KAAgB,GAAlC,EAAuC;AACrC;AACA;AACA,cAAIsI,IAAI,CAACjI,KAAT,EAAgB;AACd,kBAAI,CAACtB,MAAL,CAAY,mCAAZ,EAAiDuJ,IAAI,CAACjI,KAAtD;AACD,WAFD,MAEO;AACL,kBAAI,CAACtB,MAAL,CAAY,sDAAZ,EAAoEuJ,IAAI,CAACtI,MAAzE;AACD;;AACD,gBAAI,CAACrE,iBAAL;;AACA,cAAI,MAAI,CAACC,eAAL,KAAyB,IAA7B,EAAmC;AACjCkG,wBAAY,CAAC,MAAI,CAAClG,eAAN,CAAZ;AACA,kBAAI,CAACA,eAAL,GAAuB,IAAvB;AACD;;AACD,cAAI,MAAI,CAACe,OAAL,CAAaoB,eAAb,KAAiC,IAAjC,IAAyC,MAAI,CAACpC,iBAAL,IAA0B,MAAI,CAACgB,OAAL,CAAaoB,eAApF,EAAqG;AACnG,kBAAI,CAACmK,cAAL;;AACA;AACD;;AACD,cAAMK,MAAM,GAAGC,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,MAAL,KAAgB,IAAhB,GAAuBF,IAAI,CAACG,GAAL,CAAS,MAAI,CAAChN,iBAAd,EAAiC,EAAjC,CAAlC,CAAf;AACA,cAAM4F,QAAQ,GAAG,MAAI,CAAC5E,OAAL,CAAaqB,eAAb,GAA+BuK,MAAhD;AACA,gBAAI,CAAC3M,eAAL,GAAuB2E,UAAU,CAAC;AAAA,mBAAM,MAAI,CAAC+E,QAAL,EAAN;AAAA,WAAD,EAAwB/D,QAAxB,CAAjC;AACA;AACD;;AACD,cAAI,CAAC5F,iBAAL,GAAyB,CAAzB;AACA,cAAI,CAACU,MAAL,GAAciM,IAAI,CAAC5J,IAAL,CAAUD,KAAxB;;AACA,YAAI,CAAC,MAAI,CAACpC,MAAV,EAAkB;AAChB,gBAAI,CAAC6L,cAAL;;AACA;AACD;;AACD,YAAI,MAAI,CAACJ,eAAL,MAA0B,MAAI,CAACrN,UAAnC,EAA+C;AAC7C,gBAAI,CAACsE,MAAL,CAAY,uCAAZ;;AACA,gBAAI,CAACwG,QAAL;AACD,SAHD,MAGO;AACL,gBAAI,CAACxG,MAAL,CAAY,sBAAZ;;AACA,cAAM0E,GAAG,GAAG;AACVkC,kBAAM,EAAE,MAAI,CAACvL,WAAL,CAAiBwO,OADf;AAEVhK,kBAAM,EAAE;AACNH,mBAAK,EAAE,MAAI,CAACpC;AADN;AAFE,WAAZ;;AAMA,gBAAI,CAAC6H,KAAL,CAAWT,GAAX,EAAgBU,IAAhB,CAAqB,UAAAC,UAAU,EAAI;AACjC,kBAAI,CAACyE,gBAAL,CAAsB,MAAI,CAACtO,QAAL,CAAc+J,mBAAd,CAAkC,MAAI,CAAClK,WAAL,CAAiBwO,OAAnD,EAA4DxE,UAAU,CAACI,MAAvE,CAAtB;;AACA,gBAAIJ,UAAU,CAACK,IAAf,EAAqB;AACnBL,wBAAU,CAACK,IAAX;AACD;AACF,WALD,EAKG,UAAAC,SAAS,EAAI;AACd,kBAAI,CAACoE,aAAL,CAAmBpE,SAAS,CAACrE,KAA7B;;AACA,gBAAIqE,SAAS,CAACD,IAAd,EAAoB;AAClBC,uBAAS,CAACD,IAAV;AACD;AACF,WAVD;AAWD;AACF,OA1DD;;AA4DA,UAAI,KAAK9H,OAAL,CAAauB,SAAb,KAA2B,IAA/B,EAAqC;AACnC,YAAM6K,OAAO,GAAG,EAAhB;;AACA,aAAKpM,OAAL,CAAauB,SAAb,CAAuB6K,OAAvB,EAAgCV,EAAhC;AACD,OAHD,MAGO;AACL,YAAMnJ,GAAG,GAAG,KAAK8J,KAAL,CACV,KAAKrM,OAAL,CAAagB,eADH,EAEV,KAAKhB,OAAL,CAAakB,aAFH,EAGV,KAAKlB,OAAL,CAAaiB,cAHH,EAIV,KAAKjB,OAAL,CAAamB,WAJH,EAKVuK,EALU,CAAZ;;AAOA,aAAK9L,KAAL,CAAWiF,KAAX,IAAoBtC,GAApB;AACD;AACF;;;kCAEayF,G,EAAK;AAAA;;AACjB,WAAK5F,MAAL,CAAY,eAAZ,EAA6B4F,GAA7B;;AACA,UAAI,KAAK/I,eAAT,EAA0B;AACxBkG,oBAAY,CAAC,KAAKlG,eAAN,CAAZ;AACA,aAAKA,eAAL,GAAuB,IAAvB;AACD;;AACD,UAAM2F,QAAQ,GAAG,KAAK5E,OAAL,CAAaqB,eAAb,GAA+BwK,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,MAAL,KAAgB,IAA3B,CAAhD;AACA,WAAK9M,eAAL,GAAuB2E,UAAU,CAAC;AAAA,eAAM,MAAI,CAAC+E,QAAL,EAAN;AAAA,OAAD,EAAwB/D,QAAxB,CAAjC;AACD;;;qCAEgBiD,M,EAAQ;AAAA;;AACvB,UAAI,KAAK5I,eAAT,EAA0B;AACxBkG,oBAAY,CAAC,KAAKlG,eAAN,CAAZ;AACA,aAAKA,eAAL,GAAuB,IAAvB;AACD;;AACD,UAAI4I,MAAM,CAACyE,OAAX,EAAoB;AAClB,aAAKlO,SAAL,GAAiByJ,MAAM,CAAC0E,MAAxB;AACA,aAAKtN,eAAL,GAAuB2E,UAAU,CAAC;AAAA,iBAAM,OAAI,CAAC+E,QAAL,EAAN;AAAA,SAAD,EAAwB,KAAK6D,mBAAL,CAAyB3E,MAAM,CAAC4E,GAAhC,CAAxB,CAAjC;AACD;AACF;;;gCAEW;AACV,WAAK9M,MAAL;AACA,aAAO,KAAKA,MAAZ;AACD;;;gCAEW2F,O,EAAS;AAAA;;AACnB,WAAKlD,MAAL,CAAY,wCAAZ,EAAsDkD,OAAtD;;AAEA,UAAI,KAAKlG,mBAAL,CAAyBkG,OAAzB,MAAsCkE,SAA1C,EAAqD;AACnD,aAAKzD,uBAAL,CAA6BT,OAA7B;AACD,OAFD,MAEO;AACL;AACD;;AAED,UAAMkG,QAAQ,GAAG,KAAKpN,SAAtB;;AACA,UAAMyG,KAAK,GAAG,KAAK4G,SAAL,EAAd;;AAEA,UAAMC,EAAE,GAAG,SAALA,EAAK,CAACC,IAAD,EAAU;AACnB,YAAI9G,KAAK,IAAI,OAAI,CAACjF,KAAlB,EAAyB;AACvB,iBAAO,OAAI,CAACA,KAAL,CAAWiF,KAAX,CAAP;AACD;;AACD,YAAI8G,IAAI,CAACjI,KAAL,IAAciI,IAAI,CAACtI,MAAL,KAAgB,GAA9B,IAAqC,OAAI,CAACjF,SAAL,KAAmBoN,QAA5D,EAAsE;AACpE;AACD;;AACD,YAAIkB,YAAY,GAAG,EAAnB;;AACA,YAAIf,IAAI,CAAC5J,IAAL,CAAU4K,QAAd,EAAwB;AACtB,eAAK,IAAMhK,CAAX,IAAgBgJ,IAAI,CAAC5J,IAAL,CAAU4K,QAA1B,EAAoC;AAClC,gBAAMC,WAAW,GAAGjB,IAAI,CAAC5J,IAAL,CAAU4K,QAAV,CAAmBhK,CAAnB,CAApB;;AACA,gBAAI,CAACiK,WAAW,CAACtH,OAAjB,EAA0B;AACxB;AACD;;AACDoH,wBAAY,CAACE,WAAW,CAACtH,OAAb,CAAZ,GAAoCsH,WAAW,CAAC9K,KAAhD;AACD;AACF;;AAED,YAAMA,KAAK,GAAG4K,YAAY,CAACpH,OAAD,CAA1B;;AACA,YAAI,CAACxD,KAAL,EAAY;AACV;AACD;;AACD,YAAMgF,GAAG,GAAG;AACVkC,gBAAM,EAAE,OAAI,CAACvL,WAAL,CAAiBoP,WADf;AAEV5K,gBAAM,EAAE;AACNqD,mBAAO,EAAEA,OADH;AAENxD,iBAAK,EAAEA;AAFD;AAFE,SAAZ;;AAQA,YAAMyD,GAAG,GAAG,OAAI,CAACuH,OAAL,CAAaxH,OAAb,CAAZ;;AACA,YAAIC,GAAG,KAAK,IAAZ,EAAkB;AAChB;AACD;;AAED,eAAI,CAACgC,KAAL,CAAWT,GAAX,EAAgBU,IAAhB,CAAqB,UAAAC,UAAU,EAAI;AACjC,iBAAI,CAACsF,mBAAL,CACEzH,OADF,EAEE,OAAI,CAAC1H,QAAL,CAAc+J,mBAAd,CAAkC,OAAI,CAAClK,WAAL,CAAiBoP,WAAnD,EAAgEpF,UAAU,CAACI,MAA3E,CAFF;;AAIA,cAAIJ,UAAU,CAACK,IAAf,EAAqB;AACnBL,sBAAU,CAACK,IAAX;AACD;AACF,SARD,EAQG,UAAAC,SAAS,EAAI;AACd,iBAAI,CAACiF,gBAAL,CAAsB1H,OAAtB,EAA+ByC,SAAS,CAACrE,KAAzC;;AACA,cAAIqE,SAAS,CAACD,IAAd,EAAoB;AAClBC,qBAAS,CAACD,IAAV;AACD;AACF,SAbD;AAcD,OAjDD;;AAmDA,UAAM/F,IAAI,GAAG;AACXwK,cAAM,EAAE,KAAKnO,SADF;AAEXuO,gBAAQ,EAAE,CAACrH,OAAD;AAFC,OAAb;;AAKA,UAAI,KAAKtF,OAAL,CAAa4B,kBAAb,KAAoC,IAAxC,EAA8C;AAC5C,aAAK5B,OAAL,CAAa4B,kBAAb,CAAgC;AAC9BG,cAAI,EAAEA;AADwB,SAAhC,EAEG2J,EAFH;AAGD,OAJD,MAIO;AACL,YAAMnJ,GAAG,GAAG,KAAK8J,KAAL,CACV,KAAKrM,OAAL,CAAawB,iBADH,EACsB,KAAKxB,OAAL,CAAa0B,eADnC,EACoD,KAAK1B,OAAL,CAAayB,gBADjE,EACmFM,IADnF,EACyF2J,EADzF,CAAZ;;AAEA,aAAK9L,KAAL,CAAWiF,KAAX,IAAoBtC,GAApB;AACD;AACF;;;4CAEuB+C,O,EAAS;AAC/B,UAAI,KAAKlG,mBAAL,CAAyBkG,OAAzB,MAAsCkE,SAA1C,EAAqD;AACnDrE,oBAAY,CAAC,KAAK/F,mBAAL,CAAyBkG,OAAzB,CAAD,CAAZ;AACA,eAAO,KAAKlG,mBAAL,CAAyBkG,OAAzB,CAAP;AACD;AACF;;;qCAEgBA,O,EAAS0C,G,EAAK;AAAA;;AAC7B,WAAK5F,MAAL,CAAY,4BAAZ,EAA0CkD,OAA1C,EAAmD0C,GAAnD;;AACA,WAAKjC,uBAAL,CAA6BT,OAA7B;;AACA,UAAMC,GAAG,GAAG,KAAKuH,OAAL,CAAaxH,OAAb,CAAZ;;AACA,UAAIC,GAAG,KAAK,IAAZ,EAAkB;AAChB;AACD;;AACD,UAAMqG,MAAM,GAAGC,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,MAAL,KAAgB,IAA3B,CAAf;AACA,UAAIkB,iBAAiB,GAAGrJ,UAAU,CAAC;AAAA,eAAM,OAAI,CAACsJ,WAAL,CAAiB5H,OAAjB,CAAN;AAAA,OAAD,EAAkC,KAAKtF,OAAL,CAAa2B,kBAAb,GAAkCiK,MAApE,CAAlC;AACA,WAAKxM,mBAAL,CAAyBkG,OAAzB,IAAoC2H,iBAApC;AACA;AACD;;;wCAEmB3H,O,EAASuC,M,EAAQ;AAAA;;AACnC,WAAKzF,MAAL,CAAY,8BAAZ,EAA4CkD,OAA5C;;AACA,WAAKS,uBAAL,CAA6BT,OAA7B;;AACA,UAAMC,GAAG,GAAG,KAAKuH,OAAL,CAAaxH,OAAb,CAAZ;;AACA,UAAIC,GAAG,KAAK,IAAZ,EAAkB;AAChB;AACD;;AACD,UAAIsC,MAAM,CAACyE,OAAP,KAAmB,IAAvB,EAA6B;AAC3B,YAAIW,iBAAiB,GAAGrJ,UAAU,CAAC;AAAA,iBAAM,OAAI,CAACsJ,WAAL,CAAiB5H,OAAjB,CAAN;AAAA,SAAD,EAAkC,KAAKkH,mBAAL,CAAyB3E,MAAM,CAAC4E,GAAhC,CAAlC,CAAlC;AACA,aAAKrN,mBAAL,CAAyBkG,OAAzB,IAAoC2H,iBAApC;AACD;;AACD;AACD;;;+BAEU1H,G,EAAK4H,a,EAAe;AAAA;;AAC7B,WAAK/K,MAAL,CAAY,gBAAZ,EAA8BmD,GAAG,CAACD,OAAlC;;AACA,UAAMA,OAAO,GAAGC,GAAG,CAACD,OAApB;;AAEA,UAAI,EAAEA,OAAO,IAAI,KAAKhH,KAAlB,CAAJ,EAA8B;AAC5B,aAAKA,KAAL,CAAWgH,OAAX,IAAsBC,GAAtB;AACD;;AAED,UAAI,CAAC,KAAK6D,WAAL,EAAL,EAAyB;AACvB;AACA7D,WAAG,CAAC6H,OAAJ;;AACA;AACD;;AAED7H,SAAG,CAACK,eAAJ,CAAoBuH,aAApB;;AAEA,UAAMrG,GAAG,GAAG;AACVkC,cAAM,EAAE,KAAKvL,WAAL,CAAiB4P,SADf;AAEVpL,cAAM,EAAE;AACNqD,iBAAO,EAAEA;AADH;AAFE,OAAZ,CAhB6B,CAuB7B;AACA;AACA;AACA;;AACA,UAAI,uBAAWA,OAAX,EAAoB,KAAKtF,OAAL,CAAaY,oBAAjC,CAAJ,EAA4D;AAC1D;AACA,YAAI,KAAK9B,oBAAT,EAA+B;AAC7B,eAAKC,gBAAL,CAAsBuG,OAAtB,IAAiC,IAAjC;AACD,SAFD,MAEO;AACL,eAAKgI,sBAAL;;AACA,eAAKC,UAAL,CAAgBhI,GAAhB;;AACA,eAAKiI,qBAAL;AACD;AACF,OATD,MASO;AACL,YAAMC,OAAO,GAAGlI,GAAG,CAACmI,YAAJ,EAAhB;;AAEA,YAAID,OAAO,KAAK,IAAhB,EAAsB;AACpB3G,aAAG,CAAC7E,MAAJ,CAAWwL,OAAX,GAAqB,IAArB;;AACA,cAAMvG,GAAG,GAAG,KAAKyG,WAAL,CAAiBrI,OAAjB,CAAZ;;AACA,cAAM6B,GAAG,GAAG,KAAKyG,WAAL,CAAiBtI,OAAjB,CAAZ;;AACA,cAAI4B,GAAG,IAAIC,GAAX,EAAgB;AACd,gBAAID,GAAJ,EAAS;AACPJ,iBAAG,CAAC7E,MAAJ,CAAWiF,GAAX,GAAiBA,GAAjB;AACD;;AACD,gBAAIC,GAAJ,EAAS;AACPL,iBAAG,CAAC7E,MAAJ,CAAWkF,GAAX,GAAiBA,GAAjB;AACD;AACF,WAPD,MAOO;AACL,gBAAMC,MAAM,GAAG,KAAKyG,cAAL,CAAoBvI,OAApB,CAAf;;AACA,gBAAI8B,MAAJ,EAAY;AACVN,iBAAG,CAAC7E,MAAJ,CAAWmF,MAAX,GAAoBA,MAApB;AACD;AACF;;AACD,cAAMC,KAAK,GAAG,KAAKyG,aAAL,CAAmBxI,OAAnB,CAAd;;AACA,cAAI+B,KAAJ,EAAW;AACTP,eAAG,CAAC7E,MAAJ,CAAWoF,KAAX,GAAmBA,KAAnB;AACD;AACF;;AAED,aAAKE,KAAL,CAAWT,GAAX,EAAgBU,IAAhB,CAAqB,UAAAC,UAAU,EAAI;AACjC,iBAAI,CAACsG,kBAAL,CACEzI,OADF,EAEEmI,OAFF,EAGE,OAAI,CAAC7P,QAAL,CAAc+J,mBAAd,CAAkC,OAAI,CAAClK,WAAL,CAAiB4P,SAAnD,EAA8D5F,UAAU,CAACI,MAAzE,CAHF;;AAKA,cAAIJ,UAAU,CAACK,IAAf,EAAqB;AACnBL,sBAAU,CAACK,IAAX;AACD;AACF,SATD,EASG,UAAAC,SAAS,EAAI;AACd,iBAAI,CAACiG,eAAL,CAAqB1I,OAArB,EAA8ByC,SAAS,CAACrE,KAAxC;;AACA,cAAIqE,SAAS,CAACD,IAAd,EAAoB;AAClBC,qBAAS,CAACD,IAAV;AACD;AACF,SAdD;AAeD;AACF;;;iCAEYvC,G,EAAK;AAChB,aAAO,KAAKjH,KAAL,CAAWiH,GAAG,CAACD,OAAf,CAAP;AACA,aAAO,KAAK5G,WAAL,CAAiB6G,GAAG,CAACD,OAArB,CAAP;AACA,aAAO,KAAK9G,QAAL,CAAc+G,GAAG,CAACD,OAAlB,CAAP;AACA,aAAO,KAAK7G,QAAL,CAAc8G,GAAG,CAACD,OAAlB,CAAP;;AACA,UAAI,KAAK8D,WAAL,EAAJ,EAAwB;AACtB;AACA,aAAK0B,WAAL,CAAiB;AACf9B,gBAAM,EAAE,KAAKvL,WAAL,CAAiBwQ,WADV;AAEfhM,gBAAM,EAAE;AACNqD,mBAAO,EAAEC,GAAG,CAACD;AADP;AAFO,SAAjB;AAMD;AACF;;;wCAEmBmH,G,EAAK;AACvB;AACA,aAAOZ,IAAI,CAACqC,GAAL,CAASzB,GAAG,GAAG,IAAf,EAAqB,UAArB,CAAP;AACD;;;2BAEMnH,O,EAAS;AACd,aAAO,KAAKwH,OAAL,CAAaxH,OAAb,CAAP;AACD;;;4BAEOA,O,EAAS;AACf,UAAMC,GAAG,GAAG,KAAKjH,KAAL,CAAWgH,OAAX,CAAZ;;AACA,UAAI,CAACC,GAAL,EAAU;AACR,eAAO,IAAP;AACD;;AACD,aAAOA,GAAP;AACD;;;iCAEYD,O,EAAS;AACpB,aAAO,KAAK/G,WAAL,CAAiB+G,OAAjB,MAA8BkE,SAArC;AACD;;;qCAEgB3B,M,EAAQsG,S,EAAW;AAAA;;AAClC,UAAMC,eAAe,GAAG,KAAKrQ,aAA7B;AACA,WAAKA,aAAL,GAAqB,KAArB;;AACA,WAAKsQ,WAAL;;AACA,WAAKhQ,gBAAL,GAAwB,KAAxB;;AAEA,UAAI,KAAK+K,WAAL,EAAJ,EAAwB;AACtB;AACD;;AAED,UAAI,KAAK5J,aAAL,KAAuB,IAA3B,EAAiC;AAC/B,aAAKD,QAAL,GAAiB,IAAI+H,IAAJ,EAAD,CAAagH,OAAb,KAAyB,KAAK9O,aAAL,CAAmB8O,OAAnB,EAAzC;AACA,aAAK9O,aAAL,GAAqB,IAArB;AACD;;AAED,WAAKpB,SAAL,GAAiByJ,MAAM,CAAC0E,MAAxB;;AACA,WAAKvB,UAAL,CAAgB,WAAhB;;AAEA,UAAI,KAAK/L,eAAT,EAA0B;AACxBkG,oBAAY,CAAC,KAAKlG,eAAN,CAAZ;AACD;;AAED,UAAI4I,MAAM,CAACyE,OAAX,EAAoB;AAClB,aAAKrN,eAAL,GAAuB2E,UAAU,CAAC;AAAA,iBAAM,OAAI,CAAC+E,QAAL,EAAN;AAAA,SAAD,EAAwB,KAAK6D,mBAAL,CAAyB3E,MAAM,CAAC4E,GAAhC,CAAxB,CAAjC;AACD;;AAED,WAAK8B,aAAL;AACA,WAAKjB,sBAAL;;AACA,WAAK,IAAMhI,OAAX,IAAsB,KAAKhH,KAA3B,EAAkC;AAChC,YAAI,KAAKA,KAAL,CAAWsE,cAAX,CAA0B0C,OAA1B,CAAJ,EAAwC;AACtC,cAAMC,GAAG,GAAG,KAAKjH,KAAL,CAAWgH,OAAX,CAAZ;;AACA,cAAIC,GAAG,CAACI,kBAAJ,EAAJ,EAA8B;AAC5B,iBAAK4H,UAAL,CAAgBhI,GAAhB,EAAqB6I,eAArB;AACD;AACF;AACF;;AACD,WAAKZ,qBAAL;AACA,WAAKgB,YAAL;;AAEA,WAAKC,UAAL;;AAEA,UAAMC,GAAG,GAAG;AACVnC,cAAM,EAAE1E,MAAM,CAAC0E,MADL;AAEVvG,iBAAS,EAAE,KAAK/H,cAFN;AAGV0Q,eAAO,EAAE,KAAKpP;AAHJ,OAAZ;;AAKA,UAAIsI,MAAM,CAAC9F,IAAX,EAAiB;AACf2M,WAAG,CAAC3M,IAAJ,GAAW8F,MAAM,CAAC9F,IAAlB;AACD;;AAED,WAAKsJ,IAAL,CAAU,SAAV,EAAqBqD,GAArB;;AAEA,UAAI7G,MAAM,CAACd,IAAX,EAAiB;AACf,aAAK6H,kBAAL,CAAwB/G,MAAM,CAACd,IAA/B;AACD;AACF;;;uCAEkBA,I,EAAM;AACvB,WAAK,IAAMzB,OAAX,IAAsByB,IAAtB,EAA4B;AAC1B,YAAIA,IAAI,CAACnE,cAAL,CAAoB0C,OAApB,CAAJ,EAAkC;AAChC,cAAMC,GAAG,GAAGwB,IAAI,CAACzB,OAAD,CAAhB;AACA,cAAM6H,aAAa,GAAG,KAAK5O,WAAL,CAAiB+G,OAAjB,MAA8BkE,SAApD;AACA,cAAIqF,MAAM,GAAG;AAACvJ,mBAAO,EAAEA,OAAV;AAAmB6H,yBAAa,EAAEA;AAAlC,WAAb;AACA0B,gBAAM,GAAG,KAAKC,uBAAL,CAA6BD,MAA7B,EAAqCtJ,GAArC,CAAT;AACA,eAAK8F,IAAL,CAAU,WAAV,EAAuBwD,MAAvB;AACD;AACF;;AACD,WAAK,IAAMvJ,SAAX,IAAsByB,IAAtB,EAA4B;AAC1B,YAAIA,IAAI,CAACnE,cAAL,CAAoB0C,SAApB,CAAJ,EAAkC;AAChC,cAAMC,IAAG,GAAGwB,IAAI,CAACzB,SAAD,CAAhB;;AACA,cAAIC,IAAG,CAACwJ,SAAR,EAAmB;AACjB,gBAAIC,IAAI,GAAGzJ,IAAG,CAACwE,YAAf;;AACA,gBAAIiF,IAAI,IAAIA,IAAI,CAACnM,MAAL,GAAc,CAA1B,EAA6B;AAE3B;AACA;AACA,kBAAImM,IAAI,CAACnM,MAAL,GAAc,CAAd,KAAoB,CAACmM,IAAI,CAAC,CAAD,CAAJ,CAAQ5H,MAAT,IAAmB4H,IAAI,CAAC,CAAD,CAAJ,CAAQ5H,MAAR,GAAiB4H,IAAI,CAAC,CAAD,CAAJ,CAAQ5H,MAAhE,CAAJ,EAA6E;AAC3E4H,oBAAI,GAAGA,IAAI,CAACC,OAAL,EAAP;AACD;;AAED,mBAAK,IAAItM,CAAT,IAAcqM,IAAd,EAAoB;AAClB,oBAAIA,IAAI,CAACpM,cAAL,CAAoBD,CAApB,CAAJ,EAA4B;AAC1B,uBAAKuM,kBAAL,CAAwB5J,SAAxB,EAAiC0J,IAAI,CAACrM,CAAD,CAArC;AACD;AACF;AACF;AACF;;AACD,eAAKpE,WAAL,CAAiB+G,SAAjB,IAA4B;AAC1B,mBAAOC,IAAG,CAAC2B,GADe;AAE1B,mBAAO3B,IAAG,CAAC4B,GAFe;AAG1B,sBAAU5B,IAAG,CAAC6B,MAHY;AAI1B,qBAAS7B,IAAG,CAAC8B,KAJa;AAK1B,2BAAe9B,IAAG,CAAC0B;AALO,WAA5B;AAOD;AACF;AACF;;;gCAEW;AACV,UAAI,KAAK9H,YAAL,KAAsB,IAA1B,EAAgC;AAC9BgG,oBAAY,CAAC,KAAKhG,YAAN,CAAZ;AACA,aAAKA,YAAL,GAAoB,IAApB;AACD;;AACD,UAAI,KAAKD,YAAL,KAAsB,IAA1B,EAAgC;AAC9BiG,oBAAY,CAAC,KAAKjG,YAAN,CAAZ;AACA,aAAKA,YAAL,GAAoB,IAApB;AACD;AACF;;;iCAEY;AAAA;;AACX,UAAI,KAAKc,OAAL,CAAaS,IAAb,KAAsB,IAAtB,IAA8B,KAAKT,OAAL,CAAaU,YAAb,IAA6B,CAA/D,EAAkE;AAChE;AACD;;AACD,UAAI,CAAC,KAAK0I,WAAL,EAAL,EAAyB;AACvB;AACD;;AAED,WAAKlK,YAAL,GAAoB0E,UAAU,CAAC,YAAM;AACnC,YAAI,CAAC,OAAI,CAACwF,WAAL,EAAL,EAAyB;AACvB,iBAAI,CAACpE,SAAL;;AACA;AACD;;AACD,eAAI,CAACvE,IAAL;;AACA,eAAI,CAACtB,YAAL,GAAoByE,UAAU,CAAC,YAAM;AACnC,iBAAI,CAACsE,WAAL,CAAiB,SAAjB,EAA4B,IAA5B;AACD,SAF6B,EAE3B,OAAI,CAAClI,OAAL,CAAaW,eAFc,CAA9B;AAGD,OAT6B,EAS3B,KAAKX,OAAL,CAAaU,YATc,CAA9B;AAUD;;;mCAEc;AACb,WAAKsE,SAAL;;AACA,WAAKyJ,UAAL;AACD;;;oCAEenJ,O,EAAS5B,K,EAAO;AAC9B,UAAM6B,GAAG,GAAG,KAAKuH,OAAL,CAAaxH,OAAb,CAAZ;;AACA,UAAI,CAACC,GAAL,EAAU;AACR;AACD;;AACD,UAAI,CAACA,GAAG,CAAC4J,cAAJ,EAAL,EAA2B;AACzB;AACD;;AACD,UAAIzL,KAAK,CAACuE,IAAN,KAAe,CAAf,IAAoBvE,KAAK,CAAC0L,OAAN,KAAkBrS,aAA1C,EAAyD;AAAE;AACzD,aAAKmL,WAAL,CAAiB,SAAjB,EAA4B,IAA5B;;AACA;AACD;;AACD3C,SAAG,CAAC8J,kBAAJ,CAAuB3L,KAAvB;AACD;;;4CAEuBgL,G,EAAK7G,M,EAAQ;AACnC,UAAIkH,SAAS,GAAG,KAAhB;;AACA,UAAI,eAAelH,MAAnB,EAA2B;AACzBkH,iBAAS,GAAGlH,MAAM,CAACkH,SAAnB;AACD;;AACDL,SAAG,CAACK,SAAJ,GAAgBA,SAAhB;AAEA,UAAIO,UAAU,GAAG,KAAjB;;AACA,UAAI,gBAAgBzH,MAApB,EAA4B;AAC1ByH,kBAAU,GAAGzH,MAAM,CAACyH,UAApB;AACD;;AACD,UAAIjI,KAAK,GAAG,EAAZ;;AACA,UAAI,WAAWQ,MAAf,EAAuB;AACrBR,aAAK,GAAGQ,MAAM,CAACR,KAAf;AACD;;AACD,UAAID,MAAM,GAAG,CAAb;;AACA,UAAI,YAAYS,MAAhB,EAAwB;AACtBT,cAAM,GAAGS,MAAM,CAACT,MAAhB;AACD;;AACD,UAAIkI,UAAJ,EAAgB;AACdZ,WAAG,CAACa,cAAJ,GAAqB;AACnB,oBAAUnI,MADS;AAEnB,mBAASC;AAFU,SAArB;AAID;;AAAA;AACD,aAAOqH,GAAP;AACD;;;uCAEkBpJ,O,EAAS6I,S,EAAWtG,M,EAAQ;AAAA;;AAC7C,UAAMtC,GAAG,GAAG,KAAKuH,OAAL,CAAaxH,OAAb,CAAZ;;AACA,UAAI,CAACC,GAAL,EAAU;AACR;AACD;;AACD,UAAI,CAACA,GAAG,CAAC4J,cAAJ,EAAL,EAA2B;AACzB;AACD;;AACD5J,SAAG,CAACiK,oBAAJ,CAAyB3H,MAAzB;;AAEA,UAAImH,IAAI,GAAGnH,MAAM,CAACkC,YAAlB;;AACA,UAAIiF,IAAI,IAAIA,IAAI,CAACnM,MAAL,GAAc,CAA1B,EAA6B;AAC3B,YAAImM,IAAI,CAACnM,MAAL,IAAe,CAAf,IAAoB,CAACmM,IAAI,CAAC,CAAD,CAAJ,CAAQ5H,MAA7B,IAAuC,CAAC4H,IAAI,CAAC,CAAD,CAAJ,CAAQ5H,MAApD,EAA4D;AAC1D;AACA4H,cAAI,GAAGA,IAAI,CAACC,OAAL,EAAP;AACD;;AACD,aAAK,IAAItM,CAAT,IAAcqM,IAAd,EAAoB;AAClB,cAAIA,IAAI,CAACpM,cAAL,CAAoBD,CAApB,CAAJ,EAA4B;AAC1B,iBAAKuM,kBAAL,CAAwB5J,OAAxB,EAAiC0J,IAAI,CAACrM,CAAD,CAArC;AACD;AACF;AACF;;AAED,UAAIkF,MAAM,CAACZ,WAAP,KAAuB,CAACkH,SAAD,IAAc,CAACtG,MAAM,CAACkH,SAA7C,CAAJ,EAA6D;AAC3D,aAAKvQ,QAAL,CAAc8G,OAAd,IAAyBuC,MAAM,CAACX,GAAP,IAAc,CAAvC;AACA,aAAKzI,QAAL,CAAc6G,OAAd,IAAyBuC,MAAM,CAACV,GAAP,IAAc,CAAvC;AACA,aAAKzI,WAAL,CAAiB4G,OAAjB,IAA4BuC,MAAM,CAACT,MAAP,IAAiB,CAA7C;AACD;;AAED,WAAKzI,UAAL,CAAgB2G,OAAhB,IAA2BuC,MAAM,CAACR,KAAP,IAAgB,EAA3C;;AAEA,UAAIQ,MAAM,CAACZ,WAAX,EAAwB;AACtB1B,WAAG,CAACkK,YAAJ,GAAmB,IAAnB;AACD;;AAED,UAAI5H,MAAM,CAACyE,OAAP,KAAmB,IAAvB,EAA6B;AAC3B,YAAIW,iBAAiB,GAAGrJ,UAAU,CAAC;AAAA,iBAAM,OAAI,CAACsJ,WAAL,CAAiB5H,OAAjB,CAAN;AAAA,SAAD,EAAkC,KAAKkH,mBAAL,CAAyB3E,MAAM,CAAC4E,GAAhC,CAAlC,CAAlC;AACA,aAAKrN,mBAAL,CAAyBkG,OAAzB,IAAoC2H,iBAApC;AACD;AACF;;;iCAEYtC,K,EAAO7C,I,EAAM;AACxB,UAAM7C,EAAE,GAAG0F,KAAK,CAAC1F,EAAjB;AACA,UAAM4C,MAAM,GAAG8C,KAAK,CAAC9C,MAArB;;AAEA,UAAI,EAAE5C,EAAE,IAAI,KAAK3F,UAAb,CAAJ,EAA8B;AAC5BwI,YAAI;AACJ;AACD;;AACD,UAAM5C,SAAS,GAAG,KAAK5F,UAAL,CAAgB2F,EAAhB,CAAlB;AACAE,kBAAY,CAAC,KAAK7F,UAAL,CAAgB2F,EAAhB,EAAoBzE,OAArB,CAAZ;AACA,aAAO,KAAKlB,UAAL,CAAgB2F,EAAhB,CAAP;;AAEA,UAAI,CAAC,wBAAY0F,KAAZ,CAAL,EAAyB;AACvB,YAAMzI,QAAQ,GAAGgD,SAAS,CAAChD,QAA3B;;AACA,YAAI,CAACA,QAAL,EAAe;AACb;AACD;;AACDA,gBAAQ,CAAC;AAAC2F,gBAAM,EAANA,MAAD;AAASC,cAAI,EAAJA;AAAT,SAAD,CAAR;AACD,OAND,MAMO;AACL,YAAM1C,OAAO,GAAGF,SAAS,CAACE,OAA1B;;AACA,YAAI,CAACA,OAAL,EAAc;AACZ0C,cAAI;AACJ;AACD;;AACD,YAAMpE,KAAK,GAAGiH,KAAK,CAACjH,KAApB;AACA0B,eAAO,CAAC;AAAC1B,eAAK,EAALA,KAAD;AAAQoE,cAAI,EAAJA;AAAR,SAAD,CAAP;AACD;AACF;;;gCAEWxC,O,EAASoK,I,EAAM;AACzB,UAAMhB,GAAG,GAAG;AAAC,gBAAQgB,IAAI,CAACC;AAAd,OAAZ;;AACA,UAAMpK,GAAG,GAAG,KAAKuH,OAAL,CAAaxH,OAAb,CAAZ;;AACA,UAAI,CAACC,GAAL,EAAU;AACR,YAAI,KAAKqK,YAAL,CAAkBtK,OAAlB,CAAJ,EAAgC;AAC9BoJ,aAAG,CAACpJ,OAAJ,GAAcA,OAAd;AACA,eAAK+F,IAAL,CAAU,MAAV,EAAkBqD,GAAlB;AACD;;AACD;AACD;;AACDnJ,SAAG,CAAC8F,IAAJ,CAAS,MAAT,EAAiBqD,GAAjB;AACD;;;iCAEYpJ,O,EAASuK,K,EAAO;AAC3B,UAAMnB,GAAG,GAAG;AAAC,gBAAQmB,KAAK,CAACF;AAAf,OAAZ;;AACA,UAAMpK,GAAG,GAAG,KAAKuH,OAAL,CAAaxH,OAAb,CAAZ;;AACA,UAAI,CAACC,GAAL,EAAU;AACR,YAAI,KAAKqK,YAAL,CAAkBtK,OAAlB,CAAJ,EAAgC;AAC9BoJ,aAAG,CAACpJ,OAAJ,GAAcA,OAAd;AACA,eAAK+F,IAAL,CAAU,OAAV,EAAmBqD,GAAnB;AACD;;AACD;AACD;;AACDnJ,SAAG,CAAC8F,IAAJ,CAAS,OAAT,EAAkBqD,GAAlB;AACD;;;iCAEYpJ,O,EAASwK,K,EAAO;AAC3B,UAAMpB,GAAG,GAAG,EAAZ;;AACA,UAAMnJ,GAAG,GAAG,KAAKuH,OAAL,CAAaxH,OAAb,CAAZ;;AACA,UAAI,CAACC,GAAL,EAAU;AACR,YAAI,KAAKqK,YAAL,CAAkBtK,OAAlB,CAAJ,EAAgC;AAC9B,iBAAO,KAAK/G,WAAL,CAAiB+G,OAAjB,CAAP;AACAoJ,aAAG,CAACpJ,OAAJ,GAAcA,OAAd;AACA,eAAK+F,IAAL,CAAU,aAAV,EAAyBqD,GAAzB;AACD;;AACD;AACD;;AACDnJ,SAAG,CAACwK,WAAJ;;AACA,UAAID,KAAK,CAACE,WAAN,KAAsB,IAA1B,EAAgC;AAC9BzK,WAAG,CAAC0K,SAAJ;AACD;AACF;;;+BAEU3K,O,EAASC,G,EAAK;AACvB,WAAKhH,WAAL,CAAiB+G,OAAjB,IAA4B;AAC1B,eAAOC,GAAG,CAAC2B,GADe;AAE1B,eAAO3B,GAAG,CAAC4B,GAFe;AAG1B,kBAAU5B,GAAG,CAAC6B,MAHY;AAI1B,iBAAS7B,GAAG,CAAC8B,KAJa;AAK1B,uBAAe9B,GAAG,CAAC0B;AALO,OAA5B;AAOA,UAAIyH,GAAG,GAAG;AAAC,mBAAWpJ,OAAZ;AAAqB6H,qBAAa,EAAE;AAApC,OAAV;AACAuB,SAAG,GAAG,KAAKI,uBAAL,CAA6BJ,GAA7B,EAAkCnJ,GAAlC,CAAN;AACA,WAAK8F,IAAL,CAAU,WAAV,EAAuBqD,GAAvB;AACD;;;uCAEkBpJ,O,EAAS4K,G,EAAK;AAC/B,UAAM3K,GAAG,GAAG,KAAKuH,OAAL,CAAaxH,OAAb,CAAZ;;AACA,UAAMoJ,GAAG,GAAG;AACV,gBAAQwB,GAAG,CAACnO,IADF;AAEV,eAAOmO,GAAG,CAAChJ,GAFD;AAGV,eAAOgJ,GAAG,CAAC/I,GAHD;AAIV,kBAAU+I,GAAG,CAAC9I;AAJJ,OAAZ;;AAMA,UAAI8I,GAAG,CAACP,IAAR,EAAc;AACZjB,WAAG,CAACiB,IAAJ,GAAWO,GAAG,CAACP,IAAf;AACD;;AACD,UAAI,CAACpK,GAAL,EAAU;AACR,YAAI,KAAKqK,YAAL,CAAkBtK,OAAlB,CAAJ,EAAgC;AAC9B,cAAI4K,GAAG,CAAChJ,GAAJ,KAAYsC,SAAhB,EAA2B;AACzB,iBAAKjL,WAAL,CAAiB+G,OAAjB,EAA0B4B,GAA1B,GAAgCgJ,GAAG,CAAChJ,GAApC;AACD;;AACD,cAAIgJ,GAAG,CAAC/I,GAAJ,KAAYqC,SAAhB,EAA2B;AACzB,iBAAKjL,WAAL,CAAiB+G,OAAjB,EAA0B6B,GAA1B,GAAgC+I,GAAG,CAAC/I,GAApC;AACD;;AACD,cAAI+I,GAAG,CAAC9I,MAAJ,KAAeoC,SAAnB,EAA8B;AAC5B,iBAAKjL,WAAL,CAAiB+G,OAAjB,EAA0B8B,MAA1B,GAAmC8I,GAAG,CAAC9I,MAAvC;AACD;;AACDsH,aAAG,CAACpJ,OAAJ,GAAcA,OAAd;AACA,eAAK+F,IAAL,CAAU,SAAV,EAAqBqD,GAArB;AACD;;AACD;AACD;;AACD,UAAIwB,GAAG,CAAChJ,GAAJ,KAAYsC,SAAhB,EAA2B;AACzB,aAAKhL,QAAL,CAAc8G,OAAd,IAAyB4K,GAAG,CAAChJ,GAA7B;AACD;;AACD,UAAIgJ,GAAG,CAAC/I,GAAJ,KAAYqC,SAAhB,EAA2B;AACzB,aAAK/K,QAAL,CAAc6G,OAAd,IAAyB4K,GAAG,CAAC/I,GAA7B;AACD;;AACD,UAAI+I,GAAG,CAAC9I,MAAJ,KAAeoC,SAAnB,EAA8B;AAC5B,aAAK9K,WAAL,CAAiB4G,OAAjB,IAA4B4K,GAAG,CAAC9I,MAAhC;AACD;;AACD7B,SAAG,CAAC8F,IAAJ,CAAS,SAAT,EAAoBqD,GAApB;AACD;;;mCAEcU,O,EAAS;AACtB,WAAK/D,IAAL,CAAU,SAAV,EAAqB+D,OAAO,CAACrN,IAA7B;AACD;;;gCAEWA,I,EAAM+F,I,EAAM;AACtB,UAAMqI,IAAI,GAAG,KAAKvS,QAAL,CAAcwS,UAAd,CAAyBrO,IAAzB,CAAb;;AACA,UAAIsO,IAAI,GAAG,CAAX;;AACA,UAAI,UAAUF,IAAd,EAAoB;AAClBE,YAAI,GAAGF,IAAI,CAAC,MAAD,CAAX;AACD;;AACD,UAAM7K,OAAO,GAAG6K,IAAI,CAAC7K,OAArB;;AAEA,UAAI+K,IAAI,KAAK,KAAK3S,SAAL,CAAe4S,WAA5B,EAAyC;AACvC,YAAMJ,GAAG,GAAG,KAAKtS,QAAL,CAAc2S,cAAd,CAA6B,KAAK7S,SAAL,CAAe4S,WAA5C,EAAyDH,IAAI,CAACpO,IAA9D,CAAZ;;AACA,aAAKmN,kBAAL,CAAwB5J,OAAxB,EAAiC4K,GAAjC;AACD,OAHD,MAGO,IAAIG,IAAI,KAAK,KAAK3S,SAAL,CAAe8S,OAA5B,EAAqC;AAC1C,YAAMpB,OAAO,GAAG,KAAKxR,QAAL,CAAc2S,cAAd,CAA6B,KAAK7S,SAAL,CAAe8S,OAA5C,EAAqDL,IAAI,CAACpO,IAA1D,CAAhB;;AACA,aAAK0O,cAAL,CAAoBrB,OAApB;AACD,OAHM,MAGA,IAAIiB,IAAI,KAAK,KAAK3S,SAAL,CAAegT,IAA5B,EAAkC;AACvC,YAAMhB,IAAI,GAAG,KAAK9R,QAAL,CAAc2S,cAAd,CAA6B,KAAK7S,SAAL,CAAegT,IAA5C,EAAkDP,IAAI,CAACpO,IAAvD,CAAb;;AACA,aAAK4O,WAAL,CAAiBrL,OAAjB,EAA0BoK,IAA1B;AACD,OAHM,MAGA,IAAIW,IAAI,KAAK,KAAK3S,SAAL,CAAekT,KAA5B,EAAmC;AACxC,YAAMf,KAAK,GAAG,KAAKjS,QAAL,CAAc2S,cAAd,CAA6B,KAAK7S,SAAL,CAAekT,KAA5C,EAAmDT,IAAI,CAACpO,IAAxD,CAAd;;AACA,aAAK8O,YAAL,CAAkBvL,OAAlB,EAA2BuK,KAA3B;AACD,OAHM,MAGA,IAAIQ,IAAI,KAAK,KAAK3S,SAAL,CAAeoT,KAA5B,EAAmC;AACxC,YAAMhB,KAAK,GAAG,KAAKlS,QAAL,CAAc2S,cAAd,CAA6B,KAAK7S,SAAL,CAAeoT,KAA5C,EAAmDX,IAAI,CAACpO,IAAxD,CAAd;;AACA,aAAKgP,YAAL,CAAkBzL,OAAlB,EAA2BwK,KAA3B;AACD,OAHM,MAGA,IAAIO,IAAI,KAAK,KAAK3S,SAAL,CAAesT,GAA5B,EAAiC;AACtC,YAAMzL,GAAG,GAAG,KAAK3H,QAAL,CAAc2S,cAAd,CAA6B,KAAK7S,SAAL,CAAesT,GAA5C,EAAiDb,IAAI,CAACpO,IAAtD,CAAZ;;AACA,aAAKkP,UAAL,CAAgB3L,OAAhB,EAAyBC,GAAzB;AACD;;AACDuC,UAAI;AACL;;;6BAEQ;AACP,UAAMoJ,QAAQ,GAAG,KAAKtS,SAAL,CAAeuS,KAAf,CAAqB,CAArB,CAAjB;;AACA,WAAKvS,SAAL,GAAiB,EAAjB;;AACA,WAAK2K,cAAL,CAAoB2H,QAApB;AACD;;;4BAEO;AAAA;;AACN,UAAMpK,GAAG,GAAG;AACVkC,cAAM,EAAE,KAAKvL,WAAL,CAAiB2T;AADf,OAAZ;;AAGA,WAAK7J,KAAL,CAAWT,GAAX,EAAgBU,IAAhB,CAAqB,UAAAC,UAAU,EAAI;AACjC,eAAI,CAAC4J,aAAL,CAAmB,OAAI,CAACzT,QAAL,CAAc+J,mBAAd,CAAkC,OAAI,CAAClK,WAAL,CAAiB2T,IAAnD,EAAyD3J,UAAU,CAACI,MAApE,CAAnB;;AACA,YAAIJ,UAAU,CAACK,IAAf,EAAqB;AACnBL,oBAAU,CAACK,IAAX;AACD;AACF,OALD,EAKG,UAAAC,SAAS,EAAI;AACd,eAAI,CAAC3F,MAAL,CAAY,YAAZ,EAA0B2F,SAAS,CAACrE,KAApC;;AACA,YAAIqE,SAAS,CAACD,IAAd,EAAoB;AAClBC,mBAAS,CAACD,IAAV;AACD;AACF,OAVD;AAWD;;;kCAEaD,M,EAAQ;AACpB,UAAI,CAAC,KAAKuB,WAAL,EAAL,EAAyB;AACvB;AACD;;AACD,WAAKpE,SAAL;;AACA,WAAKyJ,UAAL;AACD;;;gCAEWnJ,O,EAAS;AACnB,UAAMgM,OAAO,GAAG,KAAK9S,QAAL,CAAc8G,OAAd,CAAhB;;AACA,UAAIgM,OAAJ,EAAa;AACX,eAAOA,OAAP;AACD;;AACD,aAAO,CAAP;AACD;;;mCAEchM,O,EAAS;AACtB,UAAMiM,UAAU,GAAG,KAAK7S,WAAL,CAAiB4G,OAAjB,CAAnB;;AACA,UAAIiM,UAAJ,EAAgB;AACd,eAAOA,UAAP;AACD;;AACD,aAAO,CAAP;AACD;;;gCAEWjM,O,EAAS;AACnB,UAAMkM,OAAO,GAAG,KAAK/S,QAAL,CAAc6G,OAAd,CAAhB;;AACA,UAAIkM,OAAJ,EAAa;AACX,eAAOA,OAAP;AACD;;AACD,aAAO,CAAP;AACD;;;kCAEalM,O,EAAS;AACrB,UAAMmM,SAAS,GAAG,KAAK9S,UAAL,CAAgB2G,OAAhB,CAAlB;;AACA,UAAImM,SAAJ,EAAe;AACb,eAAOA,SAAP;AACD;;AACD,aAAO,EAAP;AACD;;;uCAEkBrC,O,EAASnH,I,EAAM;AAChC,UAAMyJ,SAAS,GAAG;AAChBtC,eAAO,EAAEA,OADO;AAEhBnH,YAAI,EAAEA,IAAI,IAAI;AAFE,OAAlB;AAKA,aAAOyJ,SAAP;AACD;;;kCAEazM,E,EAAI/C,Q,EAAUkD,O,EAAS;AAAA;;AACnC,WAAK9F,UAAL,CAAgB2F,EAAhB,IAAsB;AACpB/C,gBAAQ,EAAEA,QADU;AAEpBkD,eAAO,EAAEA,OAFW;AAGpB5E,eAAO,EAAE;AAHW,OAAtB;AAKA,WAAKlB,UAAL,CAAgB2F,EAAhB,EAAoBzE,OAApB,GAA8BoD,UAAU,CAAC,YAAM;AAC7C,eAAO,OAAI,CAACtE,UAAL,CAAgB2F,EAAhB,CAAP;;AACA,YAAI,uBAAWG,OAAX,CAAJ,EAAyB;AACvBA,iBAAO,CAAC;AAAC1B,iBAAK,EAAE,OAAI,CAAC2B,kBAAL,CAAwBtI,aAAxB;AAAR,WAAD,CAAP;AACD;AACF,OALuC,EAKrC,KAAKiD,OAAL,CAAaQ,OALwB,CAAxC;AAMD;;;gCAEW4O,O,EAAS;AACnB,UAAInK,EAAE,GAAG,KAAK0M,cAAL,EAAT;;AACAvC,aAAO,CAACnK,EAAR,GAAaA,EAAb;;AACA,UAAI,KAAKpG,WAAL,KAAqB,IAAzB,EAA+B;AAC7B,aAAKD,SAAL,CAAeuR,IAAf,CAAoBf,OAApB;AACD,OAFD,MAEO;AACL,aAAK7F,cAAL,CAAoB,CAAC6F,OAAD,CAApB;AACD;;AACD,aAAOnK,EAAP;AACD;;;kCAEa;AACZ,aAAO,KAAK2M,YAAL,EAAP;AACD;;;8BAES;AACR,WAAKhJ,QAAL;AACD;;;iCAEY;AACX,WAAKV,WAAL,CAAiB,QAAjB,EAA2B,KAA3B;AACD;;;2BAEM;AACL,aAAO,KAAK2J,KAAL,EAAP;AACD;;;oCAEe;AACd;AACA;AACA,WAAKhT,WAAL,GAAmB,IAAnB;AACD;;;mCAEc;AACb,WAAKA,WAAL,GAAmB,KAAnB;;AACA,WAAKiT,MAAL;AACD;;;6CAEwB;AACvB;AACA;AACA,WAAKhT,oBAAL,GAA4B,IAA5B;AACD;;;4CAEuB;AAAA;;AACtB;AACA;AACA,WAAKA,oBAAL,GAA4B,KAA5B;AACA,UAAMiT,YAAY,GAAG,KAAKhT,gBAA1B;AACA,WAAKA,gBAAL,GAAwB,EAAxB;AAEA,UAAM4N,QAAQ,GAAG,EAAjB;;AAEA,WAAK,IAAMrH,OAAX,IAAsByM,YAAtB,EAAoC;AAClC,YAAIA,YAAY,CAACnP,cAAb,CAA4B0C,OAA5B,CAAJ,EAA0C;AACxC,cAAMC,GAAG,GAAG,KAAKuH,OAAL,CAAaxH,OAAb,CAAZ;;AACA,cAAI,CAACC,GAAL,EAAU;AACR;AACD;;AACDoH,kBAAQ,CAACwD,IAAT,CAAc7K,OAAd;AACD;AACF;;AAED,UAAIqH,QAAQ,CAAC9J,MAAT,KAAoB,CAAxB,EAA2B;AACzB,aAAKT,MAAL,CAAY,oDAAZ;;AACA;AACD;;AAED,UAAML,IAAI,GAAG;AACXwK,cAAM,EAAE,KAAKnO,SADF;AAEXuO,gBAAQ,EAAEA;AAFC,OAAb;AAKA,UAAMnB,QAAQ,GAAG,KAAKpN,SAAtB;;AACA,UAAMyG,KAAK,GAAG,KAAK4G,SAAL,EAAd;;AAEA,UAAMC,EAAE,GAAG,SAALA,EAAK,CAACC,IAAD,EAAU;AACnB,YAAI9G,KAAK,IAAI,OAAI,CAACjF,KAAlB,EAAyB;AACvB,iBAAO,OAAI,CAACA,KAAL,CAAWiF,KAAX,CAAP;AACD;;AACD,YAAI,OAAI,CAACzG,SAAL,KAAmBoN,QAAvB,EAAiC;AAC/B;AACD;;AACD,YAAIG,IAAI,CAACjI,KAAL,IAAciI,IAAI,CAACtI,MAAL,KAAgB,GAAlC,EAAuC;AACrC,iBAAI,CAACjB,MAAL,CAAY,8BAAZ;;AACA,eAAK,IAAMO,CAAX,IAAgBgK,QAAhB,EAA0B;AACxB,gBAAIA,QAAQ,CAAC/J,cAAT,CAAwBD,CAAxB,CAAJ,EAAgC;AAC9B,kBAAM2C,SAAO,GAAGqH,QAAQ,CAAChK,CAAD,CAAxB;;AACA,qBAAI,CAACqL,eAAL,CAAqB1I,SAArB,EAA8B,OAAI,CAACD,kBAAL,CAAwB,8BAAxB,CAA9B;AACD;AACF;;AACD;AACD;;AAED,YAAIqH,YAAY,GAAG,EAAnB;;AACA,YAAIf,IAAI,CAAC5J,IAAL,CAAU4K,QAAd,EAAwB;AACtB,eAAK,IAAMhK,EAAX,IAAgBgJ,IAAI,CAAC5J,IAAL,CAAU4K,QAA1B,EAAoC;AAClC,gBAAMC,WAAW,GAAGjB,IAAI,CAAC5J,IAAL,CAAU4K,QAAV,CAAmBhK,EAAnB,CAApB;;AACA,gBAAI,CAACiK,WAAW,CAACtH,OAAjB,EAA0B;AACxB;AACD;;AACDoH,wBAAY,CAACE,WAAW,CAACtH,OAAb,CAAZ,GAAoCsH,WAAW,CAAC9K,KAAhD;AACD;AACF,SA3BkB,CA6BnB;;;AACA,YAAIkQ,KAAK,GAAG,KAAZ;;AAEA,YAAI,CAAC,OAAI,CAACnT,WAAV,EAAuB;AACrB,iBAAI,CAAC0P,aAAL;;AACAyD,eAAK,GAAG,IAAR;AACD;;AAED,aAAK,IAAMrP,GAAX,IAAgBgK,QAAhB,EAA0B;AACxB,cAAIA,QAAQ,CAAC/J,cAAT,CAAwBD,GAAxB,CAAJ,EAAgC;AAAA;AAC9B,kBAAM2C,OAAO,GAAGqH,QAAQ,CAAChK,GAAD,CAAxB;AACA,kBAAMb,KAAK,GAAG4K,YAAY,CAACpH,OAAD,CAA1B;;AAEA,kBAAI,CAACxD,KAAL,EAAY;AACV;AACA,uBAAI,CAACkM,eAAL,CAAqB1I,OAArB,EAA8B,OAAI,CAACD,kBAAL,CAAwB,mBAAxB,EAA6C,GAA7C,CAA9B;;AACA;AACD,eAJD,MAIO;AACL,oBAAMyB,GAAG,GAAG;AACVkC,wBAAM,EAAE,OAAI,CAACvL,WAAL,CAAiB4P,SADf;AAEVpL,wBAAM,EAAE;AACNqD,2BAAO,EAAEA,OADH;AAENxD,yBAAK,EAAEA;AAFD;AAFE,iBAAZ;;AAQA,oBAAMyD,KAAG,GAAG,OAAI,CAACuH,OAAL,CAAaxH,OAAb,CAAZ;;AACA,oBAAIC,KAAG,KAAK,IAAZ,EAAkB;AAChB;AACD;;AAED,oBAAMkI,OAAO,GAAGlI,KAAG,CAACmI,YAAJ,EAAhB;;AAEA,oBAAID,OAAO,KAAK,IAAhB,EAAsB;AACpB3G,qBAAG,CAAC7E,MAAJ,CAAWwL,OAAX,GAAqB,IAArB;;AACA,sBAAMvG,GAAG,GAAG,OAAI,CAACyG,WAAL,CAAiBrI,OAAjB,CAAZ;;AACA,sBAAM6B,GAAG,GAAG,OAAI,CAACyG,WAAL,CAAiBtI,OAAjB,CAAZ;;AACA,sBAAI4B,GAAG,IAAIC,GAAX,EAAgB;AACd,wBAAID,GAAJ,EAAS;AACPJ,yBAAG,CAAC7E,MAAJ,CAAWiF,GAAX,GAAiBA,GAAjB;AACD;;AACD,wBAAIC,GAAJ,EAAS;AACPL,yBAAG,CAAC7E,MAAJ,CAAWkF,GAAX,GAAiBA,GAAjB;AACD;AACF,mBAPD,MAOO;AACL,wBAAMC,MAAM,GAAG,OAAI,CAACyG,cAAL,CAAoBvI,OAApB,CAAf;;AACA,wBAAI8B,MAAJ,EAAY;AACVN,yBAAG,CAAC7E,MAAJ,CAAWmF,MAAX,GAAoBA,MAApB;AACD;AACF;;AACD,sBAAMC,KAAK,GAAG,OAAI,CAACyG,aAAL,CAAmBxI,OAAnB,CAAd;;AACA,sBAAI+B,KAAJ,EAAW;AACTP,uBAAG,CAAC7E,MAAJ,CAAWoF,KAAX,GAAmBA,KAAnB;AACD;AACF;;AACD,uBAAI,CAACE,KAAL,CAAWT,GAAX,EAAgBU,IAAhB,CAAqB,UAAAC,UAAU,EAAI;AACjC,yBAAI,CAACsG,kBAAL,CACEzI,OADF,EAEEmI,OAFF,EAGE,OAAI,CAAC7P,QAAL,CAAc+J,mBAAd,CAAkC,OAAI,CAAClK,WAAL,CAAiB4P,SAAnD,EAA8D5F,UAAU,CAACI,MAAzE,CAHF;;AAKA,sBAAIJ,UAAU,CAACK,IAAf,EAAqB;AACnBL,8BAAU,CAACK,IAAX;AACD;AACF,iBATD,EASG,UAAAC,SAAS,EAAI;AACd,yBAAI,CAACiG,eAAL,CAAqB1I,OAArB,EAA8ByC,SAAS,CAACrE,KAAxC;;AACA,sBAAIqE,SAAS,CAACD,IAAd,EAAoB;AAClBC,6BAAS,CAACD,IAAV;AACD;AACF,iBAdD;AAeD;AA7D6B;;AAAA,qCAmB1B;AA2CL;AACF;;AAED,YAAIkK,KAAJ,EAAW;AACT,iBAAI,CAACxD,YAAL;AACD;AAEF,OA3GD;;AA6GA,UAAI,KAAKxO,OAAL,CAAa4B,kBAAb,KAAoC,IAAxC,EAA8C;AAC5C,aAAK5B,OAAL,CAAa4B,kBAAb,CAAgC;AAC9BG,cAAI,EAAEA;AADwB,SAAhC,EAEG2J,EAFH;AAGD,OAJD,MAIO;AACL,YAAMnJ,GAAG,GAAG,KAAK8J,KAAL,CACV,KAAKrM,OAAL,CAAawB,iBADH,EACsB,KAAKxB,OAAL,CAAa0B,eADnC,EACoD,KAAK1B,OAAL,CAAayB,gBADjE,EACmFM,IADnF,EACyF2J,EADzF,CAAZ;;AAEA,aAAK9L,KAAL,CAAWiF,KAAX,IAAoBtC,GAApB;AACD;AACF;;;8BAES+C,O,EAAS2M,M,EAAQ;AACzB,UAAMC,UAAU,GAAG,KAAKpF,OAAL,CAAaxH,OAAb,CAAnB;;AACA,UAAI4M,UAAU,KAAK,IAAnB,EAAyB;AACvBA,kBAAU,CAACC,UAAX,CAAsBF,MAAtB;;AACA,YAAIC,UAAU,CAACE,eAAX,EAAJ,EAAkC;AAChCF,oBAAU,CAACjC,SAAX;AACD;;AACD,eAAOiC,UAAP;AACD;;AACD,UAAM3M,GAAG,GAAG,IAAI8M,wBAAJ,CAAiB,IAAjB,EAAuB/M,OAAvB,EAAgC2M,MAAhC,CAAZ;AACA,WAAK3T,KAAL,CAAWgH,OAAX,IAAsBC,GAAtB;AACAA,SAAG,CAAC0K,SAAJ;AACA,aAAO1K,GAAP;AACD;;;;EAtzD6B+M,kB;;;;;;;;;;;;;;;;ACtBhC;;eACeC,4B;;;;;;;;;;;;;;;;;;;;;;ACDR,IAAMpO,cAAc,GAAG;AAC5ByD,SAAO,EAAE,CADmB;AAE5ByF,WAAS,EAAE,CAFiB;AAG5BY,aAAW,EAAE,CAHe;AAI5BrE,SAAO,EAAE,CAJmB;AAK5BI,UAAQ,EAAE,CALkB;AAM5BE,gBAAc,EAAE,CANY;AAO5BJ,SAAO,EAAE,CAPmB;AAQ5BsH,MAAI,EAAE,CARsB;AAS5BjI,MAAI,EAAE,CATsB;AAU5BF,KAAG,EAAE,CAVuB;AAW5BgD,SAAO,EAAE,EAXmB;AAY5BY,aAAW,EAAE;AAZe,CAAvB;;AAeA,IAAMzI,YAAY,GAAG;AAC1BkM,aAAW,EAAE,CADa;AAE1BI,MAAI,EAAE,CAFoB;AAG1BE,OAAK,EAAE,CAHmB;AAI1BE,OAAK,EAAE,CAJmB;AAK1BN,SAAO,EAAE,CALiB;AAM1BQ,KAAG,EAAE;AANqB,CAArB;;;IASM3M,W;;;;;;;mCACI6B,Q,EAAU;AACvB,UAAMsM,eAAe,GAAG,EAAxB;;AACA,WAAK,IAAM7P,CAAX,IAAgBuD,QAAhB,EAA0B;AACxB,YAAIA,QAAQ,CAACtD,cAAT,CAAwBD,CAAxB,CAAJ,EAAgC;AAC9B6P,yBAAe,CAACrC,IAAhB,CAAqB9N,IAAI,CAACC,SAAL,CAAe4D,QAAQ,CAACvD,CAAD,CAAvB,CAArB;AACD;AACF;;AACD,aAAO6P,eAAe,CAAC9C,IAAhB,CAAqB,IAArB,CAAP;AACD;;;;;;;;IAGUpL,W;;;;;;;kCACGvC,I,EAAM;AAClB,UAAMsI,OAAO,GAAG,EAAhB;AACA,UAAMoI,cAAc,GAAG1Q,IAAI,CAAC2Q,KAAL,CAAW,IAAX,CAAvB;;AACA,WAAK,IAAM/P,CAAX,IAAgB8P,cAAhB,EAAgC;AAC9B,YAAIA,cAAc,CAAC7P,cAAf,CAA8BD,CAA9B,CAAJ,EAAsC;AACpC,cAAI,CAAC8P,cAAc,CAAC9P,CAAD,CAAnB,EAAwB;AACtB;AACD;;AACD,cAAMgI,KAAK,GAAGtI,IAAI,CAACkB,KAAL,CAAWkP,cAAc,CAAC9P,CAAD,CAAzB,CAAd;AACA0H,iBAAO,CAAC8F,IAAR,CAAaxF,KAAb;AACD;AACF;;AACD,aAAON,OAAP;AACD;;;wCAEmBsI,U,EAAY5Q,I,EAAM;AACpC,aAAOA,IAAP;AACD;;;+BAEUA,I,EAAM;AACf,aAAOA,IAAP;AACD;;;mCAEc6Q,Q,EAAU7Q,I,EAAM;AAC7B,aAAOA,IAAP;AACD;;;;;;;;;;;;;;;;;;;;;;AC9DH;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAM8Q,QAAQ,GAAGC,mBAAO,CAAC,GAAD,CAAxB;;AACA,IAAMC,KAAK,GAAGF,QAAQ,CAACG,IAAT,CAAcC,QAAd,CAAuBH,mBAAO,CAAC,GAAD,CAA9B,CAAd;AAEA,IAAMI,YAAY,GAAGH,KAAK,CAACI,UAAN,CAAiB,YAAjB,EAA+BC,MAApD;AAEA,IAAMC,kBAAkB,GAAG;AACzBzL,SAAO,EAAEsL,YAAY,CAACtL,OADG;AAEzByF,WAAS,EAAE6F,YAAY,CAAC7F,SAFC;AAGzBY,aAAW,EAAEiF,YAAY,CAACjF,WAHD;AAIzBrE,SAAO,EAAEsJ,YAAY,CAACtJ,OAJG;AAKzBI,UAAQ,EAAEkJ,YAAY,CAAClJ,QALE;AAMzBE,gBAAc,EAAEgJ,YAAY,CAAChJ,cANJ;AAOzBJ,SAAO,EAAEoJ,YAAY,CAACpJ,OAPG;AAQzBsH,MAAI,EAAE8B,YAAY,CAAC9B,IARM;AASzBnI,KAAG,EAAEiK,YAAY,CAACjK,GATO;AAUzBE,MAAI,EAAE+J,YAAY,CAAC/J,IAVM;AAWzB8C,SAAO,EAAEiH,YAAY,CAACjH,OAXG;AAYzBY,aAAW,EAAEqG,YAAY,CAACrG;AAZD,CAA3B;AAeA,IAAMyG,YAAY,GAAG;AACnB1L,SAAO,EAAE,CACPmL,KAAK,CAACQ,UAAN,CAAiB,yBAAjB,CADO,EAEPR,KAAK,CAACQ,UAAN,CAAiB,wBAAjB,CAFO,CADU;AAKnBtH,SAAO,EAAE,CACP8G,KAAK,CAACQ,UAAN,CAAiB,yBAAjB,CADO,EAEPR,KAAK,CAACQ,UAAN,CAAiB,wBAAjB,CAFO,CALU;AASnBlG,WAAS,EAAE,CACT0F,KAAK,CAACQ,UAAN,CAAiB,2BAAjB,CADS,EAETR,KAAK,CAACQ,UAAN,CAAiB,0BAAjB,CAFS,CATQ;AAanB1G,aAAW,EAAE,CACXkG,KAAK,CAACQ,UAAN,CAAiB,4BAAjB,CADW,EAEXR,KAAK,CAACQ,UAAN,CAAiB,2BAAjB,CAFW,CAbM;AAiBnBtF,aAAW,EAAE,CACX8E,KAAK,CAACQ,UAAN,CAAiB,6BAAjB,CADW,EAEXR,KAAK,CAACQ,UAAN,CAAiB,4BAAjB,CAFW,CAjBM;AAqBnB3J,SAAO,EAAE,CACPmJ,KAAK,CAACQ,UAAN,CAAiB,yBAAjB,CADO,EAEPR,KAAK,CAACQ,UAAN,CAAiB,wBAAjB,CAFO,CArBU;AAyBnBvJ,UAAQ,EAAE,CACR+I,KAAK,CAACQ,UAAN,CAAiB,0BAAjB,CADQ,EAERR,KAAK,CAACQ,UAAN,CAAiB,yBAAjB,CAFQ,CAzBS;AA6BnBrJ,gBAAc,EAAE,CACd6I,KAAK,CAACQ,UAAN,CAAiB,+BAAjB,CADc,EAEdR,KAAK,CAACQ,UAAN,CAAiB,8BAAjB,CAFc,CA7BG;AAiCnBzJ,SAAO,EAAE,CACPiJ,KAAK,CAACQ,UAAN,CAAiB,yBAAjB,CADO,EAEPR,KAAK,CAACQ,UAAN,CAAiB,wBAAjB,CAFO,CAjCU;AAqCnBnC,MAAI,EAAE,CACJ2B,KAAK,CAACQ,UAAN,CAAiB,sBAAjB,CADI,EAEJR,KAAK,CAACQ,UAAN,CAAiB,qBAAjB,CAFI,CArCa;AAyCnBtK,KAAG,EAAE,CACH8J,KAAK,CAACQ,UAAN,CAAiB,qBAAjB,CADG,EAEHR,KAAK,CAACQ,UAAN,CAAiB,oBAAjB,CAFG,CAzCc;AA6CnBpK,MAAI,EAAE,CACJ4J,KAAK,CAACQ,UAAN,CAAiB,sBAAjB,CADI,EAEJ,IAFI;AA7Ca,CAArB;AAmDA,IAAMC,gBAAgB,GAAG;AACvBlD,aAAW,EAAEyC,KAAK,CAACI,UAAN,CAAiB,UAAjB,EAA6BC,MAA7B,CAAoC9C,WAD1B;AAEvBI,MAAI,EAAEqC,KAAK,CAACI,UAAN,CAAiB,UAAjB,EAA6BC,MAA7B,CAAoC1C,IAFnB;AAGvBE,OAAK,EAAEmC,KAAK,CAACI,UAAN,CAAiB,UAAjB,EAA6BC,MAA7B,CAAoCxC,KAHpB;AAIvBE,OAAK,EAAEiC,KAAK,CAACI,UAAN,CAAiB,UAAjB,EAA6BC,MAA7B,CAAoCtC,KAJpB;AAKvBN,SAAO,EAAEuC,KAAK,CAACI,UAAN,CAAiB,UAAjB,EAA6BC,MAA7B,CAAoC5C,OALtB;AAMvBQ,KAAG,EAAE+B,KAAK,CAACI,UAAN,CAAiB,UAAjB,EAA6BC,MAA7B,CAAoCpC;AANlB,CAAzB;AASA,IAAMyC,UAAU,GAAG;AACjBnD,aAAW,EAAEyC,KAAK,CAACQ,UAAN,CAAiB,sBAAjB,CADI;AAEjB7C,MAAI,EAAEqC,KAAK,CAACQ,UAAN,CAAiB,eAAjB,CAFW;AAGjB3C,OAAK,EAAEmC,KAAK,CAACQ,UAAN,CAAiB,gBAAjB,CAHU;AAIjBzC,OAAK,EAAEiC,KAAK,CAACQ,UAAN,CAAiB,gBAAjB,CAJU;AAKjB/C,SAAO,EAAEuC,KAAK,CAACQ,UAAN,CAAiB,kBAAjB,CALQ;AAMjBvC,KAAG,EAAE+B,KAAK,CAACQ,UAAN,CAAiB,cAAjB;AANY,CAAnB;AASA,IAAMG,IAAI,GAAGX,KAAK,CAACQ,UAAN,CAAiB,eAAjB,CAAb;AACA,IAAMI,OAAO,GAAGZ,KAAK,CAACQ,UAAN,CAAiB,kBAAjB,CAAhB;AACA,IAAMK,KAAK,GAAGb,KAAK,CAACQ,UAAN,CAAiB,gBAAjB,CAAd;;IAEaM,e;;;;;;;mCACI3N,Q,EAAU;AACvB,UAAM4N,MAAM,GAAGjB,QAAQ,CAACkB,MAAT,CAAgBC,MAAhB,EAAf;;AACA,WAAK,IAAMrR,CAAX,IAAgBuD,QAAhB,EAA0B;AACxB,YAAIA,QAAQ,CAACtD,cAAT,CAAwBD,CAAxB,CAAJ,EAAgC;AAC9B,cAAMyD,OAAO,GAAG6N,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBhO,QAAQ,CAACvD,CAAD,CAA1B,CAAhB;;AACA,cAAIyD,OAAO,CAACnE,MAAZ,EAAoB;AAClB,gBAAIoO,IAAI,SAAR;;AACA,gBAAI,CAACjK,OAAO,CAAC4C,MAAb,EAAqB;AACnB5C,qBAAO,CAAC4C,MAAR,GAAiBqK,kBAAkB,CAACzL,OAApC;AACD;;AAAA;;AACD,oBAAQxB,OAAO,CAAC4C,MAAhB;AACE,mBAAKqK,kBAAkB,CAACzL,OAAxB;AACEyI,oBAAI,GAAGiD,YAAY,CAAC1L,OAAb,CAAqB,CAArB,CAAP;AACA;;AACF,mBAAKyL,kBAAkB,CAACpH,OAAxB;AACEoE,oBAAI,GAAGiD,YAAY,CAACrH,OAAb,CAAqB,CAArB,CAAP;AACA;;AACF,mBAAKoH,kBAAkB,CAAChG,SAAxB;AACEgD,oBAAI,GAAGiD,YAAY,CAACjG,SAAb,CAAuB,CAAvB,CAAP;AACA;;AACF,mBAAKgG,kBAAkB,CAACxG,WAAxB;AACEwD,oBAAI,GAAGiD,YAAY,CAACzG,WAAb,CAAyB,CAAzB,CAAP;AACA;;AACF,mBAAKwG,kBAAkB,CAACpF,WAAxB;AACEoC,oBAAI,GAAGiD,YAAY,CAACrF,WAAb,CAAyB,CAAzB,CAAP;AACA;;AACF,mBAAKoF,kBAAkB,CAACzJ,OAAxB;AACEyG,oBAAI,GAAGiD,YAAY,CAAC1J,OAAb,CAAqB,CAArB,CAAP;AACA;;AACF,mBAAKyJ,kBAAkB,CAACrJ,QAAxB;AACEqG,oBAAI,GAAGiD,YAAY,CAACtJ,QAAb,CAAsB,CAAtB,CAAP;AACA;;AACF,mBAAKqJ,kBAAkB,CAACnJ,cAAxB;AACEmG,oBAAI,GAAGiD,YAAY,CAACpJ,cAAb,CAA4B,CAA5B,CAAP;AACA;;AACF,mBAAKmJ,kBAAkB,CAACvJ,OAAxB;AACEuG,oBAAI,GAAGiD,YAAY,CAACxJ,OAAb,CAAqB,CAArB,CAAP;AACA;;AACF,mBAAKuJ,kBAAkB,CAACjC,IAAxB;AACEf,oBAAI,GAAGiD,YAAY,CAAClC,IAAb,CAAkB,CAAlB,CAAP;AACA;;AACF,mBAAKiC,kBAAkB,CAACpK,GAAxB;AACEoH,oBAAI,GAAGiD,YAAY,CAACrK,GAAb,CAAiB,CAAjB,CAAP;AACA;;AACF,mBAAKoK,kBAAkB,CAAClK,IAAxB;AACEkH,oBAAI,GAAGiD,YAAY,CAACnK,IAAb,CAAkB,CAAlB,CAAP;AACA;AApCJ;;AAsCA/C,mBAAO,CAACnE,MAAR,GAAiBoO,IAAI,CAAC8D,MAAL,CAAY/N,OAAO,CAACnE,MAApB,EAA4BmS,MAA5B,EAAjB;AACD;;AACDT,iBAAO,CAACU,eAAR,CAAwBjO,OAAxB,EAAiC0N,MAAjC;AACD;AACF;;AACD,aAAOA,MAAM,CAACM,MAAP,EAAP;AACD;;;;;;;;IAGUE,e;;;;;;;kCACGvS,I,EAAM;AAClB,UAAMsI,OAAO,GAAG,EAAhB;AACA,UAAMkK,MAAM,GAAG1B,QAAQ,CAAC2B,MAAT,CAAgBR,MAAhB,CAAuB,IAAIS,UAAJ,CAAe1S,IAAf,CAAvB,CAAf;;AACA,aAAOwS,MAAM,CAACG,GAAP,GAAaH,MAAM,CAACI,GAA3B,EAAgC;AAC9B,YAAMhK,KAAK,GAAGiJ,KAAK,CAACgB,eAAN,CAAsBL,MAAtB,CAAd;AACAlK,eAAO,CAAC8F,IAAR,CAAaxF,KAAb;AACD;;AACD,aAAON,OAAP;AACD;;;wCAEmBsI,U,EAAY5Q,I,EAAM;AACpC,UAAIsO,IAAJ;;AACA,cAAQsC,UAAR;AACE,aAAKU,kBAAkB,CAACzL,OAAxB;AACEyI,cAAI,GAAGiD,YAAY,CAAC1L,OAAb,CAAqB,CAArB,CAAP;AACA;;AACF,aAAKyL,kBAAkB,CAACpH,OAAxB;AACEoE,cAAI,GAAGiD,YAAY,CAACrH,OAAb,CAAqB,CAArB,CAAP;AACA;;AACF,aAAKoH,kBAAkB,CAAChG,SAAxB;AACEgD,cAAI,GAAGiD,YAAY,CAACjG,SAAb,CAAuB,CAAvB,CAAP;AACA;;AACF,aAAKgG,kBAAkB,CAACxG,WAAxB;AACEwD,cAAI,GAAGiD,YAAY,CAACzG,WAAb,CAAyB,CAAzB,CAAP;AACA;;AACF,aAAKwG,kBAAkB,CAACpF,WAAxB;AACEoC,cAAI,GAAGiD,YAAY,CAACrF,WAAb,CAAyB,CAAzB,CAAP;AACA;;AACF,aAAKoF,kBAAkB,CAACzJ,OAAxB;AACEyG,cAAI,GAAGiD,YAAY,CAAC1J,OAAb,CAAqB,CAArB,CAAP;AACA;;AACF,aAAKyJ,kBAAkB,CAACrJ,QAAxB;AACEqG,cAAI,GAAGiD,YAAY,CAACtJ,QAAb,CAAsB,CAAtB,CAAP;AACA;;AACF,aAAKqJ,kBAAkB,CAACnJ,cAAxB;AACEmG,cAAI,GAAGiD,YAAY,CAACpJ,cAAb,CAA4B,CAA5B,CAAP;AACA;;AACF,aAAKmJ,kBAAkB,CAACvJ,OAAxB;AACEuG,cAAI,GAAGiD,YAAY,CAACxJ,OAAb,CAAqB,CAArB,CAAP;AACA;;AACF,aAAKuJ,kBAAkB,CAACjC,IAAxB;AACEf,cAAI,GAAGiD,YAAY,CAAClC,IAAb,CAAkB,CAAlB,CAAP;AACA;;AACF,aAAKiC,kBAAkB,CAACpK,GAAxB;AACEoH,cAAI,GAAGiD,YAAY,CAACrK,GAAb,CAAiB,CAAjB,CAAP;AACA;AAjCJ;;AAmCA,aAAO,KAAK4L,OAAL,CAAaxE,IAAb,EAAmBtO,IAAnB,CAAP;AACD;;;+BAEUA,I,EAAM;AACf,aAAO,KAAK8S,OAAL,CAAanB,IAAb,EAAmB3R,IAAnB,CAAP;AACD;;;mCAEc6Q,Q,EAAU7Q,I,EAAM;AAC7B,UAAIsO,IAAJ;;AACA,cAAQuC,QAAR;AACE,aAAKY,gBAAgB,CAAClD,WAAtB;AACED,cAAI,GAAGoD,UAAU,CAACnD,WAAlB;AACA;;AACF,aAAKkD,gBAAgB,CAAChD,OAAtB;AACEH,cAAI,GAAGoD,UAAU,CAACjD,OAAlB;AACA;;AACF,aAAKgD,gBAAgB,CAAC9C,IAAtB;AACEL,cAAI,GAAGoD,UAAU,CAAC/C,IAAlB;AACA;;AACF,aAAK8C,gBAAgB,CAAC5C,KAAtB;AACEP,cAAI,GAAGoD,UAAU,CAAC7C,KAAlB;AACA;;AACF,aAAK4C,gBAAgB,CAAC1C,KAAtB;AACET,cAAI,GAAGoD,UAAU,CAAC3C,KAAlB;AACA;;AACF,aAAK0C,gBAAgB,CAACxC,GAAtB;AACEX,cAAI,GAAGoD,UAAU,CAACzC,GAAlB;AACA;AAlBJ;;AAoBA,aAAO,KAAK6D,OAAL,CAAaxE,IAAb,EAAmBtO,IAAnB,CAAP;AACD;;;4BAEOsO,I,EAAMtO,I,EAAM;AAClB,UAAI+S,GAAJ;;AACA,UAAI;AACFA,WAAG,GAAGzE,IAAI,CAAC0E,MAAL,CAAYhT,IAAZ,CAAN;AACD,OAFD,CAEE,OAAOiG,GAAP,EAAY;AACZ,eAAO,IAAP;AACD;;AACD,aAAO8M,GAAP;AACD;;;;;;;;IAGUvC,kB;;;;;;;;;;;;;oCACKvO,M,EAAQ;AACtB,UAAIA,MAAM,KAAK,UAAf,EAA2B;AACzB,aAAKxG,OAAL,GAAe,IAAf;AACA,aAAKC,WAAL,GAAmB4V,kBAAnB;AACA,aAAK3V,SAAL,GAAiB8V,gBAAjB;AACA,aAAK7V,QAAL,GAAgB,IAAIkW,eAAJ,EAAhB;AACA,aAAKjW,QAAL,GAAgB,IAAI0W,eAAJ,EAAhB;AACA,eAAO,IAAP;AACD;;AACD,aAAO,KAAP;AACD;;;;EAXqCrX,sB;;;;;;;;;;;;;;;;;;ACpPxC;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAM+X,UAAU,GAAG,CAAnB;AACA,IAAMC,kBAAkB,GAAG,CAA3B;AACA,IAAMC,cAAc,GAAG,CAAvB;AACA,IAAMC,YAAY,GAAG,CAArB;AACA,IAAMC,mBAAmB,GAAG,CAA5B;;IAEqB/C,Y;;;;;AACnB,wBAAYgD,UAAZ,EAAwB/P,OAAxB,EAAiC2M,MAAjC,EAAyC;AAAA;;AAAA;;AACvC;AACA,UAAK3M,OAAL,GAAeA,OAAf;AACA,UAAKgQ,WAAL,GAAmBD,UAAnB;AACA,UAAKxX,OAAL,GAAemX,UAAf;AACA,UAAKO,MAAL,GAAc,IAAd;AACA,UAAKC,cAAL,GAAsB,KAAtB;AACA,UAAKC,MAAL,GAAc,KAAd;AACA,UAAKC,oBAAL,GAA4B,IAA5B;AACA,UAAKC,cAAL,GAAsB,KAAtB;AACA,UAAKlG,YAAL,GAAoB,KAApB;AACA,UAAK/J,QAAL,GAAgB,KAAhB;;AACA,UAAKyM,UAAL,CAAgBF,MAAhB;;AACA,UAAK2D,kBAAL;;AACA,UAAKC,SAAL,GAAiB,EAAjB;AACA,UAAKC,UAAL,GAAkB,CAAlB;;AACA,UAAKC,EAAL,CAAQ,OAAR,EAAiB,UAAUC,UAAV,EAAsB;AACrC,WAAKV,WAAL,CAAiBlT,MAAjB,CAAwB,oBAAxB,EAA8C4T,UAA9C;AACD,KAFD;;AAhBuC;AAmBxC;;;;qCAEgB;AACf,aAAO,EAAE,KAAKF,UAAd;AACD;;;yCAEoB;AAAA;;AACnB;AACA;AACA;AACA,WAAKL,MAAL,GAAc,KAAd;AAEA,WAAKC,oBAAL,GAA4B,IAAI5V,OAAJ,CAAY,UAACC,OAAD,EAAUsJ,MAAV,EAAqB;AAC3D,cAAI,CAAC4M,QAAL,GAAgB,UAAAC,KAAK,EAAI;AACvB,gBAAI,CAACT,MAAL,GAAc,IAAd;AACA1V,iBAAO,CAACmW,KAAD,CAAP;AACD,SAHD;;AAIA,cAAI,CAACC,OAAL,GAAe,UAAAnO,GAAG,EAAI;AACpB,gBAAI,CAACyN,MAAL,GAAc,IAAd;AACApM,gBAAM,CAACrB,GAAD,CAAN;AACD,SAHD;AAID,OAT2B,EASzBR,IATyB,CASpB,YAAY,CAAE,CATM,EASJ,YAAY,CAAE,CATV,CAA5B;AAUD;;;mCAEc;AACb,aAAO,KAAKiI,YAAL,KAAsB,IAAtB,IAA8B,KAAK/J,QAAL,KAAkB,IAAvD;AACD;;;+BAEUuM,M,EAAQ;AACjB,UAAI,CAACA,MAAL,EAAa;AACX;AACD;;AACD,UAAI,uBAAWA,MAAX,CAAJ,EAAwB;AACtB;AACA,aAAK8D,EAAL,CAAQ,SAAR,EAAmB9D,MAAnB;AACD,OAHD,MAGO,IAAIgC,MAAM,CAACmC,SAAP,CAAiBC,QAAjB,CAA0BC,IAA1B,CAA+BrE,MAA/B,MAA2CgC,MAAM,CAACmC,SAAP,CAAiBC,QAAjB,CAA0BC,IAA1B,CAA+B,EAA/B,CAA/C,EAAmF;AACxF,YAAMC,WAAW,GAAG,CAAC,SAAD,EAAY,MAAZ,EAAoB,OAApB,EAA6B,aAA7B,EAA4C,WAA5C,EAAyD,OAAzD,CAApB;;AACA,aAAK,IAAI5T,CAAC,GAAG,CAAR,EAAW6T,CAAC,GAAGD,WAAW,CAAC1T,MAAhC,EAAwCF,CAAC,GAAG6T,CAA5C,EAA+C7T,CAAC,EAAhD,EAAoD;AAClD,cAAM8T,EAAE,GAAGF,WAAW,CAAC5T,CAAD,CAAtB;;AACA,cAAI8T,EAAE,IAAIxE,MAAV,EAAkB;AAChB,iBAAK8D,EAAL,CAAQU,EAAR,EAAYxE,MAAM,CAACwE,EAAD,CAAlB;AACD;AACF;AACF;AACF;;;6BAEQ;AACP,aAAO,KAAK5Y,OAAL,KAAiBmX,UAAxB;AACD;;;sCAEiB;AAChB,aAAO,KAAKnX,OAAL,KAAiBuX,mBAAxB;AACD;;;qCAEgB;AACf,aAAO,KAAKvX,OAAL,KAAiBoX,kBAAxB;AACD;;;+BAEU;AACT,aAAO,KAAKpX,OAAL,KAAiBqX,cAAjB,IAAmC,KAAKrX,OAAL,KAAiBsX,YAA3D;AACD;;;iCAEY;AACX,aAAO,KAAKtX,OAAL,KAAiBqX,cAAxB;AACD;;;+BAEU;AACT,aAAO,KAAKrX,OAAL,KAAiBsX,YAAxB;AACD;;;8BAES;AACR,WAAKtX,OAAL,GAAemX,UAAf;AACD;;;oCAEe7H,a,EAAe;AAC7B,WAAKqI,cAAL,GAAsBrI,aAAa,IAAI,KAAvC;;AACA,UAAI,KAAKsI,MAAL,KAAgB,IAApB,EAA0B;AACxB;AACA,aAAKG,kBAAL;AACD;;AACD,WAAK/X,OAAL,GAAeoX,kBAAf;AACD;;;yCAEoByB,e,EAAiB;AACpC,UAAI,KAAK7Y,OAAL,KAAiBqX,cAArB,EAAqC;AACnC;AACD;;AACD,WAAKrX,OAAL,GAAeqX,cAAf;;AACA,UAAMyB,cAAc,GAAG,KAAKC,2BAAL,CAAiCF,eAAjC,CAAvB;;AACA,WAAKhR,QAAL,GAAgB,KAAhB;AACA,WAAK2F,IAAL,CAAU,WAAV,EAAuBsL,cAAvB;;AACA,WAAKV,QAAL,CAAcU,cAAd;;AACA,WAAK,IAAM1R,EAAX,IAAiB,KAAK4Q,SAAtB,EAAiC;AAC/B1Q,oBAAY,CAAC,KAAK0Q,SAAL,CAAe5Q,EAAf,EAAmBzE,OAApB,CAAZ;;AACA,aAAKqV,SAAL,CAAe5Q,EAAf,EAAmBlF,OAAnB;;AACA,eAAO,KAAK8V,SAAL,CAAe5Q,EAAf,CAAP;AACD;AACF;;;uCAEkB+C,G,EAAK;AACtB,UAAI,KAAKnK,OAAL,KAAiBsX,YAArB,EAAmC;AACjC;AACD;;AACD,WAAKtX,OAAL,GAAesX,YAAf;AACA,WAAKI,MAAL,GAAcvN,GAAd;;AACA,UAAMgO,UAAU,GAAG,KAAKa,yBAAL,EAAnB;;AACA,WAAKxL,IAAL,CAAU,OAAV,EAAmB2K,UAAnB;;AACA,WAAKG,OAAL,CAAaH,UAAb;;AACA,WAAK,IAAM/Q,EAAX,IAAiB,KAAK4Q,SAAtB,EAAiC;AAC/B1Q,oBAAY,CAAC,KAAK0Q,SAAL,CAAe5Q,EAAf,EAAmBzE,OAApB,CAAZ;;AACA,aAAKqV,SAAL,CAAe5Q,EAAf,EAAmBoE,MAAnB,CAA0BrB,GAA1B;;AACA,eAAO,KAAK6N,SAAL,CAAe5Q,EAAf,CAAP;AACD;AACF;;;0CAEqB;AACpB,WAAKoG,IAAL,CAAU,aAAV,EAAyB;AACvB/F,eAAO,EAAE,KAAKA;AADS,OAAzB;AAGD;;;qCAEgBwR,a,EAAe;AAC9B,WAAKxB,WAAL,CAAiBvP,uBAAjB,CAAyC,KAAKT,OAA9C;;AACA,UAAI,KAAKzH,OAAL,KAAiBuX,mBAArB,EAA0C;AACxC;AACD;;AACD,UAAM2B,WAAW,GAAG,KAAKlZ,OAAL,KAAiBqX,cAArC;AACA,WAAKrX,OAAL,GAAeuX,mBAAf;;AACA,UAAI0B,aAAa,KAAK,IAAtB,EAA4B;AAC1B,aAAKpR,QAAL,GAAgB,KAAhB;AACA,aAAKiQ,cAAL,GAAsB,IAAtB;AACA,eAAO,KAAKL,WAAL,CAAiB9W,QAAjB,CAA0B,KAAK8G,OAA/B,CAAP;AACA,eAAO,KAAKgQ,WAAL,CAAiB7W,QAAjB,CAA0B,KAAK6G,OAA/B,CAAP;AACA,eAAO,KAAKgQ,WAAL,CAAiB3W,UAAjB,CAA4B,KAAK2G,OAAjC,CAAP;AACD;;AACD,UAAIyR,WAAJ,EAAiB;AACf,aAAKtR,mBAAL;AACD;AACF;;;yCAEoB;AACnB,aAAO,CAAC,KAAKkQ,cAAb;AACD;;;gDAE2Be,e,EAAiB;AAC3C,UAAIhI,GAAG,GAAG;AACRpJ,eAAO,EAAE,KAAKA,OADN;AAER6H,qBAAa,EAAE,KAAKqI;AAFZ,OAAV;;AAIA,UAAIkB,eAAJ,EAAqB;AACnB;AACAhI,WAAG,GAAG,KAAK4G,WAAL,CAAiBxG,uBAAjB,CAAyCJ,GAAzC,EAA8CgI,eAA9C,CAAN;AACD;;AACD,aAAOhI,GAAP;AACD;;;gDAE2B;AAC1B,UAAMsI,qBAAqB,GAAG,KAAKzB,MAAnC;AACAyB,2BAAqB,CAAC1R,OAAtB,GAAgC,KAAKA,OAArC;AACA0R,2BAAqB,CAAC7J,aAAtB,GAAsC,KAAKqI,cAA3C;AACA,aAAOwB,qBAAP;AACD;;;0BAEK9U,Q,EAAUkD,O,EAAS;AACvB,UAAI,KAAKqQ,MAAT,EAAiB;AACf,YAAI,KAAKjQ,UAAL,EAAJ,EAAuB;AACrBtD,kBAAQ,CAAC,KAAK0U,2BAAL,EAAD,CAAR;AACD,SAFD,MAEO;AACLxR,iBAAO,CAAC,KAAKyR,yBAAL,EAAD,CAAP;AACD;AACF;AACF;;;gCAEW;AACV,UAAI,KAAKhZ,OAAL,KAAiBqX,cAArB,EAAqC;AACnC;AACD;;AACD,WAAKS,cAAL,GAAsB,KAAtB;;AACA,WAAKL,WAAL,CAAiB/H,UAAjB,CAA4B,IAA5B;AACD;;;kCAEa;AACZ,WAAK1H,gBAAL,CAAsB,IAAtB;;AACA,WAAKyP,WAAL,CAAiB2B,YAAjB,CAA8B,IAA9B;AACD;;;kCAEa;AAAA;;AACZ,UAAI,KAAKzR,UAAL,EAAJ,EAAuB;AACrB,eAAO1F,OAAO,CAACC,OAAR,EAAP;AACD,OAFD,MAEO,IAAI,KAAKmX,QAAL,EAAJ,EAAqB;AAC1B,eAAOpX,OAAO,CAACuJ,MAAR,CAAe,KAAKkM,MAApB,CAAP;AACD;;AACD,UAAI4B,UAAU,GAAG,IAAIrX,OAAJ,CAAY,UAACgV,GAAD,EAAMsC,GAAN,EAAc;AACzC,YAAM5W,OAAO,GAAGoD,UAAU,CAAC,YAAY;AACrCwT,aAAG,CAAC;AAAC,oBAAQ,CAAT;AAAY,uBAAW;AAAvB,WAAD,CAAH;AACD,SAFyB,EAEvB,MAAI,CAAC9B,WAAL,CAAiBtV,OAAjB,CAAyBQ,OAFF,CAA1B;AAGA,cAAI,CAACqV,SAAL,CAAe,MAAI,CAACwB,cAAL,EAAf,IAAwC;AACtC7W,iBAAO,EAAEA,OAD6B;AAEtCT,iBAAO,EAAE+U,GAF6B;AAGtCzL,gBAAM,EAAE+N;AAH8B,SAAxC;AAKD,OATgB,CAAjB;AAUA,aAAOD,UAAP;AACD;;;4BAEOpV,I,EAAM;AACZ,UAAMuV,IAAI,GAAG,IAAb;AACA,aAAO,KAAKpO,WAAL,GAAmB1B,IAAnB,CAAwB,YAAY;AACzC,eAAO8P,IAAI,CAAChC,WAAL,CAAiBiC,OAAjB,CAAyBD,IAAI,CAAChS,OAA9B,EAAuCvD,IAAvC,CAAP;AACD,OAFM,CAAP;AAGD;;;+BAEU;AACT,UAAMuV,IAAI,GAAG,IAAb;AACA,aAAO,KAAKpO,WAAL,GAAmB1B,IAAnB,CAAwB,YAAY;AACzC,eAAO8P,IAAI,CAAChC,WAAL,CAAiBrL,QAAjB,CAA0BqN,IAAI,CAAChS,OAA/B,CAAP;AACD,OAFM,CAAP;AAGD;;;oCAEe;AACd,UAAMgS,IAAI,GAAG,IAAb;AACA,aAAO,KAAKpO,WAAL,GAAmB1B,IAAnB,CAAwB,YAAY;AACzC,eAAO8P,IAAI,CAAChC,WAAL,CAAiBkC,aAAjB,CAA+BF,IAAI,CAAChS,OAApC,CAAP;AACD,OAFM,CAAP;AAGD;;;4BAEOnI,O,EAAS;AACf,UAAMma,IAAI,GAAG,IAAb;AACA,aAAO,KAAKpO,WAAL,GAAmB1B,IAAnB,CAAwB,YAAY;AACzC,eAAO8P,IAAI,CAAChC,WAAL,CAAiBmC,OAAjB,CAAyBH,IAAI,CAAChS,OAA9B,EAAuCnI,OAAvC,CAAP;AACD,OAFM,CAAP;AAGD;;;;EA3PuCmV,kB;;;;;;;;;;;;;;;;;;;;;;ACZnC,SAASoF,UAAT,CAAoBxB,KAApB,EAA2ByB,MAA3B,EAAmC;AACxC,SAAOzB,KAAK,CAAC0B,WAAN,CAAkBD,MAAlB,EAA0B,CAA1B,MAAiC,CAAxC;AACD;;AAAA;;AAEM,SAASE,UAAT,CAAoB3B,KAApB,EAA2B;AAChC,MAAIA,KAAK,KAAK1M,SAAV,IAAuB0M,KAAK,KAAK,IAArC,EAA2C;AACzC,WAAO,KAAP;AACD;;AACD,SAAO,OAAOA,KAAP,KAAiB,UAAxB;AACD;;AAAA;;AAEM,SAAS4B,GAAT,CAAaC,KAAb,EAAoBC,IAApB,EAA0B;AAC/B,MAAIxV,qBAAM,CAACyV,OAAX,EAAoB;AAClB,QAAMC,MAAM,GAAG1V,qBAAM,CAACyV,OAAP,CAAeF,KAAf,CAAf;;AAEA,QAAIF,UAAU,CAACK,MAAD,CAAd,EAAwB;AACtBA,YAAM,CAACC,KAAP,CAAa3V,qBAAM,CAACyV,OAApB,EAA6BD,IAA7B;AACD;AACF;AACF;;AAAA;;AAEM,SAASI,OAAT,CAAiBC,IAAjB,EAAuBnK,GAAvB,EAA4BlC,GAA5B,EAAiC;AACtC,MAAMJ,MAAM,GAAG,MAAMC,IAAI,CAACE,MAAL,EAArB;AACA,MAAMnH,QAAQ,GAAGiH,IAAI,CAACqC,GAAL,CAASlC,GAAT,EAAckC,GAAG,GAAGrC,IAAI,CAACyM,GAAL,CAAS,CAAT,EAAYD,IAAI,GAAG,CAAnB,CAApB,CAAjB;AAEA,SAAOxM,IAAI,CAAC0M,KAAL,CAAW,CAAC,IAAI3M,MAAL,IAAehH,QAA1B,CAAP;AACD;;AAAA;;AAEM,SAAS4T,WAAT,CAAqBzW,IAArB,EAA2B;AAChC,SAAO,WAAWA,IAAX,IAAmBA,IAAI,CAAC2B,KAAL,KAAe,IAAzC;AACD;;AAAA;;AAEM,SAAS+U,MAAT,CAAgBC,CAAhB,EAAmBC,CAAnB,EAAsB;AAC3B,OAAK,IAAMC,GAAX,IAAkBD,CAAlB,EAAqB;AACnB,QAAIA,CAAC,CAAC/V,cAAF,CAAiBgW,GAAjB,CAAJ,EAA2B;AACzBF,OAAC,CAACE,GAAD,CAAD,GAASD,CAAC,CAACC,GAAD,CAAV;AACD;AACF;;AACD,SAAOF,CAAP;AACD;;AAAA,C;;;;;;;ACvCD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,cAAc;AACd;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,OAAO;AACP;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;;AAEA;AACA,QAAQ,yBAAyB;AACjC;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;AACH;;;;;;;;AC3dA;;AAEa;AACb,yCAA6C,C;;;;;;;ACHhC;AACb;AACA;AACA;AACA;AACA;;AAEA,WAAW,mBAAO,CAAC,EAAQ;AAC3B,WAAW,mBAAO,CAAC,GAAQ;;AAE3B;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,0BAA0B;AAC1B,2FAA2F,iBAAiB;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,eAAe;AACf,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;;AAEA;AACA,wBAAwB;AACxB,cAAc;AACd;AACA;AACA,gBAAgB;AAChB,0CAA0C,YAAY,KAAK;AAC3D;AACA,WAAW;AACX,OAAO;;AAEP;AACA,SAAS,2BAA2B;AACpC,cAAc;AACd;AACA;AACA;AACA,sBAAsB,aAAa,KAAK;AACxC;AACA,WAAW;AACX,OAAO;;AAEP;AACA,SAAS;AACT;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA,cAAc;AACd,cAAc;;AAEd;AACA;AACA;AACA;AACA,UAAU,mBAAmB;AAC7B;AACA;AACA;AACA;;AAEA,gCAAgC;AAChC,+BAA+B;AAC/B,mBAAmB,2BAA2B;AAC9C;AACA;AACA,OAAO;AACP;;AAEA,2BAA2B;AAC3B,gCAAgC;AAChC,mBAAmB,sBAAsB;AACzC,gBAAgB;AAChB;AACA,OAAO;AACP;;AAEA,8BAA8B;AAC9B,qBAAqB;AACrB,mBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,WAAW;AACX,aAAa;AACb,4CAA4C;AAC5C,SAAS;AACT,OAAO;AACP;AACA;AACA,eAAe,mBAAmB;AAClC;AACA;AACA;AACA;AACA,0BAA0B,eAAe;AACzC;AACA,aAAa;AACb,6CAA6C;AAC7C,gBAAgB;AAChB,sBAAsB,aAAa,KAAK;AACxC;AACA,WAAW;AACX,SAAS,2BAA2B;AACpC,0BAA0B;AAC1B;AACA,sBAAsB,aAAa,KAAK;AACxC;AACA,WAAW;AACX,SAAS,OAAO;AAChB,0CAA0C,qBAAqB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;;;;;;;ACpSa;AACb;;AAEA,cAAc,mBAAO,CAAC,EAAQ;AAC9B,cAAc,mBAAO,CAAC,EAAS;AAC/B,cAAc,mBAAO,CAAC,GAAQ;;AAE9B;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,sGAAsG,kBAAkB,EAAE;AAC1H,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,wBAAwB;;AAExB;AACA,UAAU,gDAAgD;AAC1D;AACA;AACA,oDAAoD;AACpD;;AAEA;AACA,wBAAwB;AACxB;AACA,2BAA2B;AAC3B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC;AAClC;AACA,uCAAuC;AACvC,2CAA2C;AAC3C;;AAEA;AACA,wEAAwE;AACxE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,mBAAmB;;AAEnB;AACA;AACA;AACA;;AAEA;AACA,SAAS,2BAA2B;;AAEpC;AACA;;AAEA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA,WAAW;AACX,OAAO;;AAEP;AACA,eAAe,+BAA+B;AAC9C;AACA;AACA;AACA,uCAAuC,WAAW;AAClD;;AAEA;AACA;AACA;AACA;;;;;;;;AC/Ha;AACb;;AAEA,eAAe,mBAAO,CAAC,EAAQ;AAC/B,eAAe,mBAAO,CAAC,EAAS;AAChC,eAAe,mBAAO,CAAC,GAAQ;;AAE/B;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qDAAqD;AACrD,yCAAyC,YAAY,KAAK;AAC1D;AACA;AACA,8FAA8F;AAC9F;AACA;AACA;AACA,WAAW;AAC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A;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,kBAAkB;AAChC;;AAEA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,MAAM;AACnB,YAAY,MAAM;AAClB;AACA;;AAEA;AACA;;AAEA,uEAAuE;AACvE;AACA;AACA;AACA;AACA,kGAAkG;AAClG;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,sCAAsC,cAAc,MAAM,iBAAiB;AAC3E;AACA,UAAU;AACV,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;;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;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,8GAA8G;AACzH,WAAW,4JAA4J,EAAE;AACzK,aAAa,eAAe;AAC5B,wBAAwB,8FAA8F;AACtH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;AC7Ha;AACb;;AAEA,WAAW,mBAAO,CAAC,GAAgB;;AAEnC;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA,uDAAuD,iBAAiB;AACxE;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,oBAAoB;AAC/B,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,oBAAoB;AAC/B,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,YAAY;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,EAAE;AACb,WAAW,mBAAmB;AAC9B,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;;AAEA,6B;;;;;;;AC1Ia;AACb;;AAEA;AACA,uBAAuB,mBAAO,CAAC,GAAU;AACzC;;AAEA,WAAW,mBAAO,CAAC,GAAQ;;AAE3B;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,iBAAiB;AAC5B,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,0BAA0B;AACrC,WAAW,0BAA0B;AACrC,WAAW,kBAAkB;AAC7B,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,cAAc;AACd;AACA,8BAA8B;;AAE9B;AACA;AACA,cAAc;AACd;AACA,mCAAmC;;AAEnC;AACA;AACA,cAAc;AACd;AACA,0DAA0D;;AAE1D;AACA;AACA,cAAc;AACd;AACA,qCAAqC;;AAErC;AACA;AACA,cAAc;AACd;AACA,4DAA4D;;AAE5D;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,kBAAkB;AAChC,cAAc,OAAO;AACrB,cAAc,kBAAkB;AAChC;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB,YAAY,UAAU;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;AC/Ja;AACb;;AAEA;AACA,uBAAuB,mBAAO,CAAC,GAAU;AACzC;;AAEA,eAAe,mBAAO,CAAC,GAAS;AAChC,eAAe,mBAAO,CAAC,GAAQ;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B,aAAa,UAAU;AACvB,YAAY,UAAU;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,eAAe;AAC1B,aAAa,4BAA4B;AACzC;AACA;AACA;AACA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,kCAAkC;AAC7C,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA,uBAAuB,qBAAqB;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kCAAkC;AAC7C,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA,uBAAuB,qBAAqB;AAC5C;AACA;AACA;AACA;;AAEA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,4BAA4B;;AAE5B;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,cAAc,kBAAkB;AAChC,cAAc,gCAAgC;AAC9C;;AAEA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,aAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,gCAAgC;AAC3C,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA,gEAAgE,kBAAkB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,sBAAsB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,gBAAgB;AAClD,8BAA8B,wBAAwB;AACtD,WAAW,OAAO;AAClB,aAAa,uBAAuB;AACpC,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa,UAAU;AACvB,YAAY,UAAU;AACtB,YAAY,MAAM;AAClB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,mBAAmB;AAClD;AACA;AACA;AACA;AACA;;AAEA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa,UAAU;AACvB,YAAY,UAAU;AACtB,YAAY,MAAM;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,EAAE;AACb,aAAa,UAAU;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,sBAAsB;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA,KAAK;AACL,uBAAuB,6BAA6B;AACpD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,QAAQ;AACnB,aAAa,sBAAsB;AACnC;AACA;AACA;;AAEA;AACA,iBAAiB,gBAAgB;AACjC,qDAAqD,8BAA8B;AACnF,WAAW,gBAAgB;AAC3B,aAAa,KAAK;AAClB,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,gBAAgB;AAC/C,qDAAqD,8BAA8B;AACnF,WAAW,gBAAgB;AAC3B,aAAa,KAAK;AAClB,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,gBAAgB,KAAK,gBAAgB;AACtD,qDAAqD,8BAA8B;AACnF,WAAW,gBAAgB;AAC3B,aAAa,KAAK;AAClB,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,sBAAsB;AACvC,qDAAqD,8BAA8B;AACnF,WAAW,gBAAgB;AAC3B,aAAa,QAAQ;AACrB,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChba;AACb;;AAEA;;AAEA,WAAW,mBAAO,CAAC,GAAQ;;AAE3B,SAAS;;AAET;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,2BAA2B;;AAE3B;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,WAAW,QAAQ;AACnB,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,2CAA2C;AAC3C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,QAAQ;AACnB,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA,oDAAoD,iBAAiB;AACrE;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;AClPa;AACb;;AAEA;AACA,uBAAuB,mBAAO,CAAC,GAAU;AACzC;;AAEA,YAAY,mBAAO,CAAC,GAAS;AAC7B,YAAY,mBAAO,CAAC,GAAQ;;AAE5B;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,2BAA2B;AACtC,WAAW,kBAAkB;AAC7B,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,kCAAkC;;AAElC;AACA;AACA,cAAc;AACd;AACA;AACA,0BAA0B;;AAE1B;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc,kBAAkB;AAChC;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB,YAAY,UAAU;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,uBAAuB,8BAA8B;AACrD;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uBAAuB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAA0B,6BAA6B;AACvD;AACA;AACA;AACA;;AAEA;AACA,sCAAsC,cAAc;AACpD;AACA,UAAU;AACV,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;;AAEA;AACA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;;;;;;;AC1Ma;AACb;;AAEA,gBAAgB,mBAAO,CAAC,GAAgB;;AAExC,iBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,WAAW;AACtB;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,oBAAoB,IAAI,mBAAmB,uCAAuC;AAC/F,YAAY,MAAM;AAClB;AACA;;AAEA;;AAEA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA,2BAA2B;AAC3B;AACA,iEAAiE;AACjE,iEAAiE;AACjE,iEAAiE;AACjE,iEAAiE;AACjE,iEAAiE;;AAEjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,kCAAkC;AAClC,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,aAAa,KAAK;AAClB;;AAEA;AACA;AACA;AACA;AACA,aAAa,KAAK;AAClB;;AAEA;AACA;AACA;AACA;AACA,aAAa,KAAK;AAClB;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,aAAa,KAAK;AAClB;;AAEA;AACA;AACA;AACA;AACA,aAAa,KAAK;AAClB;;AAEA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA,KAAK;AACL;;;;;;;;AC1Za;AACb;;AAEA;AACA,aAAa,mBAAO,CAAC,GAAU;AAC/B;;AAEA,WAAW,mBAAO,CAAC,GAAgB;;AAEnC;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;;AAEA;;;;;;;;AClDa;AACb;;AAEA;AACA,gBAAgB,mBAAO,CAAC,GAAa;AACrC;;AAEA,cAAc,mBAAO,CAAC,GAAS;AAC/B,cAAc,mBAAO,CAAC,EAAQ;AAC9B,cAAc,mBAAO,CAAC,GAAS;AAC/B,cAAc,mBAAO,CAAC,GAAQ;;AAE9B;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,YAAY;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,cAAc;AACzB,aAAa;AACb;AACA;;AAEA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,cAAc;AACzB,WAAW,aAAa;AACxB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2BAA2B;AACrD;AACA;AACA;AACA,+BAA+B,+BAA+B;AAC9D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,+BAA+B;AAC/B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,aAAa;AACxB,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,cAAc,uCAAuC,qBAAqB;AACrF,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,cAAc,uCAAuC,qBAAqB;AACrF,aAAa,KAAK;AAClB,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA,uDAAuD;;AAEvD,KAAK;;AAEL;AACA,2BAA2B,0BAA0B;AACrD;AACA;AACA;AACA;AACA,uBAAuB,iDAAiD;AACxE;AACA;AACA,gDAAgD;AAChD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA,8DAA8D;AAC9D;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA,8CAA8C;;AAE9C,KAAK;;AAEL,uBAAuB,iDAAiD;AACxE;;AAEA;AACA,8CAA8C;;AAE9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC1Wa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACjBa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC,qBAAqB;AACtD;AACA,UAAU;AACV,WAAW,mCAAmC,YAAY,GAAG;AAC7D,WAAW,WAAW;AACtB,WAAW,gBAAgB;AAC3B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,mCAAmC,cAAc;AACjD;AACA,UAAU;AACV,WAAW,WAAW;AACtB,WAAW,gBAAgB;AAC3B,aAAa;AACb;;AAEA,cAAc,mBAAO,CAAC,GAAe;;;;;;;;ACnCxB;AACb;;AAEA,WAAW,mBAAO,CAAC,GAAiB;;AAEpC;AACA;;AAEA;AACA,yCAAyC,sCAAsC;AAC/E;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA,UAAU;AACV,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,aAAa;AACb;;AAEA;AACA,+BAA+B,kBAAkB,gBAAgB,qBAAqB;AACtF;AACA;AACA;AACA,UAAU;AACV,WAAW,sBAAsB;AACjC,WAAW,gCAAgC;AAC3C,aAAa,uBAAuB;AACpC;;AAEA;AACA;AACA,6CAA6C,qBAAqB;AAClE;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA,mCAAmC,kCAAkC;AACrE,WAAW,oCAAoC;AAC/C,WAAW,kBAAkB;AAC7B,WAAW,kBAAkB;AAC7B,WAAW,sBAAsB;AACjC,WAAW,gCAAgC;AAC3C,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,+BAA+B,kCAAkC,EAAE;AACnE;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,+BAA+B,eAAe,EAAE;AAChD;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7Ia;AACb;;AAEA;AACA,gBAAgB,mBAAO,CAAC,GAAa;AACrC;;AAEA,aAAa,mBAAO,CAAC,GAAU;AAC/B,aAAa,mBAAO,CAAC,GAAQ;AAC7B,aAAa,mBAAO,CAAC,GAAO;;AAE5B;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B,YAAY,UAAU;AACtB;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,sBAAsB;;AAEtB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,wBAAwB;AACtC;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;AACA,0DAA0D,kBAAkB;AAC5E;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G;AAC5G;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,YAAY;AACzB;AACA;AACA;AACA,2BAA2B,gDAAgD;AAC3E;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;ACtKa;AACb;;AAEA;AACA,gBAAgB,mBAAO,CAAC,GAAa;AACrC;;AAEA,gBAAgB,mBAAO,CAAC,EAAQ;AAChC,gBAAgB,mBAAO,CAAC,GAAS;AACjC,gBAAgB,mBAAO,CAAC,GAAS;AACjC,gBAAgB,mBAAO,CAAC,EAAY;AACpC,gBAAgB,mBAAO,CAAC,GAAW;AACnC,gBAAgB,mBAAO,CAAC,GAAW;AACnC,gBAAgB,mBAAO,CAAC,GAAU;AAClC,gBAAgB,mBAAO,CAAC,GAAU;AAClC,gBAAgB,mBAAO,CAAC,GAAQ;AAChC,gBAAgB,mBAAO,CAAC,GAAW;AACnC,gBAAgB,mBAAO,CAAC,GAAW;AACnC,gBAAgB,mBAAO,CAAC,GAAY;AACpC,gBAAgB,mBAAO,CAAC,GAAa;AACrC,gBAAgB,mBAAO,CAAC,GAAY;;AAEpC;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,qBAAqB;;AAErB;AACA;AACA,cAAc;AACd;AACA,4BAA4B;;AAE5B;AACA;AACA,cAAc;AACd;AACA,gCAAgC;;AAEhC;AACA;AACA,cAAc;AACd;AACA,8BAA8B;;AAE9B;AACA;AACA,cAAc;AACd;AACA,2BAA2B;;AAE3B;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6DAA6D,kBAAkB;AAC/E;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,gGAAgG,cAAc,2GAA2G,cAAc;AACvO;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,kBAAkB,+CAA+C;AACjE,+CAA+C;;AAE/C;AACA;AACA,uBAAuB,+CAA+C;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,0BAA0B,8BAA8B;AACxD;AACA,uBAAuB;AACvB;AACA;AACA;AACA,yCAAyC,YAAY;AACrD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,uBAAuB;AACrC,cAAc,uBAAuB;AACrC,cAAc,WAAW;AACzB,cAAc,WAAW;AACzB,cAAc,QAAQ;AACtB;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,kBAAkB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,kBAAkB;AACvE;AACA;AACA,qDAAqD,kBAAkB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oFAAoF,4BAA4B,EAAE,uBAAuB;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa,KAAK;AAClB,YAAY,UAAU;AACtB,YAAY,MAAM;AAClB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa,KAAK;AAClB,YAAY,UAAU;AACtB,YAAY,MAAM;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,UAAU,EAAE;AACzB;AACA;AACA;AACA;;AAEA;AACA,YAAY,yBAAyB,GAAG,yBAAyB,MAAM,yBAAyB;AAChG,aAAa,KAAK;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,+CAA+C;AAClE;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,wDAAwD,yBAAyB;AACjF,WAAW,UAAU,oBAAoB;AACzC,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA,gDAAgD;AAChD;;AAEA;AACA,iGAAiG,yBAAyB;AAC1H,WAAW,UAAU,oBAAoB;AACzC,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,OAAO;AAClB,aAAa,UAAU,EAAE;AACzB,YAAY,MAAM;AAClB,YAAY,qBAAqB,EAAE;AACnC;AACA;AACA,+CAA+C;AAC/C;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,UAAU,EAAE;AACzB,YAAY,MAAM;AAClB,YAAY,mBAAmB;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,YAAY;AACzB;AACA;AACA,wCAAwC;AACxC;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,UAAU,EAAE;AACzB;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,oBAAoB,MAAM,uBAAuB;AACnF;AACA,cAAc,SAAS;AACvB;AACA,wFAAwF,WAAW;AACnG,cAAc,SAAS;AACvB;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB;;AAEA;AACA;AACA,WAAW,UAAU,EAAE;AACvB,WAAW,mBAAmB;AAC9B,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;;AAEA;AACA,sCAAsC,aAAa;AACnD;AACA,UAAU;AACV,WAAW,eAAe;AAC1B,aAAa;AACb;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5kBa;;AAEb;AACA;AACA;AACA;AACA;;AAEA,WAAW,mBAAO,CAAC,GAAQ;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,QAAQ;AACtB,cAAc,OAAO;AACrB,cAAc,eAAe;AAC7B,cAAc,KAAK;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACnMa;;AAEb;AACA;AACA;AACA;AACA,WAAW,yCAA0C;;AAErD,YAAY,mBAAO,CAAC,EAAS;;AAE7B;AACA;;AAEA,eAAe,mBAAO,CAAC,GAAqB;AAC5C,eAAe,mBAAO,CAAC,GAAmB;AAC1C,eAAe,mBAAO,CAAC,GAAkB;;AAEzC;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,kBAAkB;AAC/B;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,uDAAuD,yBAAyB,EAAE;AAClF;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACA,cAAc,KAAK;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,mBAAO,CAAC,GAAQ;;AAE/B;AACA;AACA,qBAAqB;AACrB,0CAA0C,iCAAiC;AAC3E,oDAAoD,iCAAiC;AACrF;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAe,mBAAO,CAAC,EAAQ;;AAE/B;AACA;AACA,4CAA4C,gCAAgC;AAC5E;AACA;;;AAGA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,gEAAgE,mBAAO,CAAC,GAAQ;AAChF;AACA,CAAC;;;;;;;;AChNY;AACb;;AAEA,WAAW,mBAAO,CAAC,GAAiB;;AAEpC;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;;AAEA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA,4BAA4B,UAAU;AACtC,4CAA4C,aAAa;AACzD,0BAA0B,UAAU;;AAEpC;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACvMa;AACb;;AAEA;AACA,iBAAiB,mBAAO,CAAC,GAAuB;;AAEhD;AACA,cAAc,mBAAO,CAAC,GAAoB;;AAE1C;AACA,oBAAoB,mBAAO,CAAC,GAA0B;;AAEtD;AACA,aAAa,mBAAO,CAAC,GAAmB;;AAExC;AACA,eAAe,mBAAO,CAAC,GAAqB;;AAE5C;AACA,YAAY,mBAAO,CAAC,GAAkB;;AAEtC;AACA,YAAY,mBAAO,CAAC,GAAkB;;AAEtC;AACA,gBAAgB,mBAAO,CAAC,GAAY;;AAEpC;AACA;AACA;AACA,UAAU;AACV;AACA,6BAA6B,qBAAM;AACnC,sBAAsB,qBAAM;AAC5B,sBAAsB,qBAAM;AAC5B,sBAAsB,qBAAM;AAC5B,sBAAsB,qBAAM;;AAE5B;AACA;AACA;AACA,UAAU;AACV;AACA,6BAA6B,qBAAM;AACnC;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,oFAAoF;;AAEpF;AACA;AACA,UAAU;AACV;AACA;AACA,mDAAmD,kCAAkC;;AAErF;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,QAAQ;AACtB;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA,kCAAkC,EAAE;;AAEpC;AACA;AACA,WAAW,YAAY;AACvB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,kBAAkB;AAC7B,WAAW,QAAQ;AACnB,aAAa,kBAAkB;AAC/B;AACA,oCAAoC;AACpC,4CAA4C,iBAAiB;AAC7D;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,mBAAmB;AAChC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA,gDAAgD,kBAAkB,gBAAgB,EAAE,EAAE;;AAEtF;AACA;AACA;AACA;AACA,kDAAkD,iCAAiC;;AAEnF;AACA;AACA;;AAEA;;AAEA,0DAA0D,kBAAkB,aAAa,EAAE,EAAE;;AAE7F;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B;AACA;AACA,oCAAoC;AACpC,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA,kCAAkC,uBAAuB;AACzD;AACA,UAAU;AACV,aAAa,iBAAiB;AAC9B;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,YAAY;AACzB;AACA;AACA;AACA,mBAAmB,uBAAuB;AAC1C;;AAEA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA,uBAAuB;AACvB,+DAA+D,QAAQ;AACvE;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,uBAAuB;AACzD;AACA,UAAU;AACV,WAAW,iBAAiB;AAC5B,aAAa;AACb;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,YAAY;AACzB;AACA;;AAEA;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;;AAEA;AACA,wCAAwC,qBAAqB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpaa;AACb;;AAEA,gBAAgB,mBAAO,CAAC,EAAQ;AAChC,gBAAgB,mBAAO,CAAC,GAAQ;;AAEhC;AACA,kIAAkI,oBAAoB;AACtJ;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,yBAAyB;AACzB;AACA;AACA,0EAA0E,iBAAiB;AAC3F;AACA;AACA;AACA,eAAe;AACf,SAAS;AACT;AACA,eAAe;AACf,6CAA6C;AAC7C;AACA;AACA,eAAe;AACf;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd,mBAAmB,gDAAgD;AACnE;AACA;;AAEA;AACA,6CAA6C,oBAAoB;;AAEjE;AACA,wBAAwB;AACxB;AACA;AACA;AACA,0BAA0B,WAAW,KAAK;AAC1C;AACA;AACA,eAAe;;AAEf;AACA,SAAS,2BAA2B;AACpC;AACA;AACA,0BAA0B,YAAY,KAAK;AAC3C;AACA,eAAe;;AAEf;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,C;;;;;;;AChLa;;AAEb;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA,cAAc,mBAAO,CAAC,GAAW;;AAEjC;AACA,qCAAqC,eAAe;AACpD;AACA,UAAU;AACV,WAAW,kBAAkB;AAC7B,aAAa,UAAU,EAAE;AACzB;AACA;;AAEA;AACA,mCAAmC,eAAe;AAClD;AACA,UAAU;AACV,WAAW,UAAU,EAAE;AACvB,WAAW,mBAAmB;AAC9B,aAAa,kBAAkB;AAC/B;AACA;;AAEA;AACA,gCAAgC,eAAe;AAC/C;AACA,cAAc,2BAA2B;AACzC,cAAc,yBAAyB;AACvC;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACrGa;AACb;;AAEA,gBAAgB,mBAAO,CAAC,GAAgB;;AAExC,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,gCAAgC;AAC3C,WAAW,OAAO;AAClB,WAAW,EAAE;AACb;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,mBAAmB;AACnB;;AAEA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,oBAAoB,IAAI,mBAAmB,0CAA0C;AAClG;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,WAAW;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,gCAAgC;AAC3C,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,OAAO;AACpB,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,OAAO;AACpB,YAAY,UAAU;AACtB;AACA;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,OAAO;AACpB,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,OAAO;AACpB,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,OAAO;AACpB,YAAY,UAAU;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,yBAAyB,KAAK,2BAA2B;AACrE,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;AChda;AACb;;AAEA;AACA,aAAa,mBAAO,CAAC,GAAU;AAC/B;;AAEA,WAAW,mBAAO,CAAC,GAAgB;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;;AAEA;;;;;;;;;;;;;;UCpFA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCrBA;WACA;WACA;WACA;WACA,EAAE;WACF;WACA;WACA,CAAC,I;;;;UCPD;UACA;UACA;UACA","file":"centrifuge.protobuf.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Centrifuge\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Centrifuge\"] = factory();\n\telse\n\t\troot[\"Centrifuge\"] = factory();\n})(this, function() {\nreturn ","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = codegen;\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @param {string[]} functionParams Function parameter names\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n */\r\nfunction codegen(functionParams, functionName) {\r\n\r\n /* istanbul ignore if */\r\n if (typeof functionParams === \"string\") {\r\n functionName = functionParams;\r\n functionParams = undefined;\r\n }\r\n\r\n var body = [];\r\n\r\n /**\r\n * Appends code to the function's body or finishes generation.\r\n * @typedef Codegen\r\n * @type {function}\r\n * @param {string|Object.} [formatStringOrScope] Format string or, to finish the function, an object of additional scope variables, if any\r\n * @param {...*} [formatParams] Format parameters\r\n * @returns {Codegen|Function} Itself or the generated function if finished\r\n * @throws {Error} If format parameter counts do not match\r\n */\r\n\r\n function Codegen(formatStringOrScope) {\r\n // note that explicit array handling below makes this ~50% faster\r\n\r\n // finish the function\r\n if (typeof formatStringOrScope !== \"string\") {\r\n var source = toString();\r\n if (codegen.verbose)\r\n console.log(\"codegen: \" + source); // eslint-disable-line no-console\r\n source = \"return \" + source;\r\n if (formatStringOrScope) {\r\n var scopeKeys = Object.keys(formatStringOrScope),\r\n scopeParams = new Array(scopeKeys.length + 1),\r\n scopeValues = new Array(scopeKeys.length),\r\n scopeOffset = 0;\r\n while (scopeOffset < scopeKeys.length) {\r\n scopeParams[scopeOffset] = scopeKeys[scopeOffset];\r\n scopeValues[scopeOffset] = formatStringOrScope[scopeKeys[scopeOffset++]];\r\n }\r\n scopeParams[scopeOffset] = source;\r\n return Function.apply(null, scopeParams).apply(null, scopeValues); // eslint-disable-line no-new-func\r\n }\r\n return Function(source)(); // eslint-disable-line no-new-func\r\n }\r\n\r\n // otherwise append to body\r\n var formatParams = new Array(arguments.length - 1),\r\n formatOffset = 0;\r\n while (formatOffset < formatParams.length)\r\n formatParams[formatOffset] = arguments[++formatOffset];\r\n formatOffset = 0;\r\n formatStringOrScope = formatStringOrScope.replace(/%([%dfijs])/g, function replace($0, $1) {\r\n var value = formatParams[formatOffset++];\r\n switch ($1) {\r\n case \"d\": case \"f\": return String(Number(value));\r\n case \"i\": return String(Math.floor(value));\r\n case \"j\": return JSON.stringify(value);\r\n case \"s\": return String(value);\r\n }\r\n return \"%\";\r\n });\r\n if (formatOffset !== formatParams.length)\r\n throw Error(\"parameter count mismatch\");\r\n body.push(formatStringOrScope);\r\n return Codegen;\r\n }\r\n\r\n function toString(functionNameOverride) {\r\n return \"function \" + (functionNameOverride || functionName || \"\") + \"(\" + (functionParams && functionParams.join(\",\") || \"\") + \"){\\n \" + body.join(\"\\n \") + \"\\n}\";\r\n }\r\n\r\n Codegen.toString = toString;\r\n return Codegen;\r\n}\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @function codegen\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * When set to `true`, codegen will log generated code to console. Useful for debugging.\r\n * @name util.codegen.verbose\r\n * @type {boolean}\r\n */\r\ncodegen.verbose = false;\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\nmodule.exports = fetch;\r\n\r\nvar asPromise = require(\"@protobufjs/aspromise\"),\r\n inquire = require(\"@protobufjs/inquire\");\r\n\r\nvar fs = inquire(\"fs\");\r\n\r\n/**\r\n * Node-style callback as used by {@link util.fetch}.\r\n * @typedef FetchCallback\r\n * @type {function}\r\n * @param {?Error} error Error, if any, otherwise `null`\r\n * @param {string} [contents] File contents, if there hasn't been an error\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Options as used by {@link util.fetch}.\r\n * @typedef FetchOptions\r\n * @type {Object}\r\n * @property {boolean} [binary=false] Whether expecting a binary response\r\n * @property {boolean} [xhr=false] If `true`, forces the use of XMLHttpRequest\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @memberof util\r\n * @param {string} filename File path or url\r\n * @param {FetchOptions} options Fetch options\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n */\r\nfunction fetch(filename, options, callback) {\r\n if (typeof options === \"function\") {\r\n callback = options;\r\n options = {};\r\n } else if (!options)\r\n options = {};\r\n\r\n if (!callback)\r\n return asPromise(fetch, this, filename, options); // eslint-disable-line no-invalid-this\r\n\r\n // if a node-like filesystem is present, try it first but fall back to XHR if nothing is found.\r\n if (!options.xhr && fs && fs.readFile)\r\n return fs.readFile(filename, function fetchReadFileCallback(err, contents) {\r\n return err && typeof XMLHttpRequest !== \"undefined\"\r\n ? fetch.xhr(filename, options, callback)\r\n : err\r\n ? callback(err)\r\n : callback(null, options.binary ? contents : contents.toString(\"utf8\"));\r\n });\r\n\r\n // use the XHR version otherwise.\r\n return fetch.xhr(filename, options, callback);\r\n}\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchOptions} [options] Fetch options\r\n * @returns {Promise} Promise\r\n * @variation 3\r\n */\r\n\r\n/**/\r\nfetch.xhr = function fetch_xhr(filename, options, callback) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.onreadystatechange /* works everywhere */ = function fetchOnReadyStateChange() {\r\n\r\n if (xhr.readyState !== 4)\r\n return undefined;\r\n\r\n // local cors security errors return status 0 / empty string, too. afaik this cannot be\r\n // reliably distinguished from an actually empty file for security reasons. feel free\r\n // to send a pull request if you are aware of a solution.\r\n if (xhr.status !== 0 && xhr.status !== 200)\r\n return callback(Error(\"status \" + xhr.status));\r\n\r\n // if binary data is expected, make sure that some sort of array is returned, even if\r\n // ArrayBuffers are not supported. the binary string fallback, however, is unsafe.\r\n if (options.binary) {\r\n var buffer = xhr.response;\r\n if (!buffer) {\r\n buffer = [];\r\n for (var i = 0; i < xhr.responseText.length; ++i)\r\n buffer.push(xhr.responseText.charCodeAt(i) & 255);\r\n }\r\n return callback(null, typeof Uint8Array !== \"undefined\" ? new Uint8Array(buffer) : buffer);\r\n }\r\n return callback(null, xhr.responseText);\r\n };\r\n\r\n if (options.binary) {\r\n // ref: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data#Receiving_binary_data_in_older_browsers\r\n if (\"overrideMimeType\" in xhr)\r\n xhr.overrideMimeType(\"text/plain; charset=x-user-defined\");\r\n xhr.responseType = \"arraybuffer\";\r\n }\r\n\r\n xhr.open(\"GET\", filename);\r\n xhr.send();\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal path module to resolve Unix, Windows and URL paths alike.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar path = exports;\r\n\r\nvar isAbsolute =\r\n/**\r\n * Tests if the specified path is absolute.\r\n * @param {string} path Path to test\r\n * @returns {boolean} `true` if path is absolute\r\n */\r\npath.isAbsolute = function isAbsolute(path) {\r\n return /^(?:\\/|\\w+:)/.test(path);\r\n};\r\n\r\nvar normalize =\r\n/**\r\n * Normalizes the specified path.\r\n * @param {string} path Path to normalize\r\n * @returns {string} Normalized path\r\n */\r\npath.normalize = function normalize(path) {\r\n path = path.replace(/\\\\/g, \"/\")\r\n .replace(/\\/{2,}/g, \"/\");\r\n var parts = path.split(\"/\"),\r\n absolute = isAbsolute(path),\r\n prefix = \"\";\r\n if (absolute)\r\n prefix = parts.shift() + \"/\";\r\n for (var i = 0; i < parts.length;) {\r\n if (parts[i] === \"..\") {\r\n if (i > 0 && parts[i - 1] !== \"..\")\r\n parts.splice(--i, 2);\r\n else if (absolute)\r\n parts.splice(i, 1);\r\n else\r\n ++i;\r\n } else if (parts[i] === \".\")\r\n parts.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n return prefix + parts.join(\"/\");\r\n};\r\n\r\n/**\r\n * Resolves the specified include path against the specified origin path.\r\n * @param {string} originPath Path to the origin file\r\n * @param {string} includePath Include path relative to origin path\r\n * @param {boolean} [alreadyNormalized=false] `true` if both paths are already known to be normalized\r\n * @returns {string} Path to the include file\r\n */\r\npath.resolve = function resolve(originPath, includePath, alreadyNormalized) {\r\n if (!alreadyNormalized)\r\n includePath = normalize(includePath);\r\n if (isAbsolute(includePath))\r\n return includePath;\r\n if (!alreadyNormalized)\r\n originPath = normalize(originPath);\r\n return (originPath = originPath.replace(/(?:\\/|^)[^/]+$/, \"\")).length ? normalize(originPath + \"/\" + includePath) : includePath;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","import EventEmitter from 'events';\nimport Subscription from './subscription';\n\nimport {\n JsonEncoder,\n JsonDecoder,\n JsonMethodType,\n JsonPushType\n} from './json';\n\nimport {\n isFunction,\n log,\n startsWith,\n errorExists,\n backoff,\n extend\n} from './utils';\n\nconst _errorTimeout = 'timeout';\nconst _errorConnectionClosed = 'connection closed';\n\nexport class Centrifuge extends EventEmitter {\n\n constructor(url, options) {\n super();\n this._url = url;\n this._websocket = null;\n this._sockjs = null;\n this._isSockjs = false;\n this._binary = false;\n this._methodType = null;\n this._pushType = null;\n this._encoder = null;\n this._decoder = null;\n this._status = 'disconnected';\n this._reconnect = true;\n this._reconnecting = false;\n this._transport = null;\n this._transportName = null;\n this._transportClosed = true;\n this._messageId = 0;\n this._clientID = null;\n this._refreshRequired = false;\n this._subs = {};\n this._serverSubs = {};\n this._lastSeq = {};\n this._lastGen = {};\n this._lastOffset = {};\n this._lastEpoch = {};\n this._messages = [];\n this._isBatching = false;\n this._isSubscribeBatching = false;\n this._privateChannels = {};\n this._numRefreshFailed = 0;\n this._refreshTimeout = null;\n this._pingTimeout = null;\n this._pongTimeout = null;\n this._subRefreshTimeouts = {};\n this._retries = 0;\n this._callbacks = {};\n this._latency = null;\n this._latencyStart = null;\n this._connectData = null;\n this._token = null;\n this._xhrID = 0;\n this._xhrs = {};\n this._dispatchPromise = Promise.resolve();\n this._config = {\n debug: false,\n name: '',\n version: '',\n websocket: null,\n sockjs: null,\n minRetry: 1000,\n maxRetry: 20000,\n timeout: 5000,\n ping: true,\n pingInterval: 25000,\n pongWaitTimeout: 5000,\n privateChannelPrefix: '$',\n onTransportClose: null,\n sockjsServer: null,\n sockjsTransports: [\n 'websocket',\n 'xdr-streaming',\n 'xhr-streaming',\n 'eventsource',\n 'iframe-eventsource',\n 'iframe-htmlfile',\n 'xdr-polling',\n 'xhr-polling',\n 'iframe-xhr-polling',\n 'jsonp-polling'\n ],\n refreshEndpoint: '/centrifuge/refresh',\n refreshHeaders: {},\n refreshParams: {},\n refreshData: {},\n refreshAttempts: null,\n refreshInterval: 1000,\n onRefreshFailed: null,\n onRefresh: null,\n subscribeEndpoint: '/centrifuge/subscribe',\n subscribeHeaders: {},\n subscribeParams: {},\n subRefreshInterval: 1000,\n onPrivateSubscribe: null\n };\n this._configure(options);\n }\n\n setToken(token) {\n this._token = token;\n }\n\n setConnectData(data) {\n this._connectData = data;\n }\n\n setRefreshHeaders(headers) {\n this._config.refreshHeaders = headers;\n }\n setRefreshParams(params) {\n this._config.refreshParams = params;\n }\n setRefreshData(data) {\n this._config.refreshData = data;\n }\n\n setSubscribeHeaders(headers) {\n this._config.subscribeHeaders = headers;\n }\n setSubscribeParams(params) {\n this._config.subscribeParams = params;\n }\n\n _ajax(url, params, headers, data, callback) {\n let query = '';\n this._debug('sending AJAX request to', url, 'with data', JSON.stringify(data));\n\n const xhr = (global.XMLHttpRequest ? new global.XMLHttpRequest() : new global.ActiveXObject('Microsoft.XMLHTTP'));\n\n for (const i in params) {\n if (params.hasOwnProperty(i)) {\n if (query.length > 0) {\n query += '&';\n }\n query += encodeURIComponent(i) + '=' + encodeURIComponent(params[i]);\n }\n }\n if (query.length > 0) {\n query = '?' + query;\n }\n xhr.open('POST', url + query, true);\n if ('withCredentials' in xhr) {\n xhr.withCredentials = true;\n }\n\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.setRequestHeader('Content-Type', 'application/json');\n for (const headerName in headers) {\n if (headers.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, headers[headerName]);\n }\n }\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data, parsed = false;\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback({\n error: 'Invalid JSON. Data was: ' + xhr.responseText,\n status: 200,\n data: null\n });\n }\n if (parsed) { // prevents double execution.\n callback({\n data: data,\n status: 200\n });\n }\n } else {\n this._log('wrong status code in AJAX response', xhr.status);\n callback({\n status: xhr.status,\n data: null\n });\n }\n }\n };\n setTimeout(() => xhr.send(JSON.stringify(data)), 20);\n return xhr;\n };\n\n _log() {\n log('info', arguments);\n };\n\n _debug() {\n if (this._config.debug === true) {\n log('debug', arguments);\n }\n };\n\n _websocketSupported() {\n if (this._config.websocket !== null) {\n return true;\n }\n return !(typeof WebSocket !== 'function' && typeof WebSocket !== 'object');\n };\n\n _setFormat(format) {\n if (this._formatOverride(format)) {\n return;\n }\n if (format === 'protobuf') {\n throw new Error('not implemented by JSON only Centrifuge client – use client with Protobuf');\n }\n this._binary = false;\n this._methodType = JsonMethodType;\n this._pushType = JsonPushType;\n this._encoder = new JsonEncoder();\n this._decoder = new JsonDecoder();\n }\n\n _formatOverride(format) {\n return false;\n }\n\n _configure(configuration) {\n if (!('Promise' in global)) {\n throw new Error('Promise polyfill required');\n }\n\n extend(this._config, configuration || {});\n this._debug('centrifuge config', this._config);\n\n if (!this._url) {\n throw new Error('url required');\n }\n\n if (startsWith(this._url, 'ws') && this._url.indexOf('format=protobuf') > -1) {\n this._setFormat('protobuf');\n } else {\n this._setFormat('json');\n }\n\n if (startsWith(this._url, 'http')) {\n this._debug('client will try to connect to SockJS endpoint');\n if (this._config.sockjs !== null) {\n this._debug('SockJS explicitly provided in options');\n this._sockjs = this._config.sockjs;\n } else {\n if (typeof global.SockJS === 'undefined') {\n throw new Error('SockJS not found, use ws:// in url or include SockJS');\n }\n this._debug('use globally defined SockJS');\n this._sockjs = global.SockJS;\n }\n } else {\n this._debug('client will connect to websocket endpoint');\n }\n };\n\n _setStatus(newStatus) {\n if (this._status !== newStatus) {\n this._debug('Status', this._status, '->', newStatus);\n this._status = newStatus;\n }\n };\n\n _isDisconnected() {\n return this._status === 'disconnected';\n };\n\n _isConnecting() {\n return this._status === 'connecting';\n };\n\n _isConnected() {\n return this._status === 'connected';\n };\n\n _nextMessageId() {\n return ++this._messageId;\n };\n\n _resetRetry() {\n this._debug('reset retries count to 0');\n this._retries = 0;\n };\n\n _getRetryInterval() {\n const interval = backoff(this._retries, this._config.minRetry, this._config.maxRetry);\n\n this._retries += 1;\n return interval;\n };\n\n _abortInflightXHRs() {\n for (const xhrID in this._xhrs) {\n try {\n this._xhrs[xhrID].abort();\n } catch (e) {\n this._debug('error aborting xhr', e);\n }\n delete this._xhrs[xhrID];\n }\n };\n\n _clearConnectedState(reconnect) {\n this._clientID = null;\n this._stopPing();\n\n // fire errbacks of registered outgoing calls.\n for (const id in this._callbacks) {\n if (this._callbacks.hasOwnProperty(id)) {\n const callbacks = this._callbacks[id];\n clearTimeout(callbacks.timeout);\n const errback = callbacks.errback;\n if (!errback) {\n continue;\n }\n errback({error: this._createErrorObject('disconnected')});\n }\n }\n this._callbacks = {};\n\n // fire unsubscribe events\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n\n if (reconnect) {\n if (sub._isSuccess()) {\n sub._triggerUnsubscribe();\n sub._recover = true;\n }\n if (sub._shouldResubscribe()) {\n sub._setSubscribing();\n }\n } else {\n sub._setUnsubscribed();\n }\n }\n }\n\n this._abortInflightXHRs();\n\n // clear refresh timer\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n // clear sub refresh timers\n for (const channel in this._subRefreshTimeouts) {\n if (this._subRefreshTimeouts.hasOwnProperty(channel) && this._subRefreshTimeouts[channel]) {\n this._clearSubRefreshTimeout(channel);\n }\n }\n this._subRefreshTimeouts = {};\n\n if (!this._reconnect) {\n // completely clear subscriptions\n this._subs = {};\n }\n };\n\n _isTransportOpen() {\n if (this._isSockjs) {\n return this._transport &&\n this._transport.transport &&\n this._transport.transport.readyState === this._transport.transport.OPEN;\n }\n return this._transport && this._transport.readyState === this._transport.OPEN;\n };\n\n _transportSend(commands) {\n if (!commands.length) {\n return true;\n }\n\n if (!this._isTransportOpen()) {\n // resolve pending commands with error if transport is not open\n for (let command in commands) {\n let id = command.id;\n if (!(id in this._callbacks)) {\n continue;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n const errback = callbacks.errback;\n errback({error: this._createErrorObject(_errorConnectionClosed, 0)});\n }\n return false;\n }\n this._transport.send(this._encoder.encodeCommands(commands));\n return true;\n }\n\n _setupTransport() {\n this._isSockjs = false;\n\n // detect transport to use - SockJS or Websocket\n if (this._sockjs !== null) {\n const sockjsOptions = {\n transports: this._config.sockjsTransports\n };\n\n if (this._config.sockjsServer !== null) {\n sockjsOptions.server = this._config.sockjsServer;\n }\n this._isSockjs = true;\n this._transport = new this._sockjs(this._url, null, sockjsOptions);\n } else {\n if (!this._websocketSupported()) {\n this._debug('No Websocket support and no SockJS configured, can not connect');\n return;\n }\n if (this._config.websocket !== null) {\n this._websocket = this._config.websocket;\n } else {\n this._websocket = WebSocket;\n }\n this._transport = new this._websocket(this._url);\n if (this._binary === true) {\n this._transport.binaryType = 'arraybuffer';\n }\n }\n\n this._transport.onopen = () => {\n this._transportClosed = false;\n\n if (this._isSockjs) {\n this._transportName = 'sockjs-' + this._transport.transport;\n this._transport.onheartbeat = () => this._restartPing();\n } else {\n this._transportName = 'websocket';\n }\n\n // Can omit method here due to zero value.\n const msg = {\n // method: this._methodType.CONNECT\n };\n\n if (this._token || this._connectData || this._config.name || this._config.version) {\n msg.params = {};\n }\n if (this._token) {\n msg.params.token = this._token;\n }\n if (this._connectData) {\n msg.params.data = this._connectData;\n }\n if (this._config.name) {\n msg.params.name = this._config.name;\n }\n if (this._config.version) {\n msg.params.version = this._config.version;\n }\n\n let subs = {};\n let hasSubs = false;\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel) && this._serverSubs[channel].recoverable) {\n hasSubs = true;\n let sub = {\n 'recover': true\n };\n if (this._serverSubs[channel].seq || this._serverSubs[channel].gen) {\n if (this._serverSubs[channel].seq) {\n sub['seq'] = this._serverSubs[channel].seq;\n }\n if (this._serverSubs[channel].gen) {\n sub['gen'] = this._serverSubs[channel].gen;\n }\n } else {\n if (this._serverSubs[channel].offset) {\n sub['offset'] = this._serverSubs[channel].offset;\n }\n }\n if (this._serverSubs[channel].epoch) {\n sub['epoch'] = this._serverSubs[channel].epoch;\n }\n subs[channel] = sub;\n }\n }\n if (hasSubs) {\n if (!msg.params) {msg.params = {};}\n msg.params.subs = subs;\n }\n\n this._latencyStart = new Date();\n this._call(msg).then(resolveCtx => {\n this._connectResponse(this._decoder.decodeCommandResult(this._methodType.CONNECT, resolveCtx.result), hasSubs);\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n const err = rejectCtx.error;\n if (err.code === 109) { // token expired.\n this._refreshRequired = true;\n }\n this._disconnect('connect error', true);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n this._transport.onerror = error => {\n this._debug('transport level error', error);\n };\n\n this._transport.onclose = closeEvent => {\n this._transportClosed = true;\n let reason = _errorConnectionClosed;\n let needReconnect = true;\n\n if (closeEvent && 'reason' in closeEvent && closeEvent.reason) {\n try {\n const advice = JSON.parse(closeEvent.reason);\n this._debug('reason is an advice object', advice);\n reason = advice.reason;\n needReconnect = advice.reconnect;\n } catch (e) {\n reason = closeEvent.reason;\n this._debug('reason is a plain string', reason);\n }\n }\n\n // onTransportClose callback should be executed every time transport was closed.\n // This can be helpful to catch failed connection events (because our disconnect\n // event only called once and every future attempts to connect do not fire disconnect\n // event again).\n if (this._config.onTransportClose !== null) {\n this._config.onTransportClose({\n event: closeEvent,\n reason: reason,\n reconnect: needReconnect\n });\n }\n\n this._disconnect(reason, needReconnect);\n\n if (this._reconnect === true) {\n this._reconnecting = true;\n const interval = this._getRetryInterval();\n\n this._debug('reconnect after ' + interval + ' milliseconds');\n setTimeout(() => {\n if (this._reconnect === true) {\n if (this._refreshRequired) {\n this._refresh();\n } else {\n this._connect();\n }\n }\n }, interval);\n }\n };\n\n this._transport.onmessage = event => {\n this._dataReceived(event.data);\n };\n };\n\n rpc(data) {\n return this._rpc('', data);\n }\n\n namedRPC(method, data) {\n return this._rpc(method, data);\n }\n\n _rpc(method, data) {\n let params = {\n data: data\n };\n if (method !== '') {\n params.method = method;\n };\n const msg = {\n method: this._methodType.RPC,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return result;\n });\n }\n\n send(data) {\n const msg = {\n method: this._methodType.SEND,\n params: {\n data: data\n }\n };\n\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n\n const sent = this._transportSend([msg]); // can send async message to server without id set\n if (!sent) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n };\n return Promise.resolve({});\n }\n\n _getHistoryParams(channel, options) {\n let params = {\n channel: channel\n };\n if (options !== undefined) {\n if (options.since) {\n params['use_since'] = true;\n if (options.since.offset) {\n params['offset'] = options.since.offset;\n }\n if (options.since.epoch) {\n params['epoch'] = options.since.epoch;\n }\n };\n if (options.limit !== undefined) {\n params['use_limit'] = true;\n params['limit'] = options.limit;\n }\n };\n return params;\n }\n\n _methodCall(msg, resultCB) {\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n return new Promise((resolve, reject) => {\n this._call(msg).then(resolveCtx => {\n resolve(resultCB(this._decoder.decodeCommandResult(msg.method, resolveCtx.result)));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n reject(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n });\n }\n\n publish(channel, data) {\n const msg = {\n method: this._methodType.PUBLISH,\n params: {\n channel: channel,\n data: data\n }\n };\n return this._methodCall(msg, function () {\n return {};\n });\n }\n\n history(channel, options) {\n const params = this._getHistoryParams(channel, options);\n const msg = {\n method: this._methodType.HISTORY,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return {\n 'publications': result.publications,\n 'epoch': result.epoch || '',\n 'offset': result.offset || 0\n };\n });\n }\n\n presence(channel) {\n const msg = {\n method: this._methodType.PRESENCE,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'presence': result.presence\n };\n });\n }\n\n presenceStats(channel) {\n const msg = {\n method: this._methodType.PRESENCE_STATS,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'num_users': result.num_users,\n 'num_clients': result.num_clients\n };\n });\n }\n\n _dataReceived(data) {\n const replies = this._decoder.decodeReplies(data);\n // we have to guarantee order of events in replies processing - i.e. start processing\n // next reply only when we finished processing of current one. Without syncing things in\n // this way we could get wrong publication events order as reply promises resolve\n // on next loop tick so for loop continues before we finished emitting all reply events.\n this._dispatchPromise = this._dispatchPromise.then(() => {\n let finishDispatch;\n this._dispatchPromise = new Promise(resolve =>{\n finishDispatch = resolve;\n });\n this._dispatchSynchronized(replies, finishDispatch);\n });\n this._restartPing();\n }\n\n _dispatchSynchronized(replies, finishDispatch) {\n let p = Promise.resolve();\n for (const i in replies) {\n if (replies.hasOwnProperty(i)) {\n p = p.then(() => {\n return this._dispatchReply(replies[i]);\n });\n }\n }\n p = p.then(() => {\n finishDispatch();\n });\n }\n\n _dispatchReply(reply) {\n var next;\n const p = new Promise(resolve =>{\n next = resolve;\n });\n\n if (reply === undefined || reply === null) {\n this._debug('dispatch: got undefined or null reply');\n next();\n return p;\n }\n\n const id = reply.id;\n\n if (id && id > 0) {\n this._handleReply(reply, next);\n } else {\n this._handlePush(reply.result, next);\n }\n\n return p;\n };\n\n _call(msg) {\n return new Promise((resolve, reject) => {\n const id = this._addMessage(msg);\n this._registerCall(id, resolve, reject);\n });\n }\n\n _connect() {\n if (this.isConnected()) {\n this._debug('connect called when already connected');\n return;\n }\n if (this._status === 'connecting') {\n return;\n }\n\n this._debug('start connecting');\n this._setStatus('connecting');\n this._clientID = null;\n this._reconnect = true;\n this._setupTransport();\n };\n\n _disconnect(reason, shouldReconnect) {\n\n const reconnect = shouldReconnect || false;\n if (reconnect === false) {\n this._reconnect = false;\n }\n\n if (this._isDisconnected()) {\n if (!reconnect) {\n this._clearConnectedState(reconnect);\n }\n return;\n }\n\n this._clearConnectedState(reconnect);\n\n this._debug('disconnected:', reason, shouldReconnect);\n this._setStatus('disconnected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._reconnecting === false) {\n // fire unsubscribe events for server side subs.\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel)) {\n this.emit('unsubscribe', {channel: channel});\n }\n }\n this.emit('disconnect', {\n reason: reason,\n reconnect: reconnect\n });\n }\n\n if (reconnect === false) {\n this._subs = {};\n this._serverSubs = {};\n }\n\n if (!this._transportClosed) {\n this._transport.close();\n }\n };\n\n _refreshFailed() {\n this._numRefreshFailed = 0;\n if (!this._isDisconnected()) {\n this._disconnect('refresh failed', false);\n }\n if (this._config.onRefreshFailed !== null) {\n this._config.onRefreshFailed();\n }\n };\n\n _refresh() {\n // ask application for new connection token.\n this._debug('refresh token');\n\n if (this._config.refreshAttempts === 0) {\n this._debug('refresh attempts set to 0, do not send refresh request at all');\n this._refreshFailed();\n return;\n }\n\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n // We don't perform any connection status related actions here as we are\n // relying on server that must close connection eventually.\n if (resp.error) {\n this._debug('error refreshing connection token', resp.error);\n } else {\n this._debug('error refreshing connection token: wrong status code', resp.status);\n }\n this._numRefreshFailed++;\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._config.refreshAttempts !== null && this._numRefreshFailed >= this._config.refreshAttempts) {\n this._refreshFailed();\n return;\n }\n const jitter = Math.round(Math.random() * 1000 * Math.max(this._numRefreshFailed, 20));\n const interval = this._config.refreshInterval + jitter;\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n return;\n }\n this._numRefreshFailed = 0;\n this._token = resp.data.token;\n if (!this._token) {\n this._refreshFailed();\n return;\n }\n if (this._isDisconnected() && this._reconnect) {\n this._debug('token refreshed, connect from scratch');\n this._connect();\n } else {\n this._debug('send refreshed token');\n const msg = {\n method: this._methodType.REFRESH,\n params: {\n token: this._token\n }\n };\n this._call(msg).then(resolveCtx => {\n this._refreshResponse(this._decoder.decodeCommandResult(this._methodType.REFRESH, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n if (this._config.onRefresh !== null) {\n const context = {};\n this._config.onRefresh(context, cb);\n } else {\n const xhr = this._ajax(\n this._config.refreshEndpoint,\n this._config.refreshParams,\n this._config.refreshHeaders,\n this._config.refreshData,\n cb\n );\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _refreshError(err) {\n this._debug('refresh error', err);\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n const interval = this._config.refreshInterval + Math.round(Math.random() * 1000);\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n }\n\n _refreshResponse(result) {\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (result.expires) {\n this._clientID = result.client;\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n };\n\n _newXHRID() {\n this._xhrID++;\n return this._xhrID;\n }\n\n _subRefresh(channel) {\n this._debug('refresh subscription token for channel', channel);\n\n if (this._subRefreshTimeouts[channel] !== undefined) {\n this._clearSubRefreshTimeout(channel);\n } else {\n return;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (resp.error || resp.status !== 200 || this._clientID !== clientID) {\n return;\n }\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n const token = channelsData[channel];\n if (!token) {\n return;\n }\n const msg = {\n method: this._methodType.SUB_REFRESH,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n\n this._call(msg).then(resolveCtx => {\n this._subRefreshResponse(\n channel,\n this._decoder.decodeCommandResult(this._methodType.SUB_REFRESH, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subRefreshError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n const data = {\n client: this._clientID,\n channels: [channel]\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _clearSubRefreshTimeout(channel) {\n if (this._subRefreshTimeouts[channel] !== undefined) {\n clearTimeout(this._subRefreshTimeouts[channel]);\n delete this._subRefreshTimeouts[channel];\n }\n }\n\n _subRefreshError(channel, err) {\n this._debug('subscription refresh error', channel, err);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n const jitter = Math.round(Math.random() * 1000);\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._config.subRefreshInterval + jitter);\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n return;\n }\n\n _subRefreshResponse(channel, result) {\n this._debug('subscription refresh success', channel);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n return;\n };\n\n _subscribe(sub, isResubscribe) {\n this._debug('subscribing on', sub.channel);\n const channel = sub.channel;\n\n if (!(channel in this._subs)) {\n this._subs[channel] = sub;\n }\n\n if (!this.isConnected()) {\n // subscribe will be called later\n sub._setNew();\n return;\n }\n\n sub._setSubscribing(isResubscribe);\n\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel\n }\n };\n\n // If channel name does not start with privateChannelPrefix - then we\n // can just send subscription message to Centrifuge. If channel name\n // starts with privateChannelPrefix - then this is a private channel\n // and we should ask web application backend for permission first.\n if (startsWith(channel, this._config.privateChannelPrefix)) {\n // private channel.\n if (this._isSubscribeBatching) {\n this._privateChannels[channel] = true;\n } else {\n this.startSubscribeBatching();\n this._subscribe(sub);\n this.stopSubscribeBatching();\n }\n } else {\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n _unsubscribe(sub) {\n delete this._subs[sub.channel];\n delete this._lastOffset[sub.channel];\n delete this._lastSeq[sub.channel];\n delete this._lastGen[sub.channel];\n if (this.isConnected()) {\n // No need to unsubscribe in disconnected state - i.e. client already unsubscribed.\n this._addMessage({\n method: this._methodType.UNSUBSCRIBE,\n params: {\n channel: sub.channel\n }\n });\n }\n };\n\n _getTTLMilliseconds(ttl) {\n // https://stackoverflow.com/questions/12633405/what-is-the-maximum-delay-for-setinterval\n return Math.min(ttl * 1000, 2147483647);\n }\n\n getSub(channel) {\n return this._getSub(channel);\n }\n\n _getSub(channel) {\n const sub = this._subs[channel];\n if (!sub) {\n return null;\n }\n return sub;\n };\n\n _isServerSub(channel) {\n return this._serverSubs[channel] !== undefined;\n };\n\n _connectResponse(result, isRecover) {\n const wasReconnecting = this._reconnecting;\n this._reconnecting = false;\n this._resetRetry();\n this._refreshRequired = false;\n\n if (this.isConnected()) {\n return;\n }\n\n if (this._latencyStart !== null) {\n this._latency = (new Date()).getTime() - this._latencyStart.getTime();\n this._latencyStart = null;\n }\n\n this._clientID = result.client;\n this._setStatus('connected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n }\n\n if (result.expires) {\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n\n this.startBatching();\n this.startSubscribeBatching();\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n if (sub._shouldResubscribe()) {\n this._subscribe(sub, wasReconnecting);\n }\n }\n }\n this.stopSubscribeBatching();\n this.stopBatching();\n\n this._startPing();\n\n const ctx = {\n client: result.client,\n transport: this._transportName,\n latency: this._latency\n };\n if (result.data) {\n ctx.data = result.data;\n }\n\n this.emit('connect', ctx);\n\n if (result.subs) {\n this._processServerSubs(result.subs);\n }\n };\n\n _processServerSubs(subs) {\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n const isResubscribe = this._serverSubs[channel] !== undefined;\n let subCtx = {channel: channel, isResubscribe: isResubscribe};\n subCtx = this._expandSubscribeContext(subCtx, sub);\n this.emit('subscribe', subCtx);\n }\n }\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n if (sub.recovered) {\n let pubs = sub.publications;\n if (pubs && pubs.length > 0) {\n\n // handle legacy order.\n // TODO: remove as soon as Centrifuge v1 released.\n if (pubs.length > 1 && (!pubs[0].offset || pubs[0].offset > pubs[1].offset)) {\n pubs = pubs.reverse();\n }\n\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n }\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n }\n }\n };\n\n _stopPing() {\n if (this._pongTimeout !== null) {\n clearTimeout(this._pongTimeout);\n this._pongTimeout = null;\n }\n if (this._pingTimeout !== null) {\n clearTimeout(this._pingTimeout);\n this._pingTimeout = null;\n }\n };\n\n _startPing() {\n if (this._config.ping !== true || this._config.pingInterval <= 0) {\n return;\n }\n if (!this.isConnected()) {\n return;\n }\n\n this._pingTimeout = setTimeout(() => {\n if (!this.isConnected()) {\n this._stopPing();\n return;\n }\n this.ping();\n this._pongTimeout = setTimeout(() => {\n this._disconnect('no ping', true);\n }, this._config.pongWaitTimeout);\n }, this._config.pingInterval);\n };\n\n _restartPing() {\n this._stopPing();\n this._startPing();\n };\n\n _subscribeError(channel, error) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n if (error.code === 0 && error.message === _errorTimeout) { // client side timeout.\n this._disconnect('timeout', true);\n return;\n }\n sub._setSubscribeError(error);\n };\n\n _expandSubscribeContext(ctx, result) {\n let recovered = false;\n if ('recovered' in result) {\n recovered = result.recovered;\n }\n ctx.recovered = recovered;\n\n let positioned = false;\n if ('positioned' in result) {\n positioned = result.positioned;\n }\n let epoch = '';\n if ('epoch' in result) {\n epoch = result.epoch;\n }\n let offset = 0;\n if ('offset' in result) {\n offset = result.offset;\n }\n if (positioned) {\n ctx.streamPosition = {\n 'offset': offset,\n 'epoch': epoch\n };\n };\n return ctx;\n }\n\n _subscribeResponse(channel, isRecover, result) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n sub._setSubscribeSuccess(result);\n\n let pubs = result.publications;\n if (pubs && pubs.length > 0) {\n if (pubs.length >= 2 && !pubs[0].offset && !pubs[1].offset) {\n // handle legacy order.\n pubs = pubs.reverse();\n }\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n\n if (result.recoverable && (!isRecover || !result.recovered)) {\n this._lastSeq[channel] = result.seq || 0;\n this._lastGen[channel] = result.gen || 0;\n this._lastOffset[channel] = result.offset || 0;\n }\n\n this._lastEpoch[channel] = result.epoch || '';\n\n if (result.recoverable) {\n sub._recoverable = true;\n }\n\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n };\n\n _handleReply(reply, next) {\n const id = reply.id;\n const result = reply.result;\n\n if (!(id in this._callbacks)) {\n next();\n return;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n\n if (!errorExists(reply)) {\n const callback = callbacks.callback;\n if (!callback) {\n return;\n }\n callback({result, next});\n } else {\n const errback = callbacks.errback;\n if (!errback) {\n next();\n return;\n }\n const error = reply.error;\n errback({error, next});\n }\n }\n\n _handleJoin(channel, join) {\n const ctx = {'info': join.info};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('join', ctx);\n }\n return;\n }\n sub.emit('join', ctx);\n };\n\n _handleLeave(channel, leave) {\n const ctx = {'info': leave.info};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('leave', ctx);\n }\n return;\n }\n sub.emit('leave', ctx);\n };\n\n _handleUnsub(channel, unsub) {\n const ctx = {};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n delete this._serverSubs[channel];\n ctx.channel = channel;\n this.emit('unsubscribe', ctx);\n }\n return;\n }\n sub.unsubscribe();\n if (unsub.resubscribe === true) {\n sub.subscribe();\n }\n };\n\n _handleSub(channel, sub) {\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n let ctx = {'channel': channel, isResubscribe: false};\n ctx = this._expandSubscribeContext(ctx, sub);\n this.emit('subscribe', ctx);\n };\n\n _handlePublication(channel, pub) {\n const sub = this._getSub(channel);\n const ctx = {\n 'data': pub.data,\n 'seq': pub.seq,\n 'gen': pub.gen,\n 'offset': pub.offset\n };\n if (pub.info) {\n ctx.info = pub.info;\n }\n if (!sub) {\n if (this._isServerSub(channel)) {\n if (pub.seq !== undefined) {\n this._serverSubs[channel].seq = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._serverSubs[channel].gen = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._serverSubs[channel].offset = pub.offset;\n }\n ctx.channel = channel;\n this.emit('publish', ctx);\n }\n return;\n }\n if (pub.seq !== undefined) {\n this._lastSeq[channel] = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._lastGen[channel] = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._lastOffset[channel] = pub.offset;\n }\n sub.emit('publish', ctx);\n };\n\n _handleMessage(message) {\n this.emit('message', message.data);\n };\n\n _handlePush(data, next) {\n const push = this._decoder.decodePush(data);\n let type = 0;\n if ('type' in push) {\n type = push['type'];\n }\n const channel = push.channel;\n\n if (type === this._pushType.PUBLICATION) {\n const pub = this._decoder.decodePushData(this._pushType.PUBLICATION, push.data);\n this._handlePublication(channel, pub);\n } else if (type === this._pushType.MESSAGE) {\n const message = this._decoder.decodePushData(this._pushType.MESSAGE, push.data);\n this._handleMessage(message);\n } else if (type === this._pushType.JOIN) {\n const join = this._decoder.decodePushData(this._pushType.JOIN, push.data);\n this._handleJoin(channel, join);\n } else if (type === this._pushType.LEAVE) {\n const leave = this._decoder.decodePushData(this._pushType.LEAVE, push.data);\n this._handleLeave(channel, leave);\n } else if (type === this._pushType.UNSUB) {\n const unsub = this._decoder.decodePushData(this._pushType.UNSUB, push.data);\n this._handleUnsub(channel, unsub);\n } else if (type === this._pushType.SUB) {\n const sub = this._decoder.decodePushData(this._pushType.SUB, push.data);\n this._handleSub(channel, sub);\n }\n next();\n }\n\n _flush() {\n const messages = this._messages.slice(0);\n this._messages = [];\n this._transportSend(messages);\n };\n\n _ping() {\n const msg = {\n method: this._methodType.PING\n };\n this._call(msg).then(resolveCtx => {\n this._pingResponse(this._decoder.decodeCommandResult(this._methodType.PING, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._debug('ping error', rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n _pingResponse(result) {\n if (!this.isConnected()) {\n return;\n }\n this._stopPing();\n this._startPing();\n }\n\n _getLastSeq(channel) {\n const lastSeq = this._lastSeq[channel];\n if (lastSeq) {\n return lastSeq;\n }\n return 0;\n };\n\n _getLastOffset(channel) {\n const lastOffset = this._lastOffset[channel];\n if (lastOffset) {\n return lastOffset;\n }\n return 0;\n };\n\n _getLastGen(channel) {\n const lastGen = this._lastGen[channel];\n if (lastGen) {\n return lastGen;\n }\n return 0;\n };\n\n _getLastEpoch(channel) {\n const lastEpoch = this._lastEpoch[channel];\n if (lastEpoch) {\n return lastEpoch;\n }\n return '';\n };\n\n _createErrorObject(message, code) {\n const errObject = {\n message: message,\n code: code || 0\n };\n\n return errObject;\n };\n\n _registerCall(id, callback, errback) {\n this._callbacks[id] = {\n callback: callback,\n errback: errback,\n timeout: null\n };\n this._callbacks[id].timeout = setTimeout(() => {\n delete this._callbacks[id];\n if (isFunction(errback)) {\n errback({error: this._createErrorObject(_errorTimeout)});\n }\n }, this._config.timeout);\n };\n\n _addMessage(message) {\n let id = this._nextMessageId();\n message.id = id;\n if (this._isBatching === true) {\n this._messages.push(message);\n } else {\n this._transportSend([message]);\n }\n return id;\n };\n\n isConnected() {\n return this._isConnected();\n }\n\n connect() {\n this._connect();\n };\n\n disconnect() {\n this._disconnect('client', false);\n };\n\n ping() {\n return this._ping();\n }\n\n startBatching() {\n // start collecting messages without sending them to Centrifuge until flush\n // method called\n this._isBatching = true;\n };\n\n stopBatching() {\n this._isBatching = false;\n this._flush();\n };\n\n startSubscribeBatching() {\n // start collecting private channels to create bulk authentication\n // request to subscribeEndpoint when stopSubscribeBatching will be called\n this._isSubscribeBatching = true;\n };\n\n stopSubscribeBatching() {\n // create request to subscribeEndpoint with collected private channels\n // to ask if this client can subscribe on each channel\n this._isSubscribeBatching = false;\n const authChannels = this._privateChannels;\n this._privateChannels = {};\n\n const channels = [];\n\n for (const channel in authChannels) {\n if (authChannels.hasOwnProperty(channel)) {\n const sub = this._getSub(channel);\n if (!sub) {\n continue;\n }\n channels.push(channel);\n }\n }\n\n if (channels.length === 0) {\n this._debug('no private channels found, no need to make request');\n return;\n }\n\n const data = {\n client: this._clientID,\n channels: channels\n };\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n this._debug('authorization request failed');\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n this._subscribeError(channel, this._createErrorObject('authorization request failed'));\n }\n }\n return;\n }\n\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n // try to send all subscriptions in one request.\n let batch = false;\n\n if (!this._isBatching) {\n this.startBatching();\n batch = true;\n }\n\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n const token = channelsData[channel];\n\n if (!token) {\n // subscription:error\n this._subscribeError(channel, this._createErrorObject('permission denied', 103));\n continue;\n } else {\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n continue;\n }\n\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n }\n }\n\n if (batch) {\n this.stopBatching();\n }\n\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n subscribe(channel, events) {\n const currentSub = this._getSub(channel);\n if (currentSub !== null) {\n currentSub._setEvents(events);\n if (currentSub._isUnsubscribed()) {\n currentSub.subscribe();\n }\n return currentSub;\n }\n const sub = new Subscription(this, channel, events);\n this._subs[channel] = sub;\n sub.subscribe();\n return sub;\n };\n}\n","import {CentrifugeProtobuf} from './protobuf.js';\nexport default CentrifugeProtobuf;\n","export const JsonMethodType = {\n CONNECT: 0,\n SUBSCRIBE: 1,\n UNSUBSCRIBE: 2,\n PUBLISH: 3,\n PRESENCE: 4,\n PRESENCE_STATS: 5,\n HISTORY: 6,\n PING: 7,\n SEND: 8,\n RPC: 9,\n REFRESH: 10,\n SUB_REFRESH: 11\n};\n\nexport const JsonPushType = {\n PUBLICATION: 0,\n JOIN: 1,\n LEAVE: 2,\n UNSUB: 3,\n MESSAGE: 4,\n SUB: 5\n};\n\nexport class JsonEncoder {\n encodeCommands(commands) {\n const encodedCommands = [];\n for (const i in commands) {\n if (commands.hasOwnProperty(i)) {\n encodedCommands.push(JSON.stringify(commands[i]));\n }\n }\n return encodedCommands.join('\\n');\n }\n}\n\nexport class JsonDecoder {\n decodeReplies(data) {\n const replies = [];\n const encodedReplies = data.split('\\n');\n for (const i in encodedReplies) {\n if (encodedReplies.hasOwnProperty(i)) {\n if (!encodedReplies[i]) {\n continue;\n }\n const reply = JSON.parse(encodedReplies[i]);\n replies.push(reply);\n }\n }\n return replies;\n }\n\n decodeCommandResult(methodType, data) {\n return data;\n }\n\n decodePush(data) {\n return data;\n }\n\n decodePushData(pushType, data) {\n return data;\n }\n}\n\n","import {Centrifuge} from './centrifuge.js';\n\nconst protobuf = require('protobufjs/light');\nconst proto = protobuf.Root.fromJSON(require('./client.proto.json'));\n\nconst methodValues = proto.lookupEnum('MethodType').values;\n\nconst protobufMethodType = {\n CONNECT: methodValues.CONNECT,\n SUBSCRIBE: methodValues.SUBSCRIBE,\n UNSUBSCRIBE: methodValues.UNSUBSCRIBE,\n PUBLISH: methodValues.PUBLISH,\n PRESENCE: methodValues.PRESENCE,\n PRESENCE_STATS: methodValues.PRESENCE_STATS,\n HISTORY: methodValues.HISTORY,\n PING: methodValues.PING,\n RPC: methodValues.RPC,\n SEND: methodValues.SEND,\n REFRESH: methodValues.REFRESH,\n SUB_REFRESH: methodValues.SUB_REFRESH\n};\n\nconst methodSchema = {\n CONNECT: [\n proto.lookupType('protocol.ConnectRequest'),\n proto.lookupType('protocol.ConnectResult')\n ],\n REFRESH: [\n proto.lookupType('protocol.RefreshRequest'),\n proto.lookupType('protocol.RefreshResult')\n ],\n SUBSCRIBE: [\n proto.lookupType('protocol.SubscribeRequest'),\n proto.lookupType('protocol.SubscribeResult')\n ],\n SUB_REFRESH: [\n proto.lookupType('protocol.SubRefreshRequest'),\n proto.lookupType('protocol.SubRefreshResult')\n ],\n UNSUBSCRIBE: [\n proto.lookupType('protocol.UnsubscribeRequest'),\n proto.lookupType('protocol.UnsubscribeResult')\n ],\n PUBLISH: [\n proto.lookupType('protocol.PublishRequest'),\n proto.lookupType('protocol.PublishResult')\n ],\n PRESENCE: [\n proto.lookupType('protocol.PresenceRequest'),\n proto.lookupType('protocol.PresenceResult')\n ],\n PRESENCE_STATS: [\n proto.lookupType('protocol.PresenceStatsRequest'),\n proto.lookupType('protocol.PresenceStatsResult')\n ],\n HISTORY: [\n proto.lookupType('protocol.HistoryRequest'),\n proto.lookupType('protocol.HistoryResult')\n ],\n PING: [\n proto.lookupType('protocol.PingRequest'),\n proto.lookupType('protocol.PingResult')\n ],\n RPC: [\n proto.lookupType('protocol.RPCRequest'),\n proto.lookupType('protocol.RPCResult')\n ],\n SEND: [\n proto.lookupType('protocol.SendRequest'),\n null\n ]\n};\n\nconst protobufPushType = {\n PUBLICATION: proto.lookupEnum('PushType').values.PUBLICATION,\n JOIN: proto.lookupEnum('PushType').values.JOIN,\n LEAVE: proto.lookupEnum('PushType').values.LEAVE,\n UNSUB: proto.lookupEnum('PushType').values.UNSUB,\n MESSAGE: proto.lookupEnum('PushType').values.MESSAGE,\n SUB: proto.lookupEnum('PushType').values.SUB\n};\n\nconst PushSchema = {\n PUBLICATION: proto.lookupType('protocol.Publication'),\n JOIN: proto.lookupType('protocol.Join'),\n LEAVE: proto.lookupType('protocol.Leave'),\n UNSUB: proto.lookupType('protocol.Unsub'),\n MESSAGE: proto.lookupType('protocol.Message'),\n SUB: proto.lookupType('protocol.Sub')\n};\n\nconst Push = proto.lookupType('protocol.Push');\nconst Command = proto.lookupType('protocol.Command');\nconst Reply = proto.lookupType('protocol.Reply');\n\nexport class ProtobufEncoder {\n encodeCommands(commands) {\n const writer = protobuf.Writer.create();\n for (const i in commands) {\n if (commands.hasOwnProperty(i)) {\n const command = Object.assign({}, commands[i]);\n if (command.params) {\n let type;\n if (!command.method) {\n command.method = protobufMethodType.CONNECT;\n };\n switch (command.method) {\n case protobufMethodType.CONNECT:\n type = methodSchema.CONNECT[0];\n break;\n case protobufMethodType.REFRESH:\n type = methodSchema.REFRESH[0];\n break;\n case protobufMethodType.SUBSCRIBE:\n type = methodSchema.SUBSCRIBE[0];\n break;\n case protobufMethodType.SUB_REFRESH:\n type = methodSchema.SUB_REFRESH[0];\n break;\n case protobufMethodType.UNSUBSCRIBE:\n type = methodSchema.UNSUBSCRIBE[0];\n break;\n case protobufMethodType.PUBLISH:\n type = methodSchema.PUBLISH[0];\n break;\n case protobufMethodType.PRESENCE:\n type = methodSchema.PRESENCE[0];\n break;\n case protobufMethodType.PRESENCE_STATS:\n type = methodSchema.PRESENCE_STATS[0];\n break;\n case protobufMethodType.HISTORY:\n type = methodSchema.HISTORY[0];\n break;\n case protobufMethodType.PING:\n type = methodSchema.PING[0];\n break;\n case protobufMethodType.RPC:\n type = methodSchema.RPC[0];\n break;\n case protobufMethodType.SEND:\n type = methodSchema.SEND[0];\n break;\n }\n command.params = type.encode(command.params).finish();\n }\n Command.encodeDelimited(command, writer);\n }\n }\n return writer.finish();\n }\n}\n\nexport class ProtobufDecoder {\n decodeReplies(data) {\n const replies = [];\n const reader = protobuf.Reader.create(new Uint8Array(data));\n while (reader.pos < reader.len) {\n const reply = Reply.decodeDelimited(reader);\n replies.push(reply);\n }\n return replies;\n }\n\n decodeCommandResult(methodType, data) {\n var type;\n switch (methodType) {\n case protobufMethodType.CONNECT:\n type = methodSchema.CONNECT[1];\n break;\n case protobufMethodType.REFRESH:\n type = methodSchema.REFRESH[1];\n break;\n case protobufMethodType.SUBSCRIBE:\n type = methodSchema.SUBSCRIBE[1];\n break;\n case protobufMethodType.SUB_REFRESH:\n type = methodSchema.SUB_REFRESH[1];\n break;\n case protobufMethodType.UNSUBSCRIBE:\n type = methodSchema.UNSUBSCRIBE[1];\n break;\n case protobufMethodType.PUBLISH:\n type = methodSchema.PUBLISH[1];\n break;\n case protobufMethodType.PRESENCE:\n type = methodSchema.PRESENCE[1];\n break;\n case protobufMethodType.PRESENCE_STATS:\n type = methodSchema.PRESENCE_STATS[1];\n break;\n case protobufMethodType.HISTORY:\n type = methodSchema.HISTORY[1];\n break;\n case protobufMethodType.PING:\n type = methodSchema.PING[1];\n break;\n case protobufMethodType.RPC:\n type = methodSchema.RPC[1];\n break;\n }\n return this._decode(type, data);\n }\n\n decodePush(data) {\n return this._decode(Push, data);\n }\n\n decodePushData(pushType, data) {\n var type;\n switch (pushType) {\n case protobufPushType.PUBLICATION:\n type = PushSchema.PUBLICATION;\n break;\n case protobufPushType.MESSAGE:\n type = PushSchema.MESSAGE;\n break;\n case protobufPushType.JOIN:\n type = PushSchema.JOIN;\n break;\n case protobufPushType.LEAVE:\n type = PushSchema.LEAVE;\n break;\n case protobufPushType.UNSUB:\n type = PushSchema.UNSUB;\n break;\n case protobufPushType.SUB:\n type = PushSchema.SUB;\n break;\n }\n return this._decode(type, data);\n }\n\n _decode(type, data) {\n let res;\n try {\n res = type.decode(data);\n } catch (err) {\n return null;\n }\n return res;\n }\n}\n\nexport class CentrifugeProtobuf extends Centrifuge {\n _formatOverride(format) {\n if (format === 'protobuf') {\n this._binary = true;\n this._methodType = protobufMethodType;\n this._pushType = protobufPushType;\n this._encoder = new ProtobufEncoder();\n this._decoder = new ProtobufDecoder();\n return true;\n }\n return false;\n }\n}\n","import EventEmitter from 'events';\n\nimport {\n isFunction\n} from './utils';\n\nconst _STATE_NEW = 0;\nconst _STATE_SUBSCRIBING = 1;\nconst _STATE_SUCCESS = 2;\nconst _STATE_ERROR = 3;\nconst _STATE_UNSUBSCRIBED = 4;\n\nexport default class Subscription extends EventEmitter {\n constructor(centrifuge, channel, events) {\n super();\n this.channel = channel;\n this._centrifuge = centrifuge;\n this._status = _STATE_NEW;\n this._error = null;\n this._isResubscribe = false;\n this._ready = false;\n this._subscriptionPromise = null;\n this._noResubscribe = false;\n this._recoverable = false;\n this._recover = false;\n this._setEvents(events);\n this._initializePromise();\n this._promises = {};\n this._promiseId = 0;\n this.on('error', function (errContext) {\n this._centrifuge._debug('subscription error', errContext);\n });\n }\n\n _nextPromiseId() {\n return ++this._promiseId;\n }\n\n _initializePromise() {\n // this helps us to wait until subscription will successfully\n // subscribe and call actions such as presence, history etc in\n // synchronous way.\n this._ready = false;\n\n this._subscriptionPromise = new Promise((resolve, reject) => {\n this._resolve = value => {\n this._ready = true;\n resolve(value);\n };\n this._reject = err => {\n this._ready = true;\n reject(err);\n };\n }).then(function () {}, function () {});\n };\n\n _needRecover() {\n return this._recoverable === true && this._recover === true;\n };\n\n _setEvents(events) {\n if (!events) {\n return;\n }\n if (isFunction(events)) {\n // events is just a function to handle publication received from channel.\n this.on('publish', events);\n } else if (Object.prototype.toString.call(events) === Object.prototype.toString.call({})) {\n const knownEvents = ['publish', 'join', 'leave', 'unsubscribe', 'subscribe', 'error'];\n for (let i = 0, l = knownEvents.length; i < l; i++) {\n const ev = knownEvents[i];\n if (ev in events) {\n this.on(ev, events[ev]);\n }\n }\n }\n };\n\n _isNew() {\n return this._status === _STATE_NEW;\n };\n\n _isUnsubscribed() {\n return this._status === _STATE_UNSUBSCRIBED;\n };\n\n _isSubscribing() {\n return this._status === _STATE_SUBSCRIBING;\n };\n\n _isReady() {\n return this._status === _STATE_SUCCESS || this._status === _STATE_ERROR;\n };\n\n _isSuccess() {\n return this._status === _STATE_SUCCESS;\n };\n\n _isError() {\n return this._status === _STATE_ERROR;\n };\n\n _setNew() {\n this._status = _STATE_NEW;\n };\n\n _setSubscribing(isResubscribe) {\n this._isResubscribe = isResubscribe || false;\n if (this._ready === true) {\n // new promise for this subscription\n this._initializePromise();\n }\n this._status = _STATE_SUBSCRIBING;\n };\n\n _setSubscribeSuccess(subscribeResult) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._status = _STATE_SUCCESS;\n const successContext = this._getSubscribeSuccessContext(subscribeResult);\n this._recover = false;\n this.emit('subscribe', successContext);\n this._resolve(successContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].resolve();\n delete this._promises[id];\n }\n };\n\n _setSubscribeError(err) {\n if (this._status === _STATE_ERROR) {\n return;\n }\n this._status = _STATE_ERROR;\n this._error = err;\n const errContext = this._getSubscribeErrorContext();\n this.emit('error', errContext);\n this._reject(errContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n };\n\n _triggerUnsubscribe() {\n this.emit('unsubscribe', {\n channel: this.channel\n });\n };\n\n _setUnsubscribed(noResubscribe) {\n this._centrifuge._clearSubRefreshTimeout(this.channel);\n if (this._status === _STATE_UNSUBSCRIBED) {\n return;\n }\n const needTrigger = this._status === _STATE_SUCCESS;\n this._status = _STATE_UNSUBSCRIBED;\n if (noResubscribe === true) {\n this._recover = false;\n this._noResubscribe = true;\n delete this._centrifuge._lastSeq[this.channel];\n delete this._centrifuge._lastGen[this.channel];\n delete this._centrifuge._lastEpoch[this.channel];\n }\n if (needTrigger) {\n this._triggerUnsubscribe();\n }\n };\n\n _shouldResubscribe() {\n return !this._noResubscribe;\n };\n\n _getSubscribeSuccessContext(subscribeResult) {\n let ctx = {\n channel: this.channel,\n isResubscribe: this._isResubscribe\n };\n if (subscribeResult) {\n // subscribeResult not available when called from Subscription.ready method at the moment.\n ctx = this._centrifuge._expandSubscribeContext(ctx, subscribeResult);\n }\n return ctx;\n };\n\n _getSubscribeErrorContext() {\n const subscribeErrorContext = this._error;\n subscribeErrorContext.channel = this.channel;\n subscribeErrorContext.isResubscribe = this._isResubscribe;\n return subscribeErrorContext;\n };\n\n ready(callback, errback) {\n if (this._ready) {\n if (this._isSuccess()) {\n callback(this._getSubscribeSuccessContext());\n } else {\n errback(this._getSubscribeErrorContext());\n }\n }\n };\n\n subscribe() {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._noResubscribe = false;\n this._centrifuge._subscribe(this);\n };\n\n unsubscribe() {\n this._setUnsubscribed(true);\n this._centrifuge._unsubscribe(this);\n };\n\n _methodCall() {\n if (this._isSuccess()) {\n return Promise.resolve();\n } else if (this._isError()) {\n return Promise.reject(this._error);\n }\n let subPromise = new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({'code': 0, 'message': 'timeout'});\n }, this._centrifuge._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n return subPromise;\n }\n\n publish(data) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.publish(self.channel, data);\n });\n };\n\n presence() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presence(self.channel);\n });\n };\n\n presenceStats() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presenceStats(self.channel);\n });\n };\n\n history(options) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.history(self.channel, options);\n });\n };\n}\n","export function startsWith(value, prefix) {\n return value.lastIndexOf(prefix, 0) === 0;\n};\n\nexport function isFunction(value) {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'function';\n};\n\nexport function log(level, args) {\n if (global.console) {\n const logger = global.console[level];\n\n if (isFunction(logger)) {\n logger.apply(global.console, args);\n }\n }\n};\n\nexport function backoff(step, min, max) {\n const jitter = 0.5 * Math.random();\n const interval = Math.min(max, min * Math.pow(2, step + 1));\n\n return Math.floor((1 - jitter) * interval);\n};\n\nexport function errorExists(data) {\n return 'error' in data && data.error !== null;\n};\n\nexport function extend(a, b) {\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n return a;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function eventListener() {\n if (errorListener !== undefined) {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n var errorListener;\n\n // Adding an error listener is not optional because\n // if an error is thrown on an event emitter we cannot\n // guarantee that the actual event we are waiting will\n // be fired. The result could be a silent way to create\n // memory or file descriptor leaks, which is something\n // we should avoid.\n if (name !== 'error') {\n errorListener = function errorListener(err) {\n emitter.removeListener(name, eventListener);\n reject(err);\n };\n\n emitter.once('error', errorListener);\n }\n\n emitter.once(name, eventListener);\n });\n}\n","// light library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-light\");","\"use strict\";\n/**\n * Runtime message from/to plain object converters.\n * @namespace\n */\nvar converter = exports;\n\nvar Enum = require(\"./enum\"),\n util = require(\"./util\");\n\n/**\n * Generates a partial value fromObject conveter.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} prop Property reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genValuePartial_fromObject(gen, field, fieldIndex, prop) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n if (field.resolvedType) {\n if (field.resolvedType instanceof Enum) { gen\n (\"switch(d%s){\", prop);\n for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0; i < keys.length; ++i) {\n if (field.repeated && values[keys[i]] === field.typeDefault) gen\n (\"default:\");\n gen\n (\"case%j:\", keys[i])\n (\"case %i:\", values[keys[i]])\n (\"m%s=%j\", prop, values[keys[i]])\n (\"break\");\n } gen\n (\"}\");\n } else gen\n (\"if(typeof d%s!==\\\"object\\\")\", prop)\n (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n (\"m%s=types[%i].fromObject(d%s)\", prop, fieldIndex, prop);\n } else {\n var isUnsigned = false;\n switch (field.type) {\n case \"double\":\n case \"float\": gen\n (\"m%s=Number(d%s)\", prop, prop); // also catches \"NaN\", \"Infinity\"\n break;\n case \"uint32\":\n case \"fixed32\": gen\n (\"m%s=d%s>>>0\", prop, prop);\n break;\n case \"int32\":\n case \"sint32\":\n case \"sfixed32\": gen\n (\"m%s=d%s|0\", prop, prop);\n break;\n case \"uint64\":\n isUnsigned = true;\n // eslint-disable-line no-fallthrough\n case \"int64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(util.Long)\")\n (\"(m%s=util.Long.fromValue(d%s)).unsigned=%j\", prop, prop, isUnsigned)\n (\"else if(typeof d%s===\\\"string\\\")\", prop)\n (\"m%s=parseInt(d%s,10)\", prop, prop)\n (\"else if(typeof d%s===\\\"number\\\")\", prop)\n (\"m%s=d%s\", prop, prop)\n (\"else if(typeof d%s===\\\"object\\\")\", prop)\n (\"m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)\", prop, prop, prop, isUnsigned ? \"true\" : \"\");\n break;\n case \"bytes\": gen\n (\"if(typeof d%s===\\\"string\\\")\", prop)\n (\"util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)\", prop, prop, prop)\n (\"else if(d%s.length)\", prop)\n (\"m%s=d%s\", prop, prop);\n break;\n case \"string\": gen\n (\"m%s=String(d%s)\", prop, prop);\n break;\n case \"bool\": gen\n (\"m%s=Boolean(d%s)\", prop, prop);\n break;\n /* default: gen\n (\"m%s=d%s\", prop, prop);\n break; */\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a plain object to runtime message converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.fromObject = function fromObject(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var fields = mtype.fieldsArray;\n var gen = util.codegen([\"d\"], mtype.name + \"$fromObject\")\n (\"if(d instanceof this.ctor)\")\n (\"return d\");\n if (!fields.length) return gen\n (\"return new this.ctor\");\n gen\n (\"var m=new this.ctor\");\n for (var i = 0; i < fields.length; ++i) {\n var field = fields[i].resolve(),\n prop = util.safeProp(field.name);\n\n // Map fields\n if (field.map) { gen\n (\"if(d%s){\", prop)\n (\"if(typeof d%s!==\\\"object\\\")\", prop)\n (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n (\"m%s={}\", prop)\n (\"for(var ks=Object.keys(d%s),i=0;i>>0,m%s.high>>>0).toNumber(%s):m%s\", prop, prop, prop, prop, isUnsigned ? \"true\": \"\", prop);\n break;\n case \"bytes\": gen\n (\"d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s\", prop, prop, prop, prop, prop);\n break;\n default: gen\n (\"d%s=m%s\", prop, prop);\n break;\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a runtime message to plain object converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.toObject = function toObject(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById);\n if (!fields.length)\n return util.codegen()(\"return {}\");\n var gen = util.codegen([\"m\", \"o\"], mtype.name + \"$toObject\")\n (\"if(!o)\")\n (\"o={}\")\n (\"var d={}\");\n\n var repeatedFields = [],\n mapFields = [],\n normalFields = [],\n i = 0;\n for (; i < fields.length; ++i)\n if (!fields[i].partOf)\n ( fields[i].resolve().repeated ? repeatedFields\n : fields[i].map ? mapFields\n : normalFields).push(fields[i]);\n\n if (repeatedFields.length) { gen\n (\"if(o.arrays||o.defaults){\");\n for (i = 0; i < repeatedFields.length; ++i) gen\n (\"d%s=[]\", util.safeProp(repeatedFields[i].name));\n gen\n (\"}\");\n }\n\n if (mapFields.length) { gen\n (\"if(o.objects||o.defaults){\");\n for (i = 0; i < mapFields.length; ++i) gen\n (\"d%s={}\", util.safeProp(mapFields[i].name));\n gen\n (\"}\");\n }\n\n if (normalFields.length) { gen\n (\"if(o.defaults){\");\n for (i = 0; i < normalFields.length; ++i) {\n var field = normalFields[i],\n prop = util.safeProp(field.name);\n if (field.resolvedType instanceof Enum) gen\n (\"d%s=o.enums===String?%j:%j\", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault);\n else if (field.long) gen\n (\"if(util.Long){\")\n (\"var n=new util.Long(%i,%i,%j)\", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)\n (\"d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():n\", prop)\n (\"}else\")\n (\"d%s=o.longs===String?%j:%i\", prop, field.typeDefault.toString(), field.typeDefault.toNumber());\n else if (field.bytes) {\n var arrayDefault = \"[\" + Array.prototype.slice.call(field.typeDefault).join(\",\") + \"]\";\n gen\n (\"if(o.bytes===String)d%s=%j\", prop, String.fromCharCode.apply(String, field.typeDefault))\n (\"else{\")\n (\"d%s=%s\", prop, arrayDefault)\n (\"if(o.bytes!==Array)d%s=util.newBuffer(d%s)\", prop, prop)\n (\"}\");\n } else gen\n (\"d%s=%j\", prop, field.typeDefault); // also messages (=null)\n } gen\n (\"}\");\n }\n var hasKs2 = false;\n for (i = 0; i < fields.length; ++i) {\n var field = fields[i],\n index = mtype._fieldsArray.indexOf(field),\n prop = util.safeProp(field.name);\n if (field.map) {\n if (!hasKs2) { hasKs2 = true; gen\n (\"var ks2\");\n } gen\n (\"if(m%s&&(ks2=Object.keys(m%s)).length){\", prop, prop)\n (\"d%s={}\", prop)\n (\"for(var j=0;j>>3){\");\n\n var i = 0;\n for (; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n var field = mtype._fieldsArray[i].resolve(),\n type = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n ref = \"m\" + util.safeProp(field.name); gen\n (\"case %i:\", field.id);\n\n // Map fields\n if (field.map) { gen\n (\"if(%s===util.emptyObject)\", ref)\n (\"%s={}\", ref)\n (\"var c2 = r.uint32()+r.pos\");\n\n if (types.defaults[field.keyType] !== undefined) gen\n (\"k=%j\", types.defaults[field.keyType]);\n else gen\n (\"k=null\");\n\n if (types.defaults[type] !== undefined) gen\n (\"value=%j\", types.defaults[type]);\n else gen\n (\"value=null\");\n\n gen\n (\"while(r.pos>>3){\")\n (\"case 1: k=r.%s(); break\", field.keyType)\n (\"case 2:\");\n\n if (types.basic[type] === undefined) gen\n (\"value=types[%i].decode(r,r.uint32())\", i); // can't be groups\n else gen\n (\"value=r.%s()\", type);\n\n gen\n (\"break\")\n (\"default:\")\n (\"r.skipType(tag2&7)\")\n (\"break\")\n (\"}\")\n (\"}\");\n\n if (types.long[field.keyType] !== undefined) gen\n (\"%s[typeof k===\\\"object\\\"?util.longToHash(k):k]=value\", ref);\n else gen\n (\"%s[k]=value\", ref);\n\n // Repeated fields\n } else if (field.repeated) { gen\n\n (\"if(!(%s&&%s.length))\", ref, ref)\n (\"%s=[]\", ref);\n\n // Packable (always check for forward and backward compatiblity)\n if (types.packed[type] !== undefined) gen\n (\"if((t&7)===2){\")\n (\"var c2=r.uint32()+r.pos\")\n (\"while(r.pos>> 0, (field.id << 3 | 4) >>> 0)\n : gen(\"types[%i].encode(%s,w.uint32(%i).fork()).ldelim()\", fieldIndex, ref, (field.id << 3 | 2) >>> 0);\n}\n\n/**\n * Generates an encoder specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction encoder(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var gen = util.codegen([\"m\", \"w\"], mtype.name + \"$encode\")\n (\"if(!w)\")\n (\"w=Writer.create()\");\n\n var i, ref;\n\n // \"when a message is serialized its known fields should be written sequentially by field number\"\n var fields = /* initializes */ mtype.fieldsArray.slice().sort(util.compareFieldsById);\n\n for (var i = 0; i < fields.length; ++i) {\n var field = fields[i].resolve(),\n index = mtype._fieldsArray.indexOf(field),\n type = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n wireType = types.basic[type];\n ref = \"m\" + util.safeProp(field.name);\n\n // Map fields\n if (field.map) {\n gen\n (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)){\", ref, field.name) // !== undefined && !== null\n (\"for(var ks=Object.keys(%s),i=0;i>> 0, 8 | types.mapKey[field.keyType], field.keyType);\n if (wireType === undefined) gen\n (\"types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()\", index, ref); // can't be groups\n else gen\n (\".uint32(%i).%s(%s[ks[i]]).ldelim()\", 16 | wireType, type, ref);\n gen\n (\"}\")\n (\"}\");\n\n // Repeated fields\n } else if (field.repeated) { gen\n (\"if(%s!=null&&%s.length){\", ref, ref); // !== undefined && !== null\n\n // Packed repeated\n if (field.packed && types.packed[type] !== undefined) { gen\n\n (\"w.uint32(%i).fork()\", (field.id << 3 | 2) >>> 0)\n (\"for(var i=0;i<%s.length;++i)\", ref)\n (\"w.%s(%s[i])\", type, ref)\n (\"w.ldelim()\");\n\n // Non-packed\n } else { gen\n\n (\"for(var i=0;i<%s.length;++i)\", ref);\n if (wireType === undefined)\n genTypePartial(gen, field, index, ref + \"[i]\");\n else gen\n (\"w.uint32(%i).%s(%s[i])\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n } gen\n (\"}\");\n\n // Non-repeated\n } else {\n if (field.optional) gen\n (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j))\", ref, field.name); // !== undefined && !== null\n\n if (wireType === undefined)\n genTypePartial(gen, field, index, ref);\n else gen\n (\"w.uint32(%i).%s(%s)\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n }\n }\n\n return gen\n (\"return w\");\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n","\"use strict\";\nmodule.exports = Enum;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Enum.prototype = Object.create(ReflectionObject.prototype)).constructor = Enum).className = \"Enum\";\n\nvar Namespace = require(\"./namespace\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new enum instance.\n * @classdesc Reflected enum.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {Object.} [values] Enum values as an object, by name\n * @param {Object.} [options] Declared options\n * @param {string} [comment] The comment for this enum\n * @param {Object.} [comments] The value comments for this enum\n */\nfunction Enum(name, values, options, comment, comments) {\n ReflectionObject.call(this, name, options);\n\n if (values && typeof values !== \"object\")\n throw TypeError(\"values must be an object\");\n\n /**\n * Enum values by id.\n * @type {Object.}\n */\n this.valuesById = {};\n\n /**\n * Enum values by name.\n * @type {Object.}\n */\n this.values = Object.create(this.valuesById); // toJSON, marker\n\n /**\n * Enum comment text.\n * @type {string|null}\n */\n this.comment = comment;\n\n /**\n * Value comment texts, if any.\n * @type {Object.}\n */\n this.comments = comments || {};\n\n /**\n * Reserved ranges, if any.\n * @type {Array.}\n */\n this.reserved = undefined; // toJSON\n\n // Note that values inherit valuesById on their prototype which makes them a TypeScript-\n // compatible enum. This is used by pbts to write actual enum definitions that work for\n // static and reflection code alike instead of emitting generic object definitions.\n\n if (values)\n for (var keys = Object.keys(values), i = 0; i < keys.length; ++i)\n if (typeof values[keys[i]] === \"number\") // use forward entries only\n this.valuesById[ this.values[keys[i]] = values[keys[i]] ] = keys[i];\n}\n\n/**\n * Enum descriptor.\n * @interface IEnum\n * @property {Object.} values Enum values\n * @property {Object.} [options] Enum options\n */\n\n/**\n * Constructs an enum from an enum descriptor.\n * @param {string} name Enum name\n * @param {IEnum} json Enum descriptor\n * @returns {Enum} Created enum\n * @throws {TypeError} If arguments are invalid\n */\nEnum.fromJSON = function fromJSON(name, json) {\n var enm = new Enum(name, json.values, json.options, json.comment, json.comments);\n enm.reserved = json.reserved;\n return enm;\n};\n\n/**\n * Converts this enum to an enum descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IEnum} Enum descriptor\n */\nEnum.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , this.options,\n \"values\" , this.values,\n \"reserved\" , this.reserved && this.reserved.length ? this.reserved : undefined,\n \"comment\" , keepComments ? this.comment : undefined,\n \"comments\" , keepComments ? this.comments : undefined\n ]);\n};\n\n/**\n * Adds a value to this enum.\n * @param {string} name Value name\n * @param {number} id Value id\n * @param {string} [comment] Comment, if any\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a value with this name or id\n */\nEnum.prototype.add = function add(name, id, comment) {\n // utilized by the parser but not by .fromJSON\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n if (!util.isInteger(id))\n throw TypeError(\"id must be an integer\");\n\n if (this.values[name] !== undefined)\n throw Error(\"duplicate name '\" + name + \"' in \" + this);\n\n if (this.isReservedId(id))\n throw Error(\"id \" + id + \" is reserved in \" + this);\n\n if (this.isReservedName(name))\n throw Error(\"name '\" + name + \"' is reserved in \" + this);\n\n if (this.valuesById[id] !== undefined) {\n if (!(this.options && this.options.allow_alias))\n throw Error(\"duplicate id \" + id + \" in \" + this);\n this.values[name] = id;\n } else\n this.valuesById[this.values[name] = id] = name;\n\n this.comments[name] = comment || null;\n return this;\n};\n\n/**\n * Removes a value from this enum\n * @param {string} name Value name\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `name` is not a name of this enum\n */\nEnum.prototype.remove = function remove(name) {\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n var val = this.values[name];\n if (val == null)\n throw Error(\"name '\" + name + \"' does not exist in \" + this);\n\n delete this.valuesById[val];\n delete this.values[name];\n delete this.comments[name];\n\n return this;\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedId = function isReservedId(id) {\n return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedName = function isReservedName(name) {\n return Namespace.isReservedName(this.reserved, name);\n};\n","\"use strict\";\nmodule.exports = Field;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Field.prototype = Object.create(ReflectionObject.prototype)).constructor = Field).className = \"Field\";\n\nvar Enum = require(\"./enum\"),\n types = require(\"./types\"),\n util = require(\"./util\");\n\nvar Type; // cyclic\n\nvar ruleRe = /^required|optional|repeated$/;\n\n/**\n * Constructs a new message field instance. Note that {@link MapField|map fields} have their own class.\n * @name Field\n * @classdesc Reflected message field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.} [rule=\"optional\"] Field rule\n * @param {string|Object.} [extend] Extended type if different from parent\n * @param {Object.} [options] Declared options\n */\n\n/**\n * Constructs a field from a field descriptor.\n * @param {string} name Field name\n * @param {IField} json Field descriptor\n * @returns {Field} Created field\n * @throws {TypeError} If arguments are invalid\n */\nField.fromJSON = function fromJSON(name, json) {\n return new Field(name, json.id, json.type, json.rule, json.extend, json.options, json.comment);\n};\n\n/**\n * Not an actual constructor. Use {@link Field} instead.\n * @classdesc Base class of all reflected message fields. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports FieldBase\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.} [rule=\"optional\"] Field rule\n * @param {string|Object.} [extend] Extended type if different from parent\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction Field(name, id, type, rule, extend, options, comment) {\n\n if (util.isObject(rule)) {\n comment = extend;\n options = rule;\n rule = extend = undefined;\n } else if (util.isObject(extend)) {\n comment = options;\n options = extend;\n extend = undefined;\n }\n\n ReflectionObject.call(this, name, options);\n\n if (!util.isInteger(id) || id < 0)\n throw TypeError(\"id must be a non-negative integer\");\n\n if (!util.isString(type))\n throw TypeError(\"type must be a string\");\n\n if (rule !== undefined && !ruleRe.test(rule = rule.toString().toLowerCase()))\n throw TypeError(\"rule must be a string rule\");\n\n if (extend !== undefined && !util.isString(extend))\n throw TypeError(\"extend must be a string\");\n\n /**\n * Field rule, if any.\n * @type {string|undefined}\n */\n this.rule = rule && rule !== \"optional\" ? rule : undefined; // toJSON\n\n /**\n * Field type.\n * @type {string}\n */\n this.type = type; // toJSON\n\n /**\n * Unique field id.\n * @type {number}\n */\n this.id = id; // toJSON, marker\n\n /**\n * Extended type if different from parent.\n * @type {string|undefined}\n */\n this.extend = extend || undefined; // toJSON\n\n /**\n * Whether this field is required.\n * @type {boolean}\n */\n this.required = rule === \"required\";\n\n /**\n * Whether this field is optional.\n * @type {boolean}\n */\n this.optional = !this.required;\n\n /**\n * Whether this field is repeated.\n * @type {boolean}\n */\n this.repeated = rule === \"repeated\";\n\n /**\n * Whether this field is a map or not.\n * @type {boolean}\n */\n this.map = false;\n\n /**\n * Message this field belongs to.\n * @type {Type|null}\n */\n this.message = null;\n\n /**\n * OneOf this field belongs to, if any,\n * @type {OneOf|null}\n */\n this.partOf = null;\n\n /**\n * The field type's default value.\n * @type {*}\n */\n this.typeDefault = null;\n\n /**\n * The field's default value on prototypes.\n * @type {*}\n */\n this.defaultValue = null;\n\n /**\n * Whether this field's value should be treated as a long.\n * @type {boolean}\n */\n this.long = util.Long ? types.long[type] !== undefined : /* istanbul ignore next */ false;\n\n /**\n * Whether this field's value is a buffer.\n * @type {boolean}\n */\n this.bytes = type === \"bytes\";\n\n /**\n * Resolved type if not a basic type.\n * @type {Type|Enum|null}\n */\n this.resolvedType = null;\n\n /**\n * Sister-field within the extended type if a declaring extension field.\n * @type {Field|null}\n */\n this.extensionField = null;\n\n /**\n * Sister-field within the declaring namespace if an extended field.\n * @type {Field|null}\n */\n this.declaringField = null;\n\n /**\n * Internally remembers whether this field is packed.\n * @type {boolean|null}\n * @private\n */\n this._packed = null;\n\n /**\n * Comment for this field.\n * @type {string|null}\n */\n this.comment = comment;\n}\n\n/**\n * Determines whether this field is packed. Only relevant when repeated and working with proto2.\n * @name Field#packed\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"packed\", {\n get: function() {\n // defaults to packed=true if not explicity set to false\n if (this._packed === null)\n this._packed = this.getOption(\"packed\") !== false;\n return this._packed;\n }\n});\n\n/**\n * @override\n */\nField.prototype.setOption = function setOption(name, value, ifNotSet) {\n if (name === \"packed\") // clear cached before setting\n this._packed = null;\n return ReflectionObject.prototype.setOption.call(this, name, value, ifNotSet);\n};\n\n/**\n * Field descriptor.\n * @interface IField\n * @property {string} [rule=\"optional\"] Field rule\n * @property {string} type Field type\n * @property {number} id Field id\n * @property {Object.} [options] Field options\n */\n\n/**\n * Extension field descriptor.\n * @interface IExtensionField\n * @extends IField\n * @property {string} extend Extended type\n */\n\n/**\n * Converts this field to a field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IField} Field descriptor\n */\nField.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"rule\" , this.rule !== \"optional\" && this.rule || undefined,\n \"type\" , this.type,\n \"id\" , this.id,\n \"extend\" , this.extend,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Resolves this field's type references.\n * @returns {Field} `this`\n * @throws {Error} If any reference cannot be resolved\n */\nField.prototype.resolve = function resolve() {\n\n if (this.resolved)\n return this;\n\n if ((this.typeDefault = types.defaults[this.type]) === undefined) { // if not a basic type, resolve it\n this.resolvedType = (this.declaringField ? this.declaringField.parent : this.parent).lookupTypeOrEnum(this.type);\n if (this.resolvedType instanceof Type)\n this.typeDefault = null;\n else // instanceof Enum\n this.typeDefault = this.resolvedType.values[Object.keys(this.resolvedType.values)[0]]; // first defined\n }\n\n // use explicitly set default value if present\n if (this.options && this.options[\"default\"] != null) {\n this.typeDefault = this.options[\"default\"];\n if (this.resolvedType instanceof Enum && typeof this.typeDefault === \"string\")\n this.typeDefault = this.resolvedType.values[this.typeDefault];\n }\n\n // remove unnecessary options\n if (this.options) {\n if (this.options.packed === true || this.options.packed !== undefined && this.resolvedType && !(this.resolvedType instanceof Enum))\n delete this.options.packed;\n if (!Object.keys(this.options).length)\n this.options = undefined;\n }\n\n // convert to internal data type if necesssary\n if (this.long) {\n this.typeDefault = util.Long.fromNumber(this.typeDefault, this.type.charAt(0) === \"u\");\n\n /* istanbul ignore else */\n if (Object.freeze)\n Object.freeze(this.typeDefault); // long instances are meant to be immutable anyway (i.e. use small int cache that even requires it)\n\n } else if (this.bytes && typeof this.typeDefault === \"string\") {\n var buf;\n if (util.base64.test(this.typeDefault))\n util.base64.decode(this.typeDefault, buf = util.newBuffer(util.base64.length(this.typeDefault)), 0);\n else\n util.utf8.write(this.typeDefault, buf = util.newBuffer(util.utf8.length(this.typeDefault)), 0);\n this.typeDefault = buf;\n }\n\n // take special care of maps and repeated fields\n if (this.map)\n this.defaultValue = util.emptyObject;\n else if (this.repeated)\n this.defaultValue = util.emptyArray;\n else\n this.defaultValue = this.typeDefault;\n\n // ensure proper value on prototype\n if (this.parent instanceof Type)\n this.parent.ctor.prototype[this.name] = this.defaultValue;\n\n return ReflectionObject.prototype.resolve.call(this);\n};\n\n/**\n * Decorator function as returned by {@link Field.d} and {@link MapField.d} (TypeScript).\n * @typedef FieldDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} fieldName Field name\n * @returns {undefined}\n */\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"string\"|\"bool\"|\"bytes\"|Object} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @param {T} [defaultValue] Default value\n * @returns {FieldDecorator} Decorator function\n * @template T extends number | number[] | Long | Long[] | string | string[] | boolean | boolean[] | Uint8Array | Uint8Array[] | Buffer | Buffer[]\n */\nField.d = function decorateField(fieldId, fieldType, fieldRule, defaultValue) {\n\n // submessage: decorate the submessage and use its name as the type\n if (typeof fieldType === \"function\")\n fieldType = util.decorateType(fieldType).name;\n\n // enum reference: create a reflected copy of the enum and keep reuseing it\n else if (fieldType && typeof fieldType === \"object\")\n fieldType = util.decorateEnum(fieldType).name;\n\n return function fieldDecorator(prototype, fieldName) {\n util.decorateType(prototype.constructor)\n .add(new Field(fieldName, fieldId, fieldType, fieldRule, { \"default\": defaultValue }));\n };\n};\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {Constructor|string} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @returns {FieldDecorator} Decorator function\n * @template T extends Message\n * @variation 2\n */\n// like Field.d but without a default value\n\n// Sets up cyclic dependencies (called in index-light)\nField._configure = function configure(Type_) {\n Type = Type_;\n};\n","\"use strict\";\nvar protobuf = module.exports = require(\"./index-minimal\");\n\nprotobuf.build = \"light\";\n\n/**\n * A node-style callback as used by {@link load} and {@link Root#load}.\n * @typedef LoadCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Root} [root] Root, if there hasn't been an error\n * @returns {undefined}\n */\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} root Root namespace, defaults to create a new one if omitted.\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n */\nfunction load(filename, root, callback) {\n if (typeof root === \"function\") {\n callback = root;\n root = new protobuf.Root();\n } else if (!root)\n root = new protobuf.Root();\n return root.load(filename, callback);\n}\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and returns a promise.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Promise} Promise\n * @see {@link Root#load}\n * @variation 3\n */\n// function load(filename:string, [root:Root]):Promise\n\nprotobuf.load = load;\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into a common root namespace (node only).\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n * @see {@link Root#loadSync}\n */\nfunction loadSync(filename, root) {\n if (!root)\n root = new protobuf.Root();\n return root.loadSync(filename);\n}\n\nprotobuf.loadSync = loadSync;\n\n// Serialization\nprotobuf.encoder = require(\"./encoder\");\nprotobuf.decoder = require(\"./decoder\");\nprotobuf.verifier = require(\"./verifier\");\nprotobuf.converter = require(\"./converter\");\n\n// Reflection\nprotobuf.ReflectionObject = require(\"./object\");\nprotobuf.Namespace = require(\"./namespace\");\nprotobuf.Root = require(\"./root\");\nprotobuf.Enum = require(\"./enum\");\nprotobuf.Type = require(\"./type\");\nprotobuf.Field = require(\"./field\");\nprotobuf.OneOf = require(\"./oneof\");\nprotobuf.MapField = require(\"./mapfield\");\nprotobuf.Service = require(\"./service\");\nprotobuf.Method = require(\"./method\");\n\n// Runtime\nprotobuf.Message = require(\"./message\");\nprotobuf.wrappers = require(\"./wrappers\");\n\n// Utility\nprotobuf.types = require(\"./types\");\nprotobuf.util = require(\"./util\");\n\n// Set up possibly cyclic reflection dependencies\nprotobuf.ReflectionObject._configure(protobuf.Root);\nprotobuf.Namespace._configure(protobuf.Type, protobuf.Service, protobuf.Enum);\nprotobuf.Root._configure(protobuf.Type);\nprotobuf.Field._configure(protobuf.Type);\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","\"use strict\";\nmodule.exports = MapField;\n\n// extends Field\nvar Field = require(\"./field\");\n((MapField.prototype = Object.create(Field.prototype)).constructor = MapField).className = \"MapField\";\n\nvar types = require(\"./types\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new map field instance.\n * @classdesc Reflected map field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} keyType Key type\n * @param {string} type Value type\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction MapField(name, id, keyType, type, options, comment) {\n Field.call(this, name, id, type, undefined, undefined, options, comment);\n\n /* istanbul ignore if */\n if (!util.isString(keyType))\n throw TypeError(\"keyType must be a string\");\n\n /**\n * Key type.\n * @type {string}\n */\n this.keyType = keyType; // toJSON, marker\n\n /**\n * Resolved key type if not a basic type.\n * @type {ReflectionObject|null}\n */\n this.resolvedKeyType = null;\n\n // Overrides Field#map\n this.map = true;\n}\n\n/**\n * Map field descriptor.\n * @interface IMapField\n * @extends {IField}\n * @property {string} keyType Key type\n */\n\n/**\n * Extension map field descriptor.\n * @interface IExtensionMapField\n * @extends IMapField\n * @property {string} extend Extended type\n */\n\n/**\n * Constructs a map field from a map field descriptor.\n * @param {string} name Field name\n * @param {IMapField} json Map field descriptor\n * @returns {MapField} Created map field\n * @throws {TypeError} If arguments are invalid\n */\nMapField.fromJSON = function fromJSON(name, json) {\n return new MapField(name, json.id, json.keyType, json.type, json.options, json.comment);\n};\n\n/**\n * Converts this map field to a map field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMapField} Map field descriptor\n */\nMapField.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"keyType\" , this.keyType,\n \"type\" , this.type,\n \"id\" , this.id,\n \"extend\" , this.extend,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * @override\n */\nMapField.prototype.resolve = function resolve() {\n if (this.resolved)\n return this;\n\n // Besides a value type, map fields have a key type that may be \"any scalar type except for floating point types and bytes\"\n if (types.mapKey[this.keyType] === undefined)\n throw Error(\"invalid key type: \" + this.keyType);\n\n return Field.prototype.resolve.call(this);\n};\n\n/**\n * Map field decorator (TypeScript).\n * @name MapField.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"} fieldKeyType Field key type\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"|\"bytes\"|Object|Constructor<{}>} fieldValueType Field value type\n * @returns {FieldDecorator} Decorator function\n * @template T extends { [key: string]: number | Long | string | boolean | Uint8Array | Buffer | number[] | Message<{}> }\n */\nMapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) {\n\n // submessage value: decorate the submessage and use its name as the type\n if (typeof fieldValueType === \"function\")\n fieldValueType = util.decorateType(fieldValueType).name;\n\n // enum reference value: create a reflected copy of the enum and keep reuseing it\n else if (fieldValueType && typeof fieldValueType === \"object\")\n fieldValueType = util.decorateEnum(fieldValueType).name;\n\n return function mapFieldDecorator(prototype, fieldName) {\n util.decorateType(prototype.constructor)\n .add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType));\n };\n};\n","\"use strict\";\nmodule.exports = Message;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new message instance.\n * @classdesc Abstract runtime message.\n * @constructor\n * @param {Properties} [properties] Properties to set\n * @template T extends object = object\n */\nfunction Message(properties) {\n // not used internally\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n this[keys[i]] = properties[keys[i]];\n}\n\n/**\n * Reference to the reflected type.\n * @name Message.$type\n * @type {Type}\n * @readonly\n */\n\n/**\n * Reference to the reflected type.\n * @name Message#$type\n * @type {Type}\n * @readonly\n */\n\n/*eslint-disable valid-jsdoc*/\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.} [properties] Properties to set\n * @returns {Message} Message instance\n * @template T extends Message\n * @this Constructor\n */\nMessage.create = function create(properties) {\n return this.$type.create(properties);\n};\n\n/**\n * Encodes a message of this type.\n * @param {T|Object.} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message\n * @this Constructor\n */\nMessage.encode = function encode(message, writer) {\n return this.$type.encode(message, writer);\n};\n\n/**\n * Encodes a message of this type preceeded by its length as a varint.\n * @param {T|Object.} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message\n * @this Constructor\n */\nMessage.encodeDelimited = function encodeDelimited(message, writer) {\n return this.$type.encodeDelimited(message, writer);\n};\n\n/**\n * Decodes a message of this type.\n * @name Message.decode\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message\n * @this Constructor\n */\nMessage.decode = function decode(reader) {\n return this.$type.decode(reader);\n};\n\n/**\n * Decodes a message of this type preceeded by its length as a varint.\n * @name Message.decodeDelimited\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message\n * @this Constructor\n */\nMessage.decodeDelimited = function decodeDelimited(reader) {\n return this.$type.decodeDelimited(reader);\n};\n\n/**\n * Verifies a message of this type.\n * @name Message.verify\n * @function\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\nMessage.verify = function verify(message) {\n return this.$type.verify(message);\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.} object Plain object\n * @returns {T} Message instance\n * @template T extends Message\n * @this Constructor\n */\nMessage.fromObject = function fromObject(object) {\n return this.$type.fromObject(object);\n};\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {T} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n * @template T extends Message\n * @this Constructor\n */\nMessage.toObject = function toObject(message, options) {\n return this.$type.toObject(message, options);\n};\n\n/**\n * Converts this message to JSON.\n * @returns {Object.} JSON object\n */\nMessage.prototype.toJSON = function toJSON() {\n return this.$type.toObject(this, util.toJSONOptions);\n};\n\n/*eslint-enable valid-jsdoc*/","\"use strict\";\nmodule.exports = Method;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Method.prototype = Object.create(ReflectionObject.prototype)).constructor = Method).className = \"Method\";\n\nvar util = require(\"./util\");\n\n/**\n * Constructs a new service method instance.\n * @classdesc Reflected service method.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Method name\n * @param {string|undefined} type Method type, usually `\"rpc\"`\n * @param {string} requestType Request message type\n * @param {string} responseType Response message type\n * @param {boolean|Object.} [requestStream] Whether the request is streamed\n * @param {boolean|Object.} [responseStream] Whether the response is streamed\n * @param {Object.} [options] Declared options\n * @param {string} [comment] The comment for this method\n * @param {Object.} [parsedOptions] Declared options, properly parsed into an object\n */\nfunction Method(name, type, requestType, responseType, requestStream, responseStream, options, comment, parsedOptions) {\n\n /* istanbul ignore next */\n if (util.isObject(requestStream)) {\n options = requestStream;\n requestStream = responseStream = undefined;\n } else if (util.isObject(responseStream)) {\n options = responseStream;\n responseStream = undefined;\n }\n\n /* istanbul ignore if */\n if (!(type === undefined || util.isString(type)))\n throw TypeError(\"type must be a string\");\n\n /* istanbul ignore if */\n if (!util.isString(requestType))\n throw TypeError(\"requestType must be a string\");\n\n /* istanbul ignore if */\n if (!util.isString(responseType))\n throw TypeError(\"responseType must be a string\");\n\n ReflectionObject.call(this, name, options);\n\n /**\n * Method type.\n * @type {string}\n */\n this.type = type || \"rpc\"; // toJSON\n\n /**\n * Request type.\n * @type {string}\n */\n this.requestType = requestType; // toJSON, marker\n\n /**\n * Whether requests are streamed or not.\n * @type {boolean|undefined}\n */\n this.requestStream = requestStream ? true : undefined; // toJSON\n\n /**\n * Response type.\n * @type {string}\n */\n this.responseType = responseType; // toJSON\n\n /**\n * Whether responses are streamed or not.\n * @type {boolean|undefined}\n */\n this.responseStream = responseStream ? true : undefined; // toJSON\n\n /**\n * Resolved request type.\n * @type {Type|null}\n */\n this.resolvedRequestType = null;\n\n /**\n * Resolved response type.\n * @type {Type|null}\n */\n this.resolvedResponseType = null;\n\n /**\n * Comment for this method\n * @type {string|null}\n */\n this.comment = comment;\n\n /**\n * Options properly parsed into an object\n */\n this.parsedOptions = parsedOptions;\n}\n\n/**\n * Method descriptor.\n * @interface IMethod\n * @property {string} [type=\"rpc\"] Method type\n * @property {string} requestType Request type\n * @property {string} responseType Response type\n * @property {boolean} [requestStream=false] Whether requests are streamed\n * @property {boolean} [responseStream=false] Whether responses are streamed\n * @property {Object.} [options] Method options\n * @property {string} comment Method comments\n * @property {Object.} [parsedOptions] Method options properly parsed into an object\n */\n\n/**\n * Constructs a method from a method descriptor.\n * @param {string} name Method name\n * @param {IMethod} json Method descriptor\n * @returns {Method} Created method\n * @throws {TypeError} If arguments are invalid\n */\nMethod.fromJSON = function fromJSON(name, json) {\n return new Method(name, json.type, json.requestType, json.responseType, json.requestStream, json.responseStream, json.options, json.comment, json.parsedOptions);\n};\n\n/**\n * Converts this method to a method descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMethod} Method descriptor\n */\nMethod.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"type\" , this.type !== \"rpc\" && /* istanbul ignore next */ this.type || undefined,\n \"requestType\" , this.requestType,\n \"requestStream\" , this.requestStream,\n \"responseType\" , this.responseType,\n \"responseStream\" , this.responseStream,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined,\n \"parsedOptions\" , this.parsedOptions,\n ]);\n};\n\n/**\n * @override\n */\nMethod.prototype.resolve = function resolve() {\n\n /* istanbul ignore if */\n if (this.resolved)\n return this;\n\n this.resolvedRequestType = this.parent.lookupType(this.requestType);\n this.resolvedResponseType = this.parent.lookupType(this.responseType);\n\n return ReflectionObject.prototype.resolve.call(this);\n};\n","\"use strict\";\nmodule.exports = Namespace;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Namespace.prototype = Object.create(ReflectionObject.prototype)).constructor = Namespace).className = \"Namespace\";\n\nvar Field = require(\"./field\"),\n util = require(\"./util\");\n\nvar Type, // cyclic\n Service,\n Enum;\n\n/**\n * Constructs a new namespace instance.\n * @name Namespace\n * @classdesc Reflected namespace.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.} [options] Declared options\n */\n\n/**\n * Constructs a namespace from JSON.\n * @memberof Namespace\n * @function\n * @param {string} name Namespace name\n * @param {Object.} json JSON object\n * @returns {Namespace} Created namespace\n * @throws {TypeError} If arguments are invalid\n */\nNamespace.fromJSON = function fromJSON(name, json) {\n return new Namespace(name, json.options).addJSON(json.nested);\n};\n\n/**\n * Converts an array of reflection objects to JSON.\n * @memberof Namespace\n * @param {ReflectionObject[]} array Object array\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {Object.|undefined} JSON object or `undefined` when array is empty\n */\nfunction arrayToJSON(array, toJSONOptions) {\n if (!(array && array.length))\n return undefined;\n var obj = {};\n for (var i = 0; i < array.length; ++i)\n obj[array[i].name] = array[i].toJSON(toJSONOptions);\n return obj;\n}\n\nNamespace.arrayToJSON = arrayToJSON;\n\n/**\n * Tests if the specified id is reserved.\n * @param {Array.|undefined} reserved Array of reserved ranges and names\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedId = function isReservedId(reserved, id) {\n if (reserved)\n for (var i = 0; i < reserved.length; ++i)\n if (typeof reserved[i] !== \"string\" && reserved[i][0] <= id && reserved[i][1] > id)\n return true;\n return false;\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {Array.|undefined} reserved Array of reserved ranges and names\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedName = function isReservedName(reserved, name) {\n if (reserved)\n for (var i = 0; i < reserved.length; ++i)\n if (reserved[i] === name)\n return true;\n return false;\n};\n\n/**\n * Not an actual constructor. Use {@link Namespace} instead.\n * @classdesc Base class of all reflection objects containing nested objects. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports NamespaceBase\n * @extends ReflectionObject\n * @abstract\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.} [options] Declared options\n * @see {@link Namespace}\n */\nfunction Namespace(name, options) {\n ReflectionObject.call(this, name, options);\n\n /**\n * Nested objects by name.\n * @type {Object.|undefined}\n */\n this.nested = undefined; // toJSON\n\n /**\n * Cached nested objects as an array.\n * @type {ReflectionObject[]|null}\n * @private\n */\n this._nestedArray = null;\n}\n\nfunction clearCache(namespace) {\n namespace._nestedArray = null;\n return namespace;\n}\n\n/**\n * Nested objects of this namespace as an array for iteration.\n * @name NamespaceBase#nestedArray\n * @type {ReflectionObject[]}\n * @readonly\n */\nObject.defineProperty(Namespace.prototype, \"nestedArray\", {\n get: function() {\n return this._nestedArray || (this._nestedArray = util.toArray(this.nested));\n }\n});\n\n/**\n * Namespace descriptor.\n * @interface INamespace\n * @property {Object.} [options] Namespace options\n * @property {Object.} [nested] Nested object descriptors\n */\n\n/**\n * Any extension field descriptor.\n * @typedef AnyExtensionField\n * @type {IExtensionField|IExtensionMapField}\n */\n\n/**\n * Any nested object descriptor.\n * @typedef AnyNestedObject\n * @type {IEnum|IType|IService|AnyExtensionField|INamespace}\n */\n// ^ BEWARE: VSCode hangs forever when using more than 5 types (that's why AnyExtensionField exists in the first place)\n\n/**\n * Converts this namespace to a namespace descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {INamespace} Namespace descriptor\n */\nNamespace.prototype.toJSON = function toJSON(toJSONOptions) {\n return util.toObject([\n \"options\" , this.options,\n \"nested\" , arrayToJSON(this.nestedArray, toJSONOptions)\n ]);\n};\n\n/**\n * Adds nested objects to this namespace from nested object descriptors.\n * @param {Object.} nestedJson Any nested object descriptors\n * @returns {Namespace} `this`\n */\nNamespace.prototype.addJSON = function addJSON(nestedJson) {\n var ns = this;\n /* istanbul ignore else */\n if (nestedJson) {\n for (var names = Object.keys(nestedJson), i = 0, nested; i < names.length; ++i) {\n nested = nestedJson[names[i]];\n ns.add( // most to least likely\n ( nested.fields !== undefined\n ? Type.fromJSON\n : nested.values !== undefined\n ? Enum.fromJSON\n : nested.methods !== undefined\n ? Service.fromJSON\n : nested.id !== undefined\n ? Field.fromJSON\n : Namespace.fromJSON )(names[i], nested)\n );\n }\n }\n return this;\n};\n\n/**\n * Gets the nested object of the specified name.\n * @param {string} name Nested object name\n * @returns {ReflectionObject|null} The reflection object or `null` if it doesn't exist\n */\nNamespace.prototype.get = function get(name) {\n return this.nested && this.nested[name]\n || null;\n};\n\n/**\n * Gets the values of the nested {@link Enum|enum} of the specified name.\n * This methods differs from {@link Namespace#get|get} in that it returns an enum's values directly and throws instead of returning `null`.\n * @param {string} name Nested enum name\n * @returns {Object.} Enum values\n * @throws {Error} If there is no such enum\n */\nNamespace.prototype.getEnum = function getEnum(name) {\n if (this.nested && this.nested[name] instanceof Enum)\n return this.nested[name].values;\n throw Error(\"no such enum: \" + name);\n};\n\n/**\n * Adds a nested object to this namespace.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name\n */\nNamespace.prototype.add = function add(object) {\n\n if (!(object instanceof Field && object.extend !== undefined || object instanceof Type || object instanceof Enum || object instanceof Service || object instanceof Namespace))\n throw TypeError(\"object must be a valid nested object\");\n\n if (!this.nested)\n this.nested = {};\n else {\n var prev = this.get(object.name);\n if (prev) {\n if (prev instanceof Namespace && object instanceof Namespace && !(prev instanceof Type || prev instanceof Service)) {\n // replace plain namespace but keep existing nested elements and options\n var nested = prev.nestedArray;\n for (var i = 0; i < nested.length; ++i)\n object.add(nested[i]);\n this.remove(prev);\n if (!this.nested)\n this.nested = {};\n object.setOptions(prev.options, true);\n\n } else\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n }\n }\n this.nested[object.name] = object;\n object.onAdd(this);\n return clearCache(this);\n};\n\n/**\n * Removes a nested object from this namespace.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this namespace\n */\nNamespace.prototype.remove = function remove(object) {\n\n if (!(object instanceof ReflectionObject))\n throw TypeError(\"object must be a ReflectionObject\");\n if (object.parent !== this)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.nested[object.name];\n if (!Object.keys(this.nested).length)\n this.nested = undefined;\n\n object.onRemove(this);\n return clearCache(this);\n};\n\n/**\n * Defines additial namespaces within this one if not yet existing.\n * @param {string|string[]} path Path to create\n * @param {*} [json] Nested types to create from JSON\n * @returns {Namespace} Pointer to the last namespace created or `this` if path is empty\n */\nNamespace.prototype.define = function define(path, json) {\n\n if (util.isString(path))\n path = path.split(\".\");\n else if (!Array.isArray(path))\n throw TypeError(\"illegal path\");\n if (path && path.length && path[0] === \"\")\n throw Error(\"path must be relative\");\n\n var ptr = this;\n while (path.length > 0) {\n var part = path.shift();\n if (ptr.nested && ptr.nested[part]) {\n ptr = ptr.nested[part];\n if (!(ptr instanceof Namespace))\n throw Error(\"path conflicts with non-namespace objects\");\n } else\n ptr.add(ptr = new Namespace(part));\n }\n if (json)\n ptr.addJSON(json);\n return ptr;\n};\n\n/**\n * Resolves this namespace's and all its nested objects' type references. Useful to validate a reflection tree, but comes at a cost.\n * @returns {Namespace} `this`\n */\nNamespace.prototype.resolveAll = function resolveAll() {\n var nested = this.nestedArray, i = 0;\n while (i < nested.length)\n if (nested[i] instanceof Namespace)\n nested[i++].resolveAll();\n else\n nested[i++].resolve();\n return this.resolve();\n};\n\n/**\n * Recursively looks up the reflection object matching the specified path in the scope of this namespace.\n * @param {string|string[]} path Path to look up\n * @param {*|Array.<*>} filterTypes Filter types, any combination of the constructors of `protobuf.Type`, `protobuf.Enum`, `protobuf.Service` etc.\n * @param {boolean} [parentAlreadyChecked=false] If known, whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n */\nNamespace.prototype.lookup = function lookup(path, filterTypes, parentAlreadyChecked) {\n\n /* istanbul ignore next */\n if (typeof filterTypes === \"boolean\") {\n parentAlreadyChecked = filterTypes;\n filterTypes = undefined;\n } else if (filterTypes && !Array.isArray(filterTypes))\n filterTypes = [ filterTypes ];\n\n if (util.isString(path) && path.length) {\n if (path === \".\")\n return this.root;\n path = path.split(\".\");\n } else if (!path.length)\n return this;\n\n // Start at root if path is absolute\n if (path[0] === \"\")\n return this.root.lookup(path.slice(1), filterTypes);\n\n // Test if the first part matches any nested object, and if so, traverse if path contains more\n var found = this.get(path[0]);\n if (found) {\n if (path.length === 1) {\n if (!filterTypes || filterTypes.indexOf(found.constructor) > -1)\n return found;\n } else if (found instanceof Namespace && (found = found.lookup(path.slice(1), filterTypes, true)))\n return found;\n\n // Otherwise try each nested namespace\n } else\n for (var i = 0; i < this.nestedArray.length; ++i)\n if (this._nestedArray[i] instanceof Namespace && (found = this._nestedArray[i].lookup(path, filterTypes, true)))\n return found;\n\n // If there hasn't been a match, try again at the parent\n if (this.parent === null || parentAlreadyChecked)\n return null;\n return this.parent.lookup(path, filterTypes);\n};\n\n/**\n * Looks up the reflection object at the specified path, relative to this namespace.\n * @name NamespaceBase#lookup\n * @function\n * @param {string|string[]} path Path to look up\n * @param {boolean} [parentAlreadyChecked=false] Whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n * @variation 2\n */\n// lookup(path: string, [parentAlreadyChecked: boolean])\n\n/**\n * Looks up the {@link Type|type} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type\n * @throws {Error} If `path` does not point to a type\n */\nNamespace.prototype.lookupType = function lookupType(path) {\n var found = this.lookup(path, [ Type ]);\n if (!found)\n throw Error(\"no such type: \" + path);\n return found;\n};\n\n/**\n * Looks up the values of the {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Enum} Looked up enum\n * @throws {Error} If `path` does not point to an enum\n */\nNamespace.prototype.lookupEnum = function lookupEnum(path) {\n var found = this.lookup(path, [ Enum ]);\n if (!found)\n throw Error(\"no such Enum '\" + path + \"' in \" + this);\n return found;\n};\n\n/**\n * Looks up the {@link Type|type} or {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type or enum\n * @throws {Error} If `path` does not point to a type or enum\n */\nNamespace.prototype.lookupTypeOrEnum = function lookupTypeOrEnum(path) {\n var found = this.lookup(path, [ Type, Enum ]);\n if (!found)\n throw Error(\"no such Type or Enum '\" + path + \"' in \" + this);\n return found;\n};\n\n/**\n * Looks up the {@link Service|service} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Service} Looked up service\n * @throws {Error} If `path` does not point to a service\n */\nNamespace.prototype.lookupService = function lookupService(path) {\n var found = this.lookup(path, [ Service ]);\n if (!found)\n throw Error(\"no such Service '\" + path + \"' in \" + this);\n return found;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nNamespace._configure = function(Type_, Service_, Enum_) {\n Type = Type_;\n Service = Service_;\n Enum = Enum_;\n};\n","\"use strict\";\nmodule.exports = ReflectionObject;\n\nReflectionObject.className = \"ReflectionObject\";\n\nvar util = require(\"./util\");\n\nvar Root; // cyclic\n\n/**\n * Constructs a new reflection object instance.\n * @classdesc Base class of all reflection objects.\n * @constructor\n * @param {string} name Object name\n * @param {Object.} [options] Declared options\n * @abstract\n */\nfunction ReflectionObject(name, options) {\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n if (options && !util.isObject(options))\n throw TypeError(\"options must be an object\");\n\n /**\n * Options.\n * @type {Object.|undefined}\n */\n this.options = options; // toJSON\n\n /**\n * Parsed Options.\n * @type {Array.>|undefined}\n */\n this.parsedOptions = null;\n\n /**\n * Unique name within its namespace.\n * @type {string}\n */\n this.name = name;\n\n /**\n * Parent namespace.\n * @type {Namespace|null}\n */\n this.parent = null;\n\n /**\n * Whether already resolved or not.\n * @type {boolean}\n */\n this.resolved = false;\n\n /**\n * Comment text, if any.\n * @type {string|null}\n */\n this.comment = null;\n\n /**\n * Defining file name.\n * @type {string|null}\n */\n this.filename = null;\n}\n\nObject.defineProperties(ReflectionObject.prototype, {\n\n /**\n * Reference to the root namespace.\n * @name ReflectionObject#root\n * @type {Root}\n * @readonly\n */\n root: {\n get: function() {\n var ptr = this;\n while (ptr.parent !== null)\n ptr = ptr.parent;\n return ptr;\n }\n },\n\n /**\n * Full name including leading dot.\n * @name ReflectionObject#fullName\n * @type {string}\n * @readonly\n */\n fullName: {\n get: function() {\n var path = [ this.name ],\n ptr = this.parent;\n while (ptr) {\n path.unshift(ptr.name);\n ptr = ptr.parent;\n }\n return path.join(\".\");\n }\n }\n});\n\n/**\n * Converts this reflection object to its descriptor representation.\n * @returns {Object.} Descriptor\n * @abstract\n */\nReflectionObject.prototype.toJSON = /* istanbul ignore next */ function toJSON() {\n throw Error(); // not implemented, shouldn't happen\n};\n\n/**\n * Called when this object is added to a parent.\n * @param {ReflectionObject} parent Parent added to\n * @returns {undefined}\n */\nReflectionObject.prototype.onAdd = function onAdd(parent) {\n if (this.parent && this.parent !== parent)\n this.parent.remove(this);\n this.parent = parent;\n this.resolved = false;\n var root = parent.root;\n if (root instanceof Root)\n root._handleAdd(this);\n};\n\n/**\n * Called when this object is removed from a parent.\n * @param {ReflectionObject} parent Parent removed from\n * @returns {undefined}\n */\nReflectionObject.prototype.onRemove = function onRemove(parent) {\n var root = parent.root;\n if (root instanceof Root)\n root._handleRemove(this);\n this.parent = null;\n this.resolved = false;\n};\n\n/**\n * Resolves this objects type references.\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.resolve = function resolve() {\n if (this.resolved)\n return this;\n if (this.root instanceof Root)\n this.resolved = true; // only if part of a root\n return this;\n};\n\n/**\n * Gets an option value.\n * @param {string} name Option name\n * @returns {*} Option value or `undefined` if not set\n */\nReflectionObject.prototype.getOption = function getOption(name) {\n if (this.options)\n return this.options[name];\n return undefined;\n};\n\n/**\n * Sets an option.\n * @param {string} name Option name\n * @param {*} value Option value\n * @param {boolean} [ifNotSet] Sets the option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOption = function setOption(name, value, ifNotSet) {\n if (!ifNotSet || !this.options || this.options[name] === undefined)\n (this.options || (this.options = {}))[name] = value;\n return this;\n};\n\n/**\n * Sets a parsed option.\n * @param {string} name parsed Option name\n * @param {*} value Option value\n * @param {string} propName dot '.' delimited full path of property within the option to set. if undefined\\empty, will add a new option with that value\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setParsedOption = function setParsedOption(name, value, propName) {\n if (!this.parsedOptions) {\n this.parsedOptions = [];\n }\n var parsedOptions = this.parsedOptions;\n if (propName) {\n // If setting a sub property of an option then try to merge it\n // with an existing option\n var opt = parsedOptions.find(function (opt) {\n return Object.prototype.hasOwnProperty.call(opt, name);\n });\n if (opt) {\n // If we found an existing option - just merge the property value\n var newValue = opt[name];\n util.setProperty(newValue, propName, value);\n } else {\n // otherwise, create a new option, set it's property and add it to the list\n opt = {};\n opt[name] = util.setProperty({}, propName, value);\n parsedOptions.push(opt);\n }\n } else {\n // Always create a new option when setting the value of the option itself\n var newOpt = {};\n newOpt[name] = value;\n parsedOptions.push(newOpt);\n }\n return this;\n};\n\n/**\n * Sets multiple options.\n * @param {Object.} options Options to set\n * @param {boolean} [ifNotSet] Sets an option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOptions = function setOptions(options, ifNotSet) {\n if (options)\n for (var keys = Object.keys(options), i = 0; i < keys.length; ++i)\n this.setOption(keys[i], options[keys[i]], ifNotSet);\n return this;\n};\n\n/**\n * Converts this instance to its string representation.\n * @returns {string} Class name[, space, full name]\n */\nReflectionObject.prototype.toString = function toString() {\n var className = this.constructor.className,\n fullName = this.fullName;\n if (fullName.length)\n return className + \" \" + fullName;\n return className;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nReflectionObject._configure = function(Root_) {\n Root = Root_;\n};\n","\"use strict\";\nmodule.exports = OneOf;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((OneOf.prototype = Object.create(ReflectionObject.prototype)).constructor = OneOf).className = \"OneOf\";\n\nvar Field = require(\"./field\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new oneof instance.\n * @classdesc Reflected oneof.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Oneof name\n * @param {string[]|Object.} [fieldNames] Field names\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction OneOf(name, fieldNames, options, comment) {\n if (!Array.isArray(fieldNames)) {\n options = fieldNames;\n fieldNames = undefined;\n }\n ReflectionObject.call(this, name, options);\n\n /* istanbul ignore if */\n if (!(fieldNames === undefined || Array.isArray(fieldNames)))\n throw TypeError(\"fieldNames must be an Array\");\n\n /**\n * Field names that belong to this oneof.\n * @type {string[]}\n */\n this.oneof = fieldNames || []; // toJSON, marker\n\n /**\n * Fields that belong to this oneof as an array for iteration.\n * @type {Field[]}\n * @readonly\n */\n this.fieldsArray = []; // declared readonly for conformance, possibly not yet added to parent\n\n /**\n * Comment for this field.\n * @type {string|null}\n */\n this.comment = comment;\n}\n\n/**\n * Oneof descriptor.\n * @interface IOneOf\n * @property {Array.} oneof Oneof field names\n * @property {Object.} [options] Oneof options\n */\n\n/**\n * Constructs a oneof from a oneof descriptor.\n * @param {string} name Oneof name\n * @param {IOneOf} json Oneof descriptor\n * @returns {OneOf} Created oneof\n * @throws {TypeError} If arguments are invalid\n */\nOneOf.fromJSON = function fromJSON(name, json) {\n return new OneOf(name, json.oneof, json.options, json.comment);\n};\n\n/**\n * Converts this oneof to a oneof descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IOneOf} Oneof descriptor\n */\nOneOf.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , this.options,\n \"oneof\" , this.oneof,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Adds the fields of the specified oneof to the parent if not already done so.\n * @param {OneOf} oneof The oneof\n * @returns {undefined}\n * @inner\n * @ignore\n */\nfunction addFieldsToParent(oneof) {\n if (oneof.parent)\n for (var i = 0; i < oneof.fieldsArray.length; ++i)\n if (!oneof.fieldsArray[i].parent)\n oneof.parent.add(oneof.fieldsArray[i]);\n}\n\n/**\n * Adds a field to this oneof and removes it from its current parent, if any.\n * @param {Field} field Field to add\n * @returns {OneOf} `this`\n */\nOneOf.prototype.add = function add(field) {\n\n /* istanbul ignore if */\n if (!(field instanceof Field))\n throw TypeError(\"field must be a Field\");\n\n if (field.parent && field.parent !== this.parent)\n field.parent.remove(field);\n this.oneof.push(field.name);\n this.fieldsArray.push(field);\n field.partOf = this; // field.parent remains null\n addFieldsToParent(this);\n return this;\n};\n\n/**\n * Removes a field from this oneof and puts it back to the oneof's parent.\n * @param {Field} field Field to remove\n * @returns {OneOf} `this`\n */\nOneOf.prototype.remove = function remove(field) {\n\n /* istanbul ignore if */\n if (!(field instanceof Field))\n throw TypeError(\"field must be a Field\");\n\n var index = this.fieldsArray.indexOf(field);\n\n /* istanbul ignore if */\n if (index < 0)\n throw Error(field + \" is not a member of \" + this);\n\n this.fieldsArray.splice(index, 1);\n index = this.oneof.indexOf(field.name);\n\n /* istanbul ignore else */\n if (index > -1) // theoretical\n this.oneof.splice(index, 1);\n\n field.partOf = null;\n return this;\n};\n\n/**\n * @override\n */\nOneOf.prototype.onAdd = function onAdd(parent) {\n ReflectionObject.prototype.onAdd.call(this, parent);\n var self = this;\n // Collect present fields\n for (var i = 0; i < this.oneof.length; ++i) {\n var field = parent.get(this.oneof[i]);\n if (field && !field.partOf) {\n field.partOf = self;\n self.fieldsArray.push(field);\n }\n }\n // Add not yet present fields\n addFieldsToParent(this);\n};\n\n/**\n * @override\n */\nOneOf.prototype.onRemove = function onRemove(parent) {\n for (var i = 0, field; i < this.fieldsArray.length; ++i)\n if ((field = this.fieldsArray[i]).parent)\n field.parent.remove(field);\n ReflectionObject.prototype.onRemove.call(this, parent);\n};\n\n/**\n * Decorator function as returned by {@link OneOf.d} (TypeScript).\n * @typedef OneOfDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} oneofName OneOf name\n * @returns {undefined}\n */\n\n/**\n * OneOf decorator (TypeScript).\n * @function\n * @param {...string} fieldNames Field names\n * @returns {OneOfDecorator} Decorator function\n * @template T extends string\n */\nOneOf.d = function decorateOneOf() {\n var fieldNames = new Array(arguments.length),\n index = 0;\n while (index < arguments.length)\n fieldNames[index] = arguments[index++];\n return function oneOfDecorator(prototype, oneofName) {\n util.decorateType(prototype.constructor)\n .add(new OneOf(oneofName, fieldNames));\n Object.defineProperty(prototype, oneofName, {\n get: util.oneOfGetter(fieldNames),\n set: util.oneOfSetter(fieldNames)\n });\n };\n};\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Root;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Root.prototype = Object.create(Namespace.prototype)).constructor = Root).className = \"Root\";\n\nvar Field = require(\"./field\"),\n Enum = require(\"./enum\"),\n OneOf = require(\"./oneof\"),\n util = require(\"./util\");\n\nvar Type, // cyclic\n parse, // might be excluded\n common; // \"\n\n/**\n * Constructs a new root namespace instance.\n * @classdesc Root namespace wrapping all types, enums, services, sub-namespaces etc. that belong together.\n * @extends NamespaceBase\n * @constructor\n * @param {Object.} [options] Top level options\n */\nfunction Root(options) {\n Namespace.call(this, \"\", options);\n\n /**\n * Deferred extension fields.\n * @type {Field[]}\n */\n this.deferred = [];\n\n /**\n * Resolved file names of loaded files.\n * @type {string[]}\n */\n this.files = [];\n}\n\n/**\n * Loads a namespace descriptor into a root namespace.\n * @param {INamespace} json Nameespace descriptor\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted\n * @returns {Root} Root namespace\n */\nRoot.fromJSON = function fromJSON(json, root) {\n if (!root)\n root = new Root();\n if (json.options)\n root.setOptions(json.options);\n return root.addJSON(json.nested);\n};\n\n/**\n * Resolves the path of an imported file, relative to the importing origin.\n * This method exists so you can override it with your own logic in case your imports are scattered over multiple directories.\n * @function\n * @param {string} origin The file name of the importing file\n * @param {string} target The file name being imported\n * @returns {string|null} Resolved path to `target` or `null` to skip the file\n */\nRoot.prototype.resolvePath = util.path.resolve;\n\n/**\n * Fetch content from file path or url\n * This method exists so you can override it with your own logic.\n * @function\n * @param {string} path File path or url\n * @param {FetchCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.fetch = util.fetch;\n\n// A symbol-like function to safely signal synchronous loading\n/* istanbul ignore next */\nfunction SYNC() {} // eslint-disable-line no-empty-function\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} options Parse options\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.load = function load(filename, options, callback) {\n if (typeof options === \"function\") {\n callback = options;\n options = undefined;\n }\n var self = this;\n if (!callback)\n return util.asPromise(load, self, filename, options);\n\n var sync = callback === SYNC; // undocumented\n\n // Finishes loading by calling the callback (exactly once)\n function finish(err, root) {\n /* istanbul ignore if */\n if (!callback)\n return;\n var cb = callback;\n callback = null;\n if (sync)\n throw err;\n cb(err, root);\n }\n\n // Bundled definition existence checking\n function getBundledFileName(filename) {\n var idx = filename.lastIndexOf(\"google/protobuf/\");\n if (idx > -1) {\n var altname = filename.substring(idx);\n if (altname in common) return altname;\n }\n return null;\n }\n\n // Processes a single file\n function process(filename, source) {\n try {\n if (util.isString(source) && source.charAt(0) === \"{\")\n source = JSON.parse(source);\n if (!util.isString(source))\n self.setOptions(source.options).addJSON(source.nested);\n else {\n parse.filename = filename;\n var parsed = parse(source, self, options),\n resolved,\n i = 0;\n if (parsed.imports)\n for (; i < parsed.imports.length; ++i)\n if (resolved = getBundledFileName(parsed.imports[i]) || self.resolvePath(filename, parsed.imports[i]))\n fetch(resolved);\n if (parsed.weakImports)\n for (i = 0; i < parsed.weakImports.length; ++i)\n if (resolved = getBundledFileName(parsed.weakImports[i]) || self.resolvePath(filename, parsed.weakImports[i]))\n fetch(resolved, true);\n }\n } catch (err) {\n finish(err);\n }\n if (!sync && !queued)\n finish(null, self); // only once anyway\n }\n\n // Fetches a single file\n function fetch(filename, weak) {\n\n // Skip if already loaded / attempted\n if (self.files.indexOf(filename) > -1)\n return;\n self.files.push(filename);\n\n // Shortcut bundled definitions\n if (filename in common) {\n if (sync)\n process(filename, common[filename]);\n else {\n ++queued;\n setTimeout(function() {\n --queued;\n process(filename, common[filename]);\n });\n }\n return;\n }\n\n // Otherwise fetch from disk or network\n if (sync) {\n var source;\n try {\n source = util.fs.readFileSync(filename).toString(\"utf8\");\n } catch (err) {\n if (!weak)\n finish(err);\n return;\n }\n process(filename, source);\n } else {\n ++queued;\n self.fetch(filename, function(err, source) {\n --queued;\n /* istanbul ignore if */\n if (!callback)\n return; // terminated meanwhile\n if (err) {\n /* istanbul ignore else */\n if (!weak)\n finish(err);\n else if (!queued) // can't be covered reliably\n finish(null, self);\n return;\n }\n process(filename, source);\n });\n }\n }\n var queued = 0;\n\n // Assembling the root namespace doesn't require working type\n // references anymore, so we can load everything in parallel\n if (util.isString(filename))\n filename = [ filename ];\n for (var i = 0, resolved; i < filename.length; ++i)\n if (resolved = self.resolvePath(\"\", filename[i]))\n fetch(resolved);\n\n if (sync)\n return self;\n if (!queued)\n finish(null, self);\n return undefined;\n};\n// function load(filename:string, options:IParseOptions, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and returns a promise.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Promise} Promise\n * @variation 3\n */\n// function load(filename:string, [options:IParseOptions]):Promise\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into this root namespace (node only).\n * @function Root#loadSync\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n */\nRoot.prototype.loadSync = function loadSync(filename, options) {\n if (!util.isNode)\n throw Error(\"not supported\");\n return this.load(filename, options, SYNC);\n};\n\n/**\n * @override\n */\nRoot.prototype.resolveAll = function resolveAll() {\n if (this.deferred.length)\n throw Error(\"unresolvable extensions: \" + this.deferred.map(function(field) {\n return \"'extend \" + field.extend + \"' in \" + field.parent.fullName;\n }).join(\", \"));\n return Namespace.prototype.resolveAll.call(this);\n};\n\n// only uppercased (and thus conflict-free) children are exposed, see below\nvar exposeRe = /^[A-Z]/;\n\n/**\n * Handles a deferred declaring extension field by creating a sister field to represent it within its extended type.\n * @param {Root} root Root instance\n * @param {Field} field Declaring extension field witin the declaring type\n * @returns {boolean} `true` if successfully added to the extended type, `false` otherwise\n * @inner\n * @ignore\n */\nfunction tryHandleExtension(root, field) {\n var extendedType = field.parent.lookup(field.extend);\n if (extendedType) {\n var sisterField = new Field(field.fullName, field.id, field.type, field.rule, undefined, field.options);\n sisterField.declaringField = field;\n field.extensionField = sisterField;\n extendedType.add(sisterField);\n return true;\n }\n return false;\n}\n\n/**\n * Called when any object is added to this root or its sub-namespaces.\n * @param {ReflectionObject} object Object added\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleAdd = function _handleAdd(object) {\n if (object instanceof Field) {\n\n if (/* an extension field (implies not part of a oneof) */ object.extend !== undefined && /* not already handled */ !object.extensionField)\n if (!tryHandleExtension(this, object))\n this.deferred.push(object);\n\n } else if (object instanceof Enum) {\n\n if (exposeRe.test(object.name))\n object.parent[object.name] = object.values; // expose enum values as property of its parent\n\n } else if (!(object instanceof OneOf)) /* everything else is a namespace */ {\n\n if (object instanceof Type) // Try to handle any deferred extensions\n for (var i = 0; i < this.deferred.length;)\n if (tryHandleExtension(this, this.deferred[i]))\n this.deferred.splice(i, 1);\n else\n ++i;\n for (var j = 0; j < /* initializes */ object.nestedArray.length; ++j) // recurse into the namespace\n this._handleAdd(object._nestedArray[j]);\n if (exposeRe.test(object.name))\n object.parent[object.name] = object; // expose namespace as property of its parent\n }\n\n // The above also adds uppercased (and thus conflict-free) nested types, services and enums as\n // properties of namespaces just like static code does. This allows using a .d.ts generated for\n // a static module with reflection-based solutions where the condition is met.\n};\n\n/**\n * Called when any object is removed from this root or its sub-namespaces.\n * @param {ReflectionObject} object Object removed\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleRemove = function _handleRemove(object) {\n if (object instanceof Field) {\n\n if (/* an extension field */ object.extend !== undefined) {\n if (/* already handled */ object.extensionField) { // remove its sister field\n object.extensionField.parent.remove(object.extensionField);\n object.extensionField = null;\n } else { // cancel the extension\n var index = this.deferred.indexOf(object);\n /* istanbul ignore else */\n if (index > -1)\n this.deferred.splice(index, 1);\n }\n }\n\n } else if (object instanceof Enum) {\n\n if (exposeRe.test(object.name))\n delete object.parent[object.name]; // unexpose enum values\n\n } else if (object instanceof Namespace) {\n\n for (var i = 0; i < /* initializes */ object.nestedArray.length; ++i) // recurse into the namespace\n this._handleRemove(object._nestedArray[i]);\n\n if (exposeRe.test(object.name))\n delete object.parent[object.name]; // unexpose namespaces\n\n }\n};\n\n// Sets up cyclic dependencies (called in index-light)\nRoot._configure = function(Type_, parse_, common_) {\n Type = Type_;\n parse = parse_;\n common = common_;\n};\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available accross modules.\n * @name roots\n * @type {Object.}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message\n * @template TRes extends Message\n * @type {function}\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod} method Reflected or static method\n * @param {Constructor} requestCtor Request constructor\n * @param {Constructor} responseCtor Response constructor\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message\n * @template TRes extends Message\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\nmodule.exports = Service;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Service.prototype = Object.create(Namespace.prototype)).constructor = Service).className = \"Service\";\n\nvar Method = require(\"./method\"),\n util = require(\"./util\"),\n rpc = require(\"./rpc\");\n\n/**\n * Constructs a new service instance.\n * @classdesc Reflected service.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Service name\n * @param {Object.} [options] Service options\n * @throws {TypeError} If arguments are invalid\n */\nfunction Service(name, options) {\n Namespace.call(this, name, options);\n\n /**\n * Service methods.\n * @type {Object.}\n */\n this.methods = {}; // toJSON, marker\n\n /**\n * Cached methods as an array.\n * @type {Method[]|null}\n * @private\n */\n this._methodsArray = null;\n}\n\n/**\n * Service descriptor.\n * @interface IService\n * @extends INamespace\n * @property {Object.} methods Method descriptors\n */\n\n/**\n * Constructs a service from a service descriptor.\n * @param {string} name Service name\n * @param {IService} json Service descriptor\n * @returns {Service} Created service\n * @throws {TypeError} If arguments are invalid\n */\nService.fromJSON = function fromJSON(name, json) {\n var service = new Service(name, json.options);\n /* istanbul ignore else */\n if (json.methods)\n for (var names = Object.keys(json.methods), i = 0; i < names.length; ++i)\n service.add(Method.fromJSON(names[i], json.methods[names[i]]));\n if (json.nested)\n service.addJSON(json.nested);\n service.comment = json.comment;\n return service;\n};\n\n/**\n * Converts this service to a service descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IService} Service descriptor\n */\nService.prototype.toJSON = function toJSON(toJSONOptions) {\n var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , inherited && inherited.options || undefined,\n \"methods\" , Namespace.arrayToJSON(this.methodsArray, toJSONOptions) || /* istanbul ignore next */ {},\n \"nested\" , inherited && inherited.nested || undefined,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Methods of this service as an array for iteration.\n * @name Service#methodsArray\n * @type {Method[]}\n * @readonly\n */\nObject.defineProperty(Service.prototype, \"methodsArray\", {\n get: function() {\n return this._methodsArray || (this._methodsArray = util.toArray(this.methods));\n }\n});\n\nfunction clearCache(service) {\n service._methodsArray = null;\n return service;\n}\n\n/**\n * @override\n */\nService.prototype.get = function get(name) {\n return this.methods[name]\n || Namespace.prototype.get.call(this, name);\n};\n\n/**\n * @override\n */\nService.prototype.resolveAll = function resolveAll() {\n var methods = this.methodsArray;\n for (var i = 0; i < methods.length; ++i)\n methods[i].resolve();\n return Namespace.prototype.resolve.call(this);\n};\n\n/**\n * @override\n */\nService.prototype.add = function add(object) {\n\n /* istanbul ignore if */\n if (this.get(object.name))\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n if (object instanceof Method) {\n this.methods[object.name] = object;\n object.parent = this;\n return clearCache(this);\n }\n return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * @override\n */\nService.prototype.remove = function remove(object) {\n if (object instanceof Method) {\n\n /* istanbul ignore if */\n if (this.methods[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.methods[object.name];\n object.parent = null;\n return clearCache(this);\n }\n return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Creates a runtime service using the specified rpc implementation.\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n * @returns {rpc.Service} RPC service. Useful where requests and/or responses are streamed.\n */\nService.prototype.create = function create(rpcImpl, requestDelimited, responseDelimited) {\n var rpcService = new rpc.Service(rpcImpl, requestDelimited, responseDelimited);\n for (var i = 0, method; i < /* initializes */ this.methodsArray.length; ++i) {\n var methodName = util.lcFirst((method = this._methodsArray[i]).resolve().name).replace(/[^$\\w_]/g, \"\");\n rpcService[methodName] = util.codegen([\"r\",\"c\"], util.isReserved(methodName) ? methodName + \"_\" : methodName)(\"return this.rpcCall(m,q,s,r,c)\")({\n m: method,\n q: method.resolvedRequestType.ctor,\n s: method.resolvedResponseType.ctor\n });\n }\n return rpcService;\n};\n","\"use strict\";\nmodule.exports = Type;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Type.prototype = Object.create(Namespace.prototype)).constructor = Type).className = \"Type\";\n\nvar Enum = require(\"./enum\"),\n OneOf = require(\"./oneof\"),\n Field = require(\"./field\"),\n MapField = require(\"./mapfield\"),\n Service = require(\"./service\"),\n Message = require(\"./message\"),\n Reader = require(\"./reader\"),\n Writer = require(\"./writer\"),\n util = require(\"./util\"),\n encoder = require(\"./encoder\"),\n decoder = require(\"./decoder\"),\n verifier = require(\"./verifier\"),\n converter = require(\"./converter\"),\n wrappers = require(\"./wrappers\");\n\n/**\n * Constructs a new reflected message type instance.\n * @classdesc Reflected message type.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Message name\n * @param {Object.} [options] Declared options\n */\nfunction Type(name, options) {\n Namespace.call(this, name, options);\n\n /**\n * Message fields.\n * @type {Object.}\n */\n this.fields = {}; // toJSON, marker\n\n /**\n * Oneofs declared within this namespace, if any.\n * @type {Object.}\n */\n this.oneofs = undefined; // toJSON\n\n /**\n * Extension ranges, if any.\n * @type {number[][]}\n */\n this.extensions = undefined; // toJSON\n\n /**\n * Reserved ranges, if any.\n * @type {Array.}\n */\n this.reserved = undefined; // toJSON\n\n /*?\n * Whether this type is a legacy group.\n * @type {boolean|undefined}\n */\n this.group = undefined; // toJSON\n\n /**\n * Cached fields by id.\n * @type {Object.|null}\n * @private\n */\n this._fieldsById = null;\n\n /**\n * Cached fields as an array.\n * @type {Field[]|null}\n * @private\n */\n this._fieldsArray = null;\n\n /**\n * Cached oneofs as an array.\n * @type {OneOf[]|null}\n * @private\n */\n this._oneofsArray = null;\n\n /**\n * Cached constructor.\n * @type {Constructor<{}>}\n * @private\n */\n this._ctor = null;\n}\n\nObject.defineProperties(Type.prototype, {\n\n /**\n * Message fields by id.\n * @name Type#fieldsById\n * @type {Object.}\n * @readonly\n */\n fieldsById: {\n get: function() {\n\n /* istanbul ignore if */\n if (this._fieldsById)\n return this._fieldsById;\n\n this._fieldsById = {};\n for (var names = Object.keys(this.fields), i = 0; i < names.length; ++i) {\n var field = this.fields[names[i]],\n id = field.id;\n\n /* istanbul ignore if */\n if (this._fieldsById[id])\n throw Error(\"duplicate id \" + id + \" in \" + this);\n\n this._fieldsById[id] = field;\n }\n return this._fieldsById;\n }\n },\n\n /**\n * Fields of this message as an array for iteration.\n * @name Type#fieldsArray\n * @type {Field[]}\n * @readonly\n */\n fieldsArray: {\n get: function() {\n return this._fieldsArray || (this._fieldsArray = util.toArray(this.fields));\n }\n },\n\n /**\n * Oneofs of this message as an array for iteration.\n * @name Type#oneofsArray\n * @type {OneOf[]}\n * @readonly\n */\n oneofsArray: {\n get: function() {\n return this._oneofsArray || (this._oneofsArray = util.toArray(this.oneofs));\n }\n },\n\n /**\n * The registered constructor, if any registered, otherwise a generic constructor.\n * Assigning a function replaces the internal constructor. If the function does not extend {@link Message} yet, its prototype will be setup accordingly and static methods will be populated. If it already extends {@link Message}, it will just replace the internal constructor.\n * @name Type#ctor\n * @type {Constructor<{}>}\n */\n ctor: {\n get: function() {\n return this._ctor || (this.ctor = Type.generateConstructor(this)());\n },\n set: function(ctor) {\n\n // Ensure proper prototype\n var prototype = ctor.prototype;\n if (!(prototype instanceof Message)) {\n (ctor.prototype = new Message()).constructor = ctor;\n util.merge(ctor.prototype, prototype);\n }\n\n // Classes and messages reference their reflected type\n ctor.$type = ctor.prototype.$type = this;\n\n // Mix in static methods\n util.merge(ctor, Message, true);\n\n this._ctor = ctor;\n\n // Messages have non-enumerable default values on their prototype\n var i = 0;\n for (; i < /* initializes */ this.fieldsArray.length; ++i)\n this._fieldsArray[i].resolve(); // ensures a proper value\n\n // Messages have non-enumerable getters and setters for each virtual oneof field\n var ctorProperties = {};\n for (i = 0; i < /* initializes */ this.oneofsArray.length; ++i)\n ctorProperties[this._oneofsArray[i].resolve().name] = {\n get: util.oneOfGetter(this._oneofsArray[i].oneof),\n set: util.oneOfSetter(this._oneofsArray[i].oneof)\n };\n if (i)\n Object.defineProperties(ctor.prototype, ctorProperties);\n }\n }\n});\n\n/**\n * Generates a constructor function for the specified type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nType.generateConstructor = function generateConstructor(mtype) {\n /* eslint-disable no-unexpected-multiline */\n var gen = util.codegen([\"p\"], mtype.name);\n // explicitly initialize mutable object/array fields so that these aren't just inherited from the prototype\n for (var i = 0, field; i < mtype.fieldsArray.length; ++i)\n if ((field = mtype._fieldsArray[i]).map) gen\n (\"this%s={}\", util.safeProp(field.name));\n else if (field.repeated) gen\n (\"this%s=[]\", util.safeProp(field.name));\n return gen\n (\"if(p)for(var ks=Object.keys(p),i=0;i} [oneofs] Oneof descriptors\n * @property {Object.} fields Field descriptors\n * @property {number[][]} [extensions] Extension ranges\n * @property {number[][]} [reserved] Reserved ranges\n * @property {boolean} [group=false] Whether a legacy group or not\n */\n\n/**\n * Creates a message type from a message type descriptor.\n * @param {string} name Message name\n * @param {IType} json Message type descriptor\n * @returns {Type} Created message type\n */\nType.fromJSON = function fromJSON(name, json) {\n var type = new Type(name, json.options);\n type.extensions = json.extensions;\n type.reserved = json.reserved;\n var names = Object.keys(json.fields),\n i = 0;\n for (; i < names.length; ++i)\n type.add(\n ( typeof json.fields[names[i]].keyType !== \"undefined\"\n ? MapField.fromJSON\n : Field.fromJSON )(names[i], json.fields[names[i]])\n );\n if (json.oneofs)\n for (names = Object.keys(json.oneofs), i = 0; i < names.length; ++i)\n type.add(OneOf.fromJSON(names[i], json.oneofs[names[i]]));\n if (json.nested)\n for (names = Object.keys(json.nested), i = 0; i < names.length; ++i) {\n var nested = json.nested[names[i]];\n type.add( // most to least likely\n ( nested.id !== undefined\n ? Field.fromJSON\n : nested.fields !== undefined\n ? Type.fromJSON\n : nested.values !== undefined\n ? Enum.fromJSON\n : nested.methods !== undefined\n ? Service.fromJSON\n : Namespace.fromJSON )(names[i], nested)\n );\n }\n if (json.extensions && json.extensions.length)\n type.extensions = json.extensions;\n if (json.reserved && json.reserved.length)\n type.reserved = json.reserved;\n if (json.group)\n type.group = true;\n if (json.comment)\n type.comment = json.comment;\n return type;\n};\n\n/**\n * Converts this message type to a message type descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IType} Message type descriptor\n */\nType.prototype.toJSON = function toJSON(toJSONOptions) {\n var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , inherited && inherited.options || undefined,\n \"oneofs\" , Namespace.arrayToJSON(this.oneofsArray, toJSONOptions),\n \"fields\" , Namespace.arrayToJSON(this.fieldsArray.filter(function(obj) { return !obj.declaringField; }), toJSONOptions) || {},\n \"extensions\" , this.extensions && this.extensions.length ? this.extensions : undefined,\n \"reserved\" , this.reserved && this.reserved.length ? this.reserved : undefined,\n \"group\" , this.group || undefined,\n \"nested\" , inherited && inherited.nested || undefined,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * @override\n */\nType.prototype.resolveAll = function resolveAll() {\n var fields = this.fieldsArray, i = 0;\n while (i < fields.length)\n fields[i++].resolve();\n var oneofs = this.oneofsArray; i = 0;\n while (i < oneofs.length)\n oneofs[i++].resolve();\n return Namespace.prototype.resolveAll.call(this);\n};\n\n/**\n * @override\n */\nType.prototype.get = function get(name) {\n return this.fields[name]\n || this.oneofs && this.oneofs[name]\n || this.nested && this.nested[name]\n || null;\n};\n\n/**\n * Adds a nested object to this type.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name or, if a field, when there is already a field with this id\n */\nType.prototype.add = function add(object) {\n\n if (this.get(object.name))\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n if (object instanceof Field && object.extend === undefined) {\n // NOTE: Extension fields aren't actual fields on the declaring type, but nested objects.\n // The root object takes care of adding distinct sister-fields to the respective extended\n // type instead.\n\n // avoids calling the getter if not absolutely necessary because it's called quite frequently\n if (this._fieldsById ? /* istanbul ignore next */ this._fieldsById[object.id] : this.fieldsById[object.id])\n throw Error(\"duplicate id \" + object.id + \" in \" + this);\n if (this.isReservedId(object.id))\n throw Error(\"id \" + object.id + \" is reserved in \" + this);\n if (this.isReservedName(object.name))\n throw Error(\"name '\" + object.name + \"' is reserved in \" + this);\n\n if (object.parent)\n object.parent.remove(object);\n this.fields[object.name] = object;\n object.message = this;\n object.onAdd(this);\n return clearCache(this);\n }\n if (object instanceof OneOf) {\n if (!this.oneofs)\n this.oneofs = {};\n this.oneofs[object.name] = object;\n object.onAdd(this);\n return clearCache(this);\n }\n return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * Removes a nested object from this type.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this type\n */\nType.prototype.remove = function remove(object) {\n if (object instanceof Field && object.extend === undefined) {\n // See Type#add for the reason why extension fields are excluded here.\n\n /* istanbul ignore if */\n if (!this.fields || this.fields[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.fields[object.name];\n object.parent = null;\n object.onRemove(this);\n return clearCache(this);\n }\n if (object instanceof OneOf) {\n\n /* istanbul ignore if */\n if (!this.oneofs || this.oneofs[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.oneofs[object.name];\n object.parent = null;\n object.onRemove(this);\n return clearCache(this);\n }\n return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedId = function isReservedId(id) {\n return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedName = function isReservedName(name) {\n return Namespace.isReservedName(this.reserved, name);\n};\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.} [properties] Properties to set\n * @returns {Message<{}>} Message instance\n */\nType.prototype.create = function create(properties) {\n return new this.ctor(properties);\n};\n\n/**\n * Sets up {@link Type#encode|encode}, {@link Type#decode|decode} and {@link Type#verify|verify}.\n * @returns {Type} `this`\n */\nType.prototype.setup = function setup() {\n // Sets up everything at once so that the prototype chain does not have to be re-evaluated\n // multiple times (V8, soft-deopt prototype-check).\n\n var fullName = this.fullName,\n types = [];\n for (var i = 0; i < /* initializes */ this.fieldsArray.length; ++i)\n types.push(this._fieldsArray[i].resolve().resolvedType);\n\n // Replace setup methods with type-specific generated functions\n this.encode = encoder(this)({\n Writer : Writer,\n types : types,\n util : util\n });\n this.decode = decoder(this)({\n Reader : Reader,\n types : types,\n util : util\n });\n this.verify = verifier(this)({\n types : types,\n util : util\n });\n this.fromObject = converter.fromObject(this)({\n types : types,\n util : util\n });\n this.toObject = converter.toObject(this)({\n types : types,\n util : util\n });\n\n // Inject custom wrappers for common types\n var wrapper = wrappers[fullName];\n if (wrapper) {\n var originalThis = Object.create(this);\n // if (wrapper.fromObject) {\n originalThis.fromObject = this.fromObject;\n this.fromObject = wrapper.fromObject.bind(originalThis);\n // }\n // if (wrapper.toObject) {\n originalThis.toObject = this.toObject;\n this.toObject = wrapper.toObject.bind(originalThis);\n // }\n }\n\n return this;\n};\n\n/**\n * Encodes a message of this type. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encode = function encode_setup(message, writer) {\n return this.setup().encode(message, writer); // overrides this method\n};\n\n/**\n * Encodes a message of this type preceeded by its byte length as a varint. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();\n};\n\n/**\n * Decodes a message of this type.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Length of the message, if known beforehand\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError<{}>} If required fields are missing\n */\nType.prototype.decode = function decode_setup(reader, length) {\n return this.setup().decode(reader, length); // overrides this method\n};\n\n/**\n * Decodes a message of this type preceeded by its byte length as a varint.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError} If required fields are missing\n */\nType.prototype.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof Reader))\n reader = Reader.create(reader);\n return this.decode(reader, reader.uint32());\n};\n\n/**\n * Verifies that field values are valid and that required fields are present.\n * @param {Object.} message Plain object to verify\n * @returns {null|string} `null` if valid, otherwise the reason why it is not\n */\nType.prototype.verify = function verify_setup(message) {\n return this.setup().verify(message); // overrides this method\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.} object Plain object to convert\n * @returns {Message<{}>} Message instance\n */\nType.prototype.fromObject = function fromObject(object) {\n return this.setup().fromObject(object);\n};\n\n/**\n * Conversion options as used by {@link Type#toObject} and {@link Message.toObject}.\n * @interface IConversionOptions\n * @property {Function} [longs] Long conversion type.\n * Valid values are `String` and `Number` (the global types).\n * Defaults to copy the present value, which is a possibly unsafe number without and a {@link Long} with a long library.\n * @property {Function} [enums] Enum value conversion type.\n * Only valid value is `String` (the global type).\n * Defaults to copy the present value, which is the numeric id.\n * @property {Function} [bytes] Bytes value conversion type.\n * Valid values are `Array` and (a base64 encoded) `String` (the global types).\n * Defaults to copy the present value, which usually is a Buffer under node and an Uint8Array in the browser.\n * @property {boolean} [defaults=false] Also sets default values on the resulting object\n * @property {boolean} [arrays=false] Sets empty arrays for missing repeated fields even if `defaults=false`\n * @property {boolean} [objects=false] Sets empty objects for missing map fields even if `defaults=false`\n * @property {boolean} [oneofs=false] Includes virtual oneof properties set to the present field's name, if any\n * @property {boolean} [json=false] Performs additional JSON compatibility conversions, i.e. NaN and Infinity to strings\n */\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\nType.prototype.toObject = function toObject(message, options) {\n return this.setup().toObject(message, options);\n};\n\n/**\n * Decorator function as returned by {@link Type.d} (TypeScript).\n * @typedef TypeDecorator\n * @type {function}\n * @param {Constructor} target Target constructor\n * @returns {undefined}\n * @template T extends Message\n */\n\n/**\n * Type decorator (TypeScript).\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {TypeDecorator} Decorator function\n * @template T extends Message\n */\nType.d = function decorateType(typeName) {\n return function typeDecorator(target) {\n util.decorateType(target, typeName);\n };\n};\n","\"use strict\";\n\n/**\n * Common type constants.\n * @namespace\n */\nvar types = exports;\n\nvar util = require(\"./util\");\n\nvar s = [\n \"double\", // 0\n \"float\", // 1\n \"int32\", // 2\n \"uint32\", // 3\n \"sint32\", // 4\n \"fixed32\", // 5\n \"sfixed32\", // 6\n \"int64\", // 7\n \"uint64\", // 8\n \"sint64\", // 9\n \"fixed64\", // 10\n \"sfixed64\", // 11\n \"bool\", // 12\n \"string\", // 13\n \"bytes\" // 14\n];\n\nfunction bake(values, offset) {\n var i = 0, o = {};\n offset |= 0;\n while (i < values.length) o[s[i + offset]] = values[i++];\n return o;\n}\n\n/**\n * Basic type wire types.\n * @type {Object.}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n * @property {number} bytes=2 Ldelim wire type\n */\ntypes.basic = bake([\n /* double */ 1,\n /* float */ 5,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0,\n /* string */ 2,\n /* bytes */ 2\n]);\n\n/**\n * Basic type defaults.\n * @type {Object.}\n * @const\n * @property {number} double=0 Double default\n * @property {number} float=0 Float default\n * @property {number} int32=0 Int32 default\n * @property {number} uint32=0 Uint32 default\n * @property {number} sint32=0 Sint32 default\n * @property {number} fixed32=0 Fixed32 default\n * @property {number} sfixed32=0 Sfixed32 default\n * @property {number} int64=0 Int64 default\n * @property {number} uint64=0 Uint64 default\n * @property {number} sint64=0 Sint32 default\n * @property {number} fixed64=0 Fixed64 default\n * @property {number} sfixed64=0 Sfixed64 default\n * @property {boolean} bool=false Bool default\n * @property {string} string=\"\" String default\n * @property {Array.} bytes=Array(0) Bytes default\n * @property {null} message=null Message default\n */\ntypes.defaults = bake([\n /* double */ 0,\n /* float */ 0,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 0,\n /* sfixed32 */ 0,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 0,\n /* sfixed64 */ 0,\n /* bool */ false,\n /* string */ \"\",\n /* bytes */ util.emptyArray,\n /* message */ null\n]);\n\n/**\n * Basic long type wire types.\n * @type {Object.}\n * @const\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n */\ntypes.long = bake([\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1\n], 7);\n\n/**\n * Allowed types for map keys with their associated wire type.\n * @type {Object.}\n * @const\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n */\ntypes.mapKey = bake([\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0,\n /* string */ 2\n], 2);\n\n/**\n * Allowed types for packed repeated fields with their associated wire type.\n * @type {Object.}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n */\ntypes.packed = bake([\n /* double */ 1,\n /* float */ 5,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0\n]);\n","\"use strict\";\n\n/**\n * Various utility functions.\n * @namespace\n */\nvar util = module.exports = require(\"./util/minimal\");\n\nvar roots = require(\"./roots\");\n\nvar Type, // cyclic\n Enum;\n\nutil.codegen = require(\"@protobufjs/codegen\");\nutil.fetch = require(\"@protobufjs/fetch\");\nutil.path = require(\"@protobufjs/path\");\n\n/**\n * Node's fs module if available.\n * @type {Object.}\n */\nutil.fs = util.inquire(\"fs\");\n\n/**\n * Converts an object's values to an array.\n * @param {Object.} object Object to convert\n * @returns {Array.<*>} Converted array\n */\nutil.toArray = function toArray(object) {\n if (object) {\n var keys = Object.keys(object),\n array = new Array(keys.length),\n index = 0;\n while (index < keys.length)\n array[index] = object[keys[index++]];\n return array;\n }\n return [];\n};\n\n/**\n * Converts an array of keys immediately followed by their respective value to an object, omitting undefined values.\n * @param {Array.<*>} array Array to convert\n * @returns {Object.} Converted object\n */\nutil.toObject = function toObject(array) {\n var object = {},\n index = 0;\n while (index < array.length) {\n var key = array[index++],\n val = array[index++];\n if (val !== undefined)\n object[key] = val;\n }\n return object;\n};\n\nvar safePropBackslashRe = /\\\\/g,\n safePropQuoteRe = /\"/g;\n\n/**\n * Tests whether the specified name is a reserved word in JS.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nutil.isReserved = function isReserved(name) {\n return /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$/.test(name);\n};\n\n/**\n * Returns a safe property accessor for the specified property name.\n * @param {string} prop Property name\n * @returns {string} Safe accessor\n */\nutil.safeProp = function safeProp(prop) {\n if (!/^[$\\w_]+$/.test(prop) || util.isReserved(prop))\n return \"[\\\"\" + prop.replace(safePropBackslashRe, \"\\\\\\\\\").replace(safePropQuoteRe, \"\\\\\\\"\") + \"\\\"]\";\n return \".\" + prop;\n};\n\n/**\n * Converts the first character of a string to upper case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.ucFirst = function ucFirst(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n};\n\nvar camelCaseRe = /_([a-z])/g;\n\n/**\n * Converts a string to camel case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.camelCase = function camelCase(str) {\n return str.substring(0, 1)\n + str.substring(1)\n .replace(camelCaseRe, function($0, $1) { return $1.toUpperCase(); });\n};\n\n/**\n * Compares reflected fields by id.\n * @param {Field} a First field\n * @param {Field} b Second field\n * @returns {number} Comparison value\n */\nutil.compareFieldsById = function compareFieldsById(a, b) {\n return a.id - b.id;\n};\n\n/**\n * Decorator helper for types (TypeScript).\n * @param {Constructor} ctor Constructor function\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {Type} Reflected type\n * @template T extends Message\n * @property {Root} root Decorators root\n */\nutil.decorateType = function decorateType(ctor, typeName) {\n\n /* istanbul ignore if */\n if (ctor.$type) {\n if (typeName && ctor.$type.name !== typeName) {\n util.decorateRoot.remove(ctor.$type);\n ctor.$type.name = typeName;\n util.decorateRoot.add(ctor.$type);\n }\n return ctor.$type;\n }\n\n /* istanbul ignore next */\n if (!Type)\n Type = require(\"./type\");\n\n var type = new Type(typeName || ctor.name);\n util.decorateRoot.add(type);\n type.ctor = ctor; // sets up .encode, .decode etc.\n Object.defineProperty(ctor, \"$type\", { value: type, enumerable: false });\n Object.defineProperty(ctor.prototype, \"$type\", { value: type, enumerable: false });\n return type;\n};\n\nvar decorateEnumIndex = 0;\n\n/**\n * Decorator helper for enums (TypeScript).\n * @param {Object} object Enum object\n * @returns {Enum} Reflected enum\n */\nutil.decorateEnum = function decorateEnum(object) {\n\n /* istanbul ignore if */\n if (object.$type)\n return object.$type;\n\n /* istanbul ignore next */\n if (!Enum)\n Enum = require(\"./enum\");\n\n var enm = new Enum(\"Enum\" + decorateEnumIndex++, object);\n util.decorateRoot.add(enm);\n Object.defineProperty(object, \"$type\", { value: enm, enumerable: false });\n return enm;\n};\n\n\n/**\n * Sets the value of a property by property path. If a value already exists, it is turned to an array\n * @param {Object.} dst Destination object\n * @param {string} path dot '.' delimited path of the property to set\n * @param {Object} value the value to set\n * @returns {Object.} Destination object\n */\nutil.setProperty = function setProperty(dst, path, value) {\n function setProp(dst, path, value) {\n var part = path.shift();\n if (path.length > 0) {\n dst[part] = setProp(dst[part] || {}, path, value);\n } else {\n var prevValue = dst[part];\n if (prevValue)\n value = [].concat(prevValue).concat(value);\n dst[part] = value;\n }\n return dst;\n }\n\n if (typeof dst !== \"object\")\n throw TypeError(\"dst must be an object\");\n if (!path)\n throw TypeError(\"path must be specified\");\n\n path = path.split(\".\");\n return setProp(dst, path, value);\n};\n\n/**\n * Decorator root (TypeScript).\n * @name util.decorateRoot\n * @type {Root}\n * @readonly\n */\nObject.defineProperty(util, \"decorateRoot\", {\n get: function() {\n return roots[\"decorated\"] || (roots[\"decorated\"] = new (require(\"./root\"))());\n }\n});\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.} dst Destination object\n * @param {Object.} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message\n * @constructor\n * @param {string} message Error message\n * @param {Object.} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","\"use strict\";\nmodule.exports = verifier;\n\nvar Enum = require(\"./enum\"),\n util = require(\"./util\");\n\nfunction invalid(field, expected) {\n return field.name + \": \" + expected + (field.repeated && expected !== \"array\" ? \"[]\" : field.map && expected !== \"object\" ? \"{k:\"+field.keyType+\"}\" : \"\") + \" expected\";\n}\n\n/**\n * Generates a partial value verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyValue(gen, field, fieldIndex, ref) {\n /* eslint-disable no-unexpected-multiline */\n if (field.resolvedType) {\n if (field.resolvedType instanceof Enum) { gen\n (\"switch(%s){\", ref)\n (\"default:\")\n (\"return%j\", invalid(field, \"enum value\"));\n for (var keys = Object.keys(field.resolvedType.values), j = 0; j < keys.length; ++j) gen\n (\"case %i:\", field.resolvedType.values[keys[j]]);\n gen\n (\"break\")\n (\"}\");\n } else {\n gen\n (\"{\")\n (\"var e=types[%i].verify(%s);\", fieldIndex, ref)\n (\"if(e)\")\n (\"return%j+e\", field.name + \".\")\n (\"}\");\n }\n } else {\n switch (field.type) {\n case \"int32\":\n case \"uint32\":\n case \"sint32\":\n case \"fixed32\":\n case \"sfixed32\": gen\n (\"if(!util.isInteger(%s))\", ref)\n (\"return%j\", invalid(field, \"integer\"));\n break;\n case \"int64\":\n case \"uint64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))\", ref, ref, ref, ref)\n (\"return%j\", invalid(field, \"integer|Long\"));\n break;\n case \"float\":\n case \"double\": gen\n (\"if(typeof %s!==\\\"number\\\")\", ref)\n (\"return%j\", invalid(field, \"number\"));\n break;\n case \"bool\": gen\n (\"if(typeof %s!==\\\"boolean\\\")\", ref)\n (\"return%j\", invalid(field, \"boolean\"));\n break;\n case \"string\": gen\n (\"if(!util.isString(%s))\", ref)\n (\"return%j\", invalid(field, \"string\"));\n break;\n case \"bytes\": gen\n (\"if(!(%s&&typeof %s.length===\\\"number\\\"||util.isString(%s)))\", ref, ref, ref)\n (\"return%j\", invalid(field, \"buffer\"));\n break;\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a partial key verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyKey(gen, field, ref) {\n /* eslint-disable no-unexpected-multiline */\n switch (field.keyType) {\n case \"int32\":\n case \"uint32\":\n case \"sint32\":\n case \"fixed32\":\n case \"sfixed32\": gen\n (\"if(!util.key32Re.test(%s))\", ref)\n (\"return%j\", invalid(field, \"integer key\"));\n break;\n case \"int64\":\n case \"uint64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(!util.key64Re.test(%s))\", ref) // see comment above: x is ok, d is not\n (\"return%j\", invalid(field, \"integer|Long key\"));\n break;\n case \"bool\": gen\n (\"if(!util.key2Re.test(%s))\", ref)\n (\"return%j\", invalid(field, \"boolean key\"));\n break;\n }\n return gen;\n /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a verifier specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction verifier(mtype) {\n /* eslint-disable no-unexpected-multiline */\n\n var gen = util.codegen([\"m\"], mtype.name + \"$verify\")\n (\"if(typeof m!==\\\"object\\\"||m===null)\")\n (\"return%j\", \"object expected\");\n var oneofs = mtype.oneofsArray,\n seenFirstField = {};\n if (oneofs.length) gen\n (\"var p={}\");\n\n for (var i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n var field = mtype._fieldsArray[i].resolve(),\n ref = \"m\" + util.safeProp(field.name);\n\n if (field.optional) gen\n (\"if(%s!=null&&m.hasOwnProperty(%j)){\", ref, field.name); // !== undefined && !== null\n\n // map fields\n if (field.map) { gen\n (\"if(!util.isObject(%s))\", ref)\n (\"return%j\", invalid(field, \"object\"))\n (\"var k=Object.keys(%s)\", ref)\n (\"for(var i=0;i}\n * @const\n */\nvar wrappers = exports;\n\nvar Message = require(\"./message\");\n\n/**\n * From object converter part of an {@link IWrapper}.\n * @typedef WrapperFromObjectConverter\n * @type {function}\n * @param {Object.} object Plain object\n * @returns {Message<{}>} Message instance\n * @this Type\n */\n\n/**\n * To object converter part of an {@link IWrapper}.\n * @typedef WrapperToObjectConverter\n * @type {function}\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n * @this Type\n */\n\n/**\n * Common type wrapper part of {@link wrappers}.\n * @interface IWrapper\n * @property {WrapperFromObjectConverter} [fromObject] From object converter\n * @property {WrapperToObjectConverter} [toObject] To object converter\n */\n\n// Custom wrapper for Any\nwrappers[\".google.protobuf.Any\"] = {\n\n fromObject: function(object) {\n\n // unwrap value type if mapped\n if (object && object[\"@type\"]) {\n // Only use fully qualified type name after the last '/'\n var name = object[\"@type\"].substring(object[\"@type\"].lastIndexOf(\"/\") + 1);\n var type = this.lookup(name);\n /* istanbul ignore else */\n if (type) {\n // type_url does not accept leading \".\"\n var type_url = object[\"@type\"].charAt(0) === \".\" ?\n object[\"@type\"].substr(1) : object[\"@type\"];\n // type_url prefix is optional, but path seperator is required\n if (type_url.indexOf(\"/\") === -1) {\n type_url = \"/\" + type_url;\n }\n return this.create({\n type_url: type_url,\n value: type.encode(type.fromObject(object)).finish()\n });\n }\n }\n\n return this.fromObject(object);\n },\n\n toObject: function(message, options) {\n\n // Default prefix\n var googleApi = \"type.googleapis.com/\";\n var prefix = \"\";\n var name = \"\";\n\n // decode value if requested and unmapped\n if (options && options.json && message.type_url && message.value) {\n // Only use fully qualified type name after the last '/'\n name = message.type_url.substring(message.type_url.lastIndexOf(\"/\") + 1);\n // Separate the prefix used\n prefix = message.type_url.substring(0, message.type_url.lastIndexOf(\"/\") + 1);\n var type = this.lookup(name);\n /* istanbul ignore else */\n if (type)\n message = type.decode(message.value);\n }\n\n // wrap value if unmapped\n if (!(message instanceof this.ctor) && message instanceof Message) {\n var object = message.$type.toObject(message, options);\n var messageName = message.$type.fullName[0] === \".\" ?\n message.$type.fullName.substr(1) : message.$type.fullName;\n // Default to type.googleapis.com prefix if no prefix is used\n if (prefix === \"\") {\n prefix = googleApi;\n }\n name = prefix + messageName;\n object[\"@type\"] = name;\n return object;\n }\n\n return this.toObject(message, options);\n }\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(714);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://Centrifuge/webpack/universalModuleDefinition","webpack://Centrifuge/./node_modules/@protobufjs/aspromise/index.js","webpack://Centrifuge/./node_modules/@protobufjs/base64/index.js","webpack://Centrifuge/./node_modules/@protobufjs/codegen/index.js","webpack://Centrifuge/./node_modules/@protobufjs/eventemitter/index.js","webpack://Centrifuge/./node_modules/@protobufjs/fetch/index.js","webpack://Centrifuge/./node_modules/@protobufjs/float/index.js","webpack://Centrifuge/./node_modules/@protobufjs/inquire/index.js","webpack://Centrifuge/./node_modules/@protobufjs/path/index.js","webpack://Centrifuge/./node_modules/@protobufjs/pool/index.js","webpack://Centrifuge/./node_modules/@protobufjs/utf8/index.js","webpack://Centrifuge/./src/centrifuge.js","webpack://Centrifuge/./src/index_protobuf.js","webpack://Centrifuge/./src/json.js","webpack://Centrifuge/./src/protobuf.js","webpack://Centrifuge/./src/subscription.js","webpack://Centrifuge/./src/utils.js","webpack://Centrifuge/./node_modules/events/events.js","webpack://Centrifuge/./node_modules/protobufjs/light.js","webpack://Centrifuge/./node_modules/protobufjs/src/converter.js","webpack://Centrifuge/./node_modules/protobufjs/src/decoder.js","webpack://Centrifuge/./node_modules/protobufjs/src/encoder.js","webpack://Centrifuge/./node_modules/protobufjs/src/enum.js","webpack://Centrifuge/./node_modules/protobufjs/src/field.js","webpack://Centrifuge/./node_modules/protobufjs/src/index-light.js","webpack://Centrifuge/./node_modules/protobufjs/src/index-minimal.js","webpack://Centrifuge/./node_modules/protobufjs/src/mapfield.js","webpack://Centrifuge/./node_modules/protobufjs/src/message.js","webpack://Centrifuge/./node_modules/protobufjs/src/method.js","webpack://Centrifuge/./node_modules/protobufjs/src/namespace.js","webpack://Centrifuge/./node_modules/protobufjs/src/object.js","webpack://Centrifuge/./node_modules/protobufjs/src/oneof.js","webpack://Centrifuge/./node_modules/protobufjs/src/reader.js","webpack://Centrifuge/./node_modules/protobufjs/src/reader_buffer.js","webpack://Centrifuge/./node_modules/protobufjs/src/root.js","webpack://Centrifuge/./node_modules/protobufjs/src/roots.js","webpack://Centrifuge/./node_modules/protobufjs/src/rpc.js","webpack://Centrifuge/./node_modules/protobufjs/src/rpc/service.js","webpack://Centrifuge/./node_modules/protobufjs/src/service.js","webpack://Centrifuge/./node_modules/protobufjs/src/type.js","webpack://Centrifuge/./node_modules/protobufjs/src/types.js","webpack://Centrifuge/./node_modules/protobufjs/src/util.js","webpack://Centrifuge/./node_modules/protobufjs/src/util/longbits.js","webpack://Centrifuge/./node_modules/protobufjs/src/util/minimal.js","webpack://Centrifuge/./node_modules/protobufjs/src/verifier.js","webpack://Centrifuge/./node_modules/protobufjs/src/wrappers.js","webpack://Centrifuge/./node_modules/protobufjs/src/writer.js","webpack://Centrifuge/./node_modules/protobufjs/src/writer_buffer.js","webpack://Centrifuge/webpack/bootstrap","webpack://Centrifuge/webpack/runtime/global","webpack://Centrifuge/webpack/startup"],"names":["_errorTimeout","_errorConnectionClosed","Centrifuge","url","options","_url","_websocket","_sockjs","_isSockjs","_binary","_methodType","_pushType","_encoder","_decoder","_status","_reconnect","_reconnecting","_transport","_transportName","_transportClosed","_messageId","_clientID","_refreshRequired","_subs","_serverSubs","_lastSeq","_lastGen","_lastOffset","_lastEpoch","_messages","_isBatching","_isSubscribeBatching","_privateChannels","_numRefreshFailed","_refreshTimeout","_pingTimeout","_pongTimeout","_subRefreshTimeouts","_retries","_callbacks","_latency","_latencyStart","_connectData","_token","_xhrID","_xhrs","_dispatchPromise","Promise","resolve","_config","debug","name","version","websocket","sockjs","minRetry","maxRetry","timeout","ping","pingInterval","pongWaitTimeout","privateChannelPrefix","onTransportClose","sockjsServer","sockjsTransports","refreshEndpoint","refreshHeaders","refreshParams","refreshData","refreshAttempts","refreshInterval","onRefreshFailed","onRefresh","subscribeEndpoint","subscribeHeaders","subscribeParams","subRefreshInterval","onPrivateSubscribe","_configure","token","data","headers","params","callback","query","_debug","JSON","stringify","xhr","global","XMLHttpRequest","ActiveXObject","i","hasOwnProperty","length","encodeURIComponent","open","withCredentials","setRequestHeader","headerName","onreadystatechange","readyState","status","parsed","parse","responseText","e","error","_log","setTimeout","send","arguments","WebSocket","format","_formatOverride","Error","JsonMethodType","JsonPushType","JsonEncoder","JsonDecoder","configuration","indexOf","_setFormat","SockJS","newStatus","interval","xhrID","abort","reconnect","_stopPing","id","callbacks","clearTimeout","errback","_createErrorObject","channel","sub","_isSuccess","_triggerUnsubscribe","_recover","_shouldResubscribe","_setSubscribing","_setUnsubscribed","_abortInflightXHRs","_clearSubRefreshTimeout","transport","OPEN","commands","_isTransportOpen","command","encodeCommands","sockjsOptions","transports","server","_websocketSupported","binaryType","onopen","onheartbeat","_restartPing","msg","subs","hasSubs","recoverable","seq","gen","offset","epoch","Date","_call","then","resolveCtx","_connectResponse","decodeCommandResult","CONNECT","result","next","rejectCtx","err","code","_disconnect","onerror","onclose","closeEvent","reason","needReconnect","advice","event","_getRetryInterval","_refresh","_connect","onmessage","_dataReceived","_rpc","method","RPC","_methodCall","SEND","isConnected","reject","sent","_transportSend","undefined","since","limit","resultCB","PUBLISH","_getHistoryParams","HISTORY","publications","PRESENCE","presence","PRESENCE_STATS","num_users","num_clients","replies","decodeReplies","finishDispatch","_dispatchSynchronized","p","_dispatchReply","reply","_handleReply","_handlePush","_addMessage","_registerCall","_setStatus","_setupTransport","shouldReconnect","_isDisconnected","_clearConnectedState","emit","close","_refreshFailed","clientID","_newXHRID","cb","resp","jitter","Math","round","random","max","REFRESH","_refreshResponse","_refreshError","context","_ajax","expires","client","_getTTLMilliseconds","ttl","channelsData","channels","channelData","SUB_REFRESH","_getSub","_subRefreshResponse","_subRefreshError","subRefreshTimeout","_subRefresh","isResubscribe","_setNew","SUBSCRIBE","startSubscribeBatching","_subscribe","stopSubscribeBatching","recover","_needRecover","_getLastSeq","_getLastGen","_getLastOffset","_getLastEpoch","_subscribeResponse","_subscribeError","UNSUBSCRIBE","min","isRecover","wasReconnecting","_resetRetry","getTime","startBatching","stopBatching","_startPing","ctx","latency","_processServerSubs","subCtx","_expandSubscribeContext","recovered","pubs","reverse","_handlePublication","_isSubscribing","message","_setSubscribeError","positioned","streamPosition","_setSubscribeSuccess","_recoverable","join","info","_isServerSub","leave","unsub","unsubscribe","resubscribe","subscribe","pub","push","decodePush","type","PUBLICATION","decodePushData","MESSAGE","_handleMessage","JOIN","_handleJoin","LEAVE","_handleLeave","UNSUB","_handleUnsub","SUB","_handleSub","messages","slice","PING","_pingResponse","lastSeq","lastOffset","lastGen","lastEpoch","errObject","_nextMessageId","_isConnected","_ping","_flush","authChannels","batch","events","currentSub","_setEvents","_isUnsubscribed","Subscription","EventEmitter","CentrifugeProtobuf","encodedCommands","encodedReplies","split","methodType","pushType","protobuf","require","proto","Root","fromJSON","methodValues","lookupEnum","values","protobufMethodType","methodSchema","lookupType","protobufPushType","PushSchema","Push","Command","Reply","ProtobufEncoder","writer","Writer","create","Object","assign","encode","finish","encodeDelimited","ProtobufDecoder","reader","Reader","Uint8Array","pos","len","decodeDelimited","_decode","res","decode","_STATE_NEW","_STATE_SUBSCRIBING","_STATE_SUCCESS","_STATE_ERROR","_STATE_UNSUBSCRIBED","centrifuge","_centrifuge","_error","_isResubscribe","_ready","_subscriptionPromise","_noResubscribe","_initializePromise","_promises","_promiseId","on","errContext","_resolve","value","_reject","prototype","toString","call","knownEvents","l","ev","subscribeResult","successContext","_getSubscribeSuccessContext","_getSubscribeErrorContext","noResubscribe","needTrigger","subscribeErrorContext","_unsubscribe","_isError","subPromise","rej","_nextPromiseId","self","publish","presenceStats","history","startsWith","prefix","lastIndexOf","isFunction","log","level","args","console","logger","apply","backoff","step","pow","floor","errorExists","extend","a","b","key"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;;ACVa;AACb;;AAEA;AACA,wBAAwB,qBAAqB;AAC7C;AACA,UAAU;AACV,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,aAAa;AACb;;AAEA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,EAAE;AACb,WAAW,KAAK;AAChB,aAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;;;;;;;ACnDa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,eAAe,QAAQ;AACvB;;AAEA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA,UAAU;AACV,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA,8BAA8B,EAAE,mBAAmB,EAAE,iBAAiB,EAAE;AACxE;;;;;;;;AC1Ia;AACb;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc;AACd,eAAe,yBAAyB;AACxC,eAAe,KAAK;AACpB,iBAAiB,iBAAiB;AAClC,gBAAgB,MAAM;AACtB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF;AAClF;AACA,sCAAsC;AACtC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA,0IAA0I,gCAAgC;AAC1K;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;;;;;;;AClGa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,sBAAsB;AACpC;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;;;;;;;;AC3Ea;AACb;;AAEA,gBAAgB,mBAAO,CAAC,GAAuB;AAC/C,gBAAgB,mBAAO,CAAC,GAAqB;;AAE7C;;AAEA;AACA,mCAAmC,iBAAiB;AACpD;AACA,UAAU;AACV,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;;AAEA;AACA,uBAAuB,iBAAiB;AACxC;AACA,UAAU;AACV,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,cAAc;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,yDAAyD;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,cAAc;AACzB,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,aAAa,2BAA2B;AACxC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6BAA6B;AAC5D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;;AAEA;AACA;AACA;;;;;;;;AClHa;;AAEb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK,IAAI;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK,IAAI;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa,0CAA0C;AACvD;AACA;AACA,aAAa;AACb;AACA,oDAAoD;AACpD;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,KAAK;;AAEL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC9Ua;AACb;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA,8DAA8D;AAC9D;AACA;AACA,KAAK,aAAa;AAClB;AACA;;;;;;;;AChBa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA,4BAA4B,GAAG;AAC/B;AACA;AACA;AACA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChEa;AACb;;AAEA;AACA,4BAA4B,gBAAgB;AAC5C;AACA,UAAU;AACV,WAAW,OAAO;AAClB,aAAa,WAAW;AACxB;;AAEA;AACA,wBAAwB,gBAAgB;AACxC;AACA,UAAU;AACV,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,WAAW;AACxB,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/Ca;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,WAAW;AACX,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACxGA;;AACA;;AAEA;;AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,IAAMA,aAAa,GAAG,SAAtB;AACA,IAAMC,sBAAsB,GAAG,mBAA/B;;IAEaC,U;;;;;AAEX,sBAAYC,GAAZ,EAAiBC,OAAjB,EAA0B;AAAA;;AAAA;;AACxB;AACA,UAAKC,IAAL,GAAYF,GAAZ;AACA,UAAKG,UAAL,GAAkB,IAAlB;AACA,UAAKC,OAAL,GAAe,IAAf;AACA,UAAKC,SAAL,GAAiB,KAAjB;AACA,UAAKC,OAAL,GAAe,KAAf;AACA,UAAKC,WAAL,GAAmB,IAAnB;AACA,UAAKC,SAAL,GAAiB,IAAjB;AACA,UAAKC,QAAL,GAAgB,IAAhB;AACA,UAAKC,QAAL,GAAgB,IAAhB;AACA,UAAKC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AmBA,IAAI,CAAC2B,KAAL,KAAe,IAAzC;AACD;;AAAA;;AAEM,SAAS+U,MAAT,CAAgBC,CAAhB,EAAmBC,CAAnB,EAAsB;AAC3B,OAAK,IAAMC,GAAX,IAAkBD,CAAlB,EAAqB;AACnB,QAAIA,CAAC,CAAC/V,cAAF,CAAiBgW,GAAjB,CAAJ,EAA2B;AACzBF,OAAC,CAACE,GAAD,CAAD,GAASD,CAAC,CAACC,GAAD,CAAV;AACD;AACF;;AACD,SAAOF,CAAP;AACD;;AAAA,C;;;;;;;ACvCD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,cAAc;AACd;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,OAAO;AACP;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;;AAEA;AACA,QAAQ,yBAAyB;AACjC;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;AACH;;;;;;;;AC3dA;;AAEa;AACb,yCAA6C,C;;;;;;;ACHhC;AACb;AACA;AACA;AACA;AACA;;AAEA,WAAW,mBAAO,CAAC,EAAQ;AAC3B,WAAW,mBAAO,CAAC,GAAQ;;AAE3B;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,0BAA0B;AAC1B,2FAA2F,iBAAiB;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,eAAe;AACf,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;;AAEA;AACA,wBAAwB;AACxB,cAAc;AACd;AACA;AACA,gBAAgB;AAChB,0CAA0C,YAAY,KAAK;AAC3D;AACA,WAAW;AACX,OAAO;;AAEP;AACA,SAAS,2BAA2B;AACpC,cAAc;AACd;AACA;AACA;AACA,sBAAsB,aAAa,KAAK;AACxC;AACA,WAAW;AACX,OAAO;;AAEP;AACA,SAAS;AACT;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA,cAAc;AACd,cAAc;;AAEd;AACA;AACA;AACA;AACA,UAAU,mBAAmB;AAC7B;AACA;AACA;AACA;;AAEA,gCAAgC;AAChC,+BAA+B;AAC/B,mBAAmB,2BAA2B;AAC9C;AACA;AACA,OAAO;AACP;;AAEA,2BAA2B;AAC3B,gCAAgC;AAChC,mBAAmB,sBAAsB;AACzC,gBAAgB;AAChB;AACA,OAAO;AACP;;AAEA,8BAA8B;AAC9B,qBAAqB;AACrB,mBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,WAAW;AACX,aAAa;AACb,4CAA4C;AAC5C,SAAS;AACT,OAAO;AACP;AACA;AACA,eAAe,mBAAmB;AAClC;AACA;AACA;AACA;AACA,0BAA0B,eAAe;AACzC;AACA,aAAa;AACb,6CAA6C;AAC7C,gBAAgB;AAChB,sBAAsB,aAAa,KAAK;AACxC;AACA,WAAW;AACX,SAAS,2BAA2B;AACpC,0BAA0B;AAC1B;AACA,sBAAsB,aAAa,KAAK;AACxC;AACA,WAAW;AACX,SAAS,OAAO;AAChB,0CAA0C,qBAAqB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;;;;;;;ACpSa;AACb;;AAEA,cAAc,mB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A;AACA,cAAc;AACd;AACA,sCAAsC;;AAEtC;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,kBAAkB;AAChC;;AAEA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,MAAM;AACnB,YAAY,MAAM;AAClB;AACA;;AAEA;AACA;;AAEA,uEAAuE;AACvE;AACA;AACA;AACA;AACA,kGAAkG;AAClG;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AAC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B,aAAa,SAAS;AACtB,YAAY,UAAU;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,8GAA8G;AACzH,WAAW,4JAA4J,EAAE;AACzK,aAAa,eAAe;AAC5B,wBAAwB,8FAA8F;AACtH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;AC7Ha;AACb;;AAEA,WAAW,mBAAO,CAAC,GAAgB;;AAEnC;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA,uDAAuD,iBAAiB;AACxE;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,oBAAoB;AAC/B,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,oBAAoB;AAC/B,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,YAAY;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,EAAE;AACb,WAAW,mBAAmB;AAC9B,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;;AAEA,6B;;;;;;;AC1Ia;AACb;;AAEA;AACA,uBAAuB,mBAAO,CAAC,GAAU;AACzC;;AAEA,WAAW,mBAAO,CAAC,GAAQ;;AAE3B;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,iBAAiB;AAC5B,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,0BAA0B;AACrC,WAAW,0BAA0B;AACrC,WAAW,kBAAkB;AAC7B,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,cAAc;AACd;AACA,8BAA8B;;AAE9B;AACA;AACA,cAAc;AACd;AACA,mCAAmC;;AAEnC;AACA;AACA,cAAc;AACd;AACA,0DAA0D;;AAE1D;AACA;AACA,cAAc;AACd;AACA,qCAAqC;;AAErC;AACA;AACA,cAAc;AACd;AACA,4DAA4D;;AAE5D;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,kBAAkB;AAChC,cAAc,OAAO;AACrB,cAAc,kBAAkB;AAChC;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB,YAAY,UAAU;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;AC/Ja;AACb;;AAEA;AACA,uBAAuB,mBAAO,CAAC,GAAU;AACzC;;AAEA,eAAe,mBAAO,CAAC,GAAS;AAChC,eAAe,mBAAO,CAAC,GAAQ;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B,aAAa,UAAU;AACvB,YAAY,UAAU;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,eAAe;AAC1B,aAAa,4BAA4B;AACzC;AACA;AACA;AACA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,kCAAkC;AAC7C,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA,uBAAuB,qBAAqB;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kCAAkC;AAC7C,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA,uBAAuB,qBAAqB;AAC5C;AACA;AACA;AACA;;AAEA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,4BAA4B;;AAE5B;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,cAAc,kBAAkB;AAChC,cAAc,gCAAgC;AAC9C;;AAEA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,aAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,gCAAgC;AAC3C,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA,gEAAgE,kBAAkB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,sBAAsB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,gBAAgB;AAClD,8BAA8B,wBAAwB;AACtD,WAAW,OAAO;AAClB,aAAa,uBAAuB;AACpC,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa,UAAU;AACvB,YAAY,UAAU;AACtB,YAAY,MAAM;AAClB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,mBAAmB;AAClD;AACA;AACA;AACA;AACA;;AAEA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa,UAAU;AACvB,YAAY,UAAU;AACtB,YAAY,MAAM;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,EAAE;AACb,aAAa,UAAU;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,sBAAsB;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA,KAAK;AACL,uBAAuB,6BAA6B;AACpD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,QAAQ;AACnB,aAAa,sBAAsB;AACnC;AACA;AACA;;AAEA;AACA,iBAAiB,gBAAgB;AACjC,qDAAqD,8BAA8B;AACnF,WAAW,gBAAgB;AAC3B,aAAa,KAAK;AAClB,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,gBAAgB;AAC/C,qDAAqD,8BAA8B;AACnF,WAAW,gBAAgB;AAC3B,aAAa,KAAK;AAClB,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,gBAAgB,KAAK,gBAAgB;AACtD,qDAAqD,8BAA8B;AACnF,WAAW,gBAAgB;AAC3B,aAAa,KAAK;AAClB,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,sBAAsB;AACvC,qDAAqD,8BAA8B;AACnF,WAAW,gBAAgB;AAC3B,aAAa,QAAQ;AACrB,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChba;AACb;;AAEA;;AAEA,WAAW,mBAAO,CAAC,GAAQ;;AAE3B,SAAS;;AAET;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,2BAA2B;;AAE3B;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,WAAW,QAAQ;AACnB,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,2CAA2C;AAC3C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,QAAQ;AACnB,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA,oDAAoD,iBAAiB;AACrE;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;AClPa;AACb;;AAEA;AACA,uBAAuB,mBAAO,CAAC,GAAU;AACzC;;AAEA,YAAY,mBAAO,CAAC,GAAS;AAC7B,YAAY,mBAAO,CAAC,GAAQ;;AAE5B;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,2BAA2B;AACtC,WAAW,kBAAkB;AAC7B,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,kCAAkC;;AAElC;AACA;AACA,cAAc;AACd;AACA;AACA,0BAA0B;;AAE1B;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc,kBAAkB;AAChC;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB,YAAY,UAAU;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,uBAAuB,8BAA8B;AACrD;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uBAAuB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAA0B,6BAA6B;AACvD;AACA;AACA;AACA;;AAEA;AACA,sCAAsC,cAAc;AACpD;AACA,UAAU;AACV,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;;AAEA;AACA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;;;;;;;AC1Ma;AACb;;AAEA,gBAAgB,mBAAO,CAAC,GAAgB;;AAExC,iBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,WAAW;AACtB;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,oBAAoB,IAAI,mBAAmB,uCAAuC;AAC/F,YAAY,MAAM;AAClB;AACA;;AAEA;;AAEA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA,2BAA2B;AAC3B;AACA,iEAAiE;AACjE,iEAAiE;AACjE,iEAAiE;AACjE,iEAAiE;AACjE,iEAAiE;;AAEjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,kCAAkC;AAClC,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,aAAa,KAAK;AAClB;;AAEA;AACA;AACA;AACA;AACA,aAAa,KAAK;AAClB;;AAEA;AACA;AACA;AACA;AACA,aAAa,KAAK;AAClB;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,aAAa,KAAK;AAClB;;AAEA;AACA;AACA;AACA;AACA,aAAa,KAAK;AAClB;;AAEA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA,KAAK;AACL;;;;;;;;AC1Za;AACb;;AAEA;AACA,aAAa,mBAAO,CAAC,GAAU;AAC/B;;AAEA,WAAW,mBAAO,CAAC,GAAgB;;AAEnC;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;;AAEA;;;;;;;;AClDa;AACb;;AAEA;AACA,gBAAgB,mBAAO,CAAC,GAAa;AACrC;;AAEA,cAAc,mBAAO,CAAC,GAAS;AAC/B,cAAc,mBAAO,CAAC,EAAQ;AAC9B,cAAc,mBAAO,CAAC,GAAS;AAC/B,cAAc,mBAAO,CAAC,GAAQ;;AAE9B;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,YAAY;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,cAAc;AACzB,aAAa;AACb;AACA;;AAEA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,cAAc;AACzB,WAAW,aAAa;AACxB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2BAA2B;AACrD;AACA;AACA;AACA,+BAA+B,+BAA+B;AAC9D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,+BAA+B;AAC/B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,aAAa;AACxB,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,cAAc,uCAAuC,qBAAqB;AACrF,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,cAAc,uCAAuC,qBAAqB;AACrF,aAAa,KAAK;AAClB,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA,uDAAuD;;AAEvD,KAAK;;AAEL;AACA,2BAA2B,0BAA0B;AACrD;AACA;AACA;AACA;AACA,uBAAuB,iDAAiD;AACxE;AACA;AACA,gDAAgD;AAChD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA,8DAA8D;AAC9D;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA,8CAA8C;;AAE9C,KAAK;;AAEL,uBAAuB,iDAAiD;AACxE;;AAEA;AACA,8CAA8C;;AAE9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC1Wa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACjBa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC,qBAAqB;AACtD;AACA,UAAU;AACV,WAAW,mCAAmC,YAAY,GAAG;AAC7D,WAAW,WAAW;AACtB,WAAW,gBAAgB;AAC3B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,mCAAmC,cAAc;AACjD;AACA,UAAU;AACV,WAAW,WAAW;AACtB,WAAW,gBAAgB;AAC3B,aAAa;AACb;;AAEA,cAAc,mBAAO,CAAC,GAAe;;;;;;;;ACnCxB;AACb;;AAEA,WAAW,mBAAO,CAAC,GAAiB;;AAEpC;AACA;;AAEA;AACA,yCAAyC,sCAAsC;AAC/E;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA,UAAU;AACV,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,aAAa;AACb;;AAEA;AACA,+BAA+B,kBAAkB,gBAAgB,qBAAqB;AACtF;AACA;AACA;AACA,UAAU;AACV,WAAW,sBAAsB;AACjC,WAAW,gCAAgC;AAC3C,aAAa,uBAAuB;AACpC;;AAEA;AACA;AACA,6CAA6C,qBAAqB;AAClE;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA,mCAAmC,kCAAkC;AACrE,WAAW,oCAAoC;AAC/C,WAAW,kBAAkB;AAC7B,WAAW,kBAAkB;AAC7B,WAAW,sBAAsB;AACjC,WAAW,gCAAgC;AAC3C,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,+BAA+B,kCAAkC,EAAE;AACnE;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,+BAA+B,eAAe,EAAE;AAChD;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7Ia;AACb;;AAEA;AACA,gBAAgB,mBAAO,CAAC,GAAa;AACrC;;AAEA,aAAa,mBAAO,CAAC,GAAU;AAC/B,aAAa,mBAAO,CAAC,GAAQ;AAC7B,aAAa,mBAAO,CAAC,GAAO;;AAE5B;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B,YAAY,UAAU;AACtB;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,sBAAsB;;AAEtB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,wBAAwB;AACtC;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;AACA,0DAA0D,kBAAkB;AAC5E;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G;AAC5G;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,YAAY;AACzB;AACA;AACA;AACA,2BAA2B,gDAAgD;AAC3E;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;ACtKa;AACb;;AAEA;AACA,gBAAgB,mBAAO,CAAC,GAAa;AACrC;;AAEA,gBAAgB,mBAAO,CAAC,EAAQ;AAChC,gBAAgB,mBAAO,CAAC,GAAS;AACjC,gBAAgB,mBAAO,CAAC,GAAS;AACjC,gBAAgB,mBAAO,CAAC,EAAY;AACpC,gBAAgB,mBAAO,CAAC,GAAW;AACnC,gBAAgB,mBAAO,CAAC,GAAW;AACnC,gBAAgB,mBAAO,CAAC,GAAU;AAClC,gBAAgB,mBAAO,CAAC,GAAU;AAClC,gBAAgB,mBAAO,CAAC,GAAQ;AAChC,gBAAgB,mBAAO,CAAC,GAAW;AACnC,gBAAgB,mBAAO,CAAC,GAAW;AACnC,gBAAgB,mBAAO,CAAC,GAAY;AACpC,gBAAgB,mBAAO,CAAC,GAAa;AACrC,gBAAgB,mBAAO,CAAC,GAAY;;AAEpC;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,qBAAqB;;AAErB;AACA;AACA,cAAc;AACd;AACA,4BAA4B;;AAE5B;AACA;AACA,cAAc;AACd;AACA,gCAAgC;;AAEhC;AACA;AACA,cAAc;AACd;AACA,8BAA8B;;AAE9B;AACA;AACA,cAAc;AACd;AACA,2BAA2B;;AAE3B;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6DAA6D,kBAAkB;AAC/E;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,gGAAgG,cAAc,2GAA2G,cAAc;AACvO;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,kBAAkB,+CAA+C;AACjE,+CAA+C;;AAE/C;AACA;AACA,uBAAuB,+CAA+C;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,0BAA0B,8BAA8B;AACxD;AACA,uBAAuB;AACvB;AACA;AACA;AACA,yCAAyC,YAAY;AACrD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,uBAAuB;AACrC,cAAc,uBAAuB;AACrC,cAAc,WAAW;AACzB,cAAc,WAAW;AACzB,cAAc,QAAQ;AACtB;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,kBAAkB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,kBAAkB;AACvE;AACA;AACA,qDAAqD,kBAAkB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oFAAoF,4BAA4B,EAAE,uBAAuB;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa,KAAK;AAClB,YAAY,UAAU;AACtB,YAAY,MAAM;AAClB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa,KAAK;AAClB,YAAY,UAAU;AACtB,YAAY,MAAM;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,UAAU,EAAE;AACzB;AACA;AACA;AACA;;AAEA;AACA,YAAY,yBAAyB,GAAG,yBAAyB,MAAM,yBAAyB;AAChG,aAAa,KAAK;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,+CAA+C;AAClE;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,wDAAwD,yBAAyB;AACjF,WAAW,UAAU,oBAAoB;AACzC,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA,gDAAgD;AAChD;;AAEA;AACA,iGAAiG,yBAAyB;AAC1H,WAAW,UAAU,oBAAoB;AACzC,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,OAAO;AAClB,aAAa,UAAU,EAAE;AACzB,YAAY,MAAM;AAClB,YAAY,qBAAqB,EAAE;AACnC;AACA;AACA,+CAA+C;AAC/C;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,UAAU,EAAE;AACzB,YAAY,MAAM;AAClB,YAAY,mBAAmB;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,YAAY;AACzB;AACA;AACA,wCAAwC;AACxC;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,UAAU,EAAE;AACzB;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,oBAAoB,MAAM,uBAAuB;AACnF;AACA,cAAc,SAAS;AACvB;AACA,wFAAwF,WAAW;AACnG,cAAc,SAAS;AACvB;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB;;AAEA;AACA;AACA,WAAW,UAAU,EAAE;AACvB,WAAW,mBAAmB;AAC9B,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;;AAEA;AACA,sCAAsC,aAAa;AACnD;AACA,UAAU;AACV,WAAW,eAAe;AAC1B,aAAa;AACb;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5kBa;;AAEb;AACA;AACA;AACA;AACA;;AAEA,WAAW,mBAAO,CAAC,GAAQ;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,QAAQ;AACtB,cAAc,OAAO;AACrB,cAAc,eAAe;AAC7B,cAAc,KAAK;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACnMa;;AAEb;AACA;AACA;AACA;AACA,WAAW,yCAA0C;;AAErD,YAAY,mBAAO,CAAC,EAAS;;AAE7B;AACA;;AAEA,eAAe,mBAAO,CAAC,GAAqB;AAC5C,eAAe,mBAAO,CAAC,GAAmB;AAC1C,eAAe,mBAAO,CAAC,GAAkB;;AAEzC;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,kBAAkB;AAC/B;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,uDAAuD,yBAAyB,EAAE;AAClF;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACA,cAAc,KAAK;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,mBAAO,CAAC,GAAQ;;AAE/B;AACA;AACA,qBAAqB;AACrB,0CAA0C,iCAAiC;AAC3E,oDAAoD,iCAAiC;AACrF;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAe,mBAAO,CAAC,EAAQ;;AAE/B;AACA;AACA,4CAA4C,gCAAgC;AAC5E;AACA;;;AAGA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,gEAAgE,mBAAO,CAAC,GAAQ;AAChF;AACA,CAAC;;;;;;;;AChNY;AACb;;AAEA,WAAW,mBAAO,CAAC,GAAiB;;AAEpC;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;;AAEA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA,4BAA4B,UAAU;AACtC,4CAA4C,aAAa;AACzD,0BAA0B,UAAU;;AAEpC;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACvMa;AACb;;AAEA;AACA,iBAAiB,mBAAO,CAAC,GAAuB;;AAEhD;AACA,cAAc,mBAAO,CAAC,GAAoB;;AAE1C;AACA,oBAAoB,mBAAO,CAAC,GAA0B;;AAEtD;AACA,aAAa,mBAAO,CAAC,GAAmB;;AAExC;AACA,eAAe,mBAAO,CAAC,GAAqB;;AAE5C;AACA,YAAY,mBAAO,CAAC,GAAkB;;AAEtC;AACA,YAAY,mBAAO,CAAC,GAAkB;;AAEtC;AACA,gBAAgB,mBAAO,CAAC,GAAY;;AAEpC;AACA;AACA;AACA,UAAU;AACV;AACA,6BAA6B,qBAAM;AACnC,sBAAsB,qBAAM;AAC5B,sBAAsB,qBAAM;AAC5B,sBAAsB,qBAAM;AAC5B,sBAAsB,qBAAM;;AAE5B;AACA;AACA;AACA,UAAU;AACV;AACA,6BAA6B,qBAAM;AACnC;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,oFAAoF;;AAEpF;AACA;AACA,UAAU;AACV;AACA;AACA,mDAAmD,kCAAkC;;AAErF;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,QAAQ;AACtB;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA,kCAAkC,EAAE;;AAEpC;AACA;AACA,WAAW,YAAY;AACvB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,kBAAkB;AAC7B,WAAW,QAAQ;AACnB,aAAa,kBAAkB;AAC/B;AACA,oCAAoC;AACpC,4CAA4C,iBAAiB;AAC7D;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,mBAAmB;AAChC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA,gDAAgD,kBAAkB,gBAAgB,EAAE,EAAE;;AAEtF;AACA;AACA;AACA;AACA,kDAAkD,iCAAiC;;AAEnF;AACA;AACA;;AAEA;;AAEA,0DAA0D,kBAAkB,aAAa,EAAE,EAAE;;AAE7F;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B;AACA;AACA,oCAAoC;AACpC,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA,kCAAkC,uBAAuB;AACzD;AACA,UAAU;AACV,aAAa,iBAAiB;AAC9B;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,YAAY;AACzB;AACA;AACA;AACA,mBAAmB,uBAAuB;AAC1C;;AAEA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA,uBAAuB;AACvB,+DAA+D,QAAQ;AACvE;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,uBAAuB;AACzD;AACA,UAAU;AACV,WAAW,iBAAiB;AAC5B,aAAa;AACb;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,YAAY;AACzB;AACA;;AAEA;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;;AAEA;AACA,wCAAwC,qBAAqB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpaa;AACb;;AAEA,gBAAgB,mBAAO,CAAC,EAAQ;AAChC,gBAAgB,mBAAO,CAAC,GAAQ;;AAEhC;AACA,kIAAkI,oBAAoB;AACtJ;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,yBAAyB;AACzB;AACA;AACA,0EAA0E,iBAAiB;AAC3F;AACA;AACA;AACA,eAAe;AACf,SAAS;AACT;AACA,eAAe;AACf,6CAA6C;AAC7C;AACA;AACA,eAAe;AACf;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd,mBAAmB,gDAAgD;AACnE;AACA;;AAEA;AACA,6CAA6C,oBAAoB;;AAEjE;AACA,wBAAwB;AACxB;AACA;AACA;AACA,0BAA0B,WAAW,KAAK;AAC1C;AACA;AACA,eAAe;;AAEf;AACA,SAAS,2BAA2B;AACpC;AACA;AACA,0BAA0B,YAAY,KAAK;AAC3C;AACA,eAAe;;AAEf;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,C;;;;;;;AChLa;;AAEb;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA,cAAc,mBAAO,CAAC,GAAW;;AAEjC;AACA,qCAAqC,eAAe;AACpD;AACA,UAAU;AACV,WAAW,kBAAkB;AAC7B,aAAa,UAAU,EAAE;AACzB;AACA;;AAEA;AACA,mCAAmC,eAAe;AAClD;AACA,UAAU;AACV,WAAW,UAAU,EAAE;AACvB,WAAW,mBAAmB;AAC9B,aAAa,kBAAkB;AAC/B;AACA;;AAEA;AACA,gCAAgC,eAAe;AAC/C;AACA,cAAc,2BAA2B;AACzC,cAAc,yBAAyB;AACvC;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACrGa;AACb;;AAEA,gBAAgB,mBAAO,CAAC,GAAgB;;AAExC,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,gCAAgC;AAC3C,WAAW,OAAO;AAClB,WAAW,EAAE;AACb;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,mBAAmB;AACnB;;AAEA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,oBAAoB,IAAI,mBAAmB,0CAA0C;AAClG;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,WAAW;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,gCAAgC;AAC3C,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,OAAO;AACpB,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,OAAO;AACpB,YAAY,UAAU;AACtB;AACA;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,OAAO;AACpB,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,OAAO;AACpB,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,OAAO;AACpB,YAAY,UAAU;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,yBAAyB,KAAK,2BAA2B;AACrE,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;AChda;AACb;;AAEA;AACA,aAAa,mBAAO,CAAC,GAAU;AAC/B;;AAEA,WAAW,mBAAO,CAAC,GAAgB;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;;AAEA;;;;;;;;;;;;;;UCpFA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCrBA;WACA;WACA;WACA;WACA,EAAE;WACF;WACA;WACA,CAAC,I;;;;UCPD;UACA;UACA;UACA","file":"centrifuge.protobuf.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Centrifuge\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Centrifuge\"] = factory();\n\telse\n\t\troot[\"Centrifuge\"] = factory();\n})(this, function() {\nreturn ","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = codegen;\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @param {string[]} functionParams Function parameter names\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n */\r\nfunction codegen(functionParams, functionName) {\r\n\r\n /* istanbul ignore if */\r\n if (typeof functionParams === \"string\") {\r\n functionName = functionParams;\r\n functionParams = undefined;\r\n }\r\n\r\n var body = [];\r\n\r\n /**\r\n * Appends code to the function's body or finishes generation.\r\n * @typedef Codegen\r\n * @type {function}\r\n * @param {string|Object.} [formatStringOrScope] Format string or, to finish the function, an object of additional scope variables, if any\r\n * @param {...*} [formatParams] Format parameters\r\n * @returns {Codegen|Function} Itself or the generated function if finished\r\n * @throws {Error} If format parameter counts do not match\r\n */\r\n\r\n function Codegen(formatStringOrScope) {\r\n // note that explicit array handling below makes this ~50% faster\r\n\r\n // finish the function\r\n if (typeof formatStringOrScope !== \"string\") {\r\n var source = toString();\r\n if (codegen.verbose)\r\n console.log(\"codegen: \" + source); // eslint-disable-line no-console\r\n source = \"return \" + source;\r\n if (formatStringOrScope) {\r\n var scopeKeys = Object.keys(formatStringOrScope),\r\n scopeParams = new Array(scopeKeys.length + 1),\r\n scopeValues = new Array(scopeKeys.length),\r\n scopeOffset = 0;\r\n while (scopeOffset < scopeKeys.length) {\r\n scopeParams[scopeOffset] = scopeKeys[scopeOffset];\r\n scopeValues[scopeOffset] = formatStringOrScope[scopeKeys[scopeOffset++]];\r\n }\r\n scopeParams[scopeOffset] = source;\r\n return Function.apply(null, scopeParams).apply(null, scopeValues); // eslint-disable-line no-new-func\r\n }\r\n return Function(source)(); // eslint-disable-line no-new-func\r\n }\r\n\r\n // otherwise append to body\r\n var formatParams = new Array(arguments.length - 1),\r\n formatOffset = 0;\r\n while (formatOffset < formatParams.length)\r\n formatParams[formatOffset] = arguments[++formatOffset];\r\n formatOffset = 0;\r\n formatStringOrScope = formatStringOrScope.replace(/%([%dfijs])/g, function replace($0, $1) {\r\n var value = formatParams[formatOffset++];\r\n switch ($1) {\r\n case \"d\": case \"f\": return String(Number(value));\r\n case \"i\": return String(Math.floor(value));\r\n case \"j\": return JSON.stringify(value);\r\n case \"s\": return String(value);\r\n }\r\n return \"%\";\r\n });\r\n if (formatOffset !== formatParams.length)\r\n throw Error(\"parameter count mismatch\");\r\n body.push(formatStringOrScope);\r\n return Codegen;\r\n }\r\n\r\n function toString(functionNameOverride) {\r\n return \"function \" + (functionNameOverride || functionName || \"\") + \"(\" + (functionParams && functionParams.join(\",\") || \"\") + \"){\\n \" + body.join(\"\\n \") + \"\\n}\";\r\n }\r\n\r\n Codegen.toString = toString;\r\n return Codegen;\r\n}\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @function codegen\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * When set to `true`, codegen will log generated code to console. Useful for debugging.\r\n * @name util.codegen.verbose\r\n * @type {boolean}\r\n */\r\ncodegen.verbose = false;\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\nmodule.exports = fetch;\r\n\r\nvar asPromise = require(\"@protobufjs/aspromise\"),\r\n inquire = require(\"@protobufjs/inquire\");\r\n\r\nvar fs = inquire(\"fs\");\r\n\r\n/**\r\n * Node-style callback as used by {@link util.fetch}.\r\n * @typedef FetchCallback\r\n * @type {function}\r\n * @param {?Error} error Error, if any, otherwise `null`\r\n * @param {string} [contents] File contents, if there hasn't been an error\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Options as used by {@link util.fetch}.\r\n * @typedef FetchOptions\r\n * @type {Object}\r\n * @property {boolean} [binary=false] Whether expecting a binary response\r\n * @property {boolean} [xhr=false] If `true`, forces the use of XMLHttpRequest\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @memberof util\r\n * @param {string} filename File path or url\r\n * @param {FetchOptions} options Fetch options\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n */\r\nfunction fetch(filename, options, callback) {\r\n if (typeof options === \"function\") {\r\n callback = options;\r\n options = {};\r\n } else if (!options)\r\n options = {};\r\n\r\n if (!callback)\r\n return asPromise(fetch, this, filename, options); // eslint-disable-line no-invalid-this\r\n\r\n // if a node-like filesystem is present, try it first but fall back to XHR if nothing is found.\r\n if (!options.xhr && fs && fs.readFile)\r\n return fs.readFile(filename, function fetchReadFileCallback(err, contents) {\r\n return err && typeof XMLHttpRequest !== \"undefined\"\r\n ? fetch.xhr(filename, options, callback)\r\n : err\r\n ? callback(err)\r\n : callback(null, options.binary ? contents : contents.toString(\"utf8\"));\r\n });\r\n\r\n // use the XHR version otherwise.\r\n return fetch.xhr(filename, options, callback);\r\n}\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchOptions} [options] Fetch options\r\n * @returns {Promise} Promise\r\n * @variation 3\r\n */\r\n\r\n/**/\r\nfetch.xhr = function fetch_xhr(filename, options, callback) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.onreadystatechange /* works everywhere */ = function fetchOnReadyStateChange() {\r\n\r\n if (xhr.readyState !== 4)\r\n return undefined;\r\n\r\n // local cors security errors return status 0 / empty string, too. afaik this cannot be\r\n // reliably distinguished from an actually empty file for security reasons. feel free\r\n // to send a pull request if you are aware of a solution.\r\n if (xhr.status !== 0 && xhr.status !== 200)\r\n return callback(Error(\"status \" + xhr.status));\r\n\r\n // if binary data is expected, make sure that some sort of array is returned, even if\r\n // ArrayBuffers are not supported. the binary string fallback, however, is unsafe.\r\n if (options.binary) {\r\n var buffer = xhr.response;\r\n if (!buffer) {\r\n buffer = [];\r\n for (var i = 0; i < xhr.responseText.length; ++i)\r\n buffer.push(xhr.responseText.charCodeAt(i) & 255);\r\n }\r\n return callback(null, typeof Uint8Array !== \"undefined\" ? new Uint8Array(buffer) : buffer);\r\n }\r\n return callback(null, xhr.responseText);\r\n };\r\n\r\n if (options.binary) {\r\n // ref: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data#Receiving_binary_data_in_older_browsers\r\n if (\"overrideMimeType\" in xhr)\r\n xhr.overrideMimeType(\"text/plain; charset=x-user-defined\");\r\n xhr.responseType = \"arraybuffer\";\r\n }\r\n\r\n xhr.open(\"GET\", filename);\r\n xhr.send();\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal path module to resolve Unix, Windows and URL paths alike.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar path = exports;\r\n\r\nvar isAbsolute =\r\n/**\r\n * Tests if the specified path is absolute.\r\n * @param {string} path Path to test\r\n * @returns {boolean} `true` if path is absolute\r\n */\r\npath.isAbsolute = function isAbsolute(path) {\r\n return /^(?:\\/|\\w+:)/.test(path);\r\n};\r\n\r\nvar normalize =\r\n/**\r\n * Normalizes the specified path.\r\n * @param {string} path Path to normalize\r\n * @returns {string} Normalized path\r\n */\r\npath.normalize = function normalize(path) {\r\n path = path.replace(/\\\\/g, \"/\")\r\n .replace(/\\/{2,}/g, \"/\");\r\n var parts = path.split(\"/\"),\r\n absolute = isAbsolute(path),\r\n prefix = \"\";\r\n if (absolute)\r\n prefix = parts.shift() + \"/\";\r\n for (var i = 0; i < parts.length;) {\r\n if (parts[i] === \"..\") {\r\n if (i > 0 && parts[i - 1] !== \"..\")\r\n parts.splice(--i, 2);\r\n else if (absolute)\r\n parts.splice(i, 1);\r\n else\r\n ++i;\r\n } else if (parts[i] === \".\")\r\n parts.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n return prefix + parts.join(\"/\");\r\n};\r\n\r\n/**\r\n * Resolves the specified include path against the specified origin path.\r\n * @param {string} originPath Path to the origin file\r\n * @param {string} includePath Include path relative to origin path\r\n * @param {boolean} [alreadyNormalized=false] `true` if both paths are already known to be normalized\r\n * @returns {string} Path to the include file\r\n */\r\npath.resolve = function resolve(originPath, includePath, alreadyNormalized) {\r\n if (!alreadyNormalized)\r\n includePath = normalize(includePath);\r\n if (isAbsolute(includePath))\r\n return includePath;\r\n if (!alreadyNormalized)\r\n originPath = normalize(originPath);\r\n return (originPath = originPath.replace(/(?:\\/|^)[^/]+$/, \"\")).length ? normalize(originPath + \"/\" + includePath) : includePath;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","import EventEmitter from 'events';\nimport Subscription from './subscription';\n\nimport {\n JsonEncoder,\n JsonDecoder,\n JsonMethodType,\n JsonPushType\n} from './json';\n\nimport {\n isFunction,\n log,\n startsWith,\n errorExists,\n backoff,\n extend\n} from './utils';\n\nconst _errorTimeout = 'timeout';\nconst _errorConnectionClosed = 'connection closed';\n\nexport class Centrifuge extends EventEmitter {\n\n constructor(url, options) {\n super();\n this._url = url;\n this._websocket = null;\n this._sockjs = null;\n this._isSockjs = false;\n this._binary = false;\n this._methodType = null;\n this._pushType = null;\n this._encoder = null;\n this._decoder = null;\n this._status = 'disconnected';\n this._reconnect = true;\n this._reconnecting = false;\n this._transport = null;\n this._transportName = null;\n this._transportClosed = true;\n this._messageId = 0;\n this._clientID = null;\n this._refreshRequired = false;\n this._subs = {};\n this._serverSubs = {};\n this._lastSeq = {};\n this._lastGen = {};\n this._lastOffset = {};\n this._lastEpoch = {};\n this._messages = [];\n this._isBatching = false;\n this._isSubscribeBatching = false;\n this._privateChannels = {};\n this._numRefreshFailed = 0;\n this._refreshTimeout = null;\n this._pingTimeout = null;\n this._pongTimeout = null;\n this._subRefreshTimeouts = {};\n this._retries = 0;\n this._callbacks = {};\n this._latency = null;\n this._latencyStart = null;\n this._connectData = null;\n this._token = null;\n this._xhrID = 0;\n this._xhrs = {};\n this._dispatchPromise = Promise.resolve();\n this._config = {\n debug: false,\n name: '',\n version: '',\n websocket: null,\n sockjs: null,\n minRetry: 1000,\n maxRetry: 20000,\n timeout: 5000,\n ping: true,\n pingInterval: 25000,\n pongWaitTimeout: 5000,\n privateChannelPrefix: '$',\n onTransportClose: null,\n sockjsServer: null,\n sockjsTransports: [\n 'websocket',\n 'xdr-streaming',\n 'xhr-streaming',\n 'eventsource',\n 'iframe-eventsource',\n 'iframe-htmlfile',\n 'xdr-polling',\n 'xhr-polling',\n 'iframe-xhr-polling',\n 'jsonp-polling'\n ],\n refreshEndpoint: '/centrifuge/refresh',\n refreshHeaders: {},\n refreshParams: {},\n refreshData: {},\n refreshAttempts: null,\n refreshInterval: 1000,\n onRefreshFailed: null,\n onRefresh: null,\n subscribeEndpoint: '/centrifuge/subscribe',\n subscribeHeaders: {},\n subscribeParams: {},\n subRefreshInterval: 1000,\n onPrivateSubscribe: null\n };\n this._configure(options);\n }\n\n setToken(token) {\n this._token = token;\n }\n\n setConnectData(data) {\n this._connectData = data;\n }\n\n setRefreshHeaders(headers) {\n this._config.refreshHeaders = headers;\n }\n setRefreshParams(params) {\n this._config.refreshParams = params;\n }\n setRefreshData(data) {\n this._config.refreshData = data;\n }\n\n setSubscribeHeaders(headers) {\n this._config.subscribeHeaders = headers;\n }\n setSubscribeParams(params) {\n this._config.subscribeParams = params;\n }\n\n _ajax(url, params, headers, data, callback) {\n let query = '';\n this._debug('sending AJAX request to', url, 'with data', JSON.stringify(data));\n\n const xhr = (global.XMLHttpRequest ? new global.XMLHttpRequest() : new global.ActiveXObject('Microsoft.XMLHTTP'));\n\n for (const i in params) {\n if (params.hasOwnProperty(i)) {\n if (query.length > 0) {\n query += '&';\n }\n query += encodeURIComponent(i) + '=' + encodeURIComponent(params[i]);\n }\n }\n if (query.length > 0) {\n query = '?' + query;\n }\n xhr.open('POST', url + query, true);\n if ('withCredentials' in xhr) {\n xhr.withCredentials = true;\n }\n\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.setRequestHeader('Content-Type', 'application/json');\n for (const headerName in headers) {\n if (headers.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, headers[headerName]);\n }\n }\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data, parsed = false;\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback({\n error: 'Invalid JSON. Data was: ' + xhr.responseText,\n status: 200,\n data: null\n });\n }\n if (parsed) { // prevents double execution.\n callback({\n data: data,\n status: 200\n });\n }\n } else {\n this._log('wrong status code in AJAX response', xhr.status);\n callback({\n status: xhr.status,\n data: null\n });\n }\n }\n };\n setTimeout(() => xhr.send(JSON.stringify(data)), 20);\n return xhr;\n };\n\n _log() {\n log('info', arguments);\n };\n\n _debug() {\n if (this._config.debug === true) {\n log('debug', arguments);\n }\n };\n\n _websocketSupported() {\n if (this._config.websocket !== null) {\n return true;\n }\n return !(typeof WebSocket !== 'function' && typeof WebSocket !== 'object');\n };\n\n _setFormat(format) {\n if (this._formatOverride(format)) {\n return;\n }\n if (format === 'protobuf') {\n throw new Error('not implemented by JSON only Centrifuge client – use client with Protobuf');\n }\n this._binary = false;\n this._methodType = JsonMethodType;\n this._pushType = JsonPushType;\n this._encoder = new JsonEncoder();\n this._decoder = new JsonDecoder();\n }\n\n _formatOverride(format) {\n return false;\n }\n\n _configure(configuration) {\n if (!('Promise' in global)) {\n throw new Error('Promise polyfill required');\n }\n\n extend(this._config, configuration || {});\n this._debug('centrifuge config', this._config);\n\n if (!this._url) {\n throw new Error('url required');\n }\n\n if (startsWith(this._url, 'ws') && this._url.indexOf('format=protobuf') > -1) {\n this._setFormat('protobuf');\n } else {\n this._setFormat('json');\n }\n\n if (startsWith(this._url, 'http')) {\n this._debug('client will try to connect to SockJS endpoint');\n if (this._config.sockjs !== null) {\n this._debug('SockJS explicitly provided in options');\n this._sockjs = this._config.sockjs;\n } else {\n if (typeof global.SockJS === 'undefined') {\n throw new Error('SockJS not found, use ws:// in url or include SockJS');\n }\n this._debug('use globally defined SockJS');\n this._sockjs = global.SockJS;\n }\n } else {\n this._debug('client will connect to websocket endpoint');\n }\n };\n\n _setStatus(newStatus) {\n if (this._status !== newStatus) {\n this._debug('Status', this._status, '->', newStatus);\n this._status = newStatus;\n }\n };\n\n _isDisconnected() {\n return this._status === 'disconnected';\n };\n\n _isConnecting() {\n return this._status === 'connecting';\n };\n\n _isConnected() {\n return this._status === 'connected';\n };\n\n _nextMessageId() {\n return ++this._messageId;\n };\n\n _resetRetry() {\n this._debug('reset retries count to 0');\n this._retries = 0;\n };\n\n _getRetryInterval() {\n const interval = backoff(this._retries, this._config.minRetry, this._config.maxRetry);\n\n this._retries += 1;\n return interval;\n };\n\n _abortInflightXHRs() {\n for (const xhrID in this._xhrs) {\n try {\n this._xhrs[xhrID].abort();\n } catch (e) {\n this._debug('error aborting xhr', e);\n }\n delete this._xhrs[xhrID];\n }\n };\n\n _clearConnectedState(reconnect) {\n this._clientID = null;\n this._stopPing();\n\n // fire errbacks of registered outgoing calls.\n for (const id in this._callbacks) {\n if (this._callbacks.hasOwnProperty(id)) {\n const callbacks = this._callbacks[id];\n clearTimeout(callbacks.timeout);\n const errback = callbacks.errback;\n if (!errback) {\n continue;\n }\n errback({error: this._createErrorObject('disconnected')});\n }\n }\n this._callbacks = {};\n\n // fire unsubscribe events\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n\n if (reconnect) {\n if (sub._isSuccess()) {\n sub._triggerUnsubscribe();\n sub._recover = true;\n }\n if (sub._shouldResubscribe()) {\n sub._setSubscribing();\n }\n } else {\n sub._setUnsubscribed();\n }\n }\n }\n\n this._abortInflightXHRs();\n\n // clear refresh timer\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n // clear sub refresh timers\n for (const channel in this._subRefreshTimeouts) {\n if (this._subRefreshTimeouts.hasOwnProperty(channel) && this._subRefreshTimeouts[channel]) {\n this._clearSubRefreshTimeout(channel);\n }\n }\n this._subRefreshTimeouts = {};\n\n if (!this._reconnect) {\n // completely clear subscriptions\n this._subs = {};\n }\n };\n\n _isTransportOpen() {\n if (this._isSockjs) {\n return this._transport &&\n this._transport.transport &&\n this._transport.transport.readyState === this._transport.transport.OPEN;\n }\n return this._transport && this._transport.readyState === this._transport.OPEN;\n };\n\n _transportSend(commands) {\n if (!commands.length) {\n return true;\n }\n\n if (!this._isTransportOpen()) {\n // resolve pending commands with error if transport is not open\n for (let command in commands) {\n let id = command.id;\n if (!(id in this._callbacks)) {\n continue;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n const errback = callbacks.errback;\n errback({error: this._createErrorObject(_errorConnectionClosed, 0)});\n }\n return false;\n }\n this._transport.send(this._encoder.encodeCommands(commands));\n return true;\n }\n\n _setupTransport() {\n this._isSockjs = false;\n\n // detect transport to use - SockJS or Websocket\n if (this._sockjs !== null) {\n const sockjsOptions = {\n transports: this._config.sockjsTransports\n };\n\n if (this._config.sockjsServer !== null) {\n sockjsOptions.server = this._config.sockjsServer;\n }\n this._isSockjs = true;\n this._transport = new this._sockjs(this._url, null, sockjsOptions);\n } else {\n if (!this._websocketSupported()) {\n this._debug('No Websocket support and no SockJS configured, can not connect');\n return;\n }\n if (this._config.websocket !== null) {\n this._websocket = this._config.websocket;\n } else {\n this._websocket = WebSocket;\n }\n this._transport = new this._websocket(this._url);\n if (this._binary === true) {\n this._transport.binaryType = 'arraybuffer';\n }\n }\n\n this._transport.onopen = () => {\n this._transportClosed = false;\n\n if (this._isSockjs) {\n this._transportName = 'sockjs-' + this._transport.transport;\n this._transport.onheartbeat = () => this._restartPing();\n } else {\n this._transportName = 'websocket';\n }\n\n // Can omit method here due to zero value.\n const msg = {\n // method: this._methodType.CONNECT\n };\n\n if (this._token || this._connectData || this._config.name || this._config.version) {\n msg.params = {};\n }\n if (this._token) {\n msg.params.token = this._token;\n }\n if (this._connectData) {\n msg.params.data = this._connectData;\n }\n if (this._config.name) {\n msg.params.name = this._config.name;\n }\n if (this._config.version) {\n msg.params.version = this._config.version;\n }\n\n let subs = {};\n let hasSubs = false;\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel) && this._serverSubs[channel].recoverable) {\n hasSubs = true;\n let sub = {\n 'recover': true\n };\n if (this._serverSubs[channel].seq || this._serverSubs[channel].gen) {\n if (this._serverSubs[channel].seq) {\n sub['seq'] = this._serverSubs[channel].seq;\n }\n if (this._serverSubs[channel].gen) {\n sub['gen'] = this._serverSubs[channel].gen;\n }\n } else {\n if (this._serverSubs[channel].offset) {\n sub['offset'] = this._serverSubs[channel].offset;\n }\n }\n if (this._serverSubs[channel].epoch) {\n sub['epoch'] = this._serverSubs[channel].epoch;\n }\n subs[channel] = sub;\n }\n }\n if (hasSubs) {\n if (!msg.params) {msg.params = {};}\n msg.params.subs = subs;\n }\n\n this._latencyStart = new Date();\n this._call(msg).then(resolveCtx => {\n this._connectResponse(this._decoder.decodeCommandResult(this._methodType.CONNECT, resolveCtx.result), hasSubs);\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n const err = rejectCtx.error;\n if (err.code === 109) { // token expired.\n this._refreshRequired = true;\n }\n this._disconnect('connect error', true);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n this._transport.onerror = error => {\n this._debug('transport level error', error);\n };\n\n this._transport.onclose = closeEvent => {\n this._transportClosed = true;\n let reason = _errorConnectionClosed;\n let needReconnect = true;\n\n if (closeEvent && 'reason' in closeEvent && closeEvent.reason) {\n try {\n const advice = JSON.parse(closeEvent.reason);\n this._debug('reason is an advice object', advice);\n reason = advice.reason;\n needReconnect = advice.reconnect;\n } catch (e) {\n reason = closeEvent.reason;\n this._debug('reason is a plain string', reason);\n }\n }\n\n // onTransportClose callback should be executed every time transport was closed.\n // This can be helpful to catch failed connection events (because our disconnect\n // event only called once and every future attempts to connect do not fire disconnect\n // event again).\n if (this._config.onTransportClose !== null) {\n this._config.onTransportClose({\n event: closeEvent,\n reason: reason,\n reconnect: needReconnect\n });\n }\n\n this._disconnect(reason, needReconnect);\n\n if (this._reconnect === true) {\n this._reconnecting = true;\n const interval = this._getRetryInterval();\n\n this._debug('reconnect after ' + interval + ' milliseconds');\n setTimeout(() => {\n if (this._reconnect === true) {\n if (this._refreshRequired) {\n this._refresh();\n } else {\n this._connect();\n }\n }\n }, interval);\n }\n };\n\n this._transport.onmessage = event => {\n this._dataReceived(event.data);\n };\n };\n\n rpc(data) {\n return this._rpc('', data);\n }\n\n namedRPC(method, data) {\n return this._rpc(method, data);\n }\n\n _rpc(method, data) {\n let params = {\n data: data\n };\n if (method !== '') {\n params.method = method;\n };\n const msg = {\n method: this._methodType.RPC,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return result;\n });\n }\n\n send(data) {\n const msg = {\n method: this._methodType.SEND,\n params: {\n data: data\n }\n };\n\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n\n const sent = this._transportSend([msg]); // can send async message to server without id set\n if (!sent) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n };\n return Promise.resolve({});\n }\n\n _getHistoryParams(channel, options) {\n let params = {\n channel: channel\n };\n if (options !== undefined) {\n if (options.since) {\n params['use_since'] = true;\n if (options.since.offset) {\n params['offset'] = options.since.offset;\n }\n if (options.since.epoch) {\n params['epoch'] = options.since.epoch;\n }\n };\n if (options.limit !== undefined) {\n params['use_limit'] = true;\n params['limit'] = options.limit;\n }\n };\n return params;\n }\n\n _methodCall(msg, resultCB) {\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n return new Promise((resolve, reject) => {\n this._call(msg).then(resolveCtx => {\n resolve(resultCB(this._decoder.decodeCommandResult(msg.method, resolveCtx.result)));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n reject(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n });\n }\n\n publish(channel, data) {\n const msg = {\n method: this._methodType.PUBLISH,\n params: {\n channel: channel,\n data: data\n }\n };\n return this._methodCall(msg, function () {\n return {};\n });\n }\n\n history(channel, options) {\n const params = this._getHistoryParams(channel, options);\n const msg = {\n method: this._methodType.HISTORY,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return {\n 'publications': result.publications,\n 'epoch': result.epoch || '',\n 'offset': result.offset || 0\n };\n });\n }\n\n presence(channel) {\n const msg = {\n method: this._methodType.PRESENCE,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'presence': result.presence\n };\n });\n }\n\n presenceStats(channel) {\n const msg = {\n method: this._methodType.PRESENCE_STATS,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'num_users': result.num_users,\n 'num_clients': result.num_clients\n };\n });\n }\n\n _dataReceived(data) {\n const replies = this._decoder.decodeReplies(data);\n // we have to guarantee order of events in replies processing - i.e. start processing\n // next reply only when we finished processing of current one. Without syncing things in\n // this way we could get wrong publication events order as reply promises resolve\n // on next loop tick so for loop continues before we finished emitting all reply events.\n this._dispatchPromise = this._dispatchPromise.then(() => {\n let finishDispatch;\n this._dispatchPromise = new Promise(resolve =>{\n finishDispatch = resolve;\n });\n this._dispatchSynchronized(replies, finishDispatch);\n });\n this._restartPing();\n }\n\n _dispatchSynchronized(replies, finishDispatch) {\n let p = Promise.resolve();\n for (const i in replies) {\n if (replies.hasOwnProperty(i)) {\n p = p.then(() => {\n return this._dispatchReply(replies[i]);\n });\n }\n }\n p = p.then(() => {\n finishDispatch();\n });\n }\n\n _dispatchReply(reply) {\n var next;\n const p = new Promise(resolve =>{\n next = resolve;\n });\n\n if (reply === undefined || reply === null) {\n this._debug('dispatch: got undefined or null reply');\n next();\n return p;\n }\n\n const id = reply.id;\n\n if (id && id > 0) {\n this._handleReply(reply, next);\n } else {\n this._handlePush(reply.result, next);\n }\n\n return p;\n };\n\n _call(msg) {\n return new Promise((resolve, reject) => {\n const id = this._addMessage(msg);\n this._registerCall(id, resolve, reject);\n });\n }\n\n _connect() {\n if (this.isConnected()) {\n this._debug('connect called when already connected');\n return;\n }\n if (this._status === 'connecting') {\n return;\n }\n\n this._debug('start connecting');\n this._setStatus('connecting');\n this._clientID = null;\n this._reconnect = true;\n this._setupTransport();\n };\n\n _disconnect(reason, shouldReconnect) {\n\n const reconnect = shouldReconnect || false;\n if (reconnect === false) {\n this._reconnect = false;\n }\n\n if (this._isDisconnected()) {\n if (!reconnect) {\n this._clearConnectedState(reconnect);\n }\n return;\n }\n\n this._clearConnectedState(reconnect);\n\n this._debug('disconnected:', reason, shouldReconnect);\n this._setStatus('disconnected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._reconnecting === false) {\n // fire unsubscribe events for server side subs.\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel)) {\n this.emit('unsubscribe', {channel: channel});\n }\n }\n this.emit('disconnect', {\n reason: reason,\n reconnect: reconnect\n });\n }\n\n if (reconnect === false) {\n this._subs = {};\n this._serverSubs = {};\n }\n\n if (!this._transportClosed) {\n this._transport.close();\n }\n };\n\n _refreshFailed() {\n this._numRefreshFailed = 0;\n if (!this._isDisconnected()) {\n this._disconnect('refresh failed', false);\n }\n if (this._config.onRefreshFailed !== null) {\n this._config.onRefreshFailed();\n }\n };\n\n _refresh() {\n // ask application for new connection token.\n this._debug('refresh token');\n\n if (this._config.refreshAttempts === 0) {\n this._debug('refresh attempts set to 0, do not send refresh request at all');\n this._refreshFailed();\n return;\n }\n\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n // We don't perform any connection status related actions here as we are\n // relying on server that must close connection eventually.\n if (resp.error) {\n this._debug('error refreshing connection token', resp.error);\n } else {\n this._debug('error refreshing connection token: wrong status code', resp.status);\n }\n this._numRefreshFailed++;\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._config.refreshAttempts !== null && this._numRefreshFailed >= this._config.refreshAttempts) {\n this._refreshFailed();\n return;\n }\n const jitter = Math.round(Math.random() * 1000 * Math.max(this._numRefreshFailed, 20));\n const interval = this._config.refreshInterval + jitter;\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n return;\n }\n this._numRefreshFailed = 0;\n this._token = resp.data.token;\n if (!this._token) {\n this._refreshFailed();\n return;\n }\n if (this._isDisconnected() && this._reconnect) {\n this._debug('token refreshed, connect from scratch');\n this._connect();\n } else {\n this._debug('send refreshed token');\n const msg = {\n method: this._methodType.REFRESH,\n params: {\n token: this._token\n }\n };\n this._call(msg).then(resolveCtx => {\n this._refreshResponse(this._decoder.decodeCommandResult(this._methodType.REFRESH, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n if (this._config.onRefresh !== null) {\n const context = {};\n this._config.onRefresh(context, cb);\n } else {\n const xhr = this._ajax(\n this._config.refreshEndpoint,\n this._config.refreshParams,\n this._config.refreshHeaders,\n this._config.refreshData,\n cb\n );\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _refreshError(err) {\n this._debug('refresh error', err);\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n const interval = this._config.refreshInterval + Math.round(Math.random() * 1000);\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n }\n\n _refreshResponse(result) {\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (result.expires) {\n this._clientID = result.client;\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n };\n\n _newXHRID() {\n this._xhrID++;\n return this._xhrID;\n }\n\n _subRefresh(channel) {\n this._debug('refresh subscription token for channel', channel);\n\n if (this._subRefreshTimeouts[channel] !== undefined) {\n this._clearSubRefreshTimeout(channel);\n } else {\n return;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (resp.error || resp.status !== 200 || this._clientID !== clientID) {\n return;\n }\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n const token = channelsData[channel];\n if (!token) {\n return;\n }\n const msg = {\n method: this._methodType.SUB_REFRESH,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n\n this._call(msg).then(resolveCtx => {\n this._subRefreshResponse(\n channel,\n this._decoder.decodeCommandResult(this._methodType.SUB_REFRESH, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subRefreshError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n const data = {\n client: this._clientID,\n channels: [channel]\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _clearSubRefreshTimeout(channel) {\n if (this._subRefreshTimeouts[channel] !== undefined) {\n clearTimeout(this._subRefreshTimeouts[channel]);\n delete this._subRefreshTimeouts[channel];\n }\n }\n\n _subRefreshError(channel, err) {\n this._debug('subscription refresh error', channel, err);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n const jitter = Math.round(Math.random() * 1000);\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._config.subRefreshInterval + jitter);\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n return;\n }\n\n _subRefreshResponse(channel, result) {\n this._debug('subscription refresh success', channel);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n return;\n };\n\n _subscribe(sub, isResubscribe) {\n this._debug('subscribing on', sub.channel);\n const channel = sub.channel;\n\n if (!(channel in this._subs)) {\n this._subs[channel] = sub;\n }\n\n if (!this.isConnected()) {\n // subscribe will be called later\n sub._setNew();\n return;\n }\n\n sub._setSubscribing(isResubscribe);\n\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel\n }\n };\n\n // If channel name does not start with privateChannelPrefix - then we\n // can just send subscription message to Centrifuge. If channel name\n // starts with privateChannelPrefix - then this is a private channel\n // and we should ask web application backend for permission first.\n if (startsWith(channel, this._config.privateChannelPrefix)) {\n // private channel.\n if (this._isSubscribeBatching) {\n this._privateChannels[channel] = true;\n } else {\n this.startSubscribeBatching();\n this._subscribe(sub);\n this.stopSubscribeBatching();\n }\n } else {\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n _unsubscribe(sub) {\n delete this._subs[sub.channel];\n delete this._lastOffset[sub.channel];\n delete this._lastSeq[sub.channel];\n delete this._lastGen[sub.channel];\n if (this.isConnected()) {\n // No need to unsubscribe in disconnected state - i.e. client already unsubscribed.\n this._addMessage({\n method: this._methodType.UNSUBSCRIBE,\n params: {\n channel: sub.channel\n }\n });\n }\n };\n\n _getTTLMilliseconds(ttl) {\n // https://stackoverflow.com/questions/12633405/what-is-the-maximum-delay-for-setinterval\n return Math.min(ttl * 1000, 2147483647);\n }\n\n getSub(channel) {\n return this._getSub(channel);\n }\n\n _getSub(channel) {\n const sub = this._subs[channel];\n if (!sub) {\n return null;\n }\n return sub;\n };\n\n _isServerSub(channel) {\n return this._serverSubs[channel] !== undefined;\n };\n\n _connectResponse(result, isRecover) {\n const wasReconnecting = this._reconnecting;\n this._reconnecting = false;\n this._resetRetry();\n this._refreshRequired = false;\n\n if (this.isConnected()) {\n return;\n }\n\n if (this._latencyStart !== null) {\n this._latency = (new Date()).getTime() - this._latencyStart.getTime();\n this._latencyStart = null;\n }\n\n this._clientID = result.client;\n this._setStatus('connected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n }\n\n if (result.expires) {\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n\n this.startBatching();\n this.startSubscribeBatching();\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n if (sub._shouldResubscribe()) {\n this._subscribe(sub, wasReconnecting);\n }\n }\n }\n this.stopSubscribeBatching();\n this.stopBatching();\n\n this._startPing();\n\n const ctx = {\n client: result.client,\n transport: this._transportName,\n latency: this._latency\n };\n if (result.data) {\n ctx.data = result.data;\n }\n\n this.emit('connect', ctx);\n\n if (result.subs) {\n this._processServerSubs(result.subs);\n }\n };\n\n _processServerSubs(subs) {\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n const isResubscribe = this._serverSubs[channel] !== undefined;\n let subCtx = {channel: channel, isResubscribe: isResubscribe};\n subCtx = this._expandSubscribeContext(subCtx, sub);\n this.emit('subscribe', subCtx);\n }\n }\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n if (sub.recovered) {\n let pubs = sub.publications;\n if (pubs && pubs.length > 0) {\n\n // handle legacy order.\n // TODO: remove as soon as Centrifuge v1 released.\n if (pubs.length > 1 && (!pubs[0].offset || pubs[0].offset > pubs[1].offset)) {\n pubs = pubs.reverse();\n }\n\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n }\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n }\n }\n };\n\n _stopPing() {\n if (this._pongTimeout !== null) {\n clearTimeout(this._pongTimeout);\n this._pongTimeout = null;\n }\n if (this._pingTimeout !== null) {\n clearTimeout(this._pingTimeout);\n this._pingTimeout = null;\n }\n };\n\n _startPing() {\n if (this._config.ping !== true || this._config.pingInterval <= 0) {\n return;\n }\n if (!this.isConnected()) {\n return;\n }\n\n this._pingTimeout = setTimeout(() => {\n if (!this.isConnected()) {\n this._stopPing();\n return;\n }\n this.ping();\n this._pongTimeout = setTimeout(() => {\n this._disconnect('no ping', true);\n }, this._config.pongWaitTimeout);\n }, this._config.pingInterval);\n };\n\n _restartPing() {\n this._stopPing();\n this._startPing();\n };\n\n _subscribeError(channel, error) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n if (error.code === 0 && error.message === _errorTimeout) { // client side timeout.\n this._disconnect('timeout', true);\n return;\n }\n sub._setSubscribeError(error);\n };\n\n _expandSubscribeContext(ctx, result) {\n let recovered = false;\n if ('recovered' in result) {\n recovered = result.recovered;\n }\n ctx.recovered = recovered;\n\n let positioned = false;\n if ('positioned' in result) {\n positioned = result.positioned;\n }\n let epoch = '';\n if ('epoch' in result) {\n epoch = result.epoch;\n }\n let offset = 0;\n if ('offset' in result) {\n offset = result.offset;\n }\n if (positioned) {\n ctx.streamPosition = {\n 'offset': offset,\n 'epoch': epoch\n };\n };\n if (result.data) {\n ctx.data = result.data;\n }\n return ctx;\n }\n\n _subscribeResponse(channel, isRecover, result) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n sub._setSubscribeSuccess(result);\n\n let pubs = result.publications;\n if (pubs && pubs.length > 0) {\n if (pubs.length >= 2 && !pubs[0].offset && !pubs[1].offset) {\n // handle legacy order.\n pubs = pubs.reverse();\n }\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n\n if (result.recoverable && (!isRecover || !result.recovered)) {\n this._lastSeq[channel] = result.seq || 0;\n this._lastGen[channel] = result.gen || 0;\n this._lastOffset[channel] = result.offset || 0;\n }\n\n this._lastEpoch[channel] = result.epoch || '';\n\n if (result.recoverable) {\n sub._recoverable = true;\n }\n\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n };\n\n _handleReply(reply, next) {\n const id = reply.id;\n const result = reply.result;\n\n if (!(id in this._callbacks)) {\n next();\n return;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n\n if (!errorExists(reply)) {\n const callback = callbacks.callback;\n if (!callback) {\n return;\n }\n callback({result, next});\n } else {\n const errback = callbacks.errback;\n if (!errback) {\n next();\n return;\n }\n const error = reply.error;\n errback({error, next});\n }\n }\n\n _handleJoin(channel, join) {\n const ctx = {'info': join.info};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('join', ctx);\n }\n return;\n }\n sub.emit('join', ctx);\n };\n\n _handleLeave(channel, leave) {\n const ctx = {'info': leave.info};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('leave', ctx);\n }\n return;\n }\n sub.emit('leave', ctx);\n };\n\n _handleUnsub(channel, unsub) {\n const ctx = {};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n delete this._serverSubs[channel];\n ctx.channel = channel;\n this.emit('unsubscribe', ctx);\n }\n return;\n }\n sub.unsubscribe();\n if (unsub.resubscribe === true) {\n sub.subscribe();\n }\n };\n\n _handleSub(channel, sub) {\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n let ctx = {'channel': channel, isResubscribe: false};\n ctx = this._expandSubscribeContext(ctx, sub);\n this.emit('subscribe', ctx);\n };\n\n _handlePublication(channel, pub) {\n const sub = this._getSub(channel);\n const ctx = {\n 'data': pub.data,\n 'seq': pub.seq,\n 'gen': pub.gen,\n 'offset': pub.offset\n };\n if (pub.info) {\n ctx.info = pub.info;\n }\n if (!sub) {\n if (this._isServerSub(channel)) {\n if (pub.seq !== undefined) {\n this._serverSubs[channel].seq = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._serverSubs[channel].gen = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._serverSubs[channel].offset = pub.offset;\n }\n ctx.channel = channel;\n this.emit('publish', ctx);\n }\n return;\n }\n if (pub.seq !== undefined) {\n this._lastSeq[channel] = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._lastGen[channel] = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._lastOffset[channel] = pub.offset;\n }\n sub.emit('publish', ctx);\n };\n\n _handleMessage(message) {\n this.emit('message', message.data);\n };\n\n _handlePush(data, next) {\n const push = this._decoder.decodePush(data);\n let type = 0;\n if ('type' in push) {\n type = push['type'];\n }\n const channel = push.channel;\n\n if (type === this._pushType.PUBLICATION) {\n const pub = this._decoder.decodePushData(this._pushType.PUBLICATION, push.data);\n this._handlePublication(channel, pub);\n } else if (type === this._pushType.MESSAGE) {\n const message = this._decoder.decodePushData(this._pushType.MESSAGE, push.data);\n this._handleMessage(message);\n } else if (type === this._pushType.JOIN) {\n const join = this._decoder.decodePushData(this._pushType.JOIN, push.data);\n this._handleJoin(channel, join);\n } else if (type === this._pushType.LEAVE) {\n const leave = this._decoder.decodePushData(this._pushType.LEAVE, push.data);\n this._handleLeave(channel, leave);\n } else if (type === this._pushType.UNSUB) {\n const unsub = this._decoder.decodePushData(this._pushType.UNSUB, push.data);\n this._handleUnsub(channel, unsub);\n } else if (type === this._pushType.SUB) {\n const sub = this._decoder.decodePushData(this._pushType.SUB, push.data);\n this._handleSub(channel, sub);\n }\n next();\n }\n\n _flush() {\n const messages = this._messages.slice(0);\n this._messages = [];\n this._transportSend(messages);\n };\n\n _ping() {\n const msg = {\n method: this._methodType.PING\n };\n this._call(msg).then(resolveCtx => {\n this._pingResponse(this._decoder.decodeCommandResult(this._methodType.PING, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._debug('ping error', rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n _pingResponse(result) {\n if (!this.isConnected()) {\n return;\n }\n this._stopPing();\n this._startPing();\n }\n\n _getLastSeq(channel) {\n const lastSeq = this._lastSeq[channel];\n if (lastSeq) {\n return lastSeq;\n }\n return 0;\n };\n\n _getLastOffset(channel) {\n const lastOffset = this._lastOffset[channel];\n if (lastOffset) {\n return lastOffset;\n }\n return 0;\n };\n\n _getLastGen(channel) {\n const lastGen = this._lastGen[channel];\n if (lastGen) {\n return lastGen;\n }\n return 0;\n };\n\n _getLastEpoch(channel) {\n const lastEpoch = this._lastEpoch[channel];\n if (lastEpoch) {\n return lastEpoch;\n }\n return '';\n };\n\n _createErrorObject(message, code) {\n const errObject = {\n message: message,\n code: code || 0\n };\n\n return errObject;\n };\n\n _registerCall(id, callback, errback) {\n this._callbacks[id] = {\n callback: callback,\n errback: errback,\n timeout: null\n };\n this._callbacks[id].timeout = setTimeout(() => {\n delete this._callbacks[id];\n if (isFunction(errback)) {\n errback({error: this._createErrorObject(_errorTimeout)});\n }\n }, this._config.timeout);\n };\n\n _addMessage(message) {\n let id = this._nextMessageId();\n message.id = id;\n if (this._isBatching === true) {\n this._messages.push(message);\n } else {\n this._transportSend([message]);\n }\n return id;\n };\n\n isConnected() {\n return this._isConnected();\n }\n\n connect() {\n this._connect();\n };\n\n disconnect() {\n this._disconnect('client', false);\n };\n\n ping() {\n return this._ping();\n }\n\n startBatching() {\n // start collecting messages without sending them to Centrifuge until flush\n // method called\n this._isBatching = true;\n };\n\n stopBatching() {\n this._isBatching = false;\n this._flush();\n };\n\n startSubscribeBatching() {\n // start collecting private channels to create bulk authentication\n // request to subscribeEndpoint when stopSubscribeBatching will be called\n this._isSubscribeBatching = true;\n };\n\n stopSubscribeBatching() {\n // create request to subscribeEndpoint with collected private channels\n // to ask if this client can subscribe on each channel\n this._isSubscribeBatching = false;\n const authChannels = this._privateChannels;\n this._privateChannels = {};\n\n const channels = [];\n\n for (const channel in authChannels) {\n if (authChannels.hasOwnProperty(channel)) {\n const sub = this._getSub(channel);\n if (!sub) {\n continue;\n }\n channels.push(channel);\n }\n }\n\n if (channels.length === 0) {\n this._debug('no private channels found, no need to make request');\n return;\n }\n\n const data = {\n client: this._clientID,\n channels: channels\n };\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n this._debug('authorization request failed');\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n this._subscribeError(channel, this._createErrorObject('authorization request failed'));\n }\n }\n return;\n }\n\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n // try to send all subscriptions in one request.\n let batch = false;\n\n if (!this._isBatching) {\n this.startBatching();\n batch = true;\n }\n\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n const token = channelsData[channel];\n\n if (!token) {\n // subscription:error\n this._subscribeError(channel, this._createErrorObject('permission denied', 103));\n continue;\n } else {\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n continue;\n }\n\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n }\n }\n\n if (batch) {\n this.stopBatching();\n }\n\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n subscribe(channel, events) {\n const currentSub = this._getSub(channel);\n if (currentSub !== null) {\n currentSub._setEvents(events);\n if (currentSub._isUnsubscribed()) {\n currentSub.subscribe();\n }\n return currentSub;\n }\n const sub = new Subscription(this, channel, events);\n this._subs[channel] = sub;\n sub.subscribe();\n return sub;\n };\n}\n","import {CentrifugeProtobuf} from './protobuf.js';\nexport default CentrifugeProtobuf;\n","export const JsonMethodType = {\n CONNECT: 0,\n SUBSCRIBE: 1,\n UNSUBSCRIBE: 2,\n PUBLISH: 3,\n PRESENCE: 4,\n PRESENCE_STATS: 5,\n HISTORY: 6,\n PING: 7,\n SEND: 8,\n RPC: 9,\n REFRESH: 10,\n SUB_REFRESH: 11\n};\n\nexport const JsonPushType = {\n PUBLICATION: 0,\n JOIN: 1,\n LEAVE: 2,\n UNSUB: 3,\n MESSAGE: 4,\n SUB: 5\n};\n\nexport class JsonEncoder {\n encodeCommands(commands) {\n const encodedCommands = [];\n for (const i in commands) {\n if (commands.hasOwnProperty(i)) {\n encodedCommands.push(JSON.stringify(commands[i]));\n }\n }\n return encodedCommands.join('\\n');\n }\n}\n\nexport class JsonDecoder {\n decodeReplies(data) {\n const replies = [];\n const encodedReplies = data.split('\\n');\n for (const i in encodedReplies) {\n if (encodedReplies.hasOwnProperty(i)) {\n if (!encodedReplies[i]) {\n continue;\n }\n const reply = JSON.parse(encodedReplies[i]);\n replies.push(reply);\n }\n }\n return replies;\n }\n\n decodeCommandResult(methodType, data) {\n return data;\n }\n\n decodePush(data) {\n return data;\n }\n\n decodePushData(pushType, data) {\n return data;\n }\n}\n\n","import {Centrifuge} from './centrifuge.js';\n\nconst protobuf = require('protobufjs/light');\nconst proto = protobuf.Root.fromJSON(require('./client.proto.json'));\n\nconst methodValues = proto.lookupEnum('MethodType').values;\n\nconst protobufMethodType = {\n CONNECT: methodValues.CONNECT,\n SUBSCRIBE: methodValues.SUBSCRIBE,\n UNSUBSCRIBE: methodValues.UNSUBSCRIBE,\n PUBLISH: methodValues.PUBLISH,\n PRESENCE: methodValues.PRESENCE,\n PRESENCE_STATS: methodValues.PRESENCE_STATS,\n HISTORY: methodValues.HISTORY,\n PING: methodValues.PING,\n RPC: methodValues.RPC,\n SEND: methodValues.SEND,\n REFRESH: methodValues.REFRESH,\n SUB_REFRESH: methodValues.SUB_REFRESH\n};\n\nconst methodSchema = {\n CONNECT: [\n proto.lookupType('protocol.ConnectRequest'),\n proto.lookupType('protocol.ConnectResult')\n ],\n REFRESH: [\n proto.lookupType('protocol.RefreshRequest'),\n proto.lookupType('protocol.RefreshResult')\n ],\n SUBSCRIBE: [\n proto.lookupType('protocol.SubscribeRequest'),\n proto.lookupType('protocol.SubscribeResult')\n ],\n SUB_REFRESH: [\n proto.lookupType('protocol.SubRefreshRequest'),\n proto.lookupType('protocol.SubRefreshResult')\n ],\n UNSUBSCRIBE: [\n proto.lookupType('protocol.UnsubscribeRequest'),\n proto.lookupType('protocol.UnsubscribeResult')\n ],\n PUBLISH: [\n proto.lookupType('protocol.PublishRequest'),\n proto.lookupType('protocol.PublishResult')\n ],\n PRESENCE: [\n proto.lookupType('protocol.PresenceRequest'),\n proto.lookupType('protocol.PresenceResult')\n ],\n PRESENCE_STATS: [\n proto.lookupType('protocol.PresenceStatsRequest'),\n proto.lookupType('protocol.PresenceStatsResult')\n ],\n HISTORY: [\n proto.lookupType('protocol.HistoryRequest'),\n proto.lookupType('protocol.HistoryResult')\n ],\n PING: [\n proto.lookupType('protocol.PingRequest'),\n proto.lookupType('protocol.PingResult')\n ],\n RPC: [\n proto.lookupType('protocol.RPCRequest'),\n proto.lookupType('protocol.RPCResult')\n ],\n SEND: [\n proto.lookupType('protocol.SendRequest'),\n null\n ]\n};\n\nconst protobufPushType = {\n PUBLICATION: proto.lookupEnum('PushType').values.PUBLICATION,\n JOIN: proto.lookupEnum('PushType').values.JOIN,\n LEAVE: proto.lookupEnum('PushType').values.LEAVE,\n UNSUB: proto.lookupEnum('PushType').values.UNSUB,\n MESSAGE: proto.lookupEnum('PushType').values.MESSAGE,\n SUB: proto.lookupEnum('PushType').values.SUB\n};\n\nconst PushSchema = {\n PUBLICATION: proto.lookupType('protocol.Publication'),\n JOIN: proto.lookupType('protocol.Join'),\n LEAVE: proto.lookupType('protocol.Leave'),\n UNSUB: proto.lookupType('protocol.Unsub'),\n MESSAGE: proto.lookupType('protocol.Message'),\n SUB: proto.lookupType('protocol.Sub')\n};\n\nconst Push = proto.lookupType('protocol.Push');\nconst Command = proto.lookupType('protocol.Command');\nconst Reply = proto.lookupType('protocol.Reply');\n\nexport class ProtobufEncoder {\n encodeCommands(commands) {\n const writer = protobuf.Writer.create();\n for (const i in commands) {\n if (commands.hasOwnProperty(i)) {\n const command = Object.assign({}, commands[i]);\n if (command.params) {\n let type;\n if (!command.method) {\n command.method = protobufMethodType.CONNECT;\n };\n switch (command.method) {\n case protobufMethodType.CONNECT:\n type = methodSchema.CONNECT[0];\n break;\n case protobufMethodType.REFRESH:\n type = methodSchema.REFRESH[0];\n break;\n case protobufMethodType.SUBSCRIBE:\n type = methodSchema.SUBSCRIBE[0];\n break;\n case protobufMethodType.SUB_REFRESH:\n type = methodSchema.SUB_REFRESH[0];\n break;\n case protobufMethodType.UNSUBSCRIBE:\n type = methodSchema.UNSUBSCRIBE[0];\n break;\n case protobufMethodType.PUBLISH:\n type = methodSchema.PUBLISH[0];\n break;\n case protobufMethodType.PRESENCE:\n type = methodSchema.PRESENCE[0];\n break;\n case protobufMethodType.PRESENCE_STATS:\n type = methodSchema.PRESENCE_STATS[0];\n break;\n case protobufMethodType.HISTORY:\n type = methodSchema.HISTORY[0];\n break;\n case protobufMethodType.PING:\n type = methodSchema.PING[0];\n break;\n case protobufMethodType.RPC:\n type = methodSchema.RPC[0];\n break;\n case protobufMethodType.SEND:\n type = methodSchema.SEND[0];\n break;\n }\n command.params = type.encode(command.params).finish();\n }\n Command.encodeDelimited(command, writer);\n }\n }\n return writer.finish();\n }\n}\n\nexport class ProtobufDecoder {\n decodeReplies(data) {\n const replies = [];\n const reader = protobuf.Reader.create(new Uint8Array(data));\n while (reader.pos < reader.len) {\n const reply = Reply.decodeDelimited(reader);\n replies.push(reply);\n }\n return replies;\n }\n\n decodeCommandResult(methodType, data) {\n var type;\n switch (methodType) {\n case protobufMethodType.CONNECT:\n type = methodSchema.CONNECT[1];\n break;\n case protobufMethodType.REFRESH:\n type = methodSchema.REFRESH[1];\n break;\n case protobufMethodType.SUBSCRIBE:\n type = methodSchema.SUBSCRIBE[1];\n break;\n case protobufMethodType.SUB_REFRESH:\n type = methodSchema.SUB_REFRESH[1];\n break;\n case protobufMethodType.UNSUBSCRIBE:\n type = methodSchema.UNSUBSCRIBE[1];\n break;\n case protobufMethodType.PUBLISH:\n type = methodSchema.PUBLISH[1];\n break;\n case protobufMethodType.PRESENCE:\n type = methodSchema.PRESENCE[1];\n break;\n case protobufMethodType.PRESENCE_STATS:\n type = methodSchema.PRESENCE_STATS[1];\n break;\n case protobufMethodType.HISTORY:\n type = methodSchema.HISTORY[1];\n break;\n case protobufMethodType.PING:\n type = methodSchema.PING[1];\n break;\n case protobufMethodType.RPC:\n type = methodSchema.RPC[1];\n break;\n }\n return this._decode(type, data);\n }\n\n decodePush(data) {\n return this._decode(Push, data);\n }\n\n decodePushData(pushType, data) {\n var type;\n switch (pushType) {\n case protobufPushType.PUBLICATION:\n type = PushSchema.PUBLICATION;\n break;\n case protobufPushType.MESSAGE:\n type = PushSchema.MESSAGE;\n break;\n case protobufPushType.JOIN:\n type = PushSchema.JOIN;\n break;\n case protobufPushType.LEAVE:\n type = PushSchema.LEAVE;\n break;\n case protobufPushType.UNSUB:\n type = PushSchema.UNSUB;\n break;\n case protobufPushType.SUB:\n type = PushSchema.SUB;\n break;\n }\n return this._decode(type, data);\n }\n\n _decode(type, data) {\n let res;\n try {\n res = type.decode(data);\n } catch (err) {\n return null;\n }\n return res;\n }\n}\n\nexport class CentrifugeProtobuf extends Centrifuge {\n _formatOverride(format) {\n if (format === 'protobuf') {\n this._binary = true;\n this._methodType = protobufMethodType;\n this._pushType = protobufPushType;\n this._encoder = new ProtobufEncoder();\n this._decoder = new ProtobufDecoder();\n return true;\n }\n return false;\n }\n}\n","import EventEmitter from 'events';\n\nimport {\n isFunction\n} from './utils';\n\nconst _STATE_NEW = 0;\nconst _STATE_SUBSCRIBING = 1;\nconst _STATE_SUCCESS = 2;\nconst _STATE_ERROR = 3;\nconst _STATE_UNSUBSCRIBED = 4;\n\nexport default class Subscription extends EventEmitter {\n constructor(centrifuge, channel, events) {\n super();\n this.channel = channel;\n this._centrifuge = centrifuge;\n this._status = _STATE_NEW;\n this._error = null;\n this._isResubscribe = false;\n this._ready = false;\n this._subscriptionPromise = null;\n this._noResubscribe = false;\n this._recoverable = false;\n this._recover = false;\n this._setEvents(events);\n this._initializePromise();\n this._promises = {};\n this._promiseId = 0;\n this.on('error', function (errContext) {\n this._centrifuge._debug('subscription error', errContext);\n });\n }\n\n _nextPromiseId() {\n return ++this._promiseId;\n }\n\n _initializePromise() {\n // this helps us to wait until subscription will successfully\n // subscribe and call actions such as presence, history etc in\n // synchronous way.\n this._ready = false;\n\n this._subscriptionPromise = new Promise((resolve, reject) => {\n this._resolve = value => {\n this._ready = true;\n resolve(value);\n };\n this._reject = err => {\n this._ready = true;\n reject(err);\n };\n }).then(function () {}, function () {});\n };\n\n _needRecover() {\n return this._recoverable === true && this._recover === true;\n };\n\n _setEvents(events) {\n if (!events) {\n return;\n }\n if (isFunction(events)) {\n // events is just a function to handle publication received from channel.\n this.on('publish', events);\n } else if (Object.prototype.toString.call(events) === Object.prototype.toString.call({})) {\n const knownEvents = ['publish', 'join', 'leave', 'unsubscribe', 'subscribe', 'error'];\n for (let i = 0, l = knownEvents.length; i < l; i++) {\n const ev = knownEvents[i];\n if (ev in events) {\n this.on(ev, events[ev]);\n }\n }\n }\n };\n\n _isNew() {\n return this._status === _STATE_NEW;\n };\n\n _isUnsubscribed() {\n return this._status === _STATE_UNSUBSCRIBED;\n };\n\n _isSubscribing() {\n return this._status === _STATE_SUBSCRIBING;\n };\n\n _isReady() {\n return this._status === _STATE_SUCCESS || this._status === _STATE_ERROR;\n };\n\n _isSuccess() {\n return this._status === _STATE_SUCCESS;\n };\n\n _isError() {\n return this._status === _STATE_ERROR;\n };\n\n _setNew() {\n this._status = _STATE_NEW;\n };\n\n _setSubscribing(isResubscribe) {\n this._isResubscribe = isResubscribe || false;\n if (this._ready === true) {\n // new promise for this subscription\n this._initializePromise();\n }\n this._status = _STATE_SUBSCRIBING;\n };\n\n _setSubscribeSuccess(subscribeResult) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._status = _STATE_SUCCESS;\n const successContext = this._getSubscribeSuccessContext(subscribeResult);\n this._recover = false;\n this.emit('subscribe', successContext);\n this._resolve(successContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].resolve();\n delete this._promises[id];\n }\n };\n\n _setSubscribeError(err) {\n if (this._status === _STATE_ERROR) {\n return;\n }\n this._status = _STATE_ERROR;\n this._error = err;\n const errContext = this._getSubscribeErrorContext();\n this.emit('error', errContext);\n this._reject(errContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n };\n\n _triggerUnsubscribe() {\n this.emit('unsubscribe', {\n channel: this.channel\n });\n };\n\n _setUnsubscribed(noResubscribe) {\n this._centrifuge._clearSubRefreshTimeout(this.channel);\n if (this._status === _STATE_UNSUBSCRIBED) {\n return;\n }\n const needTrigger = this._status === _STATE_SUCCESS;\n this._status = _STATE_UNSUBSCRIBED;\n if (noResubscribe === true) {\n this._recover = false;\n this._noResubscribe = true;\n delete this._centrifuge._lastSeq[this.channel];\n delete this._centrifuge._lastGen[this.channel];\n delete this._centrifuge._lastEpoch[this.channel];\n }\n if (needTrigger) {\n this._triggerUnsubscribe();\n }\n };\n\n _shouldResubscribe() {\n return !this._noResubscribe;\n };\n\n _getSubscribeSuccessContext(subscribeResult) {\n let ctx = {\n channel: this.channel,\n isResubscribe: this._isResubscribe\n };\n if (subscribeResult) {\n // subscribeResult not available when called from Subscription.ready method at the moment.\n ctx = this._centrifuge._expandSubscribeContext(ctx, subscribeResult);\n }\n return ctx;\n };\n\n _getSubscribeErrorContext() {\n const subscribeErrorContext = this._error;\n subscribeErrorContext.channel = this.channel;\n subscribeErrorContext.isResubscribe = this._isResubscribe;\n return subscribeErrorContext;\n };\n\n ready(callback, errback) {\n if (this._ready) {\n if (this._isSuccess()) {\n callback(this._getSubscribeSuccessContext());\n } else {\n errback(this._getSubscribeErrorContext());\n }\n }\n };\n\n subscribe() {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._noResubscribe = false;\n this._centrifuge._subscribe(this);\n };\n\n unsubscribe() {\n this._setUnsubscribed(true);\n this._centrifuge._unsubscribe(this);\n };\n\n _methodCall() {\n if (this._isSuccess()) {\n return Promise.resolve();\n } else if (this._isError()) {\n return Promise.reject(this._error);\n }\n let subPromise = new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({'code': 0, 'message': 'timeout'});\n }, this._centrifuge._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n return subPromise;\n }\n\n publish(data) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.publish(self.channel, data);\n });\n };\n\n presence() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presence(self.channel);\n });\n };\n\n presenceStats() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presenceStats(self.channel);\n });\n };\n\n history(options) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.history(self.channel, options);\n });\n };\n}\n","export function startsWith(value, prefix) {\n return value.lastIndexOf(prefix, 0) === 0;\n};\n\nexport function isFunction(value) {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'function';\n};\n\nexport function log(level, args) {\n if (global.console) {\n const logger = global.console[level];\n\n if (isFunction(logger)) {\n logger.apply(global.console, args);\n }\n }\n};\n\nexport function backoff(step, min, max) {\n const jitter = 0.5 * Math.random();\n const interval = Math.min(max, min * Math.pow(2, step + 1));\n\n return Math.floor((1 - jitter) * interval);\n};\n\nexport function errorExists(data) {\n return 'error' in data && data.error !== null;\n};\n\nexport function extend(a, b) {\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n return a;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function eventListener() {\n if (errorListener !== undefined) {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n var errorListener;\n\n // Adding an error listener is not optional because\n // if an error is thrown on an event emitter we cannot\n // guarantee that the actual event we are waiting will\n // be fired. The result could be a silent way to create\n // memory or file descriptor leaks, which is something\n // we should avoid.\n if (name !== 'error') {\n errorListener = function errorListener(err) {\n emitter.removeListener(name, eventListener);\n reject(err);\n };\n\n emitter.once('error', errorListener);\n }\n\n emitter.once(name, eventListener);\n });\n}\n","// light library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-light\");","\"use strict\";\n/**\n * Runtime message from/to plain object converters.\n * @namespace\n */\nvar converter = exports;\n\nvar Enum = require(\"./enum\"),\n util = require(\"./util\");\n\n/**\n * Generates a partial value fromObject conveter.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} prop Property reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genValuePartial_fromObject(gen, field, fieldIndex, prop) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n if (field.resolvedType) {\n if (field.resolvedType instanceof Enum) { gen\n (\"switch(d%s){\", prop);\n for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0; i < keys.length; ++i) {\n if (field.repeated && values[keys[i]] === field.typeDefault) gen\n (\"default:\");\n gen\n (\"case%j:\", keys[i])\n (\"case %i:\", values[keys[i]])\n (\"m%s=%j\", prop, values[keys[i]])\n (\"break\");\n } gen\n (\"}\");\n } else gen\n (\"if(typeof d%s!==\\\"object\\\")\", prop)\n (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n (\"m%s=types[%i].fromObject(d%s)\", prop, fieldIndex, prop);\n } else {\n var isUnsigned = false;\n switch (field.type) {\n case \"double\":\n case \"float\": gen\n (\"m%s=Number(d%s)\", prop, prop); // also catches \"NaN\", \"Infinity\"\n break;\n case \"uint32\":\n case \"fixed32\": gen\n (\"m%s=d%s>>>0\", prop, prop);\n break;\n case \"int32\":\n case \"sint32\":\n case \"sfixed32\": gen\n (\"m%s=d%s|0\", prop, prop);\n break;\n case \"uint64\":\n isUnsigned = true;\n // eslint-disable-line no-fallthrough\n case \"int64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(util.Long)\")\n (\"(m%s=util.Long.fromValue(d%s)).unsigned=%j\", prop, prop, isUnsigned)\n (\"else if(typeof d%s===\\\"string\\\")\", prop)\n (\"m%s=parseInt(d%s,10)\", prop, prop)\n (\"else if(typeof d%s===\\\"number\\\")\", prop)\n (\"m%s=d%s\", prop, prop)\n (\"else if(typeof d%s===\\\"object\\\")\", prop)\n (\"m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)\", prop, prop, prop, isUnsigned ? \"true\" : \"\");\n break;\n case \"bytes\": gen\n (\"if(typeof d%s===\\\"string\\\")\", prop)\n (\"util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)\", prop, prop, prop)\n (\"else if(d%s.length)\", prop)\n (\"m%s=d%s\", prop, prop);\n break;\n case \"string\": gen\n (\"m%s=String(d%s)\", prop, prop);\n break;\n case \"bool\": gen\n (\"m%s=Boolean(d%s)\", prop, prop);\n break;\n /* default: gen\n (\"m%s=d%s\", prop, prop);\n break; */\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a plain object to runtime message converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.fromObject = function fromObject(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var fields = mtype.fieldsArray;\n var gen = util.codegen([\"d\"], mtype.name + \"$fromObject\")\n (\"if(d instanceof this.ctor)\")\n (\"return d\");\n if (!fields.length) return gen\n (\"return new this.ctor\");\n gen\n (\"var m=new this.ctor\");\n for (var i = 0; i < fields.length; ++i) {\n var field = fields[i].resolve(),\n prop = util.safeProp(field.name);\n\n // Map fields\n if (field.map) { gen\n (\"if(d%s){\", prop)\n (\"if(typeof d%s!==\\\"object\\\")\", prop)\n (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n (\"m%s={}\", prop)\n (\"for(var ks=Object.keys(d%s),i=0;i>>0,m%s.high>>>0).toNumber(%s):m%s\", prop, prop, prop, prop, isUnsigned ? \"true\": \"\", prop);\n break;\n case \"bytes\": gen\n (\"d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s\", prop, prop, prop, prop, prop);\n break;\n default: gen\n (\"d%s=m%s\", prop, prop);\n break;\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a runtime message to plain object converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.toObject = function toObject(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById);\n if (!fields.length)\n return util.codegen()(\"return {}\");\n var gen = util.codegen([\"m\", \"o\"], mtype.name + \"$toObject\")\n (\"if(!o)\")\n (\"o={}\")\n (\"var d={}\");\n\n var repeatedFields = [],\n mapFields = [],\n normalFields = [],\n i = 0;\n for (; i < fields.length; ++i)\n if (!fields[i].partOf)\n ( fields[i].resolve().repeated ? repeatedFields\n : fields[i].map ? mapFields\n : normalFields).push(fields[i]);\n\n if (repeatedFields.length) { gen\n (\"if(o.arrays||o.defaults){\");\n for (i = 0; i < repeatedFields.length; ++i) gen\n (\"d%s=[]\", util.safeProp(repeatedFields[i].name));\n gen\n (\"}\");\n }\n\n if (mapFields.length) { gen\n (\"if(o.objects||o.defaults){\");\n for (i = 0; i < mapFields.length; ++i) gen\n (\"d%s={}\", util.safeProp(mapFields[i].name));\n gen\n (\"}\");\n }\n\n if (normalFields.length) { gen\n (\"if(o.defaults){\");\n for (i = 0; i < normalFields.length; ++i) {\n var field = normalFields[i],\n prop = util.safeProp(field.name);\n if (field.resolvedType instanceof Enum) gen\n (\"d%s=o.enums===String?%j:%j\", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault);\n else if (field.long) gen\n (\"if(util.Long){\")\n (\"var n=new util.Long(%i,%i,%j)\", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)\n (\"d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():n\", prop)\n (\"}else\")\n (\"d%s=o.longs===String?%j:%i\", prop, field.typeDefault.toString(), field.typeDefault.toNumber());\n else if (field.bytes) {\n var arrayDefault = \"[\" + Array.prototype.slice.call(field.typeDefault).join(\",\") + \"]\";\n gen\n (\"if(o.bytes===String)d%s=%j\", prop, String.fromCharCode.apply(String, field.typeDefault))\n (\"else{\")\n (\"d%s=%s\", prop, arrayDefault)\n (\"if(o.bytes!==Array)d%s=util.newBuffer(d%s)\", prop, prop)\n (\"}\");\n } else gen\n (\"d%s=%j\", prop, field.typeDefault); // also messages (=null)\n } gen\n (\"}\");\n }\n var hasKs2 = false;\n for (i = 0; i < fields.length; ++i) {\n var field = fields[i],\n index = mtype._fieldsArray.indexOf(field),\n prop = util.safeProp(field.name);\n if (field.map) {\n if (!hasKs2) { hasKs2 = true; gen\n (\"var ks2\");\n } gen\n (\"if(m%s&&(ks2=Object.keys(m%s)).length){\", prop, prop)\n (\"d%s={}\", prop)\n (\"for(var j=0;j>>3){\");\n\n var i = 0;\n for (; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n var field = mtype._fieldsArray[i].resolve(),\n type = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n ref = \"m\" + util.safeProp(field.name); gen\n (\"case %i:\", field.id);\n\n // Map fields\n if (field.map) { gen\n (\"if(%s===util.emptyObject)\", ref)\n (\"%s={}\", ref)\n (\"var c2 = r.uint32()+r.pos\");\n\n if (types.defaults[field.keyType] !== undefined) gen\n (\"k=%j\", types.defaults[field.keyType]);\n else gen\n (\"k=null\");\n\n if (types.defaults[type] !== undefined) gen\n (\"value=%j\", types.defaults[type]);\n else gen\n (\"value=null\");\n\n gen\n (\"while(r.pos>>3){\")\n (\"case 1: k=r.%s(); break\", field.keyType)\n (\"case 2:\");\n\n if (types.basic[type] === undefined) gen\n (\"value=types[%i].decode(r,r.uint32())\", i); // can't be groups\n else gen\n (\"value=r.%s()\", type);\n\n gen\n (\"break\")\n (\"default:\")\n (\"r.skipType(tag2&7)\")\n (\"break\")\n (\"}\")\n (\"}\");\n\n if (types.long[field.keyType] !== undefined) gen\n (\"%s[typeof k===\\\"object\\\"?util.longToHash(k):k]=value\", ref);\n else gen\n (\"%s[k]=value\", ref);\n\n // Repeated fields\n } else if (field.repeated) { gen\n\n (\"if(!(%s&&%s.length))\", ref, ref)\n (\"%s=[]\", ref);\n\n // Packable (always check for forward and backward compatiblity)\n if (types.packed[type] !== undefined) gen\n (\"if((t&7)===2){\")\n (\"var c2=r.uint32()+r.pos\")\n (\"while(r.pos>> 0, (field.id << 3 | 4) >>> 0)\n : gen(\"types[%i].encode(%s,w.uint32(%i).fork()).ldelim()\", fieldIndex, ref, (field.id << 3 | 2) >>> 0);\n}\n\n/**\n * Generates an encoder specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction encoder(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var gen = util.codegen([\"m\", \"w\"], mtype.name + \"$encode\")\n (\"if(!w)\")\n (\"w=Writer.create()\");\n\n var i, ref;\n\n // \"when a message is serialized its known fields should be written sequentially by field number\"\n var fields = /* initializes */ mtype.fieldsArray.slice().sort(util.compareFieldsById);\n\n for (var i = 0; i < fields.length; ++i) {\n var field = fields[i].resolve(),\n index = mtype._fieldsArray.indexOf(field),\n type = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n wireType = types.basic[type];\n ref = \"m\" + util.safeProp(field.name);\n\n // Map fields\n if (field.map) {\n gen\n (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)){\", ref, field.name) // !== undefined && !== null\n (\"for(var ks=Object.keys(%s),i=0;i>> 0, 8 | types.mapKey[field.keyType], field.keyType);\n if (wireType === undefined) gen\n (\"types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()\", index, ref); // can't be groups\n else gen\n (\".uint32(%i).%s(%s[ks[i]]).ldelim()\", 16 | wireType, type, ref);\n gen\n (\"}\")\n (\"}\");\n\n // Repeated fields\n } else if (field.repeated) { gen\n (\"if(%s!=null&&%s.length){\", ref, ref); // !== undefined && !== null\n\n // Packed repeated\n if (field.packed && types.packed[type] !== undefined) { gen\n\n (\"w.uint32(%i).fork()\", (field.id << 3 | 2) >>> 0)\n (\"for(var i=0;i<%s.length;++i)\", ref)\n (\"w.%s(%s[i])\", type, ref)\n (\"w.ldelim()\");\n\n // Non-packed\n } else { gen\n\n (\"for(var i=0;i<%s.length;++i)\", ref);\n if (wireType === undefined)\n genTypePartial(gen, field, index, ref + \"[i]\");\n else gen\n (\"w.uint32(%i).%s(%s[i])\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n } gen\n (\"}\");\n\n // Non-repeated\n } else {\n if (field.optional) gen\n (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j))\", ref, field.name); // !== undefined && !== null\n\n if (wireType === undefined)\n genTypePartial(gen, field, index, ref);\n else gen\n (\"w.uint32(%i).%s(%s)\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n }\n }\n\n return gen\n (\"return w\");\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n","\"use strict\";\nmodule.exports = Enum;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Enum.prototype = Object.create(ReflectionObject.prototype)).constructor = Enum).className = \"Enum\";\n\nvar Namespace = require(\"./namespace\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new enum instance.\n * @classdesc Reflected enum.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {Object.} [values] Enum values as an object, by name\n * @param {Object.} [options] Declared options\n * @param {string} [comment] The comment for this enum\n * @param {Object.} [comments] The value comments for this enum\n */\nfunction Enum(name, values, options, comment, comments) {\n ReflectionObject.call(this, name, options);\n\n if (values && typeof values !== \"object\")\n throw TypeError(\"values must be an object\");\n\n /**\n * Enum values by id.\n * @type {Object.}\n */\n this.valuesById = {};\n\n /**\n * Enum values by name.\n * @type {Object.}\n */\n this.values = Object.create(this.valuesById); // toJSON, marker\n\n /**\n * Enum comment text.\n * @type {string|null}\n */\n this.comment = comment;\n\n /**\n * Value comment texts, if any.\n * @type {Object.}\n */\n this.comments = comments || {};\n\n /**\n * Reserved ranges, if any.\n * @type {Array.}\n */\n this.reserved = undefined; // toJSON\n\n // Note that values inherit valuesById on their prototype which makes them a TypeScript-\n // compatible enum. This is used by pbts to write actual enum definitions that work for\n // static and reflection code alike instead of emitting generic object definitions.\n\n if (values)\n for (var keys = Object.keys(values), i = 0; i < keys.length; ++i)\n if (typeof values[keys[i]] === \"number\") // use forward entries only\n this.valuesById[ this.values[keys[i]] = values[keys[i]] ] = keys[i];\n}\n\n/**\n * Enum descriptor.\n * @interface IEnum\n * @property {Object.} values Enum values\n * @property {Object.} [options] Enum options\n */\n\n/**\n * Constructs an enum from an enum descriptor.\n * @param {string} name Enum name\n * @param {IEnum} json Enum descriptor\n * @returns {Enum} Created enum\n * @throws {TypeError} If arguments are invalid\n */\nEnum.fromJSON = function fromJSON(name, json) {\n var enm = new Enum(name, json.values, json.options, json.comment, json.comments);\n enm.reserved = json.reserved;\n return enm;\n};\n\n/**\n * Converts this enum to an enum descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IEnum} Enum descriptor\n */\nEnum.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , this.options,\n \"values\" , this.values,\n \"reserved\" , this.reserved && this.reserved.length ? this.reserved : undefined,\n \"comment\" , keepComments ? this.comment : undefined,\n \"comments\" , keepComments ? this.comments : undefined\n ]);\n};\n\n/**\n * Adds a value to this enum.\n * @param {string} name Value name\n * @param {number} id Value id\n * @param {string} [comment] Comment, if any\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a value with this name or id\n */\nEnum.prototype.add = function add(name, id, comment) {\n // utilized by the parser but not by .fromJSON\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n if (!util.isInteger(id))\n throw TypeError(\"id must be an integer\");\n\n if (this.values[name] !== undefined)\n throw Error(\"duplicate name '\" + name + \"' in \" + this);\n\n if (this.isReservedId(id))\n throw Error(\"id \" + id + \" is reserved in \" + this);\n\n if (this.isReservedName(name))\n throw Error(\"name '\" + name + \"' is reserved in \" + this);\n\n if (this.valuesById[id] !== undefined) {\n if (!(this.options && this.options.allow_alias))\n throw Error(\"duplicate id \" + id + \" in \" + this);\n this.values[name] = id;\n } else\n this.valuesById[this.values[name] = id] = name;\n\n this.comments[name] = comment || null;\n return this;\n};\n\n/**\n * Removes a value from this enum\n * @param {string} name Value name\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `name` is not a name of this enum\n */\nEnum.prototype.remove = function remove(name) {\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n var val = this.values[name];\n if (val == null)\n throw Error(\"name '\" + name + \"' does not exist in \" + this);\n\n delete this.valuesById[val];\n delete this.values[name];\n delete this.comments[name];\n\n return this;\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedId = function isReservedId(id) {\n return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedName = function isReservedName(name) {\n return Namespace.isReservedName(this.reserved, name);\n};\n","\"use strict\";\nmodule.exports = Field;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Field.prototype = Object.create(ReflectionObject.prototype)).constructor = Field).className = \"Field\";\n\nvar Enum = require(\"./enum\"),\n types = require(\"./types\"),\n util = require(\"./util\");\n\nvar Type; // cyclic\n\nvar ruleRe = /^required|optional|repeated$/;\n\n/**\n * Constructs a new message field instance. Note that {@link MapField|map fields} have their own class.\n * @name Field\n * @classdesc Reflected message field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.} [rule=\"optional\"] Field rule\n * @param {string|Object.} [extend] Extended type if different from parent\n * @param {Object.} [options] Declared options\n */\n\n/**\n * Constructs a field from a field descriptor.\n * @param {string} name Field name\n * @param {IField} json Field descriptor\n * @returns {Field} Created field\n * @throws {TypeError} If arguments are invalid\n */\nField.fromJSON = function fromJSON(name, json) {\n return new Field(name, json.id, json.type, json.rule, json.extend, json.options, json.comment);\n};\n\n/**\n * Not an actual constructor. Use {@link Field} instead.\n * @classdesc Base class of all reflected message fields. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports FieldBase\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.} [rule=\"optional\"] Field rule\n * @param {string|Object.} [extend] Extended type if different from parent\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction Field(name, id, type, rule, extend, options, comment) {\n\n if (util.isObject(rule)) {\n comment = extend;\n options = rule;\n rule = extend = undefined;\n } else if (util.isObject(extend)) {\n comment = options;\n options = extend;\n extend = undefined;\n }\n\n ReflectionObject.call(this, name, options);\n\n if (!util.isInteger(id) || id < 0)\n throw TypeError(\"id must be a non-negative integer\");\n\n if (!util.isString(type))\n throw TypeError(\"type must be a string\");\n\n if (rule !== undefined && !ruleRe.test(rule = rule.toString().toLowerCase()))\n throw TypeError(\"rule must be a string rule\");\n\n if (extend !== undefined && !util.isString(extend))\n throw TypeError(\"extend must be a string\");\n\n /**\n * Field rule, if any.\n * @type {string|undefined}\n */\n this.rule = rule && rule !== \"optional\" ? rule : undefined; // toJSON\n\n /**\n * Field type.\n * @type {string}\n */\n this.type = type; // toJSON\n\n /**\n * Unique field id.\n * @type {number}\n */\n this.id = id; // toJSON, marker\n\n /**\n * Extended type if different from parent.\n * @type {string|undefined}\n */\n this.extend = extend || undefined; // toJSON\n\n /**\n * Whether this field is required.\n * @type {boolean}\n */\n this.required = rule === \"required\";\n\n /**\n * Whether this field is optional.\n * @type {boolean}\n */\n this.optional = !this.required;\n\n /**\n * Whether this field is repeated.\n * @type {boolean}\n */\n this.repeated = rule === \"repeated\";\n\n /**\n * Whether this field is a map or not.\n * @type {boolean}\n */\n this.map = false;\n\n /**\n * Message this field belongs to.\n * @type {Type|null}\n */\n this.message = null;\n\n /**\n * OneOf this field belongs to, if any,\n * @type {OneOf|null}\n */\n this.partOf = null;\n\n /**\n * The field type's default value.\n * @type {*}\n */\n this.typeDefault = null;\n\n /**\n * The field's default value on prototypes.\n * @type {*}\n */\n this.defaultValue = null;\n\n /**\n * Whether this field's value should be treated as a long.\n * @type {boolean}\n */\n this.long = util.Long ? types.long[type] !== undefined : /* istanbul ignore next */ false;\n\n /**\n * Whether this field's value is a buffer.\n * @type {boolean}\n */\n this.bytes = type === \"bytes\";\n\n /**\n * Resolved type if not a basic type.\n * @type {Type|Enum|null}\n */\n this.resolvedType = null;\n\n /**\n * Sister-field within the extended type if a declaring extension field.\n * @type {Field|null}\n */\n this.extensionField = null;\n\n /**\n * Sister-field within the declaring namespace if an extended field.\n * @type {Field|null}\n */\n this.declaringField = null;\n\n /**\n * Internally remembers whether this field is packed.\n * @type {boolean|null}\n * @private\n */\n this._packed = null;\n\n /**\n * Comment for this field.\n * @type {string|null}\n */\n this.comment = comment;\n}\n\n/**\n * Determines whether this field is packed. Only relevant when repeated and working with proto2.\n * @name Field#packed\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"packed\", {\n get: function() {\n // defaults to packed=true if not explicity set to false\n if (this._packed === null)\n this._packed = this.getOption(\"packed\") !== false;\n return this._packed;\n }\n});\n\n/**\n * @override\n */\nField.prototype.setOption = function setOption(name, value, ifNotSet) {\n if (name === \"packed\") // clear cached before setting\n this._packed = null;\n return ReflectionObject.prototype.setOption.call(this, name, value, ifNotSet);\n};\n\n/**\n * Field descriptor.\n * @interface IField\n * @property {string} [rule=\"optional\"] Field rule\n * @property {string} type Field type\n * @property {number} id Field id\n * @property {Object.} [options] Field options\n */\n\n/**\n * Extension field descriptor.\n * @interface IExtensionField\n * @extends IField\n * @property {string} extend Extended type\n */\n\n/**\n * Converts this field to a field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IField} Field descriptor\n */\nField.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"rule\" , this.rule !== \"optional\" && this.rule || undefined,\n \"type\" , this.type,\n \"id\" , this.id,\n \"extend\" , this.extend,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Resolves this field's type references.\n * @returns {Field} `this`\n * @throws {Error} If any reference cannot be resolved\n */\nField.prototype.resolve = function resolve() {\n\n if (this.resolved)\n return this;\n\n if ((this.typeDefault = types.defaults[this.type]) === undefined) { // if not a basic type, resolve it\n this.resolvedType = (this.declaringField ? this.declaringField.parent : this.parent).lookupTypeOrEnum(this.type);\n if (this.resolvedType instanceof Type)\n this.typeDefault = null;\n else // instanceof Enum\n this.typeDefault = this.resolvedType.values[Object.keys(this.resolvedType.values)[0]]; // first defined\n }\n\n // use explicitly set default value if present\n if (this.options && this.options[\"default\"] != null) {\n this.typeDefault = this.options[\"default\"];\n if (this.resolvedType instanceof Enum && typeof this.typeDefault === \"string\")\n this.typeDefault = this.resolvedType.values[this.typeDefault];\n }\n\n // remove unnecessary options\n if (this.options) {\n if (this.options.packed === true || this.options.packed !== undefined && this.resolvedType && !(this.resolvedType instanceof Enum))\n delete this.options.packed;\n if (!Object.keys(this.options).length)\n this.options = undefined;\n }\n\n // convert to internal data type if necesssary\n if (this.long) {\n this.typeDefault = util.Long.fromNumber(this.typeDefault, this.type.charAt(0) === \"u\");\n\n /* istanbul ignore else */\n if (Object.freeze)\n Object.freeze(this.typeDefault); // long instances are meant to be immutable anyway (i.e. use small int cache that even requires it)\n\n } else if (this.bytes && typeof this.typeDefault === \"string\") {\n var buf;\n if (util.base64.test(this.typeDefault))\n util.base64.decode(this.typeDefault, buf = util.newBuffer(util.base64.length(this.typeDefault)), 0);\n else\n util.utf8.write(this.typeDefault, buf = util.newBuffer(util.utf8.length(this.typeDefault)), 0);\n this.typeDefault = buf;\n }\n\n // take special care of maps and repeated fields\n if (this.map)\n this.defaultValue = util.emptyObject;\n else if (this.repeated)\n this.defaultValue = util.emptyArray;\n else\n this.defaultValue = this.typeDefault;\n\n // ensure proper value on prototype\n if (this.parent instanceof Type)\n this.parent.ctor.prototype[this.name] = this.defaultValue;\n\n return ReflectionObject.prototype.resolve.call(this);\n};\n\n/**\n * Decorator function as returned by {@link Field.d} and {@link MapField.d} (TypeScript).\n * @typedef FieldDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} fieldName Field name\n * @returns {undefined}\n */\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"string\"|\"bool\"|\"bytes\"|Object} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @param {T} [defaultValue] Default value\n * @returns {FieldDecorator} Decorator function\n * @template T extends number | number[] | Long | Long[] | string | string[] | boolean | boolean[] | Uint8Array | Uint8Array[] | Buffer | Buffer[]\n */\nField.d = function decorateField(fieldId, fieldType, fieldRule, defaultValue) {\n\n // submessage: decorate the submessage and use its name as the type\n if (typeof fieldType === \"function\")\n fieldType = util.decorateType(fieldType).name;\n\n // enum reference: create a reflected copy of the enum and keep reuseing it\n else if (fieldType && typeof fieldType === \"object\")\n fieldType = util.decorateEnum(fieldType).name;\n\n return function fieldDecorator(prototype, fieldName) {\n util.decorateType(prototype.constructor)\n .add(new Field(fieldName, fieldId, fieldType, fieldRule, { \"default\": defaultValue }));\n };\n};\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {Constructor|string} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @returns {FieldDecorator} Decorator function\n * @template T extends Message\n * @variation 2\n */\n// like Field.d but without a default value\n\n// Sets up cyclic dependencies (called in index-light)\nField._configure = function configure(Type_) {\n Type = Type_;\n};\n","\"use strict\";\nvar protobuf = module.exports = require(\"./index-minimal\");\n\nprotobuf.build = \"light\";\n\n/**\n * A node-style callback as used by {@link load} and {@link Root#load}.\n * @typedef LoadCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Root} [root] Root, if there hasn't been an error\n * @returns {undefined}\n */\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} root Root namespace, defaults to create a new one if omitted.\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n */\nfunction load(filename, root, callback) {\n if (typeof root === \"function\") {\n callback = root;\n root = new protobuf.Root();\n } else if (!root)\n root = new protobuf.Root();\n return root.load(filename, callback);\n}\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and returns a promise.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Promise} Promise\n * @see {@link Root#load}\n * @variation 3\n */\n// function load(filename:string, [root:Root]):Promise\n\nprotobuf.load = load;\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into a common root namespace (node only).\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n * @see {@link Root#loadSync}\n */\nfunction loadSync(filename, root) {\n if (!root)\n root = new protobuf.Root();\n return root.loadSync(filename);\n}\n\nprotobuf.loadSync = loadSync;\n\n// Serialization\nprotobuf.encoder = require(\"./encoder\");\nprotobuf.decoder = require(\"./decoder\");\nprotobuf.verifier = require(\"./verifier\");\nprotobuf.converter = require(\"./converter\");\n\n// Reflection\nprotobuf.ReflectionObject = require(\"./object\");\nprotobuf.Namespace = require(\"./namespace\");\nprotobuf.Root = require(\"./root\");\nprotobuf.Enum = require(\"./enum\");\nprotobuf.Type = require(\"./type\");\nprotobuf.Field = require(\"./field\");\nprotobuf.OneOf = require(\"./oneof\");\nprotobuf.MapField = require(\"./mapfield\");\nprotobuf.Service = require(\"./service\");\nprotobuf.Method = require(\"./method\");\n\n// Runtime\nprotobuf.Message = require(\"./message\");\nprotobuf.wrappers = require(\"./wrappers\");\n\n// Utility\nprotobuf.types = require(\"./types\");\nprotobuf.util = require(\"./util\");\n\n// Set up possibly cyclic reflection dependencies\nprotobuf.ReflectionObject._configure(protobuf.Root);\nprotobuf.Namespace._configure(protobuf.Type, protobuf.Service, protobuf.Enum);\nprotobuf.Root._configure(protobuf.Type);\nprotobuf.Field._configure(protobuf.Type);\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","\"use strict\";\nmodule.exports = MapField;\n\n// extends Field\nvar Field = require(\"./field\");\n((MapField.prototype = Object.create(Field.prototype)).constructor = MapField).className = \"MapField\";\n\nvar types = require(\"./types\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new map field instance.\n * @classdesc Reflected map field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} keyType Key type\n * @param {string} type Value type\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction MapField(name, id, keyType, type, options, comment) {\n Field.call(this, name, id, type, undefined, undefined, options, comment);\n\n /* istanbul ignore if */\n if (!util.isString(keyType))\n throw TypeError(\"keyType must be a string\");\n\n /**\n * Key type.\n * @type {string}\n */\n this.keyType = keyType; // toJSON, marker\n\n /**\n * Resolved key type if not a basic type.\n * @type {ReflectionObject|null}\n */\n this.resolvedKeyType = null;\n\n // Overrides Field#map\n this.map = true;\n}\n\n/**\n * Map field descriptor.\n * @interface IMapField\n * @extends {IField}\n * @property {string} keyType Key type\n */\n\n/**\n * Extension map field descriptor.\n * @interface IExtensionMapField\n * @extends IMapField\n * @property {string} extend Extended type\n */\n\n/**\n * Constructs a map field from a map field descriptor.\n * @param {string} name Field name\n * @param {IMapField} json Map field descriptor\n * @returns {MapField} Created map field\n * @throws {TypeError} If arguments are invalid\n */\nMapField.fromJSON = function fromJSON(name, json) {\n return new MapField(name, json.id, json.keyType, json.type, json.options, json.comment);\n};\n\n/**\n * Converts this map field to a map field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMapField} Map field descriptor\n */\nMapField.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"keyType\" , this.keyType,\n \"type\" , this.type,\n \"id\" , this.id,\n \"extend\" , this.extend,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * @override\n */\nMapField.prototype.resolve = function resolve() {\n if (this.resolved)\n return this;\n\n // Besides a value type, map fields have a key type that may be \"any scalar type except for floating point types and bytes\"\n if (types.mapKey[this.keyType] === undefined)\n throw Error(\"invalid key type: \" + this.keyType);\n\n return Field.prototype.resolve.call(this);\n};\n\n/**\n * Map field decorator (TypeScript).\n * @name MapField.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"} fieldKeyType Field key type\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"|\"bytes\"|Object|Constructor<{}>} fieldValueType Field value type\n * @returns {FieldDecorator} Decorator function\n * @template T extends { [key: string]: number | Long | string | boolean | Uint8Array | Buffer | number[] | Message<{}> }\n */\nMapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) {\n\n // submessage value: decorate the submessage and use its name as the type\n if (typeof fieldValueType === \"function\")\n fieldValueType = util.decorateType(fieldValueType).name;\n\n // enum reference value: create a reflected copy of the enum and keep reuseing it\n else if (fieldValueType && typeof fieldValueType === \"object\")\n fieldValueType = util.decorateEnum(fieldValueType).name;\n\n return function mapFieldDecorator(prototype, fieldName) {\n util.decorateType(prototype.constructor)\n .add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType));\n };\n};\n","\"use strict\";\nmodule.exports = Message;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new message instance.\n * @classdesc Abstract runtime message.\n * @constructor\n * @param {Properties} [properties] Properties to set\n * @template T extends object = object\n */\nfunction Message(properties) {\n // not used internally\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n this[keys[i]] = properties[keys[i]];\n}\n\n/**\n * Reference to the reflected type.\n * @name Message.$type\n * @type {Type}\n * @readonly\n */\n\n/**\n * Reference to the reflected type.\n * @name Message#$type\n * @type {Type}\n * @readonly\n */\n\n/*eslint-disable valid-jsdoc*/\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.} [properties] Properties to set\n * @returns {Message} Message instance\n * @template T extends Message\n * @this Constructor\n */\nMessage.create = function create(properties) {\n return this.$type.create(properties);\n};\n\n/**\n * Encodes a message of this type.\n * @param {T|Object.} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message\n * @this Constructor\n */\nMessage.encode = function encode(message, writer) {\n return this.$type.encode(message, writer);\n};\n\n/**\n * Encodes a message of this type preceeded by its length as a varint.\n * @param {T|Object.} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message\n * @this Constructor\n */\nMessage.encodeDelimited = function encodeDelimited(message, writer) {\n return this.$type.encodeDelimited(message, writer);\n};\n\n/**\n * Decodes a message of this type.\n * @name Message.decode\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message\n * @this Constructor\n */\nMessage.decode = function decode(reader) {\n return this.$type.decode(reader);\n};\n\n/**\n * Decodes a message of this type preceeded by its length as a varint.\n * @name Message.decodeDelimited\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message\n * @this Constructor\n */\nMessage.decodeDelimited = function decodeDelimited(reader) {\n return this.$type.decodeDelimited(reader);\n};\n\n/**\n * Verifies a message of this type.\n * @name Message.verify\n * @function\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\nMessage.verify = function verify(message) {\n return this.$type.verify(message);\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.} object Plain object\n * @returns {T} Message instance\n * @template T extends Message\n * @this Constructor\n */\nMessage.fromObject = function fromObject(object) {\n return this.$type.fromObject(object);\n};\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {T} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n * @template T extends Message\n * @this Constructor\n */\nMessage.toObject = function toObject(message, options) {\n return this.$type.toObject(message, options);\n};\n\n/**\n * Converts this message to JSON.\n * @returns {Object.} JSON object\n */\nMessage.prototype.toJSON = function toJSON() {\n return this.$type.toObject(this, util.toJSONOptions);\n};\n\n/*eslint-enable valid-jsdoc*/","\"use strict\";\nmodule.exports = Method;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Method.prototype = Object.create(ReflectionObject.prototype)).constructor = Method).className = \"Method\";\n\nvar util = require(\"./util\");\n\n/**\n * Constructs a new service method instance.\n * @classdesc Reflected service method.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Method name\n * @param {string|undefined} type Method type, usually `\"rpc\"`\n * @param {string} requestType Request message type\n * @param {string} responseType Response message type\n * @param {boolean|Object.} [requestStream] Whether the request is streamed\n * @param {boolean|Object.} [responseStream] Whether the response is streamed\n * @param {Object.} [options] Declared options\n * @param {string} [comment] The comment for this method\n * @param {Object.} [parsedOptions] Declared options, properly parsed into an object\n */\nfunction Method(name, type, requestType, responseType, requestStream, responseStream, options, comment, parsedOptions) {\n\n /* istanbul ignore next */\n if (util.isObject(requestStream)) {\n options = requestStream;\n requestStream = responseStream = undefined;\n } else if (util.isObject(responseStream)) {\n options = responseStream;\n responseStream = undefined;\n }\n\n /* istanbul ignore if */\n if (!(type === undefined || util.isString(type)))\n throw TypeError(\"type must be a string\");\n\n /* istanbul ignore if */\n if (!util.isString(requestType))\n throw TypeError(\"requestType must be a string\");\n\n /* istanbul ignore if */\n if (!util.isString(responseType))\n throw TypeError(\"responseType must be a string\");\n\n ReflectionObject.call(this, name, options);\n\n /**\n * Method type.\n * @type {string}\n */\n this.type = type || \"rpc\"; // toJSON\n\n /**\n * Request type.\n * @type {string}\n */\n this.requestType = requestType; // toJSON, marker\n\n /**\n * Whether requests are streamed or not.\n * @type {boolean|undefined}\n */\n this.requestStream = requestStream ? true : undefined; // toJSON\n\n /**\n * Response type.\n * @type {string}\n */\n this.responseType = responseType; // toJSON\n\n /**\n * Whether responses are streamed or not.\n * @type {boolean|undefined}\n */\n this.responseStream = responseStream ? true : undefined; // toJSON\n\n /**\n * Resolved request type.\n * @type {Type|null}\n */\n this.resolvedRequestType = null;\n\n /**\n * Resolved response type.\n * @type {Type|null}\n */\n this.resolvedResponseType = null;\n\n /**\n * Comment for this method\n * @type {string|null}\n */\n this.comment = comment;\n\n /**\n * Options properly parsed into an object\n */\n this.parsedOptions = parsedOptions;\n}\n\n/**\n * Method descriptor.\n * @interface IMethod\n * @property {string} [type=\"rpc\"] Method type\n * @property {string} requestType Request type\n * @property {string} responseType Response type\n * @property {boolean} [requestStream=false] Whether requests are streamed\n * @property {boolean} [responseStream=false] Whether responses are streamed\n * @property {Object.} [options] Method options\n * @property {string} comment Method comments\n * @property {Object.} [parsedOptions] Method options properly parsed into an object\n */\n\n/**\n * Constructs a method from a method descriptor.\n * @param {string} name Method name\n * @param {IMethod} json Method descriptor\n * @returns {Method} Created method\n * @throws {TypeError} If arguments are invalid\n */\nMethod.fromJSON = function fromJSON(name, json) {\n return new Method(name, json.type, json.requestType, json.responseType, json.requestStream, json.responseStream, json.options, json.comment, json.parsedOptions);\n};\n\n/**\n * Converts this method to a method descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMethod} Method descriptor\n */\nMethod.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"type\" , this.type !== \"rpc\" && /* istanbul ignore next */ this.type || undefined,\n \"requestType\" , this.requestType,\n \"requestStream\" , this.requestStream,\n \"responseType\" , this.responseType,\n \"responseStream\" , this.responseStream,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined,\n \"parsedOptions\" , this.parsedOptions,\n ]);\n};\n\n/**\n * @override\n */\nMethod.prototype.resolve = function resolve() {\n\n /* istanbul ignore if */\n if (this.resolved)\n return this;\n\n this.resolvedRequestType = this.parent.lookupType(this.requestType);\n this.resolvedResponseType = this.parent.lookupType(this.responseType);\n\n return ReflectionObject.prototype.resolve.call(this);\n};\n","\"use strict\";\nmodule.exports = Namespace;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Namespace.prototype = Object.create(ReflectionObject.prototype)).constructor = Namespace).className = \"Namespace\";\n\nvar Field = require(\"./field\"),\n util = require(\"./util\");\n\nvar Type, // cyclic\n Service,\n Enum;\n\n/**\n * Constructs a new namespace instance.\n * @name Namespace\n * @classdesc Reflected namespace.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.} [options] Declared options\n */\n\n/**\n * Constructs a namespace from JSON.\n * @memberof Namespace\n * @function\n * @param {string} name Namespace name\n * @param {Object.} json JSON object\n * @returns {Namespace} Created namespace\n * @throws {TypeError} If arguments are invalid\n */\nNamespace.fromJSON = function fromJSON(name, json) {\n return new Namespace(name, json.options).addJSON(json.nested);\n};\n\n/**\n * Converts an array of reflection objects to JSON.\n * @memberof Namespace\n * @param {ReflectionObject[]} array Object array\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {Object.|undefined} JSON object or `undefined` when array is empty\n */\nfunction arrayToJSON(array, toJSONOptions) {\n if (!(array && array.length))\n return undefined;\n var obj = {};\n for (var i = 0; i < array.length; ++i)\n obj[array[i].name] = array[i].toJSON(toJSONOptions);\n return obj;\n}\n\nNamespace.arrayToJSON = arrayToJSON;\n\n/**\n * Tests if the specified id is reserved.\n * @param {Array.|undefined} reserved Array of reserved ranges and names\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedId = function isReservedId(reserved, id) {\n if (reserved)\n for (var i = 0; i < reserved.length; ++i)\n if (typeof reserved[i] !== \"string\" && reserved[i][0] <= id && reserved[i][1] > id)\n return true;\n return false;\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {Array.|undefined} reserved Array of reserved ranges and names\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedName = function isReservedName(reserved, name) {\n if (reserved)\n for (var i = 0; i < reserved.length; ++i)\n if (reserved[i] === name)\n return true;\n return false;\n};\n\n/**\n * Not an actual constructor. Use {@link Namespace} instead.\n * @classdesc Base class of all reflection objects containing nested objects. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports NamespaceBase\n * @extends ReflectionObject\n * @abstract\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.} [options] Declared options\n * @see {@link Namespace}\n */\nfunction Namespace(name, options) {\n ReflectionObject.call(this, name, options);\n\n /**\n * Nested objects by name.\n * @type {Object.|undefined}\n */\n this.nested = undefined; // toJSON\n\n /**\n * Cached nested objects as an array.\n * @type {ReflectionObject[]|null}\n * @private\n */\n this._nestedArray = null;\n}\n\nfunction clearCache(namespace) {\n namespace._nestedArray = null;\n return namespace;\n}\n\n/**\n * Nested objects of this namespace as an array for iteration.\n * @name NamespaceBase#nestedArray\n * @type {ReflectionObject[]}\n * @readonly\n */\nObject.defineProperty(Namespace.prototype, \"nestedArray\", {\n get: function() {\n return this._nestedArray || (this._nestedArray = util.toArray(this.nested));\n }\n});\n\n/**\n * Namespace descriptor.\n * @interface INamespace\n * @property {Object.} [options] Namespace options\n * @property {Object.} [nested] Nested object descriptors\n */\n\n/**\n * Any extension field descriptor.\n * @typedef AnyExtensionField\n * @type {IExtensionField|IExtensionMapField}\n */\n\n/**\n * Any nested object descriptor.\n * @typedef AnyNestedObject\n * @type {IEnum|IType|IService|AnyExtensionField|INamespace}\n */\n// ^ BEWARE: VSCode hangs forever when using more than 5 types (that's why AnyExtensionField exists in the first place)\n\n/**\n * Converts this namespace to a namespace descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {INamespace} Namespace descriptor\n */\nNamespace.prototype.toJSON = function toJSON(toJSONOptions) {\n return util.toObject([\n \"options\" , this.options,\n \"nested\" , arrayToJSON(this.nestedArray, toJSONOptions)\n ]);\n};\n\n/**\n * Adds nested objects to this namespace from nested object descriptors.\n * @param {Object.} nestedJson Any nested object descriptors\n * @returns {Namespace} `this`\n */\nNamespace.prototype.addJSON = function addJSON(nestedJson) {\n var ns = this;\n /* istanbul ignore else */\n if (nestedJson) {\n for (var names = Object.keys(nestedJson), i = 0, nested; i < names.length; ++i) {\n nested = nestedJson[names[i]];\n ns.add( // most to least likely\n ( nested.fields !== undefined\n ? Type.fromJSON\n : nested.values !== undefined\n ? Enum.fromJSON\n : nested.methods !== undefined\n ? Service.fromJSON\n : nested.id !== undefined\n ? Field.fromJSON\n : Namespace.fromJSON )(names[i], nested)\n );\n }\n }\n return this;\n};\n\n/**\n * Gets the nested object of the specified name.\n * @param {string} name Nested object name\n * @returns {ReflectionObject|null} The reflection object or `null` if it doesn't exist\n */\nNamespace.prototype.get = function get(name) {\n return this.nested && this.nested[name]\n || null;\n};\n\n/**\n * Gets the values of the nested {@link Enum|enum} of the specified name.\n * This methods differs from {@link Namespace#get|get} in that it returns an enum's values directly and throws instead of returning `null`.\n * @param {string} name Nested enum name\n * @returns {Object.} Enum values\n * @throws {Error} If there is no such enum\n */\nNamespace.prototype.getEnum = function getEnum(name) {\n if (this.nested && this.nested[name] instanceof Enum)\n return this.nested[name].values;\n throw Error(\"no such enum: \" + name);\n};\n\n/**\n * Adds a nested object to this namespace.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name\n */\nNamespace.prototype.add = function add(object) {\n\n if (!(object instanceof Field && object.extend !== undefined || object instanceof Type || object instanceof Enum || object instanceof Service || object instanceof Namespace))\n throw TypeError(\"object must be a valid nested object\");\n\n if (!this.nested)\n this.nested = {};\n else {\n var prev = this.get(object.name);\n if (prev) {\n if (prev instanceof Namespace && object instanceof Namespace && !(prev instanceof Type || prev instanceof Service)) {\n // replace plain namespace but keep existing nested elements and options\n var nested = prev.nestedArray;\n for (var i = 0; i < nested.length; ++i)\n object.add(nested[i]);\n this.remove(prev);\n if (!this.nested)\n this.nested = {};\n object.setOptions(prev.options, true);\n\n } else\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n }\n }\n this.nested[object.name] = object;\n object.onAdd(this);\n return clearCache(this);\n};\n\n/**\n * Removes a nested object from this namespace.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this namespace\n */\nNamespace.prototype.remove = function remove(object) {\n\n if (!(object instanceof ReflectionObject))\n throw TypeError(\"object must be a ReflectionObject\");\n if (object.parent !== this)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.nested[object.name];\n if (!Object.keys(this.nested).length)\n this.nested = undefined;\n\n object.onRemove(this);\n return clearCache(this);\n};\n\n/**\n * Defines additial namespaces within this one if not yet existing.\n * @param {string|string[]} path Path to create\n * @param {*} [json] Nested types to create from JSON\n * @returns {Namespace} Pointer to the last namespace created or `this` if path is empty\n */\nNamespace.prototype.define = function define(path, json) {\n\n if (util.isString(path))\n path = path.split(\".\");\n else if (!Array.isArray(path))\n throw TypeError(\"illegal path\");\n if (path && path.length && path[0] === \"\")\n throw Error(\"path must be relative\");\n\n var ptr = this;\n while (path.length > 0) {\n var part = path.shift();\n if (ptr.nested && ptr.nested[part]) {\n ptr = ptr.nested[part];\n if (!(ptr instanceof Namespace))\n throw Error(\"path conflicts with non-namespace objects\");\n } else\n ptr.add(ptr = new Namespace(part));\n }\n if (json)\n ptr.addJSON(json);\n return ptr;\n};\n\n/**\n * Resolves this namespace's and all its nested objects' type references. Useful to validate a reflection tree, but comes at a cost.\n * @returns {Namespace} `this`\n */\nNamespace.prototype.resolveAll = function resolveAll() {\n var nested = this.nestedArray, i = 0;\n while (i < nested.length)\n if (nested[i] instanceof Namespace)\n nested[i++].resolveAll();\n else\n nested[i++].resolve();\n return this.resolve();\n};\n\n/**\n * Recursively looks up the reflection object matching the specified path in the scope of this namespace.\n * @param {string|string[]} path Path to look up\n * @param {*|Array.<*>} filterTypes Filter types, any combination of the constructors of `protobuf.Type`, `protobuf.Enum`, `protobuf.Service` etc.\n * @param {boolean} [parentAlreadyChecked=false] If known, whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n */\nNamespace.prototype.lookup = function lookup(path, filterTypes, parentAlreadyChecked) {\n\n /* istanbul ignore next */\n if (typeof filterTypes === \"boolean\") {\n parentAlreadyChecked = filterTypes;\n filterTypes = undefined;\n } else if (filterTypes && !Array.isArray(filterTypes))\n filterTypes = [ filterTypes ];\n\n if (util.isString(path) && path.length) {\n if (path === \".\")\n return this.root;\n path = path.split(\".\");\n } else if (!path.length)\n return this;\n\n // Start at root if path is absolute\n if (path[0] === \"\")\n return this.root.lookup(path.slice(1), filterTypes);\n\n // Test if the first part matches any nested object, and if so, traverse if path contains more\n var found = this.get(path[0]);\n if (found) {\n if (path.length === 1) {\n if (!filterTypes || filterTypes.indexOf(found.constructor) > -1)\n return found;\n } else if (found instanceof Namespace && (found = found.lookup(path.slice(1), filterTypes, true)))\n return found;\n\n // Otherwise try each nested namespace\n } else\n for (var i = 0; i < this.nestedArray.length; ++i)\n if (this._nestedArray[i] instanceof Namespace && (found = this._nestedArray[i].lookup(path, filterTypes, true)))\n return found;\n\n // If there hasn't been a match, try again at the parent\n if (this.parent === null || parentAlreadyChecked)\n return null;\n return this.parent.lookup(path, filterTypes);\n};\n\n/**\n * Looks up the reflection object at the specified path, relative to this namespace.\n * @name NamespaceBase#lookup\n * @function\n * @param {string|string[]} path Path to look up\n * @param {boolean} [parentAlreadyChecked=false] Whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n * @variation 2\n */\n// lookup(path: string, [parentAlreadyChecked: boolean])\n\n/**\n * Looks up the {@link Type|type} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type\n * @throws {Error} If `path` does not point to a type\n */\nNamespace.prototype.lookupType = function lookupType(path) {\n var found = this.lookup(path, [ Type ]);\n if (!found)\n throw Error(\"no such type: \" + path);\n return found;\n};\n\n/**\n * Looks up the values of the {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Enum} Looked up enum\n * @throws {Error} If `path` does not point to an enum\n */\nNamespace.prototype.lookupEnum = function lookupEnum(path) {\n var found = this.lookup(path, [ Enum ]);\n if (!found)\n throw Error(\"no such Enum '\" + path + \"' in \" + this);\n return found;\n};\n\n/**\n * Looks up the {@link Type|type} or {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type or enum\n * @throws {Error} If `path` does not point to a type or enum\n */\nNamespace.prototype.lookupTypeOrEnum = function lookupTypeOrEnum(path) {\n var found = this.lookup(path, [ Type, Enum ]);\n if (!found)\n throw Error(\"no such Type or Enum '\" + path + \"' in \" + this);\n return found;\n};\n\n/**\n * Looks up the {@link Service|service} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Service} Looked up service\n * @throws {Error} If `path` does not point to a service\n */\nNamespace.prototype.lookupService = function lookupService(path) {\n var found = this.lookup(path, [ Service ]);\n if (!found)\n throw Error(\"no such Service '\" + path + \"' in \" + this);\n return found;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nNamespace._configure = function(Type_, Service_, Enum_) {\n Type = Type_;\n Service = Service_;\n Enum = Enum_;\n};\n","\"use strict\";\nmodule.exports = ReflectionObject;\n\nReflectionObject.className = \"ReflectionObject\";\n\nvar util = require(\"./util\");\n\nvar Root; // cyclic\n\n/**\n * Constructs a new reflection object instance.\n * @classdesc Base class of all reflection objects.\n * @constructor\n * @param {string} name Object name\n * @param {Object.} [options] Declared options\n * @abstract\n */\nfunction ReflectionObject(name, options) {\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n if (options && !util.isObject(options))\n throw TypeError(\"options must be an object\");\n\n /**\n * Options.\n * @type {Object.|undefined}\n */\n this.options = options; // toJSON\n\n /**\n * Parsed Options.\n * @type {Array.>|undefined}\n */\n this.parsedOptions = null;\n\n /**\n * Unique name within its namespace.\n * @type {string}\n */\n this.name = name;\n\n /**\n * Parent namespace.\n * @type {Namespace|null}\n */\n this.parent = null;\n\n /**\n * Whether already resolved or not.\n * @type {boolean}\n */\n this.resolved = false;\n\n /**\n * Comment text, if any.\n * @type {string|null}\n */\n this.comment = null;\n\n /**\n * Defining file name.\n * @type {string|null}\n */\n this.filename = null;\n}\n\nObject.defineProperties(ReflectionObject.prototype, {\n\n /**\n * Reference to the root namespace.\n * @name ReflectionObject#root\n * @type {Root}\n * @readonly\n */\n root: {\n get: function() {\n var ptr = this;\n while (ptr.parent !== null)\n ptr = ptr.parent;\n return ptr;\n }\n },\n\n /**\n * Full name including leading dot.\n * @name ReflectionObject#fullName\n * @type {string}\n * @readonly\n */\n fullName: {\n get: function() {\n var path = [ this.name ],\n ptr = this.parent;\n while (ptr) {\n path.unshift(ptr.name);\n ptr = ptr.parent;\n }\n return path.join(\".\");\n }\n }\n});\n\n/**\n * Converts this reflection object to its descriptor representation.\n * @returns {Object.} Descriptor\n * @abstract\n */\nReflectionObject.prototype.toJSON = /* istanbul ignore next */ function toJSON() {\n throw Error(); // not implemented, shouldn't happen\n};\n\n/**\n * Called when this object is added to a parent.\n * @param {ReflectionObject} parent Parent added to\n * @returns {undefined}\n */\nReflectionObject.prototype.onAdd = function onAdd(parent) {\n if (this.parent && this.parent !== parent)\n this.parent.remove(this);\n this.parent = parent;\n this.resolved = false;\n var root = parent.root;\n if (root instanceof Root)\n root._handleAdd(this);\n};\n\n/**\n * Called when this object is removed from a parent.\n * @param {ReflectionObject} parent Parent removed from\n * @returns {undefined}\n */\nReflectionObject.prototype.onRemove = function onRemove(parent) {\n var root = parent.root;\n if (root instanceof Root)\n root._handleRemove(this);\n this.parent = null;\n this.resolved = false;\n};\n\n/**\n * Resolves this objects type references.\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.resolve = function resolve() {\n if (this.resolved)\n return this;\n if (this.root instanceof Root)\n this.resolved = true; // only if part of a root\n return this;\n};\n\n/**\n * Gets an option value.\n * @param {string} name Option name\n * @returns {*} Option value or `undefined` if not set\n */\nReflectionObject.prototype.getOption = function getOption(name) {\n if (this.options)\n return this.options[name];\n return undefined;\n};\n\n/**\n * Sets an option.\n * @param {string} name Option name\n * @param {*} value Option value\n * @param {boolean} [ifNotSet] Sets the option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOption = function setOption(name, value, ifNotSet) {\n if (!ifNotSet || !this.options || this.options[name] === undefined)\n (this.options || (this.options = {}))[name] = value;\n return this;\n};\n\n/**\n * Sets a parsed option.\n * @param {string} name parsed Option name\n * @param {*} value Option value\n * @param {string} propName dot '.' delimited full path of property within the option to set. if undefined\\empty, will add a new option with that value\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setParsedOption = function setParsedOption(name, value, propName) {\n if (!this.parsedOptions) {\n this.parsedOptions = [];\n }\n var parsedOptions = this.parsedOptions;\n if (propName) {\n // If setting a sub property of an option then try to merge it\n // with an existing option\n var opt = parsedOptions.find(function (opt) {\n return Object.prototype.hasOwnProperty.call(opt, name);\n });\n if (opt) {\n // If we found an existing option - just merge the property value\n var newValue = opt[name];\n util.setProperty(newValue, propName, value);\n } else {\n // otherwise, create a new option, set it's property and add it to the list\n opt = {};\n opt[name] = util.setProperty({}, propName, value);\n parsedOptions.push(opt);\n }\n } else {\n // Always create a new option when setting the value of the option itself\n var newOpt = {};\n newOpt[name] = value;\n parsedOptions.push(newOpt);\n }\n return this;\n};\n\n/**\n * Sets multiple options.\n * @param {Object.} options Options to set\n * @param {boolean} [ifNotSet] Sets an option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOptions = function setOptions(options, ifNotSet) {\n if (options)\n for (var keys = Object.keys(options), i = 0; i < keys.length; ++i)\n this.setOption(keys[i], options[keys[i]], ifNotSet);\n return this;\n};\n\n/**\n * Converts this instance to its string representation.\n * @returns {string} Class name[, space, full name]\n */\nReflectionObject.prototype.toString = function toString() {\n var className = this.constructor.className,\n fullName = this.fullName;\n if (fullName.length)\n return className + \" \" + fullName;\n return className;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nReflectionObject._configure = function(Root_) {\n Root = Root_;\n};\n","\"use strict\";\nmodule.exports = OneOf;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((OneOf.prototype = Object.create(ReflectionObject.prototype)).constructor = OneOf).className = \"OneOf\";\n\nvar Field = require(\"./field\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new oneof instance.\n * @classdesc Reflected oneof.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Oneof name\n * @param {string[]|Object.} [fieldNames] Field names\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction OneOf(name, fieldNames, options, comment) {\n if (!Array.isArray(fieldNames)) {\n options = fieldNames;\n fieldNames = undefined;\n }\n ReflectionObject.call(this, name, options);\n\n /* istanbul ignore if */\n if (!(fieldNames === undefined || Array.isArray(fieldNames)))\n throw TypeError(\"fieldNames must be an Array\");\n\n /**\n * Field names that belong to this oneof.\n * @type {string[]}\n */\n this.oneof = fieldNames || []; // toJSON, marker\n\n /**\n * Fields that belong to this oneof as an array for iteration.\n * @type {Field[]}\n * @readonly\n */\n this.fieldsArray = []; // declared readonly for conformance, possibly not yet added to parent\n\n /**\n * Comment for this field.\n * @type {string|null}\n */\n this.comment = comment;\n}\n\n/**\n * Oneof descriptor.\n * @interface IOneOf\n * @property {Array.} oneof Oneof field names\n * @property {Object.} [options] Oneof options\n */\n\n/**\n * Constructs a oneof from a oneof descriptor.\n * @param {string} name Oneof name\n * @param {IOneOf} json Oneof descriptor\n * @returns {OneOf} Created oneof\n * @throws {TypeError} If arguments are invalid\n */\nOneOf.fromJSON = function fromJSON(name, json) {\n return new OneOf(name, json.oneof, json.options, json.comment);\n};\n\n/**\n * Converts this oneof to a oneof descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IOneOf} Oneof descriptor\n */\nOneOf.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , this.options,\n \"oneof\" , this.oneof,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Adds the fields of the specified oneof to the parent if not already done so.\n * @param {OneOf} oneof The oneof\n * @returns {undefined}\n * @inner\n * @ignore\n */\nfunction addFieldsToParent(oneof) {\n if (oneof.parent)\n for (var i = 0; i < oneof.fieldsArray.length; ++i)\n if (!oneof.fieldsArray[i].parent)\n oneof.parent.add(oneof.fieldsArray[i]);\n}\n\n/**\n * Adds a field to this oneof and removes it from its current parent, if any.\n * @param {Field} field Field to add\n * @returns {OneOf} `this`\n */\nOneOf.prototype.add = function add(field) {\n\n /* istanbul ignore if */\n if (!(field instanceof Field))\n throw TypeError(\"field must be a Field\");\n\n if (field.parent && field.parent !== this.parent)\n field.parent.remove(field);\n this.oneof.push(field.name);\n this.fieldsArray.push(field);\n field.partOf = this; // field.parent remains null\n addFieldsToParent(this);\n return this;\n};\n\n/**\n * Removes a field from this oneof and puts it back to the oneof's parent.\n * @param {Field} field Field to remove\n * @returns {OneOf} `this`\n */\nOneOf.prototype.remove = function remove(field) {\n\n /* istanbul ignore if */\n if (!(field instanceof Field))\n throw TypeError(\"field must be a Field\");\n\n var index = this.fieldsArray.indexOf(field);\n\n /* istanbul ignore if */\n if (index < 0)\n throw Error(field + \" is not a member of \" + this);\n\n this.fieldsArray.splice(index, 1);\n index = this.oneof.indexOf(field.name);\n\n /* istanbul ignore else */\n if (index > -1) // theoretical\n this.oneof.splice(index, 1);\n\n field.partOf = null;\n return this;\n};\n\n/**\n * @override\n */\nOneOf.prototype.onAdd = function onAdd(parent) {\n ReflectionObject.prototype.onAdd.call(this, parent);\n var self = this;\n // Collect present fields\n for (var i = 0; i < this.oneof.length; ++i) {\n var field = parent.get(this.oneof[i]);\n if (field && !field.partOf) {\n field.partOf = self;\n self.fieldsArray.push(field);\n }\n }\n // Add not yet present fields\n addFieldsToParent(this);\n};\n\n/**\n * @override\n */\nOneOf.prototype.onRemove = function onRemove(parent) {\n for (var i = 0, field; i < this.fieldsArray.length; ++i)\n if ((field = this.fieldsArray[i]).parent)\n field.parent.remove(field);\n ReflectionObject.prototype.onRemove.call(this, parent);\n};\n\n/**\n * Decorator function as returned by {@link OneOf.d} (TypeScript).\n * @typedef OneOfDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} oneofName OneOf name\n * @returns {undefined}\n */\n\n/**\n * OneOf decorator (TypeScript).\n * @function\n * @param {...string} fieldNames Field names\n * @returns {OneOfDecorator} Decorator function\n * @template T extends string\n */\nOneOf.d = function decorateOneOf() {\n var fieldNames = new Array(arguments.length),\n index = 0;\n while (index < arguments.length)\n fieldNames[index] = arguments[index++];\n return function oneOfDecorator(prototype, oneofName) {\n util.decorateType(prototype.constructor)\n .add(new OneOf(oneofName, fieldNames));\n Object.defineProperty(prototype, oneofName, {\n get: util.oneOfGetter(fieldNames),\n set: util.oneOfSetter(fieldNames)\n });\n };\n};\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Root;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Root.prototype = Object.create(Namespace.prototype)).constructor = Root).className = \"Root\";\n\nvar Field = require(\"./field\"),\n Enum = require(\"./enum\"),\n OneOf = require(\"./oneof\"),\n util = require(\"./util\");\n\nvar Type, // cyclic\n parse, // might be excluded\n common; // \"\n\n/**\n * Constructs a new root namespace instance.\n * @classdesc Root namespace wrapping all types, enums, services, sub-namespaces etc. that belong together.\n * @extends NamespaceBase\n * @constructor\n * @param {Object.} [options] Top level options\n */\nfunction Root(options) {\n Namespace.call(this, \"\", options);\n\n /**\n * Deferred extension fields.\n * @type {Field[]}\n */\n this.deferred = [];\n\n /**\n * Resolved file names of loaded files.\n * @type {string[]}\n */\n this.files = [];\n}\n\n/**\n * Loads a namespace descriptor into a root namespace.\n * @param {INamespace} json Nameespace descriptor\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted\n * @returns {Root} Root namespace\n */\nRoot.fromJSON = function fromJSON(json, root) {\n if (!root)\n root = new Root();\n if (json.options)\n root.setOptions(json.options);\n return root.addJSON(json.nested);\n};\n\n/**\n * Resolves the path of an imported file, relative to the importing origin.\n * This method exists so you can override it with your own logic in case your imports are scattered over multiple directories.\n * @function\n * @param {string} origin The file name of the importing file\n * @param {string} target The file name being imported\n * @returns {string|null} Resolved path to `target` or `null` to skip the file\n */\nRoot.prototype.resolvePath = util.path.resolve;\n\n/**\n * Fetch content from file path or url\n * This method exists so you can override it with your own logic.\n * @function\n * @param {string} path File path or url\n * @param {FetchCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.fetch = util.fetch;\n\n// A symbol-like function to safely signal synchronous loading\n/* istanbul ignore next */\nfunction SYNC() {} // eslint-disable-line no-empty-function\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} options Parse options\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.load = function load(filename, options, callback) {\n if (typeof options === \"function\") {\n callback = options;\n options = undefined;\n }\n var self = this;\n if (!callback)\n return util.asPromise(load, self, filename, options);\n\n var sync = callback === SYNC; // undocumented\n\n // Finishes loading by calling the callback (exactly once)\n function finish(err, root) {\n /* istanbul ignore if */\n if (!callback)\n return;\n var cb = callback;\n callback = null;\n if (sync)\n throw err;\n cb(err, root);\n }\n\n // Bundled definition existence checking\n function getBundledFileName(filename) {\n var idx = filename.lastIndexOf(\"google/protobuf/\");\n if (idx > -1) {\n var altname = filename.substring(idx);\n if (altname in common) return altname;\n }\n return null;\n }\n\n // Processes a single file\n function process(filename, source) {\n try {\n if (util.isString(source) && source.charAt(0) === \"{\")\n source = JSON.parse(source);\n if (!util.isString(source))\n self.setOptions(source.options).addJSON(source.nested);\n else {\n parse.filename = filename;\n var parsed = parse(source, self, options),\n resolved,\n i = 0;\n if (parsed.imports)\n for (; i < parsed.imports.length; ++i)\n if (resolved = getBundledFileName(parsed.imports[i]) || self.resolvePath(filename, parsed.imports[i]))\n fetch(resolved);\n if (parsed.weakImports)\n for (i = 0; i < parsed.weakImports.length; ++i)\n if (resolved = getBundledFileName(parsed.weakImports[i]) || self.resolvePath(filename, parsed.weakImports[i]))\n fetch(resolved, true);\n }\n } catch (err) {\n finish(err);\n }\n if (!sync && !queued)\n finish(null, self); // only once anyway\n }\n\n // Fetches a single file\n function fetch(filename, weak) {\n\n // Skip if already loaded / attempted\n if (self.files.indexOf(filename) > -1)\n return;\n self.files.push(filename);\n\n // Shortcut bundled definitions\n if (filename in common) {\n if (sync)\n process(filename, common[filename]);\n else {\n ++queued;\n setTimeout(function() {\n --queued;\n process(filename, common[filename]);\n });\n }\n return;\n }\n\n // Otherwise fetch from disk or network\n if (sync) {\n var source;\n try {\n source = util.fs.readFileSync(filename).toString(\"utf8\");\n } catch (err) {\n if (!weak)\n finish(err);\n return;\n }\n process(filename, source);\n } else {\n ++queued;\n self.fetch(filename, function(err, source) {\n --queued;\n /* istanbul ignore if */\n if (!callback)\n return; // terminated meanwhile\n if (err) {\n /* istanbul ignore else */\n if (!weak)\n finish(err);\n else if (!queued) // can't be covered reliably\n finish(null, self);\n return;\n }\n process(filename, source);\n });\n }\n }\n var queued = 0;\n\n // Assembling the root namespace doesn't require working type\n // references anymore, so we can load everything in parallel\n if (util.isString(filename))\n filename = [ filename ];\n for (var i = 0, resolved; i < filename.length; ++i)\n if (resolved = self.resolvePath(\"\", filename[i]))\n fetch(resolved);\n\n if (sync)\n return self;\n if (!queued)\n finish(null, self);\n return undefined;\n};\n// function load(filename:string, options:IParseOptions, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and returns a promise.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Promise} Promise\n * @variation 3\n */\n// function load(filename:string, [options:IParseOptions]):Promise\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into this root namespace (node only).\n * @function Root#loadSync\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n */\nRoot.prototype.loadSync = function loadSync(filename, options) {\n if (!util.isNode)\n throw Error(\"not supported\");\n return this.load(filename, options, SYNC);\n};\n\n/**\n * @override\n */\nRoot.prototype.resolveAll = function resolveAll() {\n if (this.deferred.length)\n throw Error(\"unresolvable extensions: \" + this.deferred.map(function(field) {\n return \"'extend \" + field.extend + \"' in \" + field.parent.fullName;\n }).join(\", \"));\n return Namespace.prototype.resolveAll.call(this);\n};\n\n// only uppercased (and thus conflict-free) children are exposed, see below\nvar exposeRe = /^[A-Z]/;\n\n/**\n * Handles a deferred declaring extension field by creating a sister field to represent it within its extended type.\n * @param {Root} root Root instance\n * @param {Field} field Declaring extension field witin the declaring type\n * @returns {boolean} `true` if successfully added to the extended type, `false` otherwise\n * @inner\n * @ignore\n */\nfunction tryHandleExtension(root, field) {\n var extendedType = field.parent.lookup(field.extend);\n if (extendedType) {\n var sisterField = new Field(field.fullName, field.id, field.type, field.rule, undefined, field.options);\n sisterField.declaringField = field;\n field.extensionField = sisterField;\n extendedType.add(sisterField);\n return true;\n }\n return false;\n}\n\n/**\n * Called when any object is added to this root or its sub-namespaces.\n * @param {ReflectionObject} object Object added\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleAdd = function _handleAdd(object) {\n if (object instanceof Field) {\n\n if (/* an extension field (implies not part of a oneof) */ object.extend !== undefined && /* not already handled */ !object.extensionField)\n if (!tryHandleExtension(this, object))\n this.deferred.push(object);\n\n } else if (object instanceof Enum) {\n\n if (exposeRe.test(object.name))\n object.parent[object.name] = object.values; // expose enum values as property of its parent\n\n } else if (!(object instanceof OneOf)) /* everything else is a namespace */ {\n\n if (object instanceof Type) // Try to handle any deferred extensions\n for (var i = 0; i < this.deferred.length;)\n if (tryHandleExtension(this, this.deferred[i]))\n this.deferred.splice(i, 1);\n else\n ++i;\n for (var j = 0; j < /* initializes */ object.nestedArray.length; ++j) // recurse into the namespace\n this._handleAdd(object._nestedArray[j]);\n if (exposeRe.test(object.name))\n object.parent[object.name] = object; // expose namespace as property of its parent\n }\n\n // The above also adds uppercased (and thus conflict-free) nested types, services and enums as\n // properties of namespaces just like static code does. This allows using a .d.ts generated for\n // a static module with reflection-based solutions where the condition is met.\n};\n\n/**\n * Called when any object is removed from this root or its sub-namespaces.\n * @param {ReflectionObject} object Object removed\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleRemove = function _handleRemove(object) {\n if (object instanceof Field) {\n\n if (/* an extension field */ object.extend !== undefined) {\n if (/* already handled */ object.extensionField) { // remove its sister field\n object.extensionField.parent.remove(object.extensionField);\n object.extensionField = null;\n } else { // cancel the extension\n var index = this.deferred.indexOf(object);\n /* istanbul ignore else */\n if (index > -1)\n this.deferred.splice(index, 1);\n }\n }\n\n } else if (object instanceof Enum) {\n\n if (exposeRe.test(object.name))\n delete object.parent[object.name]; // unexpose enum values\n\n } else if (object instanceof Namespace) {\n\n for (var i = 0; i < /* initializes */ object.nestedArray.length; ++i) // recurse into the namespace\n this._handleRemove(object._nestedArray[i]);\n\n if (exposeRe.test(object.name))\n delete object.parent[object.name]; // unexpose namespaces\n\n }\n};\n\n// Sets up cyclic dependencies (called in index-light)\nRoot._configure = function(Type_, parse_, common_) {\n Type = Type_;\n parse = parse_;\n common = common_;\n};\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available accross modules.\n * @name roots\n * @type {Object.}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message\n * @template TRes extends Message\n * @type {function}\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod} method Reflected or static method\n * @param {Constructor} requestCtor Request constructor\n * @param {Constructor} responseCtor Response constructor\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message\n * @template TRes extends Message\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\nmodule.exports = Service;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Service.prototype = Object.create(Namespace.prototype)).constructor = Service).className = \"Service\";\n\nvar Method = require(\"./method\"),\n util = require(\"./util\"),\n rpc = require(\"./rpc\");\n\n/**\n * Constructs a new service instance.\n * @classdesc Reflected service.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Service name\n * @param {Object.} [options] Service options\n * @throws {TypeError} If arguments are invalid\n */\nfunction Service(name, options) {\n Namespace.call(this, name, options);\n\n /**\n * Service methods.\n * @type {Object.}\n */\n this.methods = {}; // toJSON, marker\n\n /**\n * Cached methods as an array.\n * @type {Method[]|null}\n * @private\n */\n this._methodsArray = null;\n}\n\n/**\n * Service descriptor.\n * @interface IService\n * @extends INamespace\n * @property {Object.} methods Method descriptors\n */\n\n/**\n * Constructs a service from a service descriptor.\n * @param {string} name Service name\n * @param {IService} json Service descriptor\n * @returns {Service} Created service\n * @throws {TypeError} If arguments are invalid\n */\nService.fromJSON = function fromJSON(name, json) {\n var service = new Service(name, json.options);\n /* istanbul ignore else */\n if (json.methods)\n for (var names = Object.keys(json.methods), i = 0; i < names.length; ++i)\n service.add(Method.fromJSON(names[i], json.methods[names[i]]));\n if (json.nested)\n service.addJSON(json.nested);\n service.comment = json.comment;\n return service;\n};\n\n/**\n * Converts this service to a service descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IService} Service descriptor\n */\nService.prototype.toJSON = function toJSON(toJSONOptions) {\n var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , inherited && inherited.options || undefined,\n \"methods\" , Namespace.arrayToJSON(this.methodsArray, toJSONOptions) || /* istanbul ignore next */ {},\n \"nested\" , inherited && inherited.nested || undefined,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Methods of this service as an array for iteration.\n * @name Service#methodsArray\n * @type {Method[]}\n * @readonly\n */\nObject.defineProperty(Service.prototype, \"methodsArray\", {\n get: function() {\n return this._methodsArray || (this._methodsArray = util.toArray(this.methods));\n }\n});\n\nfunction clearCache(service) {\n service._methodsArray = null;\n return service;\n}\n\n/**\n * @override\n */\nService.prototype.get = function get(name) {\n return this.methods[name]\n || Namespace.prototype.get.call(this, name);\n};\n\n/**\n * @override\n */\nService.prototype.resolveAll = function resolveAll() {\n var methods = this.methodsArray;\n for (var i = 0; i < methods.length; ++i)\n methods[i].resolve();\n return Namespace.prototype.resolve.call(this);\n};\n\n/**\n * @override\n */\nService.prototype.add = function add(object) {\n\n /* istanbul ignore if */\n if (this.get(object.name))\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n if (object instanceof Method) {\n this.methods[object.name] = object;\n object.parent = this;\n return clearCache(this);\n }\n return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * @override\n */\nService.prototype.remove = function remove(object) {\n if (object instanceof Method) {\n\n /* istanbul ignore if */\n if (this.methods[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.methods[object.name];\n object.parent = null;\n return clearCache(this);\n }\n return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Creates a runtime service using the specified rpc implementation.\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n * @returns {rpc.Service} RPC service. Useful where requests and/or responses are streamed.\n */\nService.prototype.create = function create(rpcImpl, requestDelimited, responseDelimited) {\n var rpcService = new rpc.Service(rpcImpl, requestDelimited, responseDelimited);\n for (var i = 0, method; i < /* initializes */ this.methodsArray.length; ++i) {\n var methodName = util.lcFirst((method = this._methodsArray[i]).resolve().name).replace(/[^$\\w_]/g, \"\");\n rpcService[methodName] = util.codegen([\"r\",\"c\"], util.isReserved(methodName) ? methodName + \"_\" : methodName)(\"return this.rpcCall(m,q,s,r,c)\")({\n m: method,\n q: method.resolvedRequestType.ctor,\n s: method.resolvedResponseType.ctor\n });\n }\n return rpcService;\n};\n","\"use strict\";\nmodule.exports = Type;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Type.prototype = Object.create(Namespace.prototype)).constructor = Type).className = \"Type\";\n\nvar Enum = require(\"./enum\"),\n OneOf = require(\"./oneof\"),\n Field = require(\"./field\"),\n MapField = require(\"./mapfield\"),\n Service = require(\"./service\"),\n Message = require(\"./message\"),\n Reader = require(\"./reader\"),\n Writer = require(\"./writer\"),\n util = require(\"./util\"),\n encoder = require(\"./encoder\"),\n decoder = require(\"./decoder\"),\n verifier = require(\"./verifier\"),\n converter = require(\"./converter\"),\n wrappers = require(\"./wrappers\");\n\n/**\n * Constructs a new reflected message type instance.\n * @classdesc Reflected message type.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Message name\n * @param {Object.} [options] Declared options\n */\nfunction Type(name, options) {\n Namespace.call(this, name, options);\n\n /**\n * Message fields.\n * @type {Object.}\n */\n this.fields = {}; // toJSON, marker\n\n /**\n * Oneofs declared within this namespace, if any.\n * @type {Object.}\n */\n this.oneofs = undefined; // toJSON\n\n /**\n * Extension ranges, if any.\n * @type {number[][]}\n */\n this.extensions = undefined; // toJSON\n\n /**\n * Reserved ranges, if any.\n * @type {Array.}\n */\n this.reserved = undefined; // toJSON\n\n /*?\n * Whether this type is a legacy group.\n * @type {boolean|undefined}\n */\n this.group = undefined; // toJSON\n\n /**\n * Cached fields by id.\n * @type {Object.|null}\n * @private\n */\n this._fieldsById = null;\n\n /**\n * Cached fields as an array.\n * @type {Field[]|null}\n * @private\n */\n this._fieldsArray = null;\n\n /**\n * Cached oneofs as an array.\n * @type {OneOf[]|null}\n * @private\n */\n this._oneofsArray = null;\n\n /**\n * Cached constructor.\n * @type {Constructor<{}>}\n * @private\n */\n this._ctor = null;\n}\n\nObject.defineProperties(Type.prototype, {\n\n /**\n * Message fields by id.\n * @name Type#fieldsById\n * @type {Object.}\n * @readonly\n */\n fieldsById: {\n get: function() {\n\n /* istanbul ignore if */\n if (this._fieldsById)\n return this._fieldsById;\n\n this._fieldsById = {};\n for (var names = Object.keys(this.fields), i = 0; i < names.length; ++i) {\n var field = this.fields[names[i]],\n id = field.id;\n\n /* istanbul ignore if */\n if (this._fieldsById[id])\n throw Error(\"duplicate id \" + id + \" in \" + this);\n\n this._fieldsById[id] = field;\n }\n return this._fieldsById;\n }\n },\n\n /**\n * Fields of this message as an array for iteration.\n * @name Type#fieldsArray\n * @type {Field[]}\n * @readonly\n */\n fieldsArray: {\n get: function() {\n return this._fieldsArray || (this._fieldsArray = util.toArray(this.fields));\n }\n },\n\n /**\n * Oneofs of this message as an array for iteration.\n * @name Type#oneofsArray\n * @type {OneOf[]}\n * @readonly\n */\n oneofsArray: {\n get: function() {\n return this._oneofsArray || (this._oneofsArray = util.toArray(this.oneofs));\n }\n },\n\n /**\n * The registered constructor, if any registered, otherwise a generic constructor.\n * Assigning a function replaces the internal constructor. If the function does not extend {@link Message} yet, its prototype will be setup accordingly and static methods will be populated. If it already extends {@link Message}, it will just replace the internal constructor.\n * @name Type#ctor\n * @type {Constructor<{}>}\n */\n ctor: {\n get: function() {\n return this._ctor || (this.ctor = Type.generateConstructor(this)());\n },\n set: function(ctor) {\n\n // Ensure proper prototype\n var prototype = ctor.prototype;\n if (!(prototype instanceof Message)) {\n (ctor.prototype = new Message()).constructor = ctor;\n util.merge(ctor.prototype, prototype);\n }\n\n // Classes and messages reference their reflected type\n ctor.$type = ctor.prototype.$type = this;\n\n // Mix in static methods\n util.merge(ctor, Message, true);\n\n this._ctor = ctor;\n\n // Messages have non-enumerable default values on their prototype\n var i = 0;\n for (; i < /* initializes */ this.fieldsArray.length; ++i)\n this._fieldsArray[i].resolve(); // ensures a proper value\n\n // Messages have non-enumerable getters and setters for each virtual oneof field\n var ctorProperties = {};\n for (i = 0; i < /* initializes */ this.oneofsArray.length; ++i)\n ctorProperties[this._oneofsArray[i].resolve().name] = {\n get: util.oneOfGetter(this._oneofsArray[i].oneof),\n set: util.oneOfSetter(this._oneofsArray[i].oneof)\n };\n if (i)\n Object.defineProperties(ctor.prototype, ctorProperties);\n }\n }\n});\n\n/**\n * Generates a constructor function for the specified type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nType.generateConstructor = function generateConstructor(mtype) {\n /* eslint-disable no-unexpected-multiline */\n var gen = util.codegen([\"p\"], mtype.name);\n // explicitly initialize mutable object/array fields so that these aren't just inherited from the prototype\n for (var i = 0, field; i < mtype.fieldsArray.length; ++i)\n if ((field = mtype._fieldsArray[i]).map) gen\n (\"this%s={}\", util.safeProp(field.name));\n else if (field.repeated) gen\n (\"this%s=[]\", util.safeProp(field.name));\n return gen\n (\"if(p)for(var ks=Object.keys(p),i=0;i} [oneofs] Oneof descriptors\n * @property {Object.} fields Field descriptors\n * @property {number[][]} [extensions] Extension ranges\n * @property {number[][]} [reserved] Reserved ranges\n * @property {boolean} [group=false] Whether a legacy group or not\n */\n\n/**\n * Creates a message type from a message type descriptor.\n * @param {string} name Message name\n * @param {IType} json Message type descriptor\n * @returns {Type} Created message type\n */\nType.fromJSON = function fromJSON(name, json) {\n var type = new Type(name, json.options);\n type.extensions = json.extensions;\n type.reserved = json.reserved;\n var names = Object.keys(json.fields),\n i = 0;\n for (; i < names.length; ++i)\n type.add(\n ( typeof json.fields[names[i]].keyType !== \"undefined\"\n ? MapField.fromJSON\n : Field.fromJSON )(names[i], json.fields[names[i]])\n );\n if (json.oneofs)\n for (names = Object.keys(json.oneofs), i = 0; i < names.length; ++i)\n type.add(OneOf.fromJSON(names[i], json.oneofs[names[i]]));\n if (json.nested)\n for (names = Object.keys(json.nested), i = 0; i < names.length; ++i) {\n var nested = json.nested[names[i]];\n type.add( // most to least likely\n ( nested.id !== undefined\n ? Field.fromJSON\n : nested.fields !== undefined\n ? Type.fromJSON\n : nested.values !== undefined\n ? Enum.fromJSON\n : nested.methods !== undefined\n ? Service.fromJSON\n : Namespace.fromJSON )(names[i], nested)\n );\n }\n if (json.extensions && json.extensions.length)\n type.extensions = json.extensions;\n if (json.reserved && json.reserved.length)\n type.reserved = json.reserved;\n if (json.group)\n type.group = true;\n if (json.comment)\n type.comment = json.comment;\n return type;\n};\n\n/**\n * Converts this message type to a message type descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IType} Message type descriptor\n */\nType.prototype.toJSON = function toJSON(toJSONOptions) {\n var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , inherited && inherited.options || undefined,\n \"oneofs\" , Namespace.arrayToJSON(this.oneofsArray, toJSONOptions),\n \"fields\" , Namespace.arrayToJSON(this.fieldsArray.filter(function(obj) { return !obj.declaringField; }), toJSONOptions) || {},\n \"extensions\" , this.extensions && this.extensions.length ? this.extensions : undefined,\n \"reserved\" , this.reserved && this.reserved.length ? this.reserved : undefined,\n \"group\" , this.group || undefined,\n \"nested\" , inherited && inherited.nested || undefined,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * @override\n */\nType.prototype.resolveAll = function resolveAll() {\n var fields = this.fieldsArray, i = 0;\n while (i < fields.length)\n fields[i++].resolve();\n var oneofs = this.oneofsArray; i = 0;\n while (i < oneofs.length)\n oneofs[i++].resolve();\n return Namespace.prototype.resolveAll.call(this);\n};\n\n/**\n * @override\n */\nType.prototype.get = function get(name) {\n return this.fields[name]\n || this.oneofs && this.oneofs[name]\n || this.nested && this.nested[name]\n || null;\n};\n\n/**\n * Adds a nested object to this type.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name or, if a field, when there is already a field with this id\n */\nType.prototype.add = function add(object) {\n\n if (this.get(object.name))\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n if (object instanceof Field && object.extend === undefined) {\n // NOTE: Extension fields aren't actual fields on the declaring type, but nested objects.\n // The root object takes care of adding distinct sister-fields to the respective extended\n // type instead.\n\n // avoids calling the getter if not absolutely necessary because it's called quite frequently\n if (this._fieldsById ? /* istanbul ignore next */ this._fieldsById[object.id] : this.fieldsById[object.id])\n throw Error(\"duplicate id \" + object.id + \" in \" + this);\n if (this.isReservedId(object.id))\n throw Error(\"id \" + object.id + \" is reserved in \" + this);\n if (this.isReservedName(object.name))\n throw Error(\"name '\" + object.name + \"' is reserved in \" + this);\n\n if (object.parent)\n object.parent.remove(object);\n this.fields[object.name] = object;\n object.message = this;\n object.onAdd(this);\n return clearCache(this);\n }\n if (object instanceof OneOf) {\n if (!this.oneofs)\n this.oneofs = {};\n this.oneofs[object.name] = object;\n object.onAdd(this);\n return clearCache(this);\n }\n return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * Removes a nested object from this type.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this type\n */\nType.prototype.remove = function remove(object) {\n if (object instanceof Field && object.extend === undefined) {\n // See Type#add for the reason why extension fields are excluded here.\n\n /* istanbul ignore if */\n if (!this.fields || this.fields[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.fields[object.name];\n object.parent = null;\n object.onRemove(this);\n return clearCache(this);\n }\n if (object instanceof OneOf) {\n\n /* istanbul ignore if */\n if (!this.oneofs || this.oneofs[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.oneofs[object.name];\n object.parent = null;\n object.onRemove(this);\n return clearCache(this);\n }\n return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedId = function isReservedId(id) {\n return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedName = function isReservedName(name) {\n return Namespace.isReservedName(this.reserved, name);\n};\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.} [properties] Properties to set\n * @returns {Message<{}>} Message instance\n */\nType.prototype.create = function create(properties) {\n return new this.ctor(properties);\n};\n\n/**\n * Sets up {@link Type#encode|encode}, {@link Type#decode|decode} and {@link Type#verify|verify}.\n * @returns {Type} `this`\n */\nType.prototype.setup = function setup() {\n // Sets up everything at once so that the prototype chain does not have to be re-evaluated\n // multiple times (V8, soft-deopt prototype-check).\n\n var fullName = this.fullName,\n types = [];\n for (var i = 0; i < /* initializes */ this.fieldsArray.length; ++i)\n types.push(this._fieldsArray[i].resolve().resolvedType);\n\n // Replace setup methods with type-specific generated functions\n this.encode = encoder(this)({\n Writer : Writer,\n types : types,\n util : util\n });\n this.decode = decoder(this)({\n Reader : Reader,\n types : types,\n util : util\n });\n this.verify = verifier(this)({\n types : types,\n util : util\n });\n this.fromObject = converter.fromObject(this)({\n types : types,\n util : util\n });\n this.toObject = converter.toObject(this)({\n types : types,\n util : util\n });\n\n // Inject custom wrappers for common types\n var wrapper = wrappers[fullName];\n if (wrapper) {\n var originalThis = Object.create(this);\n // if (wrapper.fromObject) {\n originalThis.fromObject = this.fromObject;\n this.fromObject = wrapper.fromObject.bind(originalThis);\n // }\n // if (wrapper.toObject) {\n originalThis.toObject = this.toObject;\n this.toObject = wrapper.toObject.bind(originalThis);\n // }\n }\n\n return this;\n};\n\n/**\n * Encodes a message of this type. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encode = function encode_setup(message, writer) {\n return this.setup().encode(message, writer); // overrides this method\n};\n\n/**\n * Encodes a message of this type preceeded by its byte length as a varint. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();\n};\n\n/**\n * Decodes a message of this type.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Length of the message, if known beforehand\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError<{}>} If required fields are missing\n */\nType.prototype.decode = function decode_setup(reader, length) {\n return this.setup().decode(reader, length); // overrides this method\n};\n\n/**\n * Decodes a message of this type preceeded by its byte length as a varint.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError} If required fields are missing\n */\nType.prototype.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof Reader))\n reader = Reader.create(reader);\n return this.decode(reader, reader.uint32());\n};\n\n/**\n * Verifies that field values are valid and that required fields are present.\n * @param {Object.} message Plain object to verify\n * @returns {null|string} `null` if valid, otherwise the reason why it is not\n */\nType.prototype.verify = function verify_setup(message) {\n return this.setup().verify(message); // overrides this method\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.} object Plain object to convert\n * @returns {Message<{}>} Message instance\n */\nType.prototype.fromObject = function fromObject(object) {\n return this.setup().fromObject(object);\n};\n\n/**\n * Conversion options as used by {@link Type#toObject} and {@link Message.toObject}.\n * @interface IConversionOptions\n * @property {Function} [longs] Long conversion type.\n * Valid values are `String` and `Number` (the global types).\n * Defaults to copy the present value, which is a possibly unsafe number without and a {@link Long} with a long library.\n * @property {Function} [enums] Enum value conversion type.\n * Only valid value is `String` (the global type).\n * Defaults to copy the present value, which is the numeric id.\n * @property {Function} [bytes] Bytes value conversion type.\n * Valid values are `Array` and (a base64 encoded) `String` (the global types).\n * Defaults to copy the present value, which usually is a Buffer under node and an Uint8Array in the browser.\n * @property {boolean} [defaults=false] Also sets default values on the resulting object\n * @property {boolean} [arrays=false] Sets empty arrays for missing repeated fields even if `defaults=false`\n * @property {boolean} [objects=false] Sets empty objects for missing map fields even if `defaults=false`\n * @property {boolean} [oneofs=false] Includes virtual oneof properties set to the present field's name, if any\n * @property {boolean} [json=false] Performs additional JSON compatibility conversions, i.e. NaN and Infinity to strings\n */\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\nType.prototype.toObject = function toObject(message, options) {\n return this.setup().toObject(message, options);\n};\n\n/**\n * Decorator function as returned by {@link Type.d} (TypeScript).\n * @typedef TypeDecorator\n * @type {function}\n * @param {Constructor} target Target constructor\n * @returns {undefined}\n * @template T extends Message\n */\n\n/**\n * Type decorator (TypeScript).\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {TypeDecorator} Decorator function\n * @template T extends Message\n */\nType.d = function decorateType(typeName) {\n return function typeDecorator(target) {\n util.decorateType(target, typeName);\n };\n};\n","\"use strict\";\n\n/**\n * Common type constants.\n * @namespace\n */\nvar types = exports;\n\nvar util = require(\"./util\");\n\nvar s = [\n \"double\", // 0\n \"float\", // 1\n \"int32\", // 2\n \"uint32\", // 3\n \"sint32\", // 4\n \"fixed32\", // 5\n \"sfixed32\", // 6\n \"int64\", // 7\n \"uint64\", // 8\n \"sint64\", // 9\n \"fixed64\", // 10\n \"sfixed64\", // 11\n \"bool\", // 12\n \"string\", // 13\n \"bytes\" // 14\n];\n\nfunction bake(values, offset) {\n var i = 0, o = {};\n offset |= 0;\n while (i < values.length) o[s[i + offset]] = values[i++];\n return o;\n}\n\n/**\n * Basic type wire types.\n * @type {Object.}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n * @property {number} bytes=2 Ldelim wire type\n */\ntypes.basic = bake([\n /* double */ 1,\n /* float */ 5,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0,\n /* string */ 2,\n /* bytes */ 2\n]);\n\n/**\n * Basic type defaults.\n * @type {Object.}\n * @const\n * @property {number} double=0 Double default\n * @property {number} float=0 Float default\n * @property {number} int32=0 Int32 default\n * @property {number} uint32=0 Uint32 default\n * @property {number} sint32=0 Sint32 default\n * @property {number} fixed32=0 Fixed32 default\n * @property {number} sfixed32=0 Sfixed32 default\n * @property {number} int64=0 Int64 default\n * @property {number} uint64=0 Uint64 default\n * @property {number} sint64=0 Sint32 default\n * @property {number} fixed64=0 Fixed64 default\n * @property {number} sfixed64=0 Sfixed64 default\n * @property {boolean} bool=false Bool default\n * @property {string} string=\"\" String default\n * @property {Array.} bytes=Array(0) Bytes default\n * @property {null} message=null Message default\n */\ntypes.defaults = bake([\n /* double */ 0,\n /* float */ 0,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 0,\n /* sfixed32 */ 0,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 0,\n /* sfixed64 */ 0,\n /* bool */ false,\n /* string */ \"\",\n /* bytes */ util.emptyArray,\n /* message */ null\n]);\n\n/**\n * Basic long type wire types.\n * @type {Object.}\n * @const\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n */\ntypes.long = bake([\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1\n], 7);\n\n/**\n * Allowed types for map keys with their associated wire type.\n * @type {Object.}\n * @const\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n */\ntypes.mapKey = bake([\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0,\n /* string */ 2\n], 2);\n\n/**\n * Allowed types for packed repeated fields with their associated wire type.\n * @type {Object.}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n */\ntypes.packed = bake([\n /* double */ 1,\n /* float */ 5,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0\n]);\n","\"use strict\";\n\n/**\n * Various utility functions.\n * @namespace\n */\nvar util = module.exports = require(\"./util/minimal\");\n\nvar roots = require(\"./roots\");\n\nvar Type, // cyclic\n Enum;\n\nutil.codegen = require(\"@protobufjs/codegen\");\nutil.fetch = require(\"@protobufjs/fetch\");\nutil.path = require(\"@protobufjs/path\");\n\n/**\n * Node's fs module if available.\n * @type {Object.}\n */\nutil.fs = util.inquire(\"fs\");\n\n/**\n * Converts an object's values to an array.\n * @param {Object.} object Object to convert\n * @returns {Array.<*>} Converted array\n */\nutil.toArray = function toArray(object) {\n if (object) {\n var keys = Object.keys(object),\n array = new Array(keys.length),\n index = 0;\n while (index < keys.length)\n array[index] = object[keys[index++]];\n return array;\n }\n return [];\n};\n\n/**\n * Converts an array of keys immediately followed by their respective value to an object, omitting undefined values.\n * @param {Array.<*>} array Array to convert\n * @returns {Object.} Converted object\n */\nutil.toObject = function toObject(array) {\n var object = {},\n index = 0;\n while (index < array.length) {\n var key = array[index++],\n val = array[index++];\n if (val !== undefined)\n object[key] = val;\n }\n return object;\n};\n\nvar safePropBackslashRe = /\\\\/g,\n safePropQuoteRe = /\"/g;\n\n/**\n * Tests whether the specified name is a reserved word in JS.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nutil.isReserved = function isReserved(name) {\n return /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$/.test(name);\n};\n\n/**\n * Returns a safe property accessor for the specified property name.\n * @param {string} prop Property name\n * @returns {string} Safe accessor\n */\nutil.safeProp = function safeProp(prop) {\n if (!/^[$\\w_]+$/.test(prop) || util.isReserved(prop))\n return \"[\\\"\" + prop.replace(safePropBackslashRe, \"\\\\\\\\\").replace(safePropQuoteRe, \"\\\\\\\"\") + \"\\\"]\";\n return \".\" + prop;\n};\n\n/**\n * Converts the first character of a string to upper case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.ucFirst = function ucFirst(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n};\n\nvar camelCaseRe = /_([a-z])/g;\n\n/**\n * Converts a string to camel case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.camelCase = function camelCase(str) {\n return str.substring(0, 1)\n + str.substring(1)\n .replace(camelCaseRe, function($0, $1) { return $1.toUpperCase(); });\n};\n\n/**\n * Compares reflected fields by id.\n * @param {Field} a First field\n * @param {Field} b Second field\n * @returns {number} Comparison value\n */\nutil.compareFieldsById = function compareFieldsById(a, b) {\n return a.id - b.id;\n};\n\n/**\n * Decorator helper for types (TypeScript).\n * @param {Constructor} ctor Constructor function\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {Type} Reflected type\n * @template T extends Message\n * @property {Root} root Decorators root\n */\nutil.decorateType = function decorateType(ctor, typeName) {\n\n /* istanbul ignore if */\n if (ctor.$type) {\n if (typeName && ctor.$type.name !== typeName) {\n util.decorateRoot.remove(ctor.$type);\n ctor.$type.name = typeName;\n util.decorateRoot.add(ctor.$type);\n }\n return ctor.$type;\n }\n\n /* istanbul ignore next */\n if (!Type)\n Type = require(\"./type\");\n\n var type = new Type(typeName || ctor.name);\n util.decorateRoot.add(type);\n type.ctor = ctor; // sets up .encode, .decode etc.\n Object.defineProperty(ctor, \"$type\", { value: type, enumerable: false });\n Object.defineProperty(ctor.prototype, \"$type\", { value: type, enumerable: false });\n return type;\n};\n\nvar decorateEnumIndex = 0;\n\n/**\n * Decorator helper for enums (TypeScript).\n * @param {Object} object Enum object\n * @returns {Enum} Reflected enum\n */\nutil.decorateEnum = function decorateEnum(object) {\n\n /* istanbul ignore if */\n if (object.$type)\n return object.$type;\n\n /* istanbul ignore next */\n if (!Enum)\n Enum = require(\"./enum\");\n\n var enm = new Enum(\"Enum\" + decorateEnumIndex++, object);\n util.decorateRoot.add(enm);\n Object.defineProperty(object, \"$type\", { value: enm, enumerable: false });\n return enm;\n};\n\n\n/**\n * Sets the value of a property by property path. If a value already exists, it is turned to an array\n * @param {Object.} dst Destination object\n * @param {string} path dot '.' delimited path of the property to set\n * @param {Object} value the value to set\n * @returns {Object.} Destination object\n */\nutil.setProperty = function setProperty(dst, path, value) {\n function setProp(dst, path, value) {\n var part = path.shift();\n if (path.length > 0) {\n dst[part] = setProp(dst[part] || {}, path, value);\n } else {\n var prevValue = dst[part];\n if (prevValue)\n value = [].concat(prevValue).concat(value);\n dst[part] = value;\n }\n return dst;\n }\n\n if (typeof dst !== \"object\")\n throw TypeError(\"dst must be an object\");\n if (!path)\n throw TypeError(\"path must be specified\");\n\n path = path.split(\".\");\n return setProp(dst, path, value);\n};\n\n/**\n * Decorator root (TypeScript).\n * @name util.decorateRoot\n * @type {Root}\n * @readonly\n */\nObject.defineProperty(util, \"decorateRoot\", {\n get: function() {\n return roots[\"decorated\"] || (roots[\"decorated\"] = new (require(\"./root\"))());\n }\n});\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.} dst Destination object\n * @param {Object.} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message\n * @constructor\n * @param {string} message Error message\n * @param {Object.} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","\"use strict\";\nmodule.exports = verifier;\n\nvar Enum = require(\"./enum\"),\n util = require(\"./util\");\n\nfunction invalid(field, expected) {\n return field.name + \": \" + expected + (field.repeated && expected !== \"array\" ? \"[]\" : field.map && expected !== \"object\" ? \"{k:\"+field.keyType+\"}\" : \"\") + \" expected\";\n}\n\n/**\n * Generates a partial value verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyValue(gen, field, fieldIndex, ref) {\n /* eslint-disable no-unexpected-multiline */\n if (field.resolvedType) {\n if (field.resolvedType instanceof Enum) { gen\n (\"switch(%s){\", ref)\n (\"default:\")\n (\"return%j\", invalid(field, \"enum value\"));\n for (var keys = Object.keys(field.resolvedType.values), j = 0; j < keys.length; ++j) gen\n (\"case %i:\", field.resolvedType.values[keys[j]]);\n gen\n (\"break\")\n (\"}\");\n } else {\n gen\n (\"{\")\n (\"var e=types[%i].verify(%s);\", fieldIndex, ref)\n (\"if(e)\")\n (\"return%j+e\", field.name + \".\")\n (\"}\");\n }\n } else {\n switch (field.type) {\n case \"int32\":\n case \"uint32\":\n case \"sint32\":\n case \"fixed32\":\n case \"sfixed32\": gen\n (\"if(!util.isInteger(%s))\", ref)\n (\"return%j\", invalid(field, \"integer\"));\n break;\n case \"int64\":\n case \"uint64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))\", ref, ref, ref, ref)\n (\"return%j\", invalid(field, \"integer|Long\"));\n break;\n case \"float\":\n case \"double\": gen\n (\"if(typeof %s!==\\\"number\\\")\", ref)\n (\"return%j\", invalid(field, \"number\"));\n break;\n case \"bool\": gen\n (\"if(typeof %s!==\\\"boolean\\\")\", ref)\n (\"return%j\", invalid(field, \"boolean\"));\n break;\n case \"string\": gen\n (\"if(!util.isString(%s))\", ref)\n (\"return%j\", invalid(field, \"string\"));\n break;\n case \"bytes\": gen\n (\"if(!(%s&&typeof %s.length===\\\"number\\\"||util.isString(%s)))\", ref, ref, ref)\n (\"return%j\", invalid(field, \"buffer\"));\n break;\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a partial key verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyKey(gen, field, ref) {\n /* eslint-disable no-unexpected-multiline */\n switch (field.keyType) {\n case \"int32\":\n case \"uint32\":\n case \"sint32\":\n case \"fixed32\":\n case \"sfixed32\": gen\n (\"if(!util.key32Re.test(%s))\", ref)\n (\"return%j\", invalid(field, \"integer key\"));\n break;\n case \"int64\":\n case \"uint64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(!util.key64Re.test(%s))\", ref) // see comment above: x is ok, d is not\n (\"return%j\", invalid(field, \"integer|Long key\"));\n break;\n case \"bool\": gen\n (\"if(!util.key2Re.test(%s))\", ref)\n (\"return%j\", invalid(field, \"boolean key\"));\n break;\n }\n return gen;\n /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a verifier specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction verifier(mtype) {\n /* eslint-disable no-unexpected-multiline */\n\n var gen = util.codegen([\"m\"], mtype.name + \"$verify\")\n (\"if(typeof m!==\\\"object\\\"||m===null)\")\n (\"return%j\", \"object expected\");\n var oneofs = mtype.oneofsArray,\n seenFirstField = {};\n if (oneofs.length) gen\n (\"var p={}\");\n\n for (var i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n var field = mtype._fieldsArray[i].resolve(),\n ref = \"m\" + util.safeProp(field.name);\n\n if (field.optional) gen\n (\"if(%s!=null&&m.hasOwnProperty(%j)){\", ref, field.name); // !== undefined && !== null\n\n // map fields\n if (field.map) { gen\n (\"if(!util.isObject(%s))\", ref)\n (\"return%j\", invalid(field, \"object\"))\n (\"var k=Object.keys(%s)\", ref)\n (\"for(var i=0;i}\n * @const\n */\nvar wrappers = exports;\n\nvar Message = require(\"./message\");\n\n/**\n * From object converter part of an {@link IWrapper}.\n * @typedef WrapperFromObjectConverter\n * @type {function}\n * @param {Object.} object Plain object\n * @returns {Message<{}>} Message instance\n * @this Type\n */\n\n/**\n * To object converter part of an {@link IWrapper}.\n * @typedef WrapperToObjectConverter\n * @type {function}\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n * @this Type\n */\n\n/**\n * Common type wrapper part of {@link wrappers}.\n * @interface IWrapper\n * @property {WrapperFromObjectConverter} [fromObject] From object converter\n * @property {WrapperToObjectConverter} [toObject] To object converter\n */\n\n// Custom wrapper for Any\nwrappers[\".google.protobuf.Any\"] = {\n\n fromObject: function(object) {\n\n // unwrap value type if mapped\n if (object && object[\"@type\"]) {\n // Only use fully qualified type name after the last '/'\n var name = object[\"@type\"].substring(object[\"@type\"].lastIndexOf(\"/\") + 1);\n var type = this.lookup(name);\n /* istanbul ignore else */\n if (type) {\n // type_url does not accept leading \".\"\n var type_url = object[\"@type\"].charAt(0) === \".\" ?\n object[\"@type\"].substr(1) : object[\"@type\"];\n // type_url prefix is optional, but path seperator is required\n if (type_url.indexOf(\"/\") === -1) {\n type_url = \"/\" + type_url;\n }\n return this.create({\n type_url: type_url,\n value: type.encode(type.fromObject(object)).finish()\n });\n }\n }\n\n return this.fromObject(object);\n },\n\n toObject: function(message, options) {\n\n // Default prefix\n var googleApi = \"type.googleapis.com/\";\n var prefix = \"\";\n var name = \"\";\n\n // decode value if requested and unmapped\n if (options && options.json && message.type_url && message.value) {\n // Only use fully qualified type name after the last '/'\n name = message.type_url.substring(message.type_url.lastIndexOf(\"/\") + 1);\n // Separate the prefix used\n prefix = message.type_url.substring(0, message.type_url.lastIndexOf(\"/\") + 1);\n var type = this.lookup(name);\n /* istanbul ignore else */\n if (type)\n message = type.decode(message.value);\n }\n\n // wrap value if unmapped\n if (!(message instanceof this.ctor) && message instanceof Message) {\n var object = message.$type.toObject(message, options);\n var messageName = message.$type.fullName[0] === \".\" ?\n message.$type.fullName.substr(1) : message.$type.fullName;\n // Default to type.googleapis.com prefix if no prefix is used\n if (prefix === \"\") {\n prefix = googleApi;\n }\n name = prefix + messageName;\n object[\"@type\"] = name;\n return object;\n }\n\n return this.toObject(message, options);\n }\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(714);\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/centrifuge.protobuf.min.js b/dist/centrifuge.protobuf.min.js index 9c2f2cc4..ba16cf82 100644 --- a/dist/centrifuge.protobuf.min.js +++ b/dist/centrifuge.protobuf.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Centrifuge",[],t):"object"==typeof exports?exports.Centrifuge=t():e.Centrifuge=t()}(this,(function(){return function(){"use strict";var __webpack_modules__={537:function(e){e.exports=function(e,t){for(var r=new Array(arguments.length-1),n=0,i=2,s=!0;i1&&"="===e.charAt(t);)++r;return Math.ceil(3*e.length)/4-r};for(var n=new Array(64),i=new Array(123),s=0;s<64;)i[n[s]=s<26?s+65:s<52?s+71:s<62?s-4:s-59|43]=s++;r.encode=function(e,t,r){for(var i,s=null,o=[],u=0,a=0;t>2],i=(3&c)<<4,a=1;break;case 1:o[u++]=n[i|c>>4],i=(15&c)<<2,a=2;break;case 2:o[u++]=n[i|c>>6],o[u++]=n[63&c],a=0}u>8191&&((s||(s=[])).push(String.fromCharCode.apply(String,o)),u=0)}return a&&(o[u++]=n[i],o[u++]=61,1===a&&(o[u++]=61)),s?(u&&s.push(String.fromCharCode.apply(String,o.slice(0,u))),s.join("")):String.fromCharCode.apply(String,o.slice(0,u))};var o="invalid encoding";r.decode=function(e,t,r){for(var n,s=r,u=0,a=0;a1)break;if(void 0===(c=i[c]))throw Error(o);switch(u){case 0:n=c,u=1;break;case 1:t[r++]=n<<2|(48&c)>>4,n=c,u=2;break;case 2:t[r++]=(15&n)<<4|(60&c)>>2,n=c,u=3;break;case 3:t[r++]=(3&n)<<6|c,u=0}}if(1===u)throw Error(o);return r-s},r.test=function(e){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(e)}},124:function(e){function t(e,r){"string"==typeof e&&(r=e,e=void 0);var n=[];function i(e){if("string"!=typeof e){var r=s();if(t.verbose&&console.log("codegen: "+r),r="return "+r,e){for(var o=Object.keys(e),u=new Array(o.length+1),a=new Array(o.length),c=0;c0?0:2147483648,r,n);else if(isNaN(t))e(2143289344,r,n);else if(t>34028234663852886e22)e((i<<31|2139095040)>>>0,r,n);else if(t<11754943508222875e-54)e((i<<31|Math.round(t/1401298464324817e-60))>>>0,r,n);else{var s=Math.floor(Math.log(t)/Math.LN2);e((i<<31|s+127<<23|8388607&Math.round(t*Math.pow(2,-s)*8388608))>>>0,r,n)}}function o(e,t,r){var n=e(t,r),i=2*(n>>31)+1,s=n>>>23&255,o=8388607&n;return 255===s?o?NaN:i*(1/0):0===s?1401298464324817e-60*i*o:i*Math.pow(2,s-150)*(o+8388608)}e.writeFloatLE=t.bind(null,r),e.writeFloatBE=t.bind(null,n),e.readFloatLE=o.bind(null,i),e.readFloatBE=o.bind(null,s)}(),"undefined"!=typeof Float64Array?function(){var t=new Float64Array([-0]),r=new Uint8Array(t.buffer),n=128===r[7];function i(e,n,i){t[0]=e,n[i]=r[0],n[i+1]=r[1],n[i+2]=r[2],n[i+3]=r[3],n[i+4]=r[4],n[i+5]=r[5],n[i+6]=r[6],n[i+7]=r[7]}function s(e,n,i){t[0]=e,n[i]=r[7],n[i+1]=r[6],n[i+2]=r[5],n[i+3]=r[4],n[i+4]=r[3],n[i+5]=r[2],n[i+6]=r[1],n[i+7]=r[0]}function o(e,n){return r[0]=e[n],r[1]=e[n+1],r[2]=e[n+2],r[3]=e[n+3],r[4]=e[n+4],r[5]=e[n+5],r[6]=e[n+6],r[7]=e[n+7],t[0]}function u(e,n){return r[7]=e[n],r[6]=e[n+1],r[5]=e[n+2],r[4]=e[n+3],r[3]=e[n+4],r[2]=e[n+5],r[1]=e[n+6],r[0]=e[n+7],t[0]}e.writeDoubleLE=n?i:s,e.writeDoubleBE=n?s:i,e.readDoubleLE=n?o:u,e.readDoubleBE=n?u:o}():function(){function t(e,t,r,n,i,s){var o=n<0?1:0;if(o&&(n=-n),0===n)e(0,i,s+t),e(1/n>0?0:2147483648,i,s+r);else if(isNaN(n))e(0,i,s+t),e(2146959360,i,s+r);else if(n>17976931348623157e292)e(0,i,s+t),e((o<<31|2146435072)>>>0,i,s+r);else{var u;if(n<22250738585072014e-324)e((u=n/5e-324)>>>0,i,s+t),e((o<<31|u/4294967296)>>>0,i,s+r);else{var a=Math.floor(Math.log(n)/Math.LN2);1024===a&&(a=1023),e(4503599627370496*(u=n*Math.pow(2,-a))>>>0,i,s+t),e((o<<31|a+1023<<20|1048576*u&1048575)>>>0,i,s+r)}}}function o(e,t,r,n,i){var s=e(n,i+t),o=e(n,i+r),u=2*(o>>31)+1,a=o>>>20&2047,c=4294967296*(1048575&o)+s;return 2047===a?c?NaN:u*(1/0):0===a?5e-324*u*c:u*Math.pow(2,a-1075)*(c+4503599627370496)}e.writeDoubleLE=t.bind(null,r,0,4),e.writeDoubleBE=t.bind(null,n,4,0),e.readDoubleLE=o.bind(null,i,0,4),e.readDoubleBE=o.bind(null,s,4,0)}(),e}function r(e,t,r){t[r]=255&e,t[r+1]=e>>>8&255,t[r+2]=e>>>16&255,t[r+3]=e>>>24}function n(e,t,r){t[r]=e>>>24,t[r+1]=e>>>16&255,t[r+2]=e>>>8&255,t[r+3]=255&e}function i(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0}function s(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}e.exports=t(t)},199:function(module){function inquire(moduleName){try{var mod=eval("quire".replace(/^/,"re"))(moduleName);if(mod&&(mod.length||Object.keys(mod).length))return mod}catch(e){}return null}module.exports=inquire},626:function(e,t){var r=t,n=r.isAbsolute=function(e){return/^(?:\/|\w+:)/.test(e)},i=r.normalize=function(e){var t=(e=e.replace(/\\/g,"/").replace(/\/{2,}/g,"/")).split("/"),r=n(e),i="";r&&(i=t.shift()+"/");for(var s=0;s0&&".."!==t[s-1]?t.splice(--s,2):r?t.splice(s,1):++s:"."===t[s]?t.splice(s,1):++s;return i+t.join("/")};r.resolve=function(e,t,r){return r||(t=i(t)),n(t)?t:(r||(e=i(e)),(e=e.replace(/(?:\/|^)[^/]+$/,"")).length?i(e+"/"+t):t)}},662:function(e){e.exports=function(e,t,r){var n=r||8192,i=n>>>1,s=null,o=n;return function(r){if(r<1||r>i)return e(r);o+r>n&&(s=e(n),o=0);var u=t.call(s,o,o+=r);return 7&o&&(o=1+(7|o)),u}}},997:function(e,t){var r=t;r.length=function(e){for(var t=0,r=0,n=0;n191&&n<224?s[o++]=(31&n)<<6|63&e[t++]:n>239&&n<365?(n=((7&n)<<18|(63&e[t++])<<12|(63&e[t++])<<6|63&e[t++])-65536,s[o++]=55296+(n>>10),s[o++]=56320+(1023&n)):s[o++]=(15&n)<<12|(63&e[t++])<<6|63&e[t++],o>8191&&((i||(i=[])).push(String.fromCharCode.apply(String,s)),o=0);return i?(o&&i.push(String.fromCharCode.apply(String,s.slice(0,o))),i.join("")):String.fromCharCode.apply(String,s.slice(0,o))},r.write=function(e,t,r){for(var n,i,s=r,o=0;o>6|192,t[r++]=63&n|128):55296==(64512&n)&&56320==(64512&(i=e.charCodeAt(o+1)))?(n=65536+((1023&n)<<10)+(1023&i),++o,t[r++]=n>>18|240,t[r++]=n>>12&63|128,t[r++]=n>>6&63|128,t[r++]=63&n|128):(t[r++]=n>>12|224,t[r++]=n>>6&63|128,t[r++]=63&n|128);return r-s}},382:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),t.Centrifuge=void 0;var n=u(r(187)),i=u(r(471)),s=r(147),o=r(853);function u(e){return e&&e.__esModule?e:{default:e}}function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function c(e,t){for(var r=0;r0&&(u+="&"),u+=encodeURIComponent(c)+"="+encodeURIComponent(t[c]));for(var f in u.length>0&&(u="?"+u),a.open("POST",e+u,!0),"withCredentials"in a&&(a.withCredentials=!0),a.setRequestHeader("X-Requested-With","XMLHttpRequest"),a.setRequestHeader("Content-Type","application/json"),n)n.hasOwnProperty(f)&&a.setRequestHeader(f,n[f]);return a.onreadystatechange=function(){if(4===a.readyState)if(200===a.status){var e,t=!1;try{e=JSON.parse(a.responseText),t=!0}catch(e){s({error:"Invalid JSON. Data was: "+a.responseText,status:200,data:null})}t&&s({data:e,status:200})}else o._log("wrong status code in AJAX response",a.status),s({status:a.status,data:null})},setTimeout((function(){return a.send(JSON.stringify(i))}),20),a}},{key:"_log",value:function(){(0,o.log)("info",arguments)}},{key:"_debug",value:function(){!0===this._config.debug&&(0,o.log)("debug",arguments)}},{key:"_websocketSupported",value:function(){return null!==this._config.websocket||!("function"!=typeof WebSocket&&"object"!==("undefined"==typeof WebSocket?"undefined":a(WebSocket)))}},{key:"_setFormat",value:function(e){if(!this._formatOverride(e)){if("protobuf"===e)throw new Error("not implemented by JSON only Centrifuge client – use client with Protobuf");this._binary=!1,this._methodType=s.JsonMethodType,this._pushType=s.JsonPushType,this._encoder=new s.JsonEncoder,this._decoder=new s.JsonDecoder}}},{key:"_formatOverride",value:function(e){return!1}},{key:"_configure",value:function(e){if(!("Promise"in r.g))throw new Error("Promise polyfill required");if((0,o.extend)(this._config,e||{}),this._debug("centrifuge config",this._config),!this._url)throw new Error("url required");if((0,o.startsWith)(this._url,"ws")&&this._url.indexOf("format=protobuf")>-1?this._setFormat("protobuf"):this._setFormat("json"),(0,o.startsWith)(this._url,"http"))if(this._debug("client will try to connect to SockJS endpoint"),null!==this._config.sockjs)this._debug("SockJS explicitly provided in options"),this._sockjs=this._config.sockjs;else{if(void 0===r.g.SockJS)throw new Error("SockJS not found, use ws:// in url or include SockJS");this._debug("use globally defined SockJS"),this._sockjs=r.g.SockJS}else this._debug("client will connect to websocket endpoint")}},{key:"_setStatus",value:function(e){this._status!==e&&(this._debug("Status",this._status,"->",e),this._status=e)}},{key:"_isDisconnected",value:function(){return"disconnected"===this._status}},{key:"_isConnecting",value:function(){return"connecting"===this._status}},{key:"_isConnected",value:function(){return"connected"===this._status}},{key:"_nextMessageId",value:function(){return++this._messageId}},{key:"_resetRetry",value:function(){this._debug("reset retries count to 0"),this._retries=0}},{key:"_getRetryInterval",value:function(){var e=(0,o.backoff)(this._retries,this._config.minRetry,this._config.maxRetry);return this._retries+=1,e}},{key:"_abortInflightXHRs",value:function(){for(var e in this._xhrs){try{this._xhrs[e].abort()}catch(e){this._debug("error aborting xhr",e)}delete this._xhrs[e]}}},{key:"_clearConnectedState",value:function(e){for(var t in this._clientID=null,this._stopPing(),this._callbacks)if(this._callbacks.hasOwnProperty(t)){var r=this._callbacks[t];clearTimeout(r.timeout);var n=r.errback;if(!n)continue;n({error:this._createErrorObject("disconnected")})}for(var i in this._callbacks={},this._subs)if(this._subs.hasOwnProperty(i)){var s=this._subs[i];e?(s._isSuccess()&&(s._triggerUnsubscribe(),s._recover=!0),s._shouldResubscribe()&&s._setSubscribing()):s._setUnsubscribed()}for(var o in this._abortInflightXHRs(),null!==this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),this._subRefreshTimeouts)this._subRefreshTimeouts.hasOwnProperty(o)&&this._subRefreshTimeouts[o]&&this._clearSubRefreshTimeout(o);this._subRefreshTimeouts={},this._reconnect||(this._subs={})}},{key:"_isTransportOpen",value:function(){return this._isSockjs?this._transport&&this._transport.transport&&this._transport.transport.readyState===this._transport.transport.OPEN:this._transport&&this._transport.readyState===this._transport.OPEN}},{key:"_transportSend",value:function(e){if(!e.length)return!0;if(!this._isTransportOpen()){for(var t in e){var r=t.id;if(r in this._callbacks){var n=this._callbacks[r];clearTimeout(this._callbacks[r].timeout),delete this._callbacks[r],(0,n.errback)({error:this._createErrorObject(d,0)})}}return!1}return this._transport.send(this._encoder.encodeCommands(e)),!0}},{key:"_setupTransport",value:function(){var e=this;if(this._isSockjs=!1,null!==this._sockjs){var t={transports:this._config.sockjsTransports};null!==this._config.sockjsServer&&(t.server=this._config.sockjsServer),this._isSockjs=!0,this._transport=new this._sockjs(this._url,null,t)}else{if(!this._websocketSupported())return void this._debug("No Websocket support and no SockJS configured, can not connect");null!==this._config.websocket?this._websocket=this._config.websocket:this._websocket=WebSocket,this._transport=new this._websocket(this._url),!0===this._binary&&(this._transport.binaryType="arraybuffer")}this._transport.onopen=function(){e._transportClosed=!1,e._isSockjs?(e._transportName="sockjs-"+e._transport.transport,e._transport.onheartbeat=function(){return e._restartPing()}):e._transportName="websocket";var t={};(e._token||e._connectData||e._config.name||e._config.version)&&(t.params={}),e._token&&(t.params.token=e._token),e._connectData&&(t.params.data=e._connectData),e._config.name&&(t.params.name=e._config.name),e._config.version&&(t.params.version=e._config.version);var r={},n=!1;for(var i in e._serverSubs)if(e._serverSubs.hasOwnProperty(i)&&e._serverSubs[i].recoverable){n=!0;var s={recover:!0};e._serverSubs[i].seq||e._serverSubs[i].gen?(e._serverSubs[i].seq&&(s.seq=e._serverSubs[i].seq),e._serverSubs[i].gen&&(s.gen=e._serverSubs[i].gen)):e._serverSubs[i].offset&&(s.offset=e._serverSubs[i].offset),e._serverSubs[i].epoch&&(s.epoch=e._serverSubs[i].epoch),r[i]=s}n&&(t.params||(t.params={}),t.params.subs=r),e._latencyStart=new Date,e._call(t).then((function(t){e._connectResponse(e._decoder.decodeCommandResult(e._methodType.CONNECT,t.result),n),t.next&&t.next()}),(function(t){109===t.error.code&&(e._refreshRequired=!0),e._disconnect("connect error",!0),t.next&&t.next()}))},this._transport.onerror=function(t){e._debug("transport level error",t)},this._transport.onclose=function(t){e._transportClosed=!0;var r=d,n=!0;if(t&&"reason"in t&&t.reason)try{var i=JSON.parse(t.reason);e._debug("reason is an advice object",i),r=i.reason,n=i.reconnect}catch(n){r=t.reason,e._debug("reason is a plain string",r)}if(null!==e._config.onTransportClose&&e._config.onTransportClose({event:t,reason:r,reconnect:n}),e._disconnect(r,n),!0===e._reconnect){e._reconnecting=!0;var s=e._getRetryInterval();e._debug("reconnect after "+s+" milliseconds"),setTimeout((function(){!0===e._reconnect&&(e._refreshRequired?e._refresh():e._connect())}),s)}},this._transport.onmessage=function(t){e._dataReceived(t.data)}}},{key:"rpc",value:function(e){return this._rpc("",e)}},{key:"namedRPC",value:function(e,t){return this._rpc(e,t)}},{key:"_rpc",value:function(e,t){var r={data:t};""!==e&&(r.method=e);var n={method:this._methodType.RPC,params:r};return this._methodCall(n,(function(e){return e}))}},{key:"send",value:function(e){var t={method:this._methodType.SEND,params:{data:e}};return this.isConnected()&&this._transportSend([t])?Promise.resolve({}):Promise.reject(this._createErrorObject(d,0))}},{key:"_getHistoryParams",value:function(e,t){var r={channel:e};return void 0!==t&&(t.since&&(r.use_since=!0,t.since.offset&&(r.offset=t.since.offset),t.since.epoch&&(r.epoch=t.since.epoch)),void 0!==t.limit&&(r.use_limit=!0,r.limit=t.limit)),r}},{key:"_methodCall",value:function(e,t){var r=this;return this.isConnected()?new Promise((function(n,i){r._call(e).then((function(i){n(t(r._decoder.decodeCommandResult(e.method,i.result))),i.next&&i.next()}),(function(e){i(e.error),e.next&&e.next()}))})):Promise.reject(this._createErrorObject(d,0))}},{key:"publish",value:function(e,t){var r={method:this._methodType.PUBLISH,params:{channel:e,data:t}};return this._methodCall(r,(function(){return{}}))}},{key:"history",value:function(e,t){var r=this._getHistoryParams(e,t),n={method:this._methodType.HISTORY,params:r};return this._methodCall(n,(function(e){return{publications:e.publications,epoch:e.epoch||"",offset:e.offset||0}}))}},{key:"presence",value:function(e){var t={method:this._methodType.PRESENCE,params:{channel:e}};return this._methodCall(t,(function(e){return{presence:e.presence}}))}},{key:"presenceStats",value:function(e){var t={method:this._methodType.PRESENCE_STATS,params:{channel:e}};return this._methodCall(t,(function(e){return{num_users:e.num_users,num_clients:e.num_clients}}))}},{key:"_dataReceived",value:function(e){var t=this,r=this._decoder.decodeReplies(e);this._dispatchPromise=this._dispatchPromise.then((function(){var e;t._dispatchPromise=new Promise((function(t){e=t})),t._dispatchSynchronized(r,e)})),this._restartPing()}},{key:"_dispatchSynchronized",value:function(e,t){var r=this,n=Promise.resolve(),i=function(t){e.hasOwnProperty(t)&&(n=n.then((function(){return r._dispatchReply(e[t])})))};for(var s in e)i(s);n=n.then((function(){t()}))}},{key:"_dispatchReply",value:function(e){var t,r=new Promise((function(e){t=e}));if(null==e)return this._debug("dispatch: got undefined or null reply"),t(),r;var n=e.id;return n&&n>0?this._handleReply(e,t):this._handlePush(e.result,t),r}},{key:"_call",value:function(e){var t=this;return new Promise((function(r,n){var i=t._addMessage(e);t._registerCall(i,r,n)}))}},{key:"_connect",value:function(){this.isConnected()?this._debug("connect called when already connected"):"connecting"!==this._status&&(this._debug("start connecting"),this._setStatus("connecting"),this._clientID=null,this._reconnect=!0,this._setupTransport())}},{key:"_disconnect",value:function(e,t){var r=t||!1;if(!1===r&&(this._reconnect=!1),this._isDisconnected())r||this._clearConnectedState(r);else{if(this._clearConnectedState(r),this._debug("disconnected:",e,t),this._setStatus("disconnected"),this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),!1===this._reconnecting){for(var n in this._serverSubs)this._serverSubs.hasOwnProperty(n)&&this.emit("unsubscribe",{channel:n});this.emit("disconnect",{reason:e,reconnect:r})}!1===r&&(this._subs={},this._serverSubs={}),this._transportClosed||this._transport.close()}}},{key:"_refreshFailed",value:function(){this._numRefreshFailed=0,this._isDisconnected()||this._disconnect("refresh failed",!1),null!==this._config.onRefreshFailed&&this._config.onRefreshFailed()}},{key:"_refresh",value:function(){var e=this;if(this._debug("refresh token"),0===this._config.refreshAttempts)return this._debug("refresh attempts set to 0, do not send refresh request at all"),void this._refreshFailed();null!==this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null);var t=this._clientID,r=this._newXHRID(),n=function(n){if(r in e._xhrs&&delete e._xhrs[r],e._clientID===t)if(n.error||200!==n.status){if(n.error?e._debug("error refreshing connection token",n.error):e._debug("error refreshing connection token: wrong status code",n.status),e._numRefreshFailed++,null!==e._refreshTimeout&&(clearTimeout(e._refreshTimeout),e._refreshTimeout=null),null!==e._config.refreshAttempts&&e._numRefreshFailed>=e._config.refreshAttempts)return void e._refreshFailed();var i=Math.round(1e3*Math.random()*Math.max(e._numRefreshFailed,20)),s=e._config.refreshInterval+i;e._refreshTimeout=setTimeout((function(){return e._refresh()}),s)}else if(e._numRefreshFailed=0,e._token=n.data.token,e._token)if(e._isDisconnected()&&e._reconnect)e._debug("token refreshed, connect from scratch"),e._connect();else{e._debug("send refreshed token");var o={method:e._methodType.REFRESH,params:{token:e._token}};e._call(o).then((function(t){e._refreshResponse(e._decoder.decodeCommandResult(e._methodType.REFRESH,t.result)),t.next&&t.next()}),(function(t){e._refreshError(t.error),t.next&&t.next()}))}else e._refreshFailed()};if(null!==this._config.onRefresh)this._config.onRefresh({},n);else{var i=this._ajax(this._config.refreshEndpoint,this._config.refreshParams,this._config.refreshHeaders,this._config.refreshData,n);this._xhrs[r]=i}}},{key:"_refreshError",value:function(e){var t=this;this._debug("refresh error",e),this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null);var r=this._config.refreshInterval+Math.round(1e3*Math.random());this._refreshTimeout=setTimeout((function(){return t._refresh()}),r)}},{key:"_refreshResponse",value:function(e){var t=this;this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),e.expires&&(this._clientID=e.client,this._refreshTimeout=setTimeout((function(){return t._refresh()}),this._getTTLMilliseconds(e.ttl)))}},{key:"_newXHRID",value:function(){return this._xhrID++,this._xhrID}},{key:"_subRefresh",value:function(e){var t=this;if(this._debug("refresh subscription token for channel",e),void 0!==this._subRefreshTimeouts[e]){this._clearSubRefreshTimeout(e);var r=this._clientID,n=this._newXHRID(),i=function(i){if(n in t._xhrs&&delete t._xhrs[n],!i.error&&200===i.status&&t._clientID===r){var s={};if(i.data.channels)for(var o in i.data.channels){var u=i.data.channels[o];u.channel&&(s[u.channel]=u.token)}var a=s[e];if(a){var c={method:t._methodType.SUB_REFRESH,params:{channel:e,token:a}};null!==t._getSub(e)&&t._call(c).then((function(r){t._subRefreshResponse(e,t._decoder.decodeCommandResult(t._methodType.SUB_REFRESH,r.result)),r.next&&r.next()}),(function(r){t._subRefreshError(e,r.error),r.next&&r.next()}))}}},s={client:this._clientID,channels:[e]};if(null!==this._config.onPrivateSubscribe)this._config.onPrivateSubscribe({data:s},i);else{var o=this._ajax(this._config.subscribeEndpoint,this._config.subscribeParams,this._config.subscribeHeaders,s,i);this._xhrs[n]=o}}}},{key:"_clearSubRefreshTimeout",value:function(e){void 0!==this._subRefreshTimeouts[e]&&(clearTimeout(this._subRefreshTimeouts[e]),delete this._subRefreshTimeouts[e])}},{key:"_subRefreshError",value:function(e,t){var r=this;if(this._debug("subscription refresh error",e,t),this._clearSubRefreshTimeout(e),null!==this._getSub(e)){var n=Math.round(1e3*Math.random()),i=setTimeout((function(){return r._subRefresh(e)}),this._config.subRefreshInterval+n);this._subRefreshTimeouts[e]=i}}},{key:"_subRefreshResponse",value:function(e,t){var r=this;if(this._debug("subscription refresh success",e),this._clearSubRefreshTimeout(e),null!==this._getSub(e)&&!0===t.expires){var n=setTimeout((function(){return r._subRefresh(e)}),this._getTTLMilliseconds(t.ttl));this._subRefreshTimeouts[e]=n}}},{key:"_subscribe",value:function(e,t){var r=this;this._debug("subscribing on",e.channel);var n=e.channel;if(n in this._subs||(this._subs[n]=e),this.isConnected()){e._setSubscribing(t);var i={method:this._methodType.SUBSCRIBE,params:{channel:n}};if((0,o.startsWith)(n,this._config.privateChannelPrefix))this._isSubscribeBatching?this._privateChannels[n]=!0:(this.startSubscribeBatching(),this._subscribe(e),this.stopSubscribeBatching());else{var s=e._needRecover();if(!0===s){i.params.recover=!0;var u=this._getLastSeq(n),a=this._getLastGen(n);if(u||a)u&&(i.params.seq=u),a&&(i.params.gen=a);else{var c=this._getLastOffset(n);c&&(i.params.offset=c)}var f=this._getLastEpoch(n);f&&(i.params.epoch=f)}this._call(i).then((function(e){r._subscribeResponse(n,s,r._decoder.decodeCommandResult(r._methodType.SUBSCRIBE,e.result)),e.next&&e.next()}),(function(e){r._subscribeError(n,e.error),e.next&&e.next()}))}}else e._setNew()}},{key:"_unsubscribe",value:function(e){delete this._subs[e.channel],delete this._lastOffset[e.channel],delete this._lastSeq[e.channel],delete this._lastGen[e.channel],this.isConnected()&&this._addMessage({method:this._methodType.UNSUBSCRIBE,params:{channel:e.channel}})}},{key:"_getTTLMilliseconds",value:function(e){return Math.min(1e3*e,2147483647)}},{key:"getSub",value:function(e){return this._getSub(e)}},{key:"_getSub",value:function(e){return this._subs[e]||null}},{key:"_isServerSub",value:function(e){return void 0!==this._serverSubs[e]}},{key:"_connectResponse",value:function(e,t){var r=this,n=this._reconnecting;if(this._reconnecting=!1,this._resetRetry(),this._refreshRequired=!1,!this.isConnected()){for(var i in null!==this._latencyStart&&(this._latency=(new Date).getTime()-this._latencyStart.getTime(),this._latencyStart=null),this._clientID=e.client,this._setStatus("connected"),this._refreshTimeout&&clearTimeout(this._refreshTimeout),e.expires&&(this._refreshTimeout=setTimeout((function(){return r._refresh()}),this._getTTLMilliseconds(e.ttl))),this.startBatching(),this.startSubscribeBatching(),this._subs)if(this._subs.hasOwnProperty(i)){var s=this._subs[i];s._shouldResubscribe()&&this._subscribe(s,n)}this.stopSubscribeBatching(),this.stopBatching(),this._startPing();var o={client:e.client,transport:this._transportName,latency:this._latency};e.data&&(o.data=e.data),this.emit("connect",o),e.subs&&this._processServerSubs(e.subs)}}},{key:"_processServerSubs",value:function(e){for(var t in e)if(e.hasOwnProperty(t)){var r=e[t],n={channel:t,isResubscribe:void 0!==this._serverSubs[t]};n=this._expandSubscribeContext(n,r),this.emit("subscribe",n)}for(var i in e)if(e.hasOwnProperty(i)){var s=e[i];if(s.recovered){var o=s.publications;if(o&&o.length>0)for(var u in o.length>1&&(!o[0].offset||o[0].offset>o[1].offset)&&(o=o.reverse()),o)o.hasOwnProperty(u)&&this._handlePublication(i,o[u])}this._serverSubs[i]={seq:s.seq,gen:s.gen,offset:s.offset,epoch:s.epoch,recoverable:s.recoverable}}}},{key:"_stopPing",value:function(){null!==this._pongTimeout&&(clearTimeout(this._pongTimeout),this._pongTimeout=null),null!==this._pingTimeout&&(clearTimeout(this._pingTimeout),this._pingTimeout=null)}},{key:"_startPing",value:function(){var e=this;!0!==this._config.ping||this._config.pingInterval<=0||this.isConnected()&&(this._pingTimeout=setTimeout((function(){e.isConnected()?(e.ping(),e._pongTimeout=setTimeout((function(){e._disconnect("no ping",!0)}),e._config.pongWaitTimeout)):e._stopPing()}),this._config.pingInterval))}},{key:"_restartPing",value:function(){this._stopPing(),this._startPing()}},{key:"_subscribeError",value:function(e,t){var r=this._getSub(e);r&&r._isSubscribing()&&(0!==t.code||t.message!==p?r._setSubscribeError(t):this._disconnect("timeout",!0))}},{key:"_expandSubscribeContext",value:function(e,t){var r=!1;"recovered"in t&&(r=t.recovered),e.recovered=r;var n=!1;"positioned"in t&&(n=t.positioned);var i="";"epoch"in t&&(i=t.epoch);var s=0;return"offset"in t&&(s=t.offset),n&&(e.streamPosition={offset:s,epoch:i}),e}},{key:"_subscribeResponse",value:function(e,t,r){var n=this,i=this._getSub(e);if(i&&i._isSubscribing()){i._setSubscribeSuccess(r);var s=r.publications;if(s&&s.length>0)for(var o in s.length>=2&&!s[0].offset&&!s[1].offset&&(s=s.reverse()),s)s.hasOwnProperty(o)&&this._handlePublication(e,s[o]);if(!r.recoverable||t&&r.recovered||(this._lastSeq[e]=r.seq||0,this._lastGen[e]=r.gen||0,this._lastOffset[e]=r.offset||0),this._lastEpoch[e]=r.epoch||"",r.recoverable&&(i._recoverable=!0),!0===r.expires){var u=setTimeout((function(){return n._subRefresh(e)}),this._getTTLMilliseconds(r.ttl));this._subRefreshTimeouts[e]=u}}}},{key:"_handleReply",value:function(e,t){var r=e.id,n=e.result;if(r in this._callbacks){var i=this._callbacks[r];if(clearTimeout(this._callbacks[r].timeout),delete this._callbacks[r],(0,o.errorExists)(e)){var s=i.errback;if(!s)return void t();s({error:e.error,next:t})}else{var u=i.callback;if(!u)return;u({result:n,next:t})}}else t()}},{key:"_handleJoin",value:function(e,t){var r={info:t.info},n=this._getSub(e);n?n.emit("join",r):this._isServerSub(e)&&(r.channel=e,this.emit("join",r))}},{key:"_handleLeave",value:function(e,t){var r={info:t.info},n=this._getSub(e);n?n.emit("leave",r):this._isServerSub(e)&&(r.channel=e,this.emit("leave",r))}},{key:"_handleUnsub",value:function(e,t){var r={},n=this._getSub(e);n?(n.unsubscribe(),!0===t.resubscribe&&n.subscribe()):this._isServerSub(e)&&(delete this._serverSubs[e],r.channel=e,this.emit("unsubscribe",r))}},{key:"_handleSub",value:function(e,t){this._serverSubs[e]={seq:t.seq,gen:t.gen,offset:t.offset,epoch:t.epoch,recoverable:t.recoverable};var r={channel:e,isResubscribe:!1};r=this._expandSubscribeContext(r,t),this.emit("subscribe",r)}},{key:"_handlePublication",value:function(e,t){var r=this._getSub(e),n={data:t.data,seq:t.seq,gen:t.gen,offset:t.offset};t.info&&(n.info=t.info),r?(void 0!==t.seq&&(this._lastSeq[e]=t.seq),void 0!==t.gen&&(this._lastGen[e]=t.gen),void 0!==t.offset&&(this._lastOffset[e]=t.offset),r.emit("publish",n)):this._isServerSub(e)&&(void 0!==t.seq&&(this._serverSubs[e].seq=t.seq),void 0!==t.gen&&(this._serverSubs[e].gen=t.gen),void 0!==t.offset&&(this._serverSubs[e].offset=t.offset),n.channel=e,this.emit("publish",n))}},{key:"_handleMessage",value:function(e){this.emit("message",e.data)}},{key:"_handlePush",value:function(e,t){var r=this._decoder.decodePush(e),n=0;"type"in r&&(n=r.type);var i=r.channel;if(n===this._pushType.PUBLICATION){var s=this._decoder.decodePushData(this._pushType.PUBLICATION,r.data);this._handlePublication(i,s)}else if(n===this._pushType.MESSAGE){var o=this._decoder.decodePushData(this._pushType.MESSAGE,r.data);this._handleMessage(o)}else if(n===this._pushType.JOIN){var u=this._decoder.decodePushData(this._pushType.JOIN,r.data);this._handleJoin(i,u)}else if(n===this._pushType.LEAVE){var a=this._decoder.decodePushData(this._pushType.LEAVE,r.data);this._handleLeave(i,a)}else if(n===this._pushType.UNSUB){var c=this._decoder.decodePushData(this._pushType.UNSUB,r.data);this._handleUnsub(i,c)}else if(n===this._pushType.SUB){var f=this._decoder.decodePushData(this._pushType.SUB,r.data);this._handleSub(i,f)}t()}},{key:"_flush",value:function(){var e=this._messages.slice(0);this._messages=[],this._transportSend(e)}},{key:"_ping",value:function(){var e=this,t={method:this._methodType.PING};this._call(t).then((function(t){e._pingResponse(e._decoder.decodeCommandResult(e._methodType.PING,t.result)),t.next&&t.next()}),(function(t){e._debug("ping error",t.error),t.next&&t.next()}))}},{key:"_pingResponse",value:function(e){this.isConnected()&&(this._stopPing(),this._startPing())}},{key:"_getLastSeq",value:function(e){return this._lastSeq[e]||0}},{key:"_getLastOffset",value:function(e){return this._lastOffset[e]||0}},{key:"_getLastGen",value:function(e){return this._lastGen[e]||0}},{key:"_getLastEpoch",value:function(e){return this._lastEpoch[e]||""}},{key:"_createErrorObject",value:function(e,t){return{message:e,code:t||0}}},{key:"_registerCall",value:function(e,t,r){var n=this;this._callbacks[e]={callback:t,errback:r,timeout:null},this._callbacks[e].timeout=setTimeout((function(){delete n._callbacks[e],(0,o.isFunction)(r)&&r({error:n._createErrorObject(p)})}),this._config.timeout)}},{key:"_addMessage",value:function(e){var t=this._nextMessageId();return e.id=t,!0===this._isBatching?this._messages.push(e):this._transportSend([e]),t}},{key:"isConnected",value:function(){return this._isConnected()}},{key:"connect",value:function(){this._connect()}},{key:"disconnect",value:function(){this._disconnect("client",!1)}},{key:"ping",value:function(){return this._ping()}},{key:"startBatching",value:function(){this._isBatching=!0}},{key:"stopBatching",value:function(){this._isBatching=!1,this._flush()}},{key:"startSubscribeBatching",value:function(){this._isSubscribeBatching=!0}},{key:"stopSubscribeBatching",value:function(){var e=this;this._isSubscribeBatching=!1;var t=this._privateChannels;this._privateChannels={};var r=[];for(var n in t)if(t.hasOwnProperty(n)){if(!this._getSub(n))continue;r.push(n)}if(0!==r.length){var i={client:this._clientID,channels:r},s=this._clientID,o=this._newXHRID(),u=function(t){if(o in e._xhrs&&delete e._xhrs[o],e._clientID===s)if(t.error||200!==t.status){for(var n in e._debug("authorization request failed"),r)if(r.hasOwnProperty(n)){var i=r[n];e._subscribeError(i,e._createErrorObject("authorization request failed"))}}else{var u={};if(t.data.channels)for(var a in t.data.channels){var c=t.data.channels[a];c.channel&&(u[c.channel]=c.token)}var f=!1;for(var l in e._isBatching||(e.startBatching(),f=!0),r)!r.hasOwnProperty(l)||function(){var t=r[l],n=u[t];if(!n)return e._subscribeError(t,e._createErrorObject("permission denied",103)),"continue";var i={method:e._methodType.SUBSCRIBE,params:{channel:t,token:n}},s=e._getSub(t);if(null===s)return"continue";var o=s._needRecover();if(!0===o){i.params.recover=!0;var a=e._getLastSeq(t),c=e._getLastGen(t);if(a||c)a&&(i.params.seq=a),c&&(i.params.gen=c);else{var f=e._getLastOffset(t);f&&(i.params.offset=f)}var h=e._getLastEpoch(t);h&&(i.params.epoch=h)}e._call(i).then((function(r){e._subscribeResponse(t,o,e._decoder.decodeCommandResult(e._methodType.SUBSCRIBE,r.result)),r.next&&r.next()}),(function(r){e._subscribeError(t,r.error),r.next&&r.next()}))}();f&&e.stopBatching()}};if(null!==this._config.onPrivateSubscribe)this._config.onPrivateSubscribe({data:i},u);else{var a=this._ajax(this._config.subscribeEndpoint,this._config.subscribeParams,this._config.subscribeHeaders,i,u);this._xhrs[o]=a}}else this._debug("no private channels found, no need to make request")}},{key:"subscribe",value:function(e,t){var r=this._getSub(e);if(null!==r)return r._setEvents(t),r._isUnsubscribed()&&r.subscribe(),r;var n=new i.default(this,e,t);return this._subs[e]=n,n.subscribe(),n}}])&&c(t.prototype,n),_}(n.default);t.Centrifuge=y},714:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(885).CentrifugeProtobuf;t.default=n,e.exports=t.default},147:function(e,t){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var r=0;r0&&o.length>i&&!o.warned){o.warned=!0;var f=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");f.name="MaxListenersExceededWarning",f.emitter=e,f.type=t,f.count=o.length,c=f,console&&console.warn&&console.warn(c)}return e}function f(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function l(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},i=f.bind(n);return i.listener=r,n.wrapFn=i,i}function h(e,t,r){var n=e._events;if(void 0===n)return[];var i=n[t];return void 0===i?[]:"function"==typeof i?r?[i.listener||i]:[i]:r?function(e){for(var t=new Array(e.length),r=0;r0&&(o=t[0]),o instanceof Error)throw o;var u=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw u.context=o,u}var a=s[e];if(void 0===a)return!1;if("function"==typeof a)n(a,this,t);else{var c=a.length,f=d(a,c);for(r=0;r=0;s--)if(r[s]===t||r[s].listener===t){o=r[s].listener,i=s;break}if(i<0)return this;0===i?r.shift():function(e,t){for(;t+1=0;n--)this.removeListener(e,t[n]);return this},s.prototype.listeners=function(e){return h(this,e,!0)},s.prototype.rawListeners=function(e){return h(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},s.prototype.listenerCount=p,s.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},492:function(e,t,r){e.exports=r(836)},996:function(e,t,r){var n=t,i=r(25),s=r(935);function o(e,t,r,n){if(t.resolvedType)if(t.resolvedType instanceof i){e("switch(d%s){",n);for(var s=t.resolvedType.values,o=Object.keys(s),u=0;u>>0",n,n);break;case"int32":case"sint32":case"sfixed32":e("m%s=d%s|0",n,n);break;case"uint64":a=!0;case"int64":case"sint64":case"fixed64":case"sfixed64":e("if(util.Long)")("(m%s=util.Long.fromValue(d%s)).unsigned=%j",n,n,a)('else if(typeof d%s==="string")',n)("m%s=parseInt(d%s,10)",n,n)('else if(typeof d%s==="number")',n)("m%s=d%s",n,n)('else if(typeof d%s==="object")',n)("m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)",n,n,n,a?"true":"");break;case"bytes":e('if(typeof d%s==="string")',n)("util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)",n,n,n)("else if(d%s.length)",n)("m%s=d%s",n,n);break;case"string":e("m%s=String(d%s)",n,n);break;case"bool":e("m%s=Boolean(d%s)",n,n)}}return e}function u(e,t,r,n){if(t.resolvedType)t.resolvedType instanceof i?e("d%s=o.enums===String?types[%i].values[m%s]:m%s",n,r,n,n):e("d%s=types[%i].toObject(m%s,o)",n,r,n);else{var s=!1;switch(t.type){case"double":case"float":e("d%s=o.json&&!isFinite(m%s)?String(m%s):m%s",n,n,n,n);break;case"uint64":s=!0;case"int64":case"sint64":case"fixed64":case"sfixed64":e('if(typeof m%s==="number")',n)("d%s=o.longs===String?String(m%s):m%s",n,n,n)("else")("d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s",n,n,n,n,s?"true":"",n);break;case"bytes":e("d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s",n,n,n,n,n);break;default:e("d%s=m%s",n,n)}}return e}n.fromObject=function(e){var t=e.fieldsArray,r=s.codegen(["d"],e.name+"$fromObject")("if(d instanceof this.ctor)")("return d");if(!t.length)return r("return new this.ctor");r("var m=new this.ctor");for(var n=0;n>>3){");for(var r=0;r>>3){")("case 1: k=r.%s(); break",u.keyType)("case 2:"),void 0===i.basic[a]?t("value=types[%i].decode(r,r.uint32())",r):t("value=r.%s()",a),t("break")("default:")("r.skipType(tag2&7)")("break")("}")("}"),void 0!==i.long[u.keyType]?t('%s[typeof k==="object"?util.longToHash(k):k]=value',c):t("%s[k]=value",c)):u.repeated?(t("if(!(%s&&%s.length))",c,c)("%s=[]",c),void 0!==i.packed[a]&&t("if((t&7)===2){")("var c2=r.uint32()+r.pos")("while(r.pos>>0,8|i.mapKey[c.keyType],c.keyType),void 0===h?r("types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()",f,t):r(".uint32(%i).%s(%s[ks[i]]).ldelim()",16|h,l,t),r("}")("}")):c.repeated?(r("if(%s!=null&&%s.length){",t,t),c.packed&&void 0!==i.packed[l]?r("w.uint32(%i).fork()",(c.id<<3|2)>>>0)("for(var i=0;i<%s.length;++i)",t)("w.%s(%s[i])",l,t)("w.ldelim()"):(r("for(var i=0;i<%s.length;++i)",t),void 0===h?o(r,c,f,t+"[i]"):r("w.uint32(%i).%s(%s[i])",(c.id<<3|h)>>>0,l,t)),r("}")):(c.optional&&r("if(%s!=null&&Object.hasOwnProperty.call(m,%j))",t,c.name),void 0===h?o(r,c,f,t):r("w.uint32(%i).%s(%s)",(c.id<<3|h)>>>0,l,t))}return r("return w")};var n=r(25),i=r(63),s=r(935);function o(e,t,r,n){return t.resolvedType.group?e("types[%i].encode(%s,w.uint32(%i)).uint32(%i)",r,n,(t.id<<3|3)>>>0,(t.id<<3|4)>>>0):e("types[%i].encode(%s,w.uint32(%i).fork()).ldelim()",r,n,(t.id<<3|2)>>>0)}},25:function(e,t,r){e.exports=o;var n=r(243);((o.prototype=Object.create(n.prototype)).constructor=o).className="Enum";var i=r(313),s=r(935);function o(e,t,r,i,s){if(n.call(this,e,r),t&&"object"!=typeof t)throw TypeError("values must be an object");if(this.valuesById={},this.values=Object.create(this.valuesById),this.comment=i,this.comments=s||{},this.reserved=void 0,t)for(var o=Object.keys(t),u=0;ut)return!0;return!1},f.isReservedName=function(e,t){if(e)for(var r=0;r0;){var n=e.shift();if(r.nested&&r.nested[n]){if(!((r=r.nested[n])instanceof f))throw Error("path conflicts with non-namespace objects")}else r.add(r=new f(n))}return t&&r.addJSON(t),r},f.prototype.resolveAll=function(){for(var e=this.nestedArray,t=0;t-1)return n}else if(n instanceof f&&(n=n.lookup(e.slice(1),t,!0)))return n}else for(var i=0;i-1&&this.oneof.splice(t,1),e.partOf=null,this},o.prototype.onAdd=function(e){n.prototype.onAdd.call(this,e);for(var t=0;t "+e.len)}function a(e){this.buf=e,this.pos=0,this.len=e.length}var c,f="undefined"!=typeof Uint8Array?function(e){if(e instanceof Uint8Array||Array.isArray(e))return new a(e);throw Error("illegal buffer")}:function(e){if(Array.isArray(e))return new a(e);throw Error("illegal buffer")},l=function(){return i.Buffer?function(e){return(a.create=function(e){return i.Buffer.isBuffer(e)?new n(e):f(e)})(e)}:f};function h(){var e=new s(0,0),t=0;if(!(this.len-this.pos>4)){for(;t<3;++t){if(this.pos>=this.len)throw u(this);if(e.lo=(e.lo|(127&this.buf[this.pos])<<7*t)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(127&this.buf[this.pos++])<<7*t)>>>0,e}for(;t<4;++t)if(e.lo=(e.lo|(127&this.buf[this.pos])<<7*t)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(127&this.buf[this.pos])<<28)>>>0,e.hi=(e.hi|(127&this.buf[this.pos])>>4)>>>0,this.buf[this.pos++]<128)return e;if(t=0,this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(127&this.buf[this.pos])<<7*t+3)>>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw u(this);if(e.hi=(e.hi|(127&this.buf[this.pos])<<7*t+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}function p(e,t){return(e[t-4]|e[t-3]<<8|e[t-2]<<16|e[t-1]<<24)>>>0}function d(){if(this.pos+8>this.len)throw u(this,8);return new s(p(this.buf,this.pos+=4),p(this.buf,this.pos+=4))}a.create=l(),a.prototype._slice=i.Array.prototype.subarray||i.Array.prototype.slice,a.prototype.uint32=(c=4294967295,function(){if(c=(127&this.buf[this.pos])>>>0,this.buf[this.pos++]<128)return c;if(c=(c|(127&this.buf[this.pos])<<7)>>>0,this.buf[this.pos++]<128)return c;if(c=(c|(127&this.buf[this.pos])<<14)>>>0,this.buf[this.pos++]<128)return c;if(c=(c|(127&this.buf[this.pos])<<21)>>>0,this.buf[this.pos++]<128)return c;if(c=(c|(15&this.buf[this.pos])<<28)>>>0,this.buf[this.pos++]<128)return c;if((this.pos+=5)>this.len)throw this.pos=this.len,u(this,10);return c}),a.prototype.int32=function(){return 0|this.uint32()},a.prototype.sint32=function(){var e=this.uint32();return e>>>1^-(1&e)|0},a.prototype.bool=function(){return 0!==this.uint32()},a.prototype.fixed32=function(){if(this.pos+4>this.len)throw u(this,4);return p(this.buf,this.pos+=4)},a.prototype.sfixed32=function(){if(this.pos+4>this.len)throw u(this,4);return 0|p(this.buf,this.pos+=4)},a.prototype.float=function(){if(this.pos+4>this.len)throw u(this,4);var e=i.float.readFloatLE(this.buf,this.pos);return this.pos+=4,e},a.prototype.double=function(){if(this.pos+8>this.len)throw u(this,4);var e=i.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,e},a.prototype.bytes=function(){var e=this.uint32(),t=this.pos,r=this.pos+e;if(r>this.len)throw u(this,e);return this.pos+=e,Array.isArray(this.buf)?this.buf.slice(t,r):t===r?new this.buf.constructor(0):this._slice.call(this.buf,t,r)},a.prototype.string=function(){var e=this.bytes();return o.read(e,0,e.length)},a.prototype.skip=function(e){if("number"==typeof e){if(this.pos+e>this.len)throw u(this,e);this.pos+=e}else do{if(this.pos>=this.len)throw u(this)}while(128&this.buf[this.pos++]);return this},a.prototype.skipType=function(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;4!=(e=7&this.uint32());)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+e+" at offset "+this.pos)}return this},a._configure=function(e){n=e,a.create=l(),n._configure();var t=i.Long?"toLong":"toNumber";i.merge(a.prototype,{int64:function(){return h.call(this)[t](!1)},uint64:function(){return h.call(this)[t](!0)},sint64:function(){return h.call(this).zzDecode()[t](!1)},fixed64:function(){return d.call(this)[t](!0)},sfixed64:function(){return d.call(this)[t](!1)}})}},593:function(e,t,r){e.exports=s;var n=r(408);(s.prototype=Object.create(n.prototype)).constructor=s;var i=r(693);function s(e){n.call(this,e)}s._configure=function(){i.Buffer&&(s.prototype._slice=i.Buffer.prototype.slice)},s.prototype.string=function(){var e=this.uint32();return this.buf.utf8Slice?this.buf.utf8Slice(this.pos,this.pos=Math.min(this.pos+e,this.len)):this.buf.toString("utf-8",this.pos,this.pos=Math.min(this.pos+e,this.len))},s._configure()},424:function(e,t,r){e.exports=l;var n=r(313);((l.prototype=Object.create(n.prototype)).constructor=l).className="Root";var i,s,o,u=r(548),a=r(25),c=r(598),f=r(935);function l(e){n.call(this,"",e),this.deferred=[],this.files=[]}function h(){}l.fromJSON=function(e,t){return t||(t=new l),e.options&&t.setOptions(e.options),t.addJSON(e.nested)},l.prototype.resolvePath=f.path.resolve,l.prototype.fetch=f.fetch,l.prototype.load=function e(t,r,n){"function"==typeof r&&(n=r,r=void 0);var i=this;if(!n)return f.asPromise(e,i,t,r);var u=n===h;function a(e,t){if(n){var r=n;if(n=null,u)throw e;r(e,t)}}function c(e){var t=e.lastIndexOf("google/protobuf/");if(t>-1){var r=e.substring(t);if(r in o)return r}return null}function l(e,t){try{if(f.isString(t)&&"{"===t.charAt(0)&&(t=JSON.parse(t)),f.isString(t)){s.filename=e;var n,o=s(t,i,r),l=0;if(o.imports)for(;l-1))if(i.files.push(e),e in o)u?l(e,o[e]):(++d,setTimeout((function(){--d,l(e,o[e])})));else if(u){var r;try{r=f.fs.readFileSync(e).toString("utf8")}catch(e){return void(t||a(e))}l(e,r)}else++d,i.fetch(e,(function(r,s){--d,n&&(r?t?d||a(null,i):a(r):l(e,s))}))}var d=0;f.isString(t)&&(t=[t]);for(var y,v=0;v-1&&this.deferred.splice(t,1)}}else if(e instanceof a)p.test(e.name)&&delete e.parent[e.name];else if(e instanceof n){for(var r=0;r0)t[i]=e(t[i]||{},r,n);else{var s=t[i];s&&(n=[].concat(s).concat(n)),t[i]=n}return t}(e,t=t.split("."),r)},Object.defineProperty(s,"decorateRoot",{get:function(){return o.decorated||(o.decorated=new(r(424)))}})},630:function(e,t,r){e.exports=i;var n=r(693);function i(e,t){this.lo=e>>>0,this.hi=t>>>0}var s=i.zero=new i(0,0);s.toNumber=function(){return 0},s.zzEncode=s.zzDecode=function(){return this},s.length=function(){return 1};var o=i.zeroHash="\0\0\0\0\0\0\0\0";i.fromNumber=function(e){if(0===e)return s;var t=e<0;t&&(e=-e);var r=e>>>0,n=(e-r)/4294967296>>>0;return t&&(n=~n>>>0,r=~r>>>0,++r>4294967295&&(r=0,++n>4294967295&&(n=0))),new i(r,n)},i.from=function(e){if("number"==typeof e)return i.fromNumber(e);if(n.isString(e)){if(!n.Long)return i.fromNumber(parseInt(e,10));e=n.Long.fromString(e)}return e.low||e.high?new i(e.low>>>0,e.high>>>0):s},i.prototype.toNumber=function(e){if(!e&&this.hi>>>31){var t=1+~this.lo>>>0,r=~this.hi>>>0;return t||(r=r+1>>>0),-(t+4294967296*r)}return this.lo+4294967296*this.hi},i.prototype.toLong=function(e){return n.Long?new n.Long(0|this.lo,0|this.hi,Boolean(e)):{low:0|this.lo,high:0|this.hi,unsigned:Boolean(e)}};var u=String.prototype.charCodeAt;i.fromHash=function(e){return e===o?s:new i((u.call(e,0)|u.call(e,1)<<8|u.call(e,2)<<16|u.call(e,3)<<24)>>>0,(u.call(e,4)|u.call(e,5)<<8|u.call(e,6)<<16|u.call(e,7)<<24)>>>0)},i.prototype.toHash=function(){return String.fromCharCode(255&this.lo,this.lo>>>8&255,this.lo>>>16&255,this.lo>>>24,255&this.hi,this.hi>>>8&255,this.hi>>>16&255,this.hi>>>24)},i.prototype.zzEncode=function(){var e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this},i.prototype.zzDecode=function(){var e=-(1&this.lo);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this},i.prototype.length=function(){var e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,r=this.hi>>>24;return 0===r?0===t?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:r<128?9:10}},693:function(e,t,r){var n=t;function i(e,t,r){for(var n=Object.keys(t),i=0;i0)},n.Buffer=function(){try{var e=n.inquire("buffer").Buffer;return e.prototype.utf8Write?e:null}catch(e){return null}}(),n._Buffer_from=null,n._Buffer_allocUnsafe=null,n.newBuffer=function(e){return"number"==typeof e?n.Buffer?n._Buffer_allocUnsafe(e):new n.Array(e):n.Buffer?n._Buffer_from(e):"undefined"==typeof Uint8Array?e:new Uint8Array(e)},n.Array="undefined"!=typeof Uint8Array?Uint8Array:Array,n.Long=n.global.dcodeIO&&n.global.dcodeIO.Long||n.global.Long||n.inquire("long"),n.key2Re=/^true|false|0|1$/,n.key32Re=/^-?(?:0|[1-9][0-9]*)$/,n.key64Re=/^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/,n.longToHash=function(e){return e?n.LongBits.from(e).toHash():n.LongBits.zeroHash},n.longFromHash=function(e,t){var r=n.LongBits.fromHash(e);return n.Long?n.Long.fromBits(r.lo,r.hi,t):r.toNumber(Boolean(t))},n.merge=i,n.lcFirst=function(e){return e.charAt(0).toLowerCase()+e.substring(1)},n.newError=s,n.ProtocolError=s("ProtocolError"),n.oneOfGetter=function(e){for(var t={},r=0;r-1;--r)if(1===t[e[r]]&&void 0!==this[e[r]]&&null!==this[e[r]])return e[r]}},n.oneOfSetter=function(e){return function(t){for(var r=0;r>>7|e.hi<<25)>>>0,e.hi>>>=7;for(;e.lo>127;)t[r++]=127&e.lo|128,e.lo=e.lo>>>7;t[r++]=e.lo}function v(e,t,r){t[r]=255&e,t[r+1]=e>>>8&255,t[r+2]=e>>>16&255,t[r+3]=e>>>24}l.create=h(),l.alloc=function(e){return new i.Array(e)},i.Array!==Array&&(l.alloc=i.pool(l.alloc,i.Array.prototype.subarray)),l.prototype._push=function(e,t,r){return this.tail=this.tail.next=new a(e,t,r),this.len+=t,this},d.prototype=Object.create(a.prototype),d.prototype.fn=function(e,t,r){for(;e>127;)t[r++]=127&e|128,e>>>=7;t[r]=e},l.prototype.uint32=function(e){return this.len+=(this.tail=this.tail.next=new d((e>>>=0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this},l.prototype.int32=function(e){return e<0?this._push(y,10,s.fromNumber(e)):this.uint32(e)},l.prototype.sint32=function(e){return this.uint32((e<<1^e>>31)>>>0)},l.prototype.uint64=function(e){var t=s.from(e);return this._push(y,t.length(),t)},l.prototype.int64=l.prototype.uint64,l.prototype.sint64=function(e){var t=s.from(e).zzEncode();return this._push(y,t.length(),t)},l.prototype.bool=function(e){return this._push(p,1,e?1:0)},l.prototype.fixed32=function(e){return this._push(v,4,e>>>0)},l.prototype.sfixed32=l.prototype.fixed32,l.prototype.fixed64=function(e){var t=s.from(e);return this._push(v,4,t.lo)._push(v,4,t.hi)},l.prototype.sfixed64=l.prototype.fixed64,l.prototype.float=function(e){return this._push(i.float.writeFloatLE,4,e)},l.prototype.double=function(e){return this._push(i.float.writeDoubleLE,8,e)};var _=i.Array.prototype.set?function(e,t,r){t.set(e,r)}:function(e,t,r){for(var n=0;n>>0;if(!t)return this._push(p,1,0);if(i.isString(e)){var r=l.alloc(t=o.length(e));o.decode(e,r,0),e=r}return this.uint32(t)._push(_,t,e)},l.prototype.string=function(e){var t=u.length(e);return t?this.uint32(t)._push(u.write,t,e):this._push(p,1,0)},l.prototype.fork=function(){return this.states=new f(this),this.head=this.tail=new a(c,0,0),this.len=0,this},l.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new a(c,0,0),this.len=0),this},l.prototype.ldelim=function(){var e=this.head,t=this.tail,r=this.len;return this.reset().uint32(r),r&&(this.tail.next=e.next,this.tail=t,this.len+=r),this},l.prototype.finish=function(){for(var e=this.head.next,t=this.constructor.alloc(this.len),r=0;e;)e.fn(e.val,t,r),r+=e.len,e=e.next;return t},l._configure=function(e){n=e,l.create=h(),n._configure()}},155:function(e,t,r){e.exports=s;var n=r(173);(s.prototype=Object.create(n.prototype)).constructor=s;var i=r(693);function s(){n.call(this)}function o(e,t,r){e.length<40?i.utf8.write(e,t,r):t.utf8Write?t.utf8Write(e,r):t.write(e,r)}s._configure=function(){s.alloc=i._Buffer_allocUnsafe,s.writeBytesBuffer=i.Buffer&&i.Buffer.prototype instanceof Uint8Array&&"set"===i.Buffer.prototype.set.name?function(e,t,r){t.set(e,r)}:function(e,t,r){if(e.copy)e.copy(t,r,0,e.length);else for(var n=0;n>>0;return this.uint32(t),t&&this._push(s.writeBytesBuffer,t,e),this},s.prototype.string=function(e){var t=i.Buffer.byteLength(e);return this.uint32(t),t&&this._push(o,t,e),this},s._configure()},261:function(e){e.exports=JSON.parse('{"nested":{"protocol":{"nested":{"Error":{"fields":{"code":{"type":"uint32","id":1},"message":{"type":"string","id":2}}},"MethodType":{"values":{"CONNECT":0,"SUBSCRIBE":1,"UNSUBSCRIBE":2,"PUBLISH":3,"PRESENCE":4,"PRESENCE_STATS":5,"HISTORY":6,"PING":7,"SEND":8,"RPC":9,"REFRESH":10,"SUB_REFRESH":11}},"Command":{"fields":{"id":{"type":"uint32","id":1},"method":{"type":"MethodType","id":2},"params":{"type":"bytes","id":3}}},"Reply":{"fields":{"id":{"type":"uint32","id":1},"error":{"type":"Error","id":2},"result":{"type":"bytes","id":3}}},"PushType":{"values":{"PUBLICATION":0,"JOIN":1,"LEAVE":2,"UNSUB":3,"MESSAGE":4,"SUB":5}},"Push":{"fields":{"type":{"type":"PushType","id":1},"channel":{"type":"string","id":2},"data":{"type":"bytes","id":3}}},"ClientInfo":{"fields":{"user":{"type":"string","id":1},"client":{"type":"string","id":2},"conn_info":{"type":"bytes","id":3},"chan_info":{"type":"bytes","id":4}}},"Publication":{"fields":{"seq":{"type":"uint32","id":1},"gen":{"type":"uint32","id":2},"uid":{"type":"string","id":3},"data":{"type":"bytes","id":4},"info":{"type":"ClientInfo","id":5},"offset":{"type":"uint64","id":6}}},"Join":{"fields":{"info":{"type":"ClientInfo","id":1}}},"Leave":{"fields":{"info":{"type":"ClientInfo","id":1}}},"Unsub":{"fields":{"resubscribe":{"type":"bool","id":1}}},"Sub":{"fields":{"recoverable":{"type":"bool","id":1},"seq":{"type":"uint32","id":2},"gen":{"type":"uint32","id":3},"epoch":{"type":"string","id":4},"offset":{"type":"uint64","id":5},"positioned":{"type":"bool","id":6}}},"Message":{"fields":{"data":{"type":"bytes","id":1}}},"ConnectRequest":{"fields":{"token":{"type":"string","id":1},"data":{"type":"bytes","id":2},"subs":{"keyType":"string","type":"SubscribeRequest","id":3},"name":{"type":"string","id":4},"version":{"type":"string","id":5}}},"ConnectResult":{"fields":{"client":{"type":"string","id":1},"version":{"type":"string","id":2},"expires":{"type":"bool","id":3},"ttl":{"type":"uint32","id":4},"data":{"type":"bytes","id":5},"subs":{"keyType":"string","type":"SubscribeResult","id":6}}},"RefreshRequest":{"fields":{"token":{"type":"string","id":1}}},"RefreshResult":{"fields":{"client":{"type":"string","id":1},"version":{"type":"string","id":2},"expires":{"type":"bool","id":3},"ttl":{"type":"uint32","id":4}}},"SubscribeRequest":{"fields":{"channel":{"type":"string","id":1},"token":{"type":"string","id":2},"recover":{"type":"bool","id":3},"seq":{"type":"uint32","id":4},"gen":{"type":"uint32","id":5},"epoch":{"type":"string","id":6},"offset":{"type":"uint64","id":7}}},"SubscribeResult":{"fields":{"expires":{"type":"bool","id":1},"ttl":{"type":"uint32","id":2},"recoverable":{"type":"bool","id":3},"seq":{"type":"uint32","id":4},"gen":{"type":"uint32","id":5},"epoch":{"type":"string","id":6},"publications":{"rule":"repeated","type":"Publication","id":7},"recovered":{"type":"bool","id":8},"offset":{"type":"uint64","id":9},"positioned":{"type":"bool","id":10}}},"SubRefreshRequest":{"fields":{"channel":{"type":"string","id":1},"token":{"type":"string","id":2}}},"SubRefreshResult":{"fields":{"expires":{"type":"bool","id":1},"ttl":{"type":"uint32","id":2}}},"UnsubscribeRequest":{"fields":{"channel":{"type":"string","id":1}}},"UnsubscribeResult":{"fields":{}},"PublishRequest":{"fields":{"channel":{"type":"string","id":1},"data":{"type":"bytes","id":2}}},"PublishResult":{"fields":{}},"PresenceRequest":{"fields":{"channel":{"type":"string","id":1}}},"PresenceResult":{"fields":{"presence":{"keyType":"string","type":"ClientInfo","id":1}}},"PresenceStatsRequest":{"fields":{"channel":{"type":"string","id":1}}},"PresenceStatsResult":{"fields":{"num_clients":{"type":"uint32","id":1},"num_users":{"type":"uint32","id":2}}},"HistoryRequest":{"fields":{"channel":{"type":"string","id":1},"use_since":{"type":"bool","id":2},"offset":{"type":"uint64","id":3},"epoch":{"type":"string","id":4},"use_limit":{"type":"bool","id":5},"limit":{"type":"int32","id":6}}},"HistoryResult":{"fields":{"publications":{"rule":"repeated","type":"Publication","id":1},"epoch":{"type":"string","id":2},"offset":{"type":"uint64","id":3}}},"PingRequest":{"fields":{}},"PingResult":{"fields":{}},"RPCRequest":{"fields":{"data":{"type":"bytes","id":1},"method":{"type":"string","id":2}}},"RPCResult":{"fields":{"data":{"type":"bytes","id":1}}},"SendRequest":{"fields":{"data":{"type":"bytes","id":1}}}}}}}')}},__webpack_module_cache__={};function __webpack_require__(e){if(__webpack_module_cache__[e])return __webpack_module_cache__[e].exports;var t=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e].call(t.exports,t,t.exports,__webpack_require__),t.exports}return __webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__(714)}()})); +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Centrifuge",[],t):"object"==typeof exports?exports.Centrifuge=t():e.Centrifuge=t()}(this,(function(){return function(){"use strict";var __webpack_modules__={537:function(e){e.exports=function(e,t){for(var r=new Array(arguments.length-1),n=0,i=2,s=!0;i1&&"="===e.charAt(t);)++r;return Math.ceil(3*e.length)/4-r};for(var n=new Array(64),i=new Array(123),s=0;s<64;)i[n[s]=s<26?s+65:s<52?s+71:s<62?s-4:s-59|43]=s++;r.encode=function(e,t,r){for(var i,s=null,o=[],u=0,a=0;t>2],i=(3&c)<<4,a=1;break;case 1:o[u++]=n[i|c>>4],i=(15&c)<<2,a=2;break;case 2:o[u++]=n[i|c>>6],o[u++]=n[63&c],a=0}u>8191&&((s||(s=[])).push(String.fromCharCode.apply(String,o)),u=0)}return a&&(o[u++]=n[i],o[u++]=61,1===a&&(o[u++]=61)),s?(u&&s.push(String.fromCharCode.apply(String,o.slice(0,u))),s.join("")):String.fromCharCode.apply(String,o.slice(0,u))};var o="invalid encoding";r.decode=function(e,t,r){for(var n,s=r,u=0,a=0;a1)break;if(void 0===(c=i[c]))throw Error(o);switch(u){case 0:n=c,u=1;break;case 1:t[r++]=n<<2|(48&c)>>4,n=c,u=2;break;case 2:t[r++]=(15&n)<<4|(60&c)>>2,n=c,u=3;break;case 3:t[r++]=(3&n)<<6|c,u=0}}if(1===u)throw Error(o);return r-s},r.test=function(e){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(e)}},124:function(e){function t(e,r){"string"==typeof e&&(r=e,e=void 0);var n=[];function i(e){if("string"!=typeof e){var r=s();if(t.verbose&&console.log("codegen: "+r),r="return "+r,e){for(var o=Object.keys(e),u=new Array(o.length+1),a=new Array(o.length),c=0;c0?0:2147483648,r,n);else if(isNaN(t))e(2143289344,r,n);else if(t>34028234663852886e22)e((i<<31|2139095040)>>>0,r,n);else if(t<11754943508222875e-54)e((i<<31|Math.round(t/1401298464324817e-60))>>>0,r,n);else{var s=Math.floor(Math.log(t)/Math.LN2);e((i<<31|s+127<<23|8388607&Math.round(t*Math.pow(2,-s)*8388608))>>>0,r,n)}}function o(e,t,r){var n=e(t,r),i=2*(n>>31)+1,s=n>>>23&255,o=8388607&n;return 255===s?o?NaN:i*(1/0):0===s?1401298464324817e-60*i*o:i*Math.pow(2,s-150)*(o+8388608)}e.writeFloatLE=t.bind(null,r),e.writeFloatBE=t.bind(null,n),e.readFloatLE=o.bind(null,i),e.readFloatBE=o.bind(null,s)}(),"undefined"!=typeof Float64Array?function(){var t=new Float64Array([-0]),r=new Uint8Array(t.buffer),n=128===r[7];function i(e,n,i){t[0]=e,n[i]=r[0],n[i+1]=r[1],n[i+2]=r[2],n[i+3]=r[3],n[i+4]=r[4],n[i+5]=r[5],n[i+6]=r[6],n[i+7]=r[7]}function s(e,n,i){t[0]=e,n[i]=r[7],n[i+1]=r[6],n[i+2]=r[5],n[i+3]=r[4],n[i+4]=r[3],n[i+5]=r[2],n[i+6]=r[1],n[i+7]=r[0]}function o(e,n){return r[0]=e[n],r[1]=e[n+1],r[2]=e[n+2],r[3]=e[n+3],r[4]=e[n+4],r[5]=e[n+5],r[6]=e[n+6],r[7]=e[n+7],t[0]}function u(e,n){return r[7]=e[n],r[6]=e[n+1],r[5]=e[n+2],r[4]=e[n+3],r[3]=e[n+4],r[2]=e[n+5],r[1]=e[n+6],r[0]=e[n+7],t[0]}e.writeDoubleLE=n?i:s,e.writeDoubleBE=n?s:i,e.readDoubleLE=n?o:u,e.readDoubleBE=n?u:o}():function(){function t(e,t,r,n,i,s){var o=n<0?1:0;if(o&&(n=-n),0===n)e(0,i,s+t),e(1/n>0?0:2147483648,i,s+r);else if(isNaN(n))e(0,i,s+t),e(2146959360,i,s+r);else if(n>17976931348623157e292)e(0,i,s+t),e((o<<31|2146435072)>>>0,i,s+r);else{var u;if(n<22250738585072014e-324)e((u=n/5e-324)>>>0,i,s+t),e((o<<31|u/4294967296)>>>0,i,s+r);else{var a=Math.floor(Math.log(n)/Math.LN2);1024===a&&(a=1023),e(4503599627370496*(u=n*Math.pow(2,-a))>>>0,i,s+t),e((o<<31|a+1023<<20|1048576*u&1048575)>>>0,i,s+r)}}}function o(e,t,r,n,i){var s=e(n,i+t),o=e(n,i+r),u=2*(o>>31)+1,a=o>>>20&2047,c=4294967296*(1048575&o)+s;return 2047===a?c?NaN:u*(1/0):0===a?5e-324*u*c:u*Math.pow(2,a-1075)*(c+4503599627370496)}e.writeDoubleLE=t.bind(null,r,0,4),e.writeDoubleBE=t.bind(null,n,4,0),e.readDoubleLE=o.bind(null,i,0,4),e.readDoubleBE=o.bind(null,s,4,0)}(),e}function r(e,t,r){t[r]=255&e,t[r+1]=e>>>8&255,t[r+2]=e>>>16&255,t[r+3]=e>>>24}function n(e,t,r){t[r]=e>>>24,t[r+1]=e>>>16&255,t[r+2]=e>>>8&255,t[r+3]=255&e}function i(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0}function s(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}e.exports=t(t)},199:function(module){function inquire(moduleName){try{var mod=eval("quire".replace(/^/,"re"))(moduleName);if(mod&&(mod.length||Object.keys(mod).length))return mod}catch(e){}return null}module.exports=inquire},626:function(e,t){var r=t,n=r.isAbsolute=function(e){return/^(?:\/|\w+:)/.test(e)},i=r.normalize=function(e){var t=(e=e.replace(/\\/g,"/").replace(/\/{2,}/g,"/")).split("/"),r=n(e),i="";r&&(i=t.shift()+"/");for(var s=0;s0&&".."!==t[s-1]?t.splice(--s,2):r?t.splice(s,1):++s:"."===t[s]?t.splice(s,1):++s;return i+t.join("/")};r.resolve=function(e,t,r){return r||(t=i(t)),n(t)?t:(r||(e=i(e)),(e=e.replace(/(?:\/|^)[^/]+$/,"")).length?i(e+"/"+t):t)}},662:function(e){e.exports=function(e,t,r){var n=r||8192,i=n>>>1,s=null,o=n;return function(r){if(r<1||r>i)return e(r);o+r>n&&(s=e(n),o=0);var u=t.call(s,o,o+=r);return 7&o&&(o=1+(7|o)),u}}},997:function(e,t){var r=t;r.length=function(e){for(var t=0,r=0,n=0;n191&&n<224?s[o++]=(31&n)<<6|63&e[t++]:n>239&&n<365?(n=((7&n)<<18|(63&e[t++])<<12|(63&e[t++])<<6|63&e[t++])-65536,s[o++]=55296+(n>>10),s[o++]=56320+(1023&n)):s[o++]=(15&n)<<12|(63&e[t++])<<6|63&e[t++],o>8191&&((i||(i=[])).push(String.fromCharCode.apply(String,s)),o=0);return i?(o&&i.push(String.fromCharCode.apply(String,s.slice(0,o))),i.join("")):String.fromCharCode.apply(String,s.slice(0,o))},r.write=function(e,t,r){for(var n,i,s=r,o=0;o>6|192,t[r++]=63&n|128):55296==(64512&n)&&56320==(64512&(i=e.charCodeAt(o+1)))?(n=65536+((1023&n)<<10)+(1023&i),++o,t[r++]=n>>18|240,t[r++]=n>>12&63|128,t[r++]=n>>6&63|128,t[r++]=63&n|128):(t[r++]=n>>12|224,t[r++]=n>>6&63|128,t[r++]=63&n|128);return r-s}},382:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),t.Centrifuge=void 0;var n=u(r(187)),i=u(r(471)),s=r(147),o=r(853);function u(e){return e&&e.__esModule?e:{default:e}}function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function c(e,t){for(var r=0;r0&&(u+="&"),u+=encodeURIComponent(c)+"="+encodeURIComponent(t[c]));for(var f in u.length>0&&(u="?"+u),a.open("POST",e+u,!0),"withCredentials"in a&&(a.withCredentials=!0),a.setRequestHeader("X-Requested-With","XMLHttpRequest"),a.setRequestHeader("Content-Type","application/json"),n)n.hasOwnProperty(f)&&a.setRequestHeader(f,n[f]);return a.onreadystatechange=function(){if(4===a.readyState)if(200===a.status){var e,t=!1;try{e=JSON.parse(a.responseText),t=!0}catch(e){s({error:"Invalid JSON. Data was: "+a.responseText,status:200,data:null})}t&&s({data:e,status:200})}else o._log("wrong status code in AJAX response",a.status),s({status:a.status,data:null})},setTimeout((function(){return a.send(JSON.stringify(i))}),20),a}},{key:"_log",value:function(){(0,o.log)("info",arguments)}},{key:"_debug",value:function(){!0===this._config.debug&&(0,o.log)("debug",arguments)}},{key:"_websocketSupported",value:function(){return null!==this._config.websocket||!("function"!=typeof WebSocket&&"object"!==("undefined"==typeof WebSocket?"undefined":a(WebSocket)))}},{key:"_setFormat",value:function(e){if(!this._formatOverride(e)){if("protobuf"===e)throw new Error("not implemented by JSON only Centrifuge client – use client with Protobuf");this._binary=!1,this._methodType=s.JsonMethodType,this._pushType=s.JsonPushType,this._encoder=new s.JsonEncoder,this._decoder=new s.JsonDecoder}}},{key:"_formatOverride",value:function(e){return!1}},{key:"_configure",value:function(e){if(!("Promise"in r.g))throw new Error("Promise polyfill required");if((0,o.extend)(this._config,e||{}),this._debug("centrifuge config",this._config),!this._url)throw new Error("url required");if((0,o.startsWith)(this._url,"ws")&&this._url.indexOf("format=protobuf")>-1?this._setFormat("protobuf"):this._setFormat("json"),(0,o.startsWith)(this._url,"http"))if(this._debug("client will try to connect to SockJS endpoint"),null!==this._config.sockjs)this._debug("SockJS explicitly provided in options"),this._sockjs=this._config.sockjs;else{if(void 0===r.g.SockJS)throw new Error("SockJS not found, use ws:// in url or include SockJS");this._debug("use globally defined SockJS"),this._sockjs=r.g.SockJS}else this._debug("client will connect to websocket endpoint")}},{key:"_setStatus",value:function(e){this._status!==e&&(this._debug("Status",this._status,"->",e),this._status=e)}},{key:"_isDisconnected",value:function(){return"disconnected"===this._status}},{key:"_isConnecting",value:function(){return"connecting"===this._status}},{key:"_isConnected",value:function(){return"connected"===this._status}},{key:"_nextMessageId",value:function(){return++this._messageId}},{key:"_resetRetry",value:function(){this._debug("reset retries count to 0"),this._retries=0}},{key:"_getRetryInterval",value:function(){var e=(0,o.backoff)(this._retries,this._config.minRetry,this._config.maxRetry);return this._retries+=1,e}},{key:"_abortInflightXHRs",value:function(){for(var e in this._xhrs){try{this._xhrs[e].abort()}catch(e){this._debug("error aborting xhr",e)}delete this._xhrs[e]}}},{key:"_clearConnectedState",value:function(e){for(var t in this._clientID=null,this._stopPing(),this._callbacks)if(this._callbacks.hasOwnProperty(t)){var r=this._callbacks[t];clearTimeout(r.timeout);var n=r.errback;if(!n)continue;n({error:this._createErrorObject("disconnected")})}for(var i in this._callbacks={},this._subs)if(this._subs.hasOwnProperty(i)){var s=this._subs[i];e?(s._isSuccess()&&(s._triggerUnsubscribe(),s._recover=!0),s._shouldResubscribe()&&s._setSubscribing()):s._setUnsubscribed()}for(var o in this._abortInflightXHRs(),null!==this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),this._subRefreshTimeouts)this._subRefreshTimeouts.hasOwnProperty(o)&&this._subRefreshTimeouts[o]&&this._clearSubRefreshTimeout(o);this._subRefreshTimeouts={},this._reconnect||(this._subs={})}},{key:"_isTransportOpen",value:function(){return this._isSockjs?this._transport&&this._transport.transport&&this._transport.transport.readyState===this._transport.transport.OPEN:this._transport&&this._transport.readyState===this._transport.OPEN}},{key:"_transportSend",value:function(e){if(!e.length)return!0;if(!this._isTransportOpen()){for(var t in e){var r=t.id;if(r in this._callbacks){var n=this._callbacks[r];clearTimeout(this._callbacks[r].timeout),delete this._callbacks[r],(0,n.errback)({error:this._createErrorObject(d,0)})}}return!1}return this._transport.send(this._encoder.encodeCommands(e)),!0}},{key:"_setupTransport",value:function(){var e=this;if(this._isSockjs=!1,null!==this._sockjs){var t={transports:this._config.sockjsTransports};null!==this._config.sockjsServer&&(t.server=this._config.sockjsServer),this._isSockjs=!0,this._transport=new this._sockjs(this._url,null,t)}else{if(!this._websocketSupported())return void this._debug("No Websocket support and no SockJS configured, can not connect");null!==this._config.websocket?this._websocket=this._config.websocket:this._websocket=WebSocket,this._transport=new this._websocket(this._url),!0===this._binary&&(this._transport.binaryType="arraybuffer")}this._transport.onopen=function(){e._transportClosed=!1,e._isSockjs?(e._transportName="sockjs-"+e._transport.transport,e._transport.onheartbeat=function(){return e._restartPing()}):e._transportName="websocket";var t={};(e._token||e._connectData||e._config.name||e._config.version)&&(t.params={}),e._token&&(t.params.token=e._token),e._connectData&&(t.params.data=e._connectData),e._config.name&&(t.params.name=e._config.name),e._config.version&&(t.params.version=e._config.version);var r={},n=!1;for(var i in e._serverSubs)if(e._serverSubs.hasOwnProperty(i)&&e._serverSubs[i].recoverable){n=!0;var s={recover:!0};e._serverSubs[i].seq||e._serverSubs[i].gen?(e._serverSubs[i].seq&&(s.seq=e._serverSubs[i].seq),e._serverSubs[i].gen&&(s.gen=e._serverSubs[i].gen)):e._serverSubs[i].offset&&(s.offset=e._serverSubs[i].offset),e._serverSubs[i].epoch&&(s.epoch=e._serverSubs[i].epoch),r[i]=s}n&&(t.params||(t.params={}),t.params.subs=r),e._latencyStart=new Date,e._call(t).then((function(t){e._connectResponse(e._decoder.decodeCommandResult(e._methodType.CONNECT,t.result),n),t.next&&t.next()}),(function(t){109===t.error.code&&(e._refreshRequired=!0),e._disconnect("connect error",!0),t.next&&t.next()}))},this._transport.onerror=function(t){e._debug("transport level error",t)},this._transport.onclose=function(t){e._transportClosed=!0;var r=d,n=!0;if(t&&"reason"in t&&t.reason)try{var i=JSON.parse(t.reason);e._debug("reason is an advice object",i),r=i.reason,n=i.reconnect}catch(n){r=t.reason,e._debug("reason is a plain string",r)}if(null!==e._config.onTransportClose&&e._config.onTransportClose({event:t,reason:r,reconnect:n}),e._disconnect(r,n),!0===e._reconnect){e._reconnecting=!0;var s=e._getRetryInterval();e._debug("reconnect after "+s+" milliseconds"),setTimeout((function(){!0===e._reconnect&&(e._refreshRequired?e._refresh():e._connect())}),s)}},this._transport.onmessage=function(t){e._dataReceived(t.data)}}},{key:"rpc",value:function(e){return this._rpc("",e)}},{key:"namedRPC",value:function(e,t){return this._rpc(e,t)}},{key:"_rpc",value:function(e,t){var r={data:t};""!==e&&(r.method=e);var n={method:this._methodType.RPC,params:r};return this._methodCall(n,(function(e){return e}))}},{key:"send",value:function(e){var t={method:this._methodType.SEND,params:{data:e}};return this.isConnected()&&this._transportSend([t])?Promise.resolve({}):Promise.reject(this._createErrorObject(d,0))}},{key:"_getHistoryParams",value:function(e,t){var r={channel:e};return void 0!==t&&(t.since&&(r.use_since=!0,t.since.offset&&(r.offset=t.since.offset),t.since.epoch&&(r.epoch=t.since.epoch)),void 0!==t.limit&&(r.use_limit=!0,r.limit=t.limit)),r}},{key:"_methodCall",value:function(e,t){var r=this;return this.isConnected()?new Promise((function(n,i){r._call(e).then((function(i){n(t(r._decoder.decodeCommandResult(e.method,i.result))),i.next&&i.next()}),(function(e){i(e.error),e.next&&e.next()}))})):Promise.reject(this._createErrorObject(d,0))}},{key:"publish",value:function(e,t){var r={method:this._methodType.PUBLISH,params:{channel:e,data:t}};return this._methodCall(r,(function(){return{}}))}},{key:"history",value:function(e,t){var r=this._getHistoryParams(e,t),n={method:this._methodType.HISTORY,params:r};return this._methodCall(n,(function(e){return{publications:e.publications,epoch:e.epoch||"",offset:e.offset||0}}))}},{key:"presence",value:function(e){var t={method:this._methodType.PRESENCE,params:{channel:e}};return this._methodCall(t,(function(e){return{presence:e.presence}}))}},{key:"presenceStats",value:function(e){var t={method:this._methodType.PRESENCE_STATS,params:{channel:e}};return this._methodCall(t,(function(e){return{num_users:e.num_users,num_clients:e.num_clients}}))}},{key:"_dataReceived",value:function(e){var t=this,r=this._decoder.decodeReplies(e);this._dispatchPromise=this._dispatchPromise.then((function(){var e;t._dispatchPromise=new Promise((function(t){e=t})),t._dispatchSynchronized(r,e)})),this._restartPing()}},{key:"_dispatchSynchronized",value:function(e,t){var r=this,n=Promise.resolve(),i=function(t){e.hasOwnProperty(t)&&(n=n.then((function(){return r._dispatchReply(e[t])})))};for(var s in e)i(s);n=n.then((function(){t()}))}},{key:"_dispatchReply",value:function(e){var t,r=new Promise((function(e){t=e}));if(null==e)return this._debug("dispatch: got undefined or null reply"),t(),r;var n=e.id;return n&&n>0?this._handleReply(e,t):this._handlePush(e.result,t),r}},{key:"_call",value:function(e){var t=this;return new Promise((function(r,n){var i=t._addMessage(e);t._registerCall(i,r,n)}))}},{key:"_connect",value:function(){this.isConnected()?this._debug("connect called when already connected"):"connecting"!==this._status&&(this._debug("start connecting"),this._setStatus("connecting"),this._clientID=null,this._reconnect=!0,this._setupTransport())}},{key:"_disconnect",value:function(e,t){var r=t||!1;if(!1===r&&(this._reconnect=!1),this._isDisconnected())r||this._clearConnectedState(r);else{if(this._clearConnectedState(r),this._debug("disconnected:",e,t),this._setStatus("disconnected"),this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),!1===this._reconnecting){for(var n in this._serverSubs)this._serverSubs.hasOwnProperty(n)&&this.emit("unsubscribe",{channel:n});this.emit("disconnect",{reason:e,reconnect:r})}!1===r&&(this._subs={},this._serverSubs={}),this._transportClosed||this._transport.close()}}},{key:"_refreshFailed",value:function(){this._numRefreshFailed=0,this._isDisconnected()||this._disconnect("refresh failed",!1),null!==this._config.onRefreshFailed&&this._config.onRefreshFailed()}},{key:"_refresh",value:function(){var e=this;if(this._debug("refresh token"),0===this._config.refreshAttempts)return this._debug("refresh attempts set to 0, do not send refresh request at all"),void this._refreshFailed();null!==this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null);var t=this._clientID,r=this._newXHRID(),n=function(n){if(r in e._xhrs&&delete e._xhrs[r],e._clientID===t)if(n.error||200!==n.status){if(n.error?e._debug("error refreshing connection token",n.error):e._debug("error refreshing connection token: wrong status code",n.status),e._numRefreshFailed++,null!==e._refreshTimeout&&(clearTimeout(e._refreshTimeout),e._refreshTimeout=null),null!==e._config.refreshAttempts&&e._numRefreshFailed>=e._config.refreshAttempts)return void e._refreshFailed();var i=Math.round(1e3*Math.random()*Math.max(e._numRefreshFailed,20)),s=e._config.refreshInterval+i;e._refreshTimeout=setTimeout((function(){return e._refresh()}),s)}else if(e._numRefreshFailed=0,e._token=n.data.token,e._token)if(e._isDisconnected()&&e._reconnect)e._debug("token refreshed, connect from scratch"),e._connect();else{e._debug("send refreshed token");var o={method:e._methodType.REFRESH,params:{token:e._token}};e._call(o).then((function(t){e._refreshResponse(e._decoder.decodeCommandResult(e._methodType.REFRESH,t.result)),t.next&&t.next()}),(function(t){e._refreshError(t.error),t.next&&t.next()}))}else e._refreshFailed()};if(null!==this._config.onRefresh)this._config.onRefresh({},n);else{var i=this._ajax(this._config.refreshEndpoint,this._config.refreshParams,this._config.refreshHeaders,this._config.refreshData,n);this._xhrs[r]=i}}},{key:"_refreshError",value:function(e){var t=this;this._debug("refresh error",e),this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null);var r=this._config.refreshInterval+Math.round(1e3*Math.random());this._refreshTimeout=setTimeout((function(){return t._refresh()}),r)}},{key:"_refreshResponse",value:function(e){var t=this;this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),e.expires&&(this._clientID=e.client,this._refreshTimeout=setTimeout((function(){return t._refresh()}),this._getTTLMilliseconds(e.ttl)))}},{key:"_newXHRID",value:function(){return this._xhrID++,this._xhrID}},{key:"_subRefresh",value:function(e){var t=this;if(this._debug("refresh subscription token for channel",e),void 0!==this._subRefreshTimeouts[e]){this._clearSubRefreshTimeout(e);var r=this._clientID,n=this._newXHRID(),i=function(i){if(n in t._xhrs&&delete t._xhrs[n],!i.error&&200===i.status&&t._clientID===r){var s={};if(i.data.channels)for(var o in i.data.channels){var u=i.data.channels[o];u.channel&&(s[u.channel]=u.token)}var a=s[e];if(a){var c={method:t._methodType.SUB_REFRESH,params:{channel:e,token:a}};null!==t._getSub(e)&&t._call(c).then((function(r){t._subRefreshResponse(e,t._decoder.decodeCommandResult(t._methodType.SUB_REFRESH,r.result)),r.next&&r.next()}),(function(r){t._subRefreshError(e,r.error),r.next&&r.next()}))}}},s={client:this._clientID,channels:[e]};if(null!==this._config.onPrivateSubscribe)this._config.onPrivateSubscribe({data:s},i);else{var o=this._ajax(this._config.subscribeEndpoint,this._config.subscribeParams,this._config.subscribeHeaders,s,i);this._xhrs[n]=o}}}},{key:"_clearSubRefreshTimeout",value:function(e){void 0!==this._subRefreshTimeouts[e]&&(clearTimeout(this._subRefreshTimeouts[e]),delete this._subRefreshTimeouts[e])}},{key:"_subRefreshError",value:function(e,t){var r=this;if(this._debug("subscription refresh error",e,t),this._clearSubRefreshTimeout(e),null!==this._getSub(e)){var n=Math.round(1e3*Math.random()),i=setTimeout((function(){return r._subRefresh(e)}),this._config.subRefreshInterval+n);this._subRefreshTimeouts[e]=i}}},{key:"_subRefreshResponse",value:function(e,t){var r=this;if(this._debug("subscription refresh success",e),this._clearSubRefreshTimeout(e),null!==this._getSub(e)&&!0===t.expires){var n=setTimeout((function(){return r._subRefresh(e)}),this._getTTLMilliseconds(t.ttl));this._subRefreshTimeouts[e]=n}}},{key:"_subscribe",value:function(e,t){var r=this;this._debug("subscribing on",e.channel);var n=e.channel;if(n in this._subs||(this._subs[n]=e),this.isConnected()){e._setSubscribing(t);var i={method:this._methodType.SUBSCRIBE,params:{channel:n}};if((0,o.startsWith)(n,this._config.privateChannelPrefix))this._isSubscribeBatching?this._privateChannels[n]=!0:(this.startSubscribeBatching(),this._subscribe(e),this.stopSubscribeBatching());else{var s=e._needRecover();if(!0===s){i.params.recover=!0;var u=this._getLastSeq(n),a=this._getLastGen(n);if(u||a)u&&(i.params.seq=u),a&&(i.params.gen=a);else{var c=this._getLastOffset(n);c&&(i.params.offset=c)}var f=this._getLastEpoch(n);f&&(i.params.epoch=f)}this._call(i).then((function(e){r._subscribeResponse(n,s,r._decoder.decodeCommandResult(r._methodType.SUBSCRIBE,e.result)),e.next&&e.next()}),(function(e){r._subscribeError(n,e.error),e.next&&e.next()}))}}else e._setNew()}},{key:"_unsubscribe",value:function(e){delete this._subs[e.channel],delete this._lastOffset[e.channel],delete this._lastSeq[e.channel],delete this._lastGen[e.channel],this.isConnected()&&this._addMessage({method:this._methodType.UNSUBSCRIBE,params:{channel:e.channel}})}},{key:"_getTTLMilliseconds",value:function(e){return Math.min(1e3*e,2147483647)}},{key:"getSub",value:function(e){return this._getSub(e)}},{key:"_getSub",value:function(e){return this._subs[e]||null}},{key:"_isServerSub",value:function(e){return void 0!==this._serverSubs[e]}},{key:"_connectResponse",value:function(e,t){var r=this,n=this._reconnecting;if(this._reconnecting=!1,this._resetRetry(),this._refreshRequired=!1,!this.isConnected()){for(var i in null!==this._latencyStart&&(this._latency=(new Date).getTime()-this._latencyStart.getTime(),this._latencyStart=null),this._clientID=e.client,this._setStatus("connected"),this._refreshTimeout&&clearTimeout(this._refreshTimeout),e.expires&&(this._refreshTimeout=setTimeout((function(){return r._refresh()}),this._getTTLMilliseconds(e.ttl))),this.startBatching(),this.startSubscribeBatching(),this._subs)if(this._subs.hasOwnProperty(i)){var s=this._subs[i];s._shouldResubscribe()&&this._subscribe(s,n)}this.stopSubscribeBatching(),this.stopBatching(),this._startPing();var o={client:e.client,transport:this._transportName,latency:this._latency};e.data&&(o.data=e.data),this.emit("connect",o),e.subs&&this._processServerSubs(e.subs)}}},{key:"_processServerSubs",value:function(e){for(var t in e)if(e.hasOwnProperty(t)){var r=e[t],n={channel:t,isResubscribe:void 0!==this._serverSubs[t]};n=this._expandSubscribeContext(n,r),this.emit("subscribe",n)}for(var i in e)if(e.hasOwnProperty(i)){var s=e[i];if(s.recovered){var o=s.publications;if(o&&o.length>0)for(var u in o.length>1&&(!o[0].offset||o[0].offset>o[1].offset)&&(o=o.reverse()),o)o.hasOwnProperty(u)&&this._handlePublication(i,o[u])}this._serverSubs[i]={seq:s.seq,gen:s.gen,offset:s.offset,epoch:s.epoch,recoverable:s.recoverable}}}},{key:"_stopPing",value:function(){null!==this._pongTimeout&&(clearTimeout(this._pongTimeout),this._pongTimeout=null),null!==this._pingTimeout&&(clearTimeout(this._pingTimeout),this._pingTimeout=null)}},{key:"_startPing",value:function(){var e=this;!0!==this._config.ping||this._config.pingInterval<=0||this.isConnected()&&(this._pingTimeout=setTimeout((function(){e.isConnected()?(e.ping(),e._pongTimeout=setTimeout((function(){e._disconnect("no ping",!0)}),e._config.pongWaitTimeout)):e._stopPing()}),this._config.pingInterval))}},{key:"_restartPing",value:function(){this._stopPing(),this._startPing()}},{key:"_subscribeError",value:function(e,t){var r=this._getSub(e);r&&r._isSubscribing()&&(0!==t.code||t.message!==p?r._setSubscribeError(t):this._disconnect("timeout",!0))}},{key:"_expandSubscribeContext",value:function(e,t){var r=!1;"recovered"in t&&(r=t.recovered),e.recovered=r;var n=!1;"positioned"in t&&(n=t.positioned);var i="";"epoch"in t&&(i=t.epoch);var s=0;return"offset"in t&&(s=t.offset),n&&(e.streamPosition={offset:s,epoch:i}),t.data&&(e.data=t.data),e}},{key:"_subscribeResponse",value:function(e,t,r){var n=this,i=this._getSub(e);if(i&&i._isSubscribing()){i._setSubscribeSuccess(r);var s=r.publications;if(s&&s.length>0)for(var o in s.length>=2&&!s[0].offset&&!s[1].offset&&(s=s.reverse()),s)s.hasOwnProperty(o)&&this._handlePublication(e,s[o]);if(!r.recoverable||t&&r.recovered||(this._lastSeq[e]=r.seq||0,this._lastGen[e]=r.gen||0,this._lastOffset[e]=r.offset||0),this._lastEpoch[e]=r.epoch||"",r.recoverable&&(i._recoverable=!0),!0===r.expires){var u=setTimeout((function(){return n._subRefresh(e)}),this._getTTLMilliseconds(r.ttl));this._subRefreshTimeouts[e]=u}}}},{key:"_handleReply",value:function(e,t){var r=e.id,n=e.result;if(r in this._callbacks){var i=this._callbacks[r];if(clearTimeout(this._callbacks[r].timeout),delete this._callbacks[r],(0,o.errorExists)(e)){var s=i.errback;if(!s)return void t();s({error:e.error,next:t})}else{var u=i.callback;if(!u)return;u({result:n,next:t})}}else t()}},{key:"_handleJoin",value:function(e,t){var r={info:t.info},n=this._getSub(e);n?n.emit("join",r):this._isServerSub(e)&&(r.channel=e,this.emit("join",r))}},{key:"_handleLeave",value:function(e,t){var r={info:t.info},n=this._getSub(e);n?n.emit("leave",r):this._isServerSub(e)&&(r.channel=e,this.emit("leave",r))}},{key:"_handleUnsub",value:function(e,t){var r={},n=this._getSub(e);n?(n.unsubscribe(),!0===t.resubscribe&&n.subscribe()):this._isServerSub(e)&&(delete this._serverSubs[e],r.channel=e,this.emit("unsubscribe",r))}},{key:"_handleSub",value:function(e,t){this._serverSubs[e]={seq:t.seq,gen:t.gen,offset:t.offset,epoch:t.epoch,recoverable:t.recoverable};var r={channel:e,isResubscribe:!1};r=this._expandSubscribeContext(r,t),this.emit("subscribe",r)}},{key:"_handlePublication",value:function(e,t){var r=this._getSub(e),n={data:t.data,seq:t.seq,gen:t.gen,offset:t.offset};t.info&&(n.info=t.info),r?(void 0!==t.seq&&(this._lastSeq[e]=t.seq),void 0!==t.gen&&(this._lastGen[e]=t.gen),void 0!==t.offset&&(this._lastOffset[e]=t.offset),r.emit("publish",n)):this._isServerSub(e)&&(void 0!==t.seq&&(this._serverSubs[e].seq=t.seq),void 0!==t.gen&&(this._serverSubs[e].gen=t.gen),void 0!==t.offset&&(this._serverSubs[e].offset=t.offset),n.channel=e,this.emit("publish",n))}},{key:"_handleMessage",value:function(e){this.emit("message",e.data)}},{key:"_handlePush",value:function(e,t){var r=this._decoder.decodePush(e),n=0;"type"in r&&(n=r.type);var i=r.channel;if(n===this._pushType.PUBLICATION){var s=this._decoder.decodePushData(this._pushType.PUBLICATION,r.data);this._handlePublication(i,s)}else if(n===this._pushType.MESSAGE){var o=this._decoder.decodePushData(this._pushType.MESSAGE,r.data);this._handleMessage(o)}else if(n===this._pushType.JOIN){var u=this._decoder.decodePushData(this._pushType.JOIN,r.data);this._handleJoin(i,u)}else if(n===this._pushType.LEAVE){var a=this._decoder.decodePushData(this._pushType.LEAVE,r.data);this._handleLeave(i,a)}else if(n===this._pushType.UNSUB){var c=this._decoder.decodePushData(this._pushType.UNSUB,r.data);this._handleUnsub(i,c)}else if(n===this._pushType.SUB){var f=this._decoder.decodePushData(this._pushType.SUB,r.data);this._handleSub(i,f)}t()}},{key:"_flush",value:function(){var e=this._messages.slice(0);this._messages=[],this._transportSend(e)}},{key:"_ping",value:function(){var e=this,t={method:this._methodType.PING};this._call(t).then((function(t){e._pingResponse(e._decoder.decodeCommandResult(e._methodType.PING,t.result)),t.next&&t.next()}),(function(t){e._debug("ping error",t.error),t.next&&t.next()}))}},{key:"_pingResponse",value:function(e){this.isConnected()&&(this._stopPing(),this._startPing())}},{key:"_getLastSeq",value:function(e){return this._lastSeq[e]||0}},{key:"_getLastOffset",value:function(e){return this._lastOffset[e]||0}},{key:"_getLastGen",value:function(e){return this._lastGen[e]||0}},{key:"_getLastEpoch",value:function(e){return this._lastEpoch[e]||""}},{key:"_createErrorObject",value:function(e,t){return{message:e,code:t||0}}},{key:"_registerCall",value:function(e,t,r){var n=this;this._callbacks[e]={callback:t,errback:r,timeout:null},this._callbacks[e].timeout=setTimeout((function(){delete n._callbacks[e],(0,o.isFunction)(r)&&r({error:n._createErrorObject(p)})}),this._config.timeout)}},{key:"_addMessage",value:function(e){var t=this._nextMessageId();return e.id=t,!0===this._isBatching?this._messages.push(e):this._transportSend([e]),t}},{key:"isConnected",value:function(){return this._isConnected()}},{key:"connect",value:function(){this._connect()}},{key:"disconnect",value:function(){this._disconnect("client",!1)}},{key:"ping",value:function(){return this._ping()}},{key:"startBatching",value:function(){this._isBatching=!0}},{key:"stopBatching",value:function(){this._isBatching=!1,this._flush()}},{key:"startSubscribeBatching",value:function(){this._isSubscribeBatching=!0}},{key:"stopSubscribeBatching",value:function(){var e=this;this._isSubscribeBatching=!1;var t=this._privateChannels;this._privateChannels={};var r=[];for(var n in t)if(t.hasOwnProperty(n)){if(!this._getSub(n))continue;r.push(n)}if(0!==r.length){var i={client:this._clientID,channels:r},s=this._clientID,o=this._newXHRID(),u=function(t){if(o in e._xhrs&&delete e._xhrs[o],e._clientID===s)if(t.error||200!==t.status){for(var n in e._debug("authorization request failed"),r)if(r.hasOwnProperty(n)){var i=r[n];e._subscribeError(i,e._createErrorObject("authorization request failed"))}}else{var u={};if(t.data.channels)for(var a in t.data.channels){var c=t.data.channels[a];c.channel&&(u[c.channel]=c.token)}var f=!1;for(var l in e._isBatching||(e.startBatching(),f=!0),r)!r.hasOwnProperty(l)||function(){var t=r[l],n=u[t];if(!n)return e._subscribeError(t,e._createErrorObject("permission denied",103)),"continue";var i={method:e._methodType.SUBSCRIBE,params:{channel:t,token:n}},s=e._getSub(t);if(null===s)return"continue";var o=s._needRecover();if(!0===o){i.params.recover=!0;var a=e._getLastSeq(t),c=e._getLastGen(t);if(a||c)a&&(i.params.seq=a),c&&(i.params.gen=c);else{var f=e._getLastOffset(t);f&&(i.params.offset=f)}var h=e._getLastEpoch(t);h&&(i.params.epoch=h)}e._call(i).then((function(r){e._subscribeResponse(t,o,e._decoder.decodeCommandResult(e._methodType.SUBSCRIBE,r.result)),r.next&&r.next()}),(function(r){e._subscribeError(t,r.error),r.next&&r.next()}))}();f&&e.stopBatching()}};if(null!==this._config.onPrivateSubscribe)this._config.onPrivateSubscribe({data:i},u);else{var a=this._ajax(this._config.subscribeEndpoint,this._config.subscribeParams,this._config.subscribeHeaders,i,u);this._xhrs[o]=a}}else this._debug("no private channels found, no need to make request")}},{key:"subscribe",value:function(e,t){var r=this._getSub(e);if(null!==r)return r._setEvents(t),r._isUnsubscribed()&&r.subscribe(),r;var n=new i.default(this,e,t);return this._subs[e]=n,n.subscribe(),n}}])&&c(t.prototype,n),_}(n.default);t.Centrifuge=y},714:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(885).CentrifugeProtobuf;t.default=n,e.exports=t.default},147:function(e,t){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var r=0;r0&&o.length>i&&!o.warned){o.warned=!0;var f=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");f.name="MaxListenersExceededWarning",f.emitter=e,f.type=t,f.count=o.length,c=f,console&&console.warn&&console.warn(c)}return e}function f(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function l(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},i=f.bind(n);return i.listener=r,n.wrapFn=i,i}function h(e,t,r){var n=e._events;if(void 0===n)return[];var i=n[t];return void 0===i?[]:"function"==typeof i?r?[i.listener||i]:[i]:r?function(e){for(var t=new Array(e.length),r=0;r0&&(o=t[0]),o instanceof Error)throw o;var u=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw u.context=o,u}var a=s[e];if(void 0===a)return!1;if("function"==typeof a)n(a,this,t);else{var c=a.length,f=d(a,c);for(r=0;r=0;s--)if(r[s]===t||r[s].listener===t){o=r[s].listener,i=s;break}if(i<0)return this;0===i?r.shift():function(e,t){for(;t+1=0;n--)this.removeListener(e,t[n]);return this},s.prototype.listeners=function(e){return h(this,e,!0)},s.prototype.rawListeners=function(e){return h(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},s.prototype.listenerCount=p,s.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},492:function(e,t,r){e.exports=r(836)},996:function(e,t,r){var n=t,i=r(25),s=r(935);function o(e,t,r,n){if(t.resolvedType)if(t.resolvedType instanceof i){e("switch(d%s){",n);for(var s=t.resolvedType.values,o=Object.keys(s),u=0;u>>0",n,n);break;case"int32":case"sint32":case"sfixed32":e("m%s=d%s|0",n,n);break;case"uint64":a=!0;case"int64":case"sint64":case"fixed64":case"sfixed64":e("if(util.Long)")("(m%s=util.Long.fromValue(d%s)).unsigned=%j",n,n,a)('else if(typeof d%s==="string")',n)("m%s=parseInt(d%s,10)",n,n)('else if(typeof d%s==="number")',n)("m%s=d%s",n,n)('else if(typeof d%s==="object")',n)("m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)",n,n,n,a?"true":"");break;case"bytes":e('if(typeof d%s==="string")',n)("util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)",n,n,n)("else if(d%s.length)",n)("m%s=d%s",n,n);break;case"string":e("m%s=String(d%s)",n,n);break;case"bool":e("m%s=Boolean(d%s)",n,n)}}return e}function u(e,t,r,n){if(t.resolvedType)t.resolvedType instanceof i?e("d%s=o.enums===String?types[%i].values[m%s]:m%s",n,r,n,n):e("d%s=types[%i].toObject(m%s,o)",n,r,n);else{var s=!1;switch(t.type){case"double":case"float":e("d%s=o.json&&!isFinite(m%s)?String(m%s):m%s",n,n,n,n);break;case"uint64":s=!0;case"int64":case"sint64":case"fixed64":case"sfixed64":e('if(typeof m%s==="number")',n)("d%s=o.longs===String?String(m%s):m%s",n,n,n)("else")("d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s",n,n,n,n,s?"true":"",n);break;case"bytes":e("d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s",n,n,n,n,n);break;default:e("d%s=m%s",n,n)}}return e}n.fromObject=function(e){var t=e.fieldsArray,r=s.codegen(["d"],e.name+"$fromObject")("if(d instanceof this.ctor)")("return d");if(!t.length)return r("return new this.ctor");r("var m=new this.ctor");for(var n=0;n>>3){");for(var r=0;r>>3){")("case 1: k=r.%s(); break",u.keyType)("case 2:"),void 0===i.basic[a]?t("value=types[%i].decode(r,r.uint32())",r):t("value=r.%s()",a),t("break")("default:")("r.skipType(tag2&7)")("break")("}")("}"),void 0!==i.long[u.keyType]?t('%s[typeof k==="object"?util.longToHash(k):k]=value',c):t("%s[k]=value",c)):u.repeated?(t("if(!(%s&&%s.length))",c,c)("%s=[]",c),void 0!==i.packed[a]&&t("if((t&7)===2){")("var c2=r.uint32()+r.pos")("while(r.pos>>0,8|i.mapKey[c.keyType],c.keyType),void 0===h?r("types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()",f,t):r(".uint32(%i).%s(%s[ks[i]]).ldelim()",16|h,l,t),r("}")("}")):c.repeated?(r("if(%s!=null&&%s.length){",t,t),c.packed&&void 0!==i.packed[l]?r("w.uint32(%i).fork()",(c.id<<3|2)>>>0)("for(var i=0;i<%s.length;++i)",t)("w.%s(%s[i])",l,t)("w.ldelim()"):(r("for(var i=0;i<%s.length;++i)",t),void 0===h?o(r,c,f,t+"[i]"):r("w.uint32(%i).%s(%s[i])",(c.id<<3|h)>>>0,l,t)),r("}")):(c.optional&&r("if(%s!=null&&Object.hasOwnProperty.call(m,%j))",t,c.name),void 0===h?o(r,c,f,t):r("w.uint32(%i).%s(%s)",(c.id<<3|h)>>>0,l,t))}return r("return w")};var n=r(25),i=r(63),s=r(935);function o(e,t,r,n){return t.resolvedType.group?e("types[%i].encode(%s,w.uint32(%i)).uint32(%i)",r,n,(t.id<<3|3)>>>0,(t.id<<3|4)>>>0):e("types[%i].encode(%s,w.uint32(%i).fork()).ldelim()",r,n,(t.id<<3|2)>>>0)}},25:function(e,t,r){e.exports=o;var n=r(243);((o.prototype=Object.create(n.prototype)).constructor=o).className="Enum";var i=r(313),s=r(935);function o(e,t,r,i,s){if(n.call(this,e,r),t&&"object"!=typeof t)throw TypeError("values must be an object");if(this.valuesById={},this.values=Object.create(this.valuesById),this.comment=i,this.comments=s||{},this.reserved=void 0,t)for(var o=Object.keys(t),u=0;ut)return!0;return!1},f.isReservedName=function(e,t){if(e)for(var r=0;r0;){var n=e.shift();if(r.nested&&r.nested[n]){if(!((r=r.nested[n])instanceof f))throw Error("path conflicts with non-namespace objects")}else r.add(r=new f(n))}return t&&r.addJSON(t),r},f.prototype.resolveAll=function(){for(var e=this.nestedArray,t=0;t-1)return n}else if(n instanceof f&&(n=n.lookup(e.slice(1),t,!0)))return n}else for(var i=0;i-1&&this.oneof.splice(t,1),e.partOf=null,this},o.prototype.onAdd=function(e){n.prototype.onAdd.call(this,e);for(var t=0;t "+e.len)}function a(e){this.buf=e,this.pos=0,this.len=e.length}var c,f="undefined"!=typeof Uint8Array?function(e){if(e instanceof Uint8Array||Array.isArray(e))return new a(e);throw Error("illegal buffer")}:function(e){if(Array.isArray(e))return new a(e);throw Error("illegal buffer")},l=function(){return i.Buffer?function(e){return(a.create=function(e){return i.Buffer.isBuffer(e)?new n(e):f(e)})(e)}:f};function h(){var e=new s(0,0),t=0;if(!(this.len-this.pos>4)){for(;t<3;++t){if(this.pos>=this.len)throw u(this);if(e.lo=(e.lo|(127&this.buf[this.pos])<<7*t)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(127&this.buf[this.pos++])<<7*t)>>>0,e}for(;t<4;++t)if(e.lo=(e.lo|(127&this.buf[this.pos])<<7*t)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(127&this.buf[this.pos])<<28)>>>0,e.hi=(e.hi|(127&this.buf[this.pos])>>4)>>>0,this.buf[this.pos++]<128)return e;if(t=0,this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(127&this.buf[this.pos])<<7*t+3)>>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw u(this);if(e.hi=(e.hi|(127&this.buf[this.pos])<<7*t+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}function p(e,t){return(e[t-4]|e[t-3]<<8|e[t-2]<<16|e[t-1]<<24)>>>0}function d(){if(this.pos+8>this.len)throw u(this,8);return new s(p(this.buf,this.pos+=4),p(this.buf,this.pos+=4))}a.create=l(),a.prototype._slice=i.Array.prototype.subarray||i.Array.prototype.slice,a.prototype.uint32=(c=4294967295,function(){if(c=(127&this.buf[this.pos])>>>0,this.buf[this.pos++]<128)return c;if(c=(c|(127&this.buf[this.pos])<<7)>>>0,this.buf[this.pos++]<128)return c;if(c=(c|(127&this.buf[this.pos])<<14)>>>0,this.buf[this.pos++]<128)return c;if(c=(c|(127&this.buf[this.pos])<<21)>>>0,this.buf[this.pos++]<128)return c;if(c=(c|(15&this.buf[this.pos])<<28)>>>0,this.buf[this.pos++]<128)return c;if((this.pos+=5)>this.len)throw this.pos=this.len,u(this,10);return c}),a.prototype.int32=function(){return 0|this.uint32()},a.prototype.sint32=function(){var e=this.uint32();return e>>>1^-(1&e)|0},a.prototype.bool=function(){return 0!==this.uint32()},a.prototype.fixed32=function(){if(this.pos+4>this.len)throw u(this,4);return p(this.buf,this.pos+=4)},a.prototype.sfixed32=function(){if(this.pos+4>this.len)throw u(this,4);return 0|p(this.buf,this.pos+=4)},a.prototype.float=function(){if(this.pos+4>this.len)throw u(this,4);var e=i.float.readFloatLE(this.buf,this.pos);return this.pos+=4,e},a.prototype.double=function(){if(this.pos+8>this.len)throw u(this,4);var e=i.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,e},a.prototype.bytes=function(){var e=this.uint32(),t=this.pos,r=this.pos+e;if(r>this.len)throw u(this,e);return this.pos+=e,Array.isArray(this.buf)?this.buf.slice(t,r):t===r?new this.buf.constructor(0):this._slice.call(this.buf,t,r)},a.prototype.string=function(){var e=this.bytes();return o.read(e,0,e.length)},a.prototype.skip=function(e){if("number"==typeof e){if(this.pos+e>this.len)throw u(this,e);this.pos+=e}else do{if(this.pos>=this.len)throw u(this)}while(128&this.buf[this.pos++]);return this},a.prototype.skipType=function(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;4!=(e=7&this.uint32());)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+e+" at offset "+this.pos)}return this},a._configure=function(e){n=e,a.create=l(),n._configure();var t=i.Long?"toLong":"toNumber";i.merge(a.prototype,{int64:function(){return h.call(this)[t](!1)},uint64:function(){return h.call(this)[t](!0)},sint64:function(){return h.call(this).zzDecode()[t](!1)},fixed64:function(){return d.call(this)[t](!0)},sfixed64:function(){return d.call(this)[t](!1)}})}},593:function(e,t,r){e.exports=s;var n=r(408);(s.prototype=Object.create(n.prototype)).constructor=s;var i=r(693);function s(e){n.call(this,e)}s._configure=function(){i.Buffer&&(s.prototype._slice=i.Buffer.prototype.slice)},s.prototype.string=function(){var e=this.uint32();return this.buf.utf8Slice?this.buf.utf8Slice(this.pos,this.pos=Math.min(this.pos+e,this.len)):this.buf.toString("utf-8",this.pos,this.pos=Math.min(this.pos+e,this.len))},s._configure()},424:function(e,t,r){e.exports=l;var n=r(313);((l.prototype=Object.create(n.prototype)).constructor=l).className="Root";var i,s,o,u=r(548),a=r(25),c=r(598),f=r(935);function l(e){n.call(this,"",e),this.deferred=[],this.files=[]}function h(){}l.fromJSON=function(e,t){return t||(t=new l),e.options&&t.setOptions(e.options),t.addJSON(e.nested)},l.prototype.resolvePath=f.path.resolve,l.prototype.fetch=f.fetch,l.prototype.load=function e(t,r,n){"function"==typeof r&&(n=r,r=void 0);var i=this;if(!n)return f.asPromise(e,i,t,r);var u=n===h;function a(e,t){if(n){var r=n;if(n=null,u)throw e;r(e,t)}}function c(e){var t=e.lastIndexOf("google/protobuf/");if(t>-1){var r=e.substring(t);if(r in o)return r}return null}function l(e,t){try{if(f.isString(t)&&"{"===t.charAt(0)&&(t=JSON.parse(t)),f.isString(t)){s.filename=e;var n,o=s(t,i,r),l=0;if(o.imports)for(;l-1))if(i.files.push(e),e in o)u?l(e,o[e]):(++d,setTimeout((function(){--d,l(e,o[e])})));else if(u){var r;try{r=f.fs.readFileSync(e).toString("utf8")}catch(e){return void(t||a(e))}l(e,r)}else++d,i.fetch(e,(function(r,s){--d,n&&(r?t?d||a(null,i):a(r):l(e,s))}))}var d=0;f.isString(t)&&(t=[t]);for(var y,v=0;v-1&&this.deferred.splice(t,1)}}else if(e instanceof a)p.test(e.name)&&delete e.parent[e.name];else if(e instanceof n){for(var r=0;r0)t[i]=e(t[i]||{},r,n);else{var s=t[i];s&&(n=[].concat(s).concat(n)),t[i]=n}return t}(e,t=t.split("."),r)},Object.defineProperty(s,"decorateRoot",{get:function(){return o.decorated||(o.decorated=new(r(424)))}})},630:function(e,t,r){e.exports=i;var n=r(693);function i(e,t){this.lo=e>>>0,this.hi=t>>>0}var s=i.zero=new i(0,0);s.toNumber=function(){return 0},s.zzEncode=s.zzDecode=function(){return this},s.length=function(){return 1};var o=i.zeroHash="\0\0\0\0\0\0\0\0";i.fromNumber=function(e){if(0===e)return s;var t=e<0;t&&(e=-e);var r=e>>>0,n=(e-r)/4294967296>>>0;return t&&(n=~n>>>0,r=~r>>>0,++r>4294967295&&(r=0,++n>4294967295&&(n=0))),new i(r,n)},i.from=function(e){if("number"==typeof e)return i.fromNumber(e);if(n.isString(e)){if(!n.Long)return i.fromNumber(parseInt(e,10));e=n.Long.fromString(e)}return e.low||e.high?new i(e.low>>>0,e.high>>>0):s},i.prototype.toNumber=function(e){if(!e&&this.hi>>>31){var t=1+~this.lo>>>0,r=~this.hi>>>0;return t||(r=r+1>>>0),-(t+4294967296*r)}return this.lo+4294967296*this.hi},i.prototype.toLong=function(e){return n.Long?new n.Long(0|this.lo,0|this.hi,Boolean(e)):{low:0|this.lo,high:0|this.hi,unsigned:Boolean(e)}};var u=String.prototype.charCodeAt;i.fromHash=function(e){return e===o?s:new i((u.call(e,0)|u.call(e,1)<<8|u.call(e,2)<<16|u.call(e,3)<<24)>>>0,(u.call(e,4)|u.call(e,5)<<8|u.call(e,6)<<16|u.call(e,7)<<24)>>>0)},i.prototype.toHash=function(){return String.fromCharCode(255&this.lo,this.lo>>>8&255,this.lo>>>16&255,this.lo>>>24,255&this.hi,this.hi>>>8&255,this.hi>>>16&255,this.hi>>>24)},i.prototype.zzEncode=function(){var e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this},i.prototype.zzDecode=function(){var e=-(1&this.lo);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this},i.prototype.length=function(){var e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,r=this.hi>>>24;return 0===r?0===t?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:r<128?9:10}},693:function(e,t,r){var n=t;function i(e,t,r){for(var n=Object.keys(t),i=0;i0)},n.Buffer=function(){try{var e=n.inquire("buffer").Buffer;return e.prototype.utf8Write?e:null}catch(e){return null}}(),n._Buffer_from=null,n._Buffer_allocUnsafe=null,n.newBuffer=function(e){return"number"==typeof e?n.Buffer?n._Buffer_allocUnsafe(e):new n.Array(e):n.Buffer?n._Buffer_from(e):"undefined"==typeof Uint8Array?e:new Uint8Array(e)},n.Array="undefined"!=typeof Uint8Array?Uint8Array:Array,n.Long=n.global.dcodeIO&&n.global.dcodeIO.Long||n.global.Long||n.inquire("long"),n.key2Re=/^true|false|0|1$/,n.key32Re=/^-?(?:0|[1-9][0-9]*)$/,n.key64Re=/^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/,n.longToHash=function(e){return e?n.LongBits.from(e).toHash():n.LongBits.zeroHash},n.longFromHash=function(e,t){var r=n.LongBits.fromHash(e);return n.Long?n.Long.fromBits(r.lo,r.hi,t):r.toNumber(Boolean(t))},n.merge=i,n.lcFirst=function(e){return e.charAt(0).toLowerCase()+e.substring(1)},n.newError=s,n.ProtocolError=s("ProtocolError"),n.oneOfGetter=function(e){for(var t={},r=0;r-1;--r)if(1===t[e[r]]&&void 0!==this[e[r]]&&null!==this[e[r]])return e[r]}},n.oneOfSetter=function(e){return function(t){for(var r=0;r>>7|e.hi<<25)>>>0,e.hi>>>=7;for(;e.lo>127;)t[r++]=127&e.lo|128,e.lo=e.lo>>>7;t[r++]=e.lo}function v(e,t,r){t[r]=255&e,t[r+1]=e>>>8&255,t[r+2]=e>>>16&255,t[r+3]=e>>>24}l.create=h(),l.alloc=function(e){return new i.Array(e)},i.Array!==Array&&(l.alloc=i.pool(l.alloc,i.Array.prototype.subarray)),l.prototype._push=function(e,t,r){return this.tail=this.tail.next=new a(e,t,r),this.len+=t,this},d.prototype=Object.create(a.prototype),d.prototype.fn=function(e,t,r){for(;e>127;)t[r++]=127&e|128,e>>>=7;t[r]=e},l.prototype.uint32=function(e){return this.len+=(this.tail=this.tail.next=new d((e>>>=0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this},l.prototype.int32=function(e){return e<0?this._push(y,10,s.fromNumber(e)):this.uint32(e)},l.prototype.sint32=function(e){return this.uint32((e<<1^e>>31)>>>0)},l.prototype.uint64=function(e){var t=s.from(e);return this._push(y,t.length(),t)},l.prototype.int64=l.prototype.uint64,l.prototype.sint64=function(e){var t=s.from(e).zzEncode();return this._push(y,t.length(),t)},l.prototype.bool=function(e){return this._push(p,1,e?1:0)},l.prototype.fixed32=function(e){return this._push(v,4,e>>>0)},l.prototype.sfixed32=l.prototype.fixed32,l.prototype.fixed64=function(e){var t=s.from(e);return this._push(v,4,t.lo)._push(v,4,t.hi)},l.prototype.sfixed64=l.prototype.fixed64,l.prototype.float=function(e){return this._push(i.float.writeFloatLE,4,e)},l.prototype.double=function(e){return this._push(i.float.writeDoubleLE,8,e)};var _=i.Array.prototype.set?function(e,t,r){t.set(e,r)}:function(e,t,r){for(var n=0;n>>0;if(!t)return this._push(p,1,0);if(i.isString(e)){var r=l.alloc(t=o.length(e));o.decode(e,r,0),e=r}return this.uint32(t)._push(_,t,e)},l.prototype.string=function(e){var t=u.length(e);return t?this.uint32(t)._push(u.write,t,e):this._push(p,1,0)},l.prototype.fork=function(){return this.states=new f(this),this.head=this.tail=new a(c,0,0),this.len=0,this},l.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new a(c,0,0),this.len=0),this},l.prototype.ldelim=function(){var e=this.head,t=this.tail,r=this.len;return this.reset().uint32(r),r&&(this.tail.next=e.next,this.tail=t,this.len+=r),this},l.prototype.finish=function(){for(var e=this.head.next,t=this.constructor.alloc(this.len),r=0;e;)e.fn(e.val,t,r),r+=e.len,e=e.next;return t},l._configure=function(e){n=e,l.create=h(),n._configure()}},155:function(e,t,r){e.exports=s;var n=r(173);(s.prototype=Object.create(n.prototype)).constructor=s;var i=r(693);function s(){n.call(this)}function o(e,t,r){e.length<40?i.utf8.write(e,t,r):t.utf8Write?t.utf8Write(e,r):t.write(e,r)}s._configure=function(){s.alloc=i._Buffer_allocUnsafe,s.writeBytesBuffer=i.Buffer&&i.Buffer.prototype instanceof Uint8Array&&"set"===i.Buffer.prototype.set.name?function(e,t,r){t.set(e,r)}:function(e,t,r){if(e.copy)e.copy(t,r,0,e.length);else for(var n=0;n>>0;return this.uint32(t),t&&this._push(s.writeBytesBuffer,t,e),this},s.prototype.string=function(e){var t=i.Buffer.byteLength(e);return this.uint32(t),t&&this._push(o,t,e),this},s._configure()},261:function(e){e.exports=JSON.parse('{"nested":{"protocol":{"nested":{"Error":{"fields":{"code":{"type":"uint32","id":1},"message":{"type":"string","id":2}}},"MethodType":{"values":{"CONNECT":0,"SUBSCRIBE":1,"UNSUBSCRIBE":2,"PUBLISH":3,"PRESENCE":4,"PRESENCE_STATS":5,"HISTORY":6,"PING":7,"SEND":8,"RPC":9,"REFRESH":10,"SUB_REFRESH":11}},"Command":{"fields":{"id":{"type":"uint32","id":1},"method":{"type":"MethodType","id":2},"params":{"type":"bytes","id":3}}},"Reply":{"fields":{"id":{"type":"uint32","id":1},"error":{"type":"Error","id":2},"result":{"type":"bytes","id":3}}},"PushType":{"values":{"PUBLICATION":0,"JOIN":1,"LEAVE":2,"UNSUB":3,"MESSAGE":4,"SUB":5}},"Push":{"fields":{"type":{"type":"PushType","id":1},"channel":{"type":"string","id":2},"data":{"type":"bytes","id":3}}},"ClientInfo":{"fields":{"user":{"type":"string","id":1},"client":{"type":"string","id":2},"conn_info":{"type":"bytes","id":3},"chan_info":{"type":"bytes","id":4}}},"Publication":{"fields":{"seq":{"type":"uint32","id":1},"gen":{"type":"uint32","id":2},"uid":{"type":"string","id":3},"data":{"type":"bytes","id":4},"info":{"type":"ClientInfo","id":5},"offset":{"type":"uint64","id":6}}},"Join":{"fields":{"info":{"type":"ClientInfo","id":1}}},"Leave":{"fields":{"info":{"type":"ClientInfo","id":1}}},"Unsub":{"fields":{"resubscribe":{"type":"bool","id":1}}},"Sub":{"fields":{"recoverable":{"type":"bool","id":1},"seq":{"type":"uint32","id":2},"gen":{"type":"uint32","id":3},"epoch":{"type":"string","id":4},"offset":{"type":"uint64","id":5},"positioned":{"type":"bool","id":6}}},"Message":{"fields":{"data":{"type":"bytes","id":1}}},"ConnectRequest":{"fields":{"token":{"type":"string","id":1},"data":{"type":"bytes","id":2},"subs":{"keyType":"string","type":"SubscribeRequest","id":3},"name":{"type":"string","id":4},"version":{"type":"string","id":5}}},"ConnectResult":{"fields":{"client":{"type":"string","id":1},"version":{"type":"string","id":2},"expires":{"type":"bool","id":3},"ttl":{"type":"uint32","id":4},"data":{"type":"bytes","id":5},"subs":{"keyType":"string","type":"SubscribeResult","id":6}}},"RefreshRequest":{"fields":{"token":{"type":"string","id":1}}},"RefreshResult":{"fields":{"client":{"type":"string","id":1},"version":{"type":"string","id":2},"expires":{"type":"bool","id":3},"ttl":{"type":"uint32","id":4}}},"SubscribeRequest":{"fields":{"channel":{"type":"string","id":1},"token":{"type":"string","id":2},"recover":{"type":"bool","id":3},"seq":{"type":"uint32","id":4},"gen":{"type":"uint32","id":5},"epoch":{"type":"string","id":6},"offset":{"type":"uint64","id":7}}},"SubscribeResult":{"fields":{"expires":{"type":"bool","id":1},"ttl":{"type":"uint32","id":2},"recoverable":{"type":"bool","id":3},"seq":{"type":"uint32","id":4},"gen":{"type":"uint32","id":5},"epoch":{"type":"string","id":6},"publications":{"rule":"repeated","type":"Publication","id":7},"recovered":{"type":"bool","id":8},"offset":{"type":"uint64","id":9},"positioned":{"type":"bool","id":10}}},"SubRefreshRequest":{"fields":{"channel":{"type":"string","id":1},"token":{"type":"string","id":2}}},"SubRefreshResult":{"fields":{"expires":{"type":"bool","id":1},"ttl":{"type":"uint32","id":2}}},"UnsubscribeRequest":{"fields":{"channel":{"type":"string","id":1}}},"UnsubscribeResult":{"fields":{}},"PublishRequest":{"fields":{"channel":{"type":"string","id":1},"data":{"type":"bytes","id":2}}},"PublishResult":{"fields":{}},"PresenceRequest":{"fields":{"channel":{"type":"string","id":1}}},"PresenceResult":{"fields":{"presence":{"keyType":"string","type":"ClientInfo","id":1}}},"PresenceStatsRequest":{"fields":{"channel":{"type":"string","id":1}}},"PresenceStatsResult":{"fields":{"num_clients":{"type":"uint32","id":1},"num_users":{"type":"uint32","id":2}}},"HistoryRequest":{"fields":{"channel":{"type":"string","id":1},"use_since":{"type":"bool","id":2},"offset":{"type":"uint64","id":3},"epoch":{"type":"string","id":4},"use_limit":{"type":"bool","id":5},"limit":{"type":"int32","id":6}}},"HistoryResult":{"fields":{"publications":{"rule":"repeated","type":"Publication","id":1},"epoch":{"type":"string","id":2},"offset":{"type":"uint64","id":3}}},"PingRequest":{"fields":{}},"PingResult":{"fields":{}},"RPCRequest":{"fields":{"data":{"type":"bytes","id":1},"method":{"type":"string","id":2}}},"RPCResult":{"fields":{"data":{"type":"bytes","id":1}}},"SendRequest":{"fields":{"data":{"type":"bytes","id":1}}}}}}}')}},__webpack_module_cache__={};function __webpack_require__(e){if(__webpack_module_cache__[e])return __webpack_module_cache__[e].exports;var t=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e].call(t.exports,t,t.exports,__webpack_require__),t.exports}return __webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__(714)}()})); //# sourceMappingURL=centrifuge.protobuf.min.js.map \ No newline at end of file diff --git a/dist/centrifuge.protobuf.min.js.map b/dist/centrifuge.protobuf.min.js.map index 46c0f332..699c7ad7 100644 --- a/dist/centrifuge.protobuf.min.js.map +++ b/dist/centrifuge.protobuf.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://Centrifuge/webpack/universalModuleDefinition","webpack://Centrifuge/./node_modules/@protobufjs/aspromise/index.js","webpack://Centrifuge/./node_modules/@protobufjs/base64/index.js","webpack://Centrifuge/./node_modules/@protobufjs/codegen/index.js","webpack://Centrifuge/./node_modules/@protobufjs/eventemitter/index.js","webpack://Centrifuge/./node_modules/@protobufjs/fetch/index.js","webpack://Centrifuge/./node_modules/@protobufjs/float/index.js","webpack://Centrifuge/./node_modules/@protobufjs/inquire/index.js","webpack://Centrifuge/./node_modules/@protobufjs/path/index.js","webpack://Centrifuge/./node_modules/@protobufjs/pool/index.js","webpack://Centrifuge/./node_modules/@protobufjs/utf8/index.js","webpack://Centrifuge/./src/centrifuge.js","webpack://Centrifuge/./src/index_protobuf.js","webpack://Centrifuge/./src/json.js","webpack://Centrifuge/./src/protobuf.js","webpack://Centrifuge/./src/subscription.js","webpack://Centrifuge/./src/utils.js","webpack://Centrifuge/./node_modules/events/events.js","webpack://Centrifuge/./node_modules/protobufjs/light.js","webpack://Centrifuge/./node_modules/protobufjs/src/converter.js","webpack://Centrifuge/./node_modules/protobufjs/src/decoder.js","webpack://Centrifuge/./node_modules/protobufjs/src/encoder.js","webpack://Centrifuge/./node_modules/protobufjs/src/enum.js","webpack://Centrifuge/./node_modules/protobufjs/src/field.js","webpack://Centrifuge/./node_modules/protobufjs/src/index-light.js","webpack://Centrifuge/./node_modules/protobufjs/src/index-minimal.js","webpack://Centrifuge/./node_modules/protobufjs/src/mapfield.js","webpack://Centrifuge/./node_modules/protobufjs/src/message.js","webpack://Centrifuge/./node_modules/protobufjs/src/method.js","webpack://Centrifuge/./node_modules/protobufjs/src/namespace.js","webpack://Centrifuge/./node_modules/protobufjs/src/object.js","webpack://Centrifuge/./node_modules/protobufjs/src/oneof.js","webpack://Centrifuge/./node_modules/protobufjs/src/reader.js","webpack://Centrifuge/./node_modules/protobufjs/src/reader_buffer.js","webpack://Centrifuge/./node_modules/protobufjs/src/root.js","webpack://Centrifuge/./node_modules/protobufjs/src/roots.js","webpack://Centrifuge/./node_modules/protobufjs/src/rpc.js","webpack://Centrifuge/./node_modules/protobufjs/src/rpc/service.js","webpack://Centrifuge/./node_modules/protobufjs/src/service.js","webpack://Centrifuge/./node_modules/protobufjs/src/type.js","webpack://Centrifuge/./node_modules/protobufjs/src/types.js","webpack://Centrifuge/./node_modules/protobufjs/src/util.js","webpack://Centrifuge/./node_modules/protobufjs/src/util/longbits.js","webpack://Centrifuge/./node_modules/protobufjs/src/util/minimal.js","webpack://Centrifuge/./node_modules/protobufjs/src/verifier.js","webpack://Centrifuge/./node_modules/protobufjs/src/wrappers.js","webpack://Centrifuge/./node_modules/protobufjs/src/writer.js","webpack://Centrifuge/./node_modules/protobufjs/src/writer_buffer.js","webpack://Centrifuge/webpack/bootstrap","webpack://Centrifuge/webpack/startup","webpack://Centrifuge/webpack/runtime/global"],"names":["root","factory","exports","module","define","amd","this","fn","ctx","params","Array","arguments","length","offset","index","pending","Promise","resolve","reject","err","apply","base64","string","p","n","charAt","Math","ceil","b64","s64","i","encode","buffer","start","end","t","parts","chunk","j","b","push","String","fromCharCode","slice","join","invalidEncoding","decode","c","charCodeAt","undefined","Error","test","codegen","functionParams","functionName","body","Codegen","formatStringOrScope","source","toString","verbose","console","log","scopeKeys","Object","keys","scopeParams","scopeValues","scopeOffset","Function","formatParams","formatOffset","replace","$0","$1","value","Number","floor","JSON","stringify","functionNameOverride","EventEmitter","_listeners","prototype","on","evt","off","listeners","splice","emit","args","fetch","asPromise","fs","inquire","filename","options","callback","xhr","readFile","contents","XMLHttpRequest","binary","onreadystatechange","readyState","status","response","responseText","Uint8Array","overrideMimeType","responseType","open","send","Float32Array","f32","f8b","le","writeFloat_f32_cpy","val","buf","pos","writeFloat_f32_rev","readFloat_f32_cpy","readFloat_f32_rev","writeFloatLE","writeFloatBE","readFloatLE","readFloatBE","writeFloat_ieee754","writeUint","sign","isNaN","round","exponent","LN2","pow","readFloat_ieee754","readUint","uint","mantissa","NaN","Infinity","bind","writeUintLE","writeUintBE","readUintLE","readUintBE","Float64Array","f64","writeDouble_f64_cpy","writeDouble_f64_rev","readDouble_f64_cpy","readDouble_f64_rev","writeDoubleLE","writeDoubleBE","readDoubleLE","readDoubleBE","writeDouble_ieee754","off0","off1","readDouble_ieee754","lo","hi","moduleName","mod","eval","e","path","isAbsolute","normalize","split","absolute","prefix","shift","originPath","includePath","alreadyNormalized","alloc","size","SIZE","MAX","slab","call","utf8","len","read","write","c1","c2","_errorTimeout","_errorConnectionClosed","Centrifuge","url","_url","_websocket","_sockjs","_isSockjs","_binary","_methodType","_pushType","_encoder","_decoder","_status","_reconnect","_reconnecting","_transport","_transportName","_transportClosed","_messageId","_clientID","_refreshRequired","_subs","_serverSubs","_lastSeq","_lastGen","_lastOffset","_lastEpoch","_messages","_isBatching","_isSubscribeBatching","_privateChannels","_numRefreshFailed","_refreshTimeout","_pingTimeout","_pongTimeout","_subRefreshTimeouts","_retries","_callbacks","_latency","_latencyStart","_connectData","_token","_xhrID","_xhrs","_dispatchPromise","_config","debug","name","version","websocket","sockjs","minRetry","maxRetry","timeout","ping","pingInterval","pongWaitTimeout","privateChannelPrefix","onTransportClose","sockjsServer","sockjsTransports","refreshEndpoint","refreshHeaders","refreshParams","refreshData","refreshAttempts","refreshInterval","onRefreshFailed","onRefresh","subscribeEndpoint","subscribeHeaders","subscribeParams","subRefreshInterval","onPrivateSubscribe","_configure","token","data","headers","query","_debug","global","ActiveXObject","hasOwnProperty","encodeURIComponent","headerName","withCredentials","setRequestHeader","parsed","parse","error","_log","setTimeout","WebSocket","format","_formatOverride","JsonMethodType","JsonPushType","JsonEncoder","JsonDecoder","configuration","extend","startsWith","indexOf","_setFormat","SockJS","newStatus","interval","backoff","xhrID","abort","reconnect","id","_stopPing","callbacks","clearTimeout","errback","_createErrorObject","channel","sub","_isSuccess","_triggerUnsubscribe","_recover","_shouldResubscribe","_setSubscribing","_setUnsubscribed","_abortInflightXHRs","_clearSubRefreshTimeout","transport","OPEN","commands","_isTransportOpen","command","encodeCommands","sockjsOptions","transports","server","_websocketSupported","binaryType","onopen","onheartbeat","_restartPing","msg","subs","hasSubs","recoverable","seq","gen","epoch","Date","_call","then","resolveCtx","_connectResponse","decodeCommandResult","CONNECT","result","next","rejectCtx","code","_disconnect","onerror","onclose","closeEvent","reason","needReconnect","advice","event","_getRetryInterval","_refresh","_connect","onmessage","_dataReceived","_rpc","method","RPC","_methodCall","SEND","isConnected","_transportSend","since","limit","resultCB","PUBLISH","_getHistoryParams","HISTORY","publications","PRESENCE","presence","PRESENCE_STATS","num_users","num_clients","replies","decodeReplies","finishDispatch","_dispatchSynchronized","_dispatchReply","reply","_handleReply","_handlePush","_addMessage","_registerCall","_setStatus","_setupTransport","shouldReconnect","_isDisconnected","_clearConnectedState","close","_refreshFailed","clientID","_newXHRID","cb","resp","jitter","random","max","REFRESH","_refreshResponse","_refreshError","_ajax","expires","client","_getTTLMilliseconds","ttl","channelsData","channels","channelData","SUB_REFRESH","_getSub","_subRefreshResponse","_subRefreshError","subRefreshTimeout","_subRefresh","isResubscribe","SUBSCRIBE","startSubscribeBatching","_subscribe","stopSubscribeBatching","recover","_needRecover","_getLastSeq","_getLastGen","_getLastOffset","_getLastEpoch","_subscribeResponse","_subscribeError","_setNew","UNSUBSCRIBE","min","isRecover","wasReconnecting","_resetRetry","getTime","startBatching","stopBatching","_startPing","latency","_processServerSubs","subCtx","_expandSubscribeContext","recovered","pubs","reverse","_handlePublication","_isSubscribing","message","_setSubscribeError","positioned","streamPosition","_setSubscribeSuccess","_recoverable","errorExists","info","_isServerSub","leave","unsub","unsubscribe","resubscribe","subscribe","pub","decodePush","type","PUBLICATION","decodePushData","MESSAGE","_handleMessage","JOIN","_handleJoin","LEAVE","_handleLeave","UNSUB","_handleUnsub","SUB","_handleSub","messages","PING","_pingResponse","isFunction","_nextMessageId","_isConnected","_ping","_flush","authChannels","batch","events","currentSub","_setEvents","_isUnsubscribed","Subscription","CentrifugeProtobuf","encodedCommands","encodedReplies","methodType","pushType","protobuf","require","proto","Root","fromJSON","methodValues","lookupEnum","values","protobufMethodType","methodSchema","lookupType","protobufPushType","PushSchema","Push","Command","Reply","ProtobufEncoder","writer","Writer","create","assign","finish","encodeDelimited","ProtobufDecoder","reader","Reader","decodeDelimited","_decode","res","centrifuge","_centrifuge","_error","_isResubscribe","_ready","_subscriptionPromise","_noResubscribe","_initializePromise","_promises","_promiseId","errContext","_resolve","_reject","knownEvents","l","ev","subscribeResult","successContext","_getSubscribeSuccessContext","_getSubscribeErrorContext","noResubscribe","needTrigger","subscribeErrorContext","_unsubscribe","_isError","rej","_nextPromiseId","self","publish","presenceStats","history","lastIndexOf","level","logger","step","a","key","ReflectOwnKeys","R","Reflect","ReflectApply","target","receiver","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","concat","NumberIsNaN","init","once","emitter","eventListener","errorListener","removeListener","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","TypeError","_getMaxListeners","that","_addListener","prepend","m","existing","warning","newListener","unshift","warned","w","count","warn","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","unwrap","evlistener","arr","ret","unwrapListeners","arrayClone","listenerCount","copy","defineProperty","enumerable","get","set","arg","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","context","handler","addListener","prependListener","prependOnceListener","list","position","originalListener","pop","spliceOne","removeAllListeners","rawListeners","eventNames","converter","Enum","util","genValuePartial_fromObject","field","fieldIndex","prop","resolvedType","repeated","typeDefault","fullName","isUnsigned","genValuePartial_toObject","fromObject","mtype","fields","fieldsArray","safeProp","map","toObject","sort","compareFieldsById","repeatedFields","mapFields","normalFields","partOf","valuesById","long","low","high","unsigned","toNumber","bytes","arrayDefault","hasKs2","_fieldsArray","filter","group","ref","types","defaults","keyType","basic","packed","rfield","required","missing","wireType","mapKey","genTypePartial","optional","ReflectionObject","constructor","className","Namespace","comment","comments","reserved","json","enm","toJSON","toJSONOptions","keepComments","Boolean","add","isString","isInteger","isReservedId","isReservedName","allow_alias","remove","Field","Type","ruleRe","rule","isObject","toLowerCase","defaultValue","Long","extensionField","declaringField","_packed","getOption","setOption","ifNotSet","resolved","parent","lookupTypeOrEnum","fromNumber","freeze","newBuffer","emptyObject","emptyArray","ctor","d","fieldId","fieldType","fieldRule","decorateType","decorateEnum","fieldName","Type_","build","load","loadSync","encoder","decoder","verifier","OneOf","MapField","Service","Method","Message","wrappers","configure","BufferWriter","BufferReader","rpc","roots","resolvedKeyType","fieldKeyType","fieldValueType","properties","$type","verify","object","requestType","requestStream","responseStream","parsedOptions","resolvedRequestType","resolvedResponseType","arrayToJSON","array","obj","nested","_nestedArray","clearCache","namespace","addJSON","toArray","nestedArray","nestedJson","names","methods","getEnum","prev","setOptions","onAdd","onRemove","isArray","ptr","part","resolveAll","lookup","filterTypes","parentAlreadyChecked","found","lookupService","Service_","Enum_","defineProperties","_handleAdd","_handleRemove","setParsedOption","propName","opt","find","newValue","setProperty","newOpt","Root_","fieldNames","oneof","addFieldsToParent","oneofName","oneOfGetter","oneOfSetter","LongBits","indexOutOfRange","writeLength","create_array","Buffer","isBuffer","readLongVarint","bits","readFixed32_end","readFixed64","_slice","subarray","uint32","int32","sint32","bool","fixed32","sfixed32","float","double","skip","skipType","BufferReader_","merge","int64","uint64","sint64","zzDecode","fixed64","sfixed64","utf8Slice","common","deferred","files","SYNC","resolvePath","sync","getBundledFileName","idx","altname","substring","process","imports","weakImports","queued","weak","readFileSync","isNode","exposeRe","tryHandleExtension","extendedType","sisterField","parse_","common_","rpcImpl","requestDelimited","responseDelimited","rpcCall","requestCtor","responseCtor","request","endedByRPC","_methodsArray","service","inherited","methodsArray","rpcService","methodName","lcFirst","isReserved","q","s","oneofs","extensions","_fieldsById","_oneofsArray","_ctor","fieldsById","oneofsArray","generateConstructor","ctorProperties","setup","wrapper","originalThis","fork","ldelim","typeName","bake","o","safePropBackslashRe","safePropQuoteRe","ucFirst","str","toUpperCase","camelCaseRe","camelCase","decorateRoot","decorateEnumIndex","dst","setProp","prevValue","zero","zzEncode","zeroHash","from","parseInt","fromString","toLong","fromHash","hash","toHash","mask","part0","part1","part2","src","newError","CustomError","captureStackTrace","stack","pool","g","versions","node","window","isFinite","isset","isSet","utf8Write","_Buffer_from","_Buffer_allocUnsafe","sizeOrArray","dcodeIO","key2Re","key32Re","key64Re","longToHash","longFromHash","fromBits","ProtocolError","fieldMap","longs","enums","encoding","allocUnsafe","seenFirstField","invalid","genVerifyKey","genVerifyValue","oneofProp","expected","type_url","substr","Op","noop","State","head","tail","states","writeByte","VarintOp","writeVarint64","writeFixed32","_push","writeBytes","reset","BufferWriter_","writeStringBuffer","writeBytesBuffer","byteLength","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__","globalThis"],"mappings":"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","file":"centrifuge.protobuf.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Centrifuge\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Centrifuge\"] = factory();\n\telse\n\t\troot[\"Centrifuge\"] = factory();\n})(this, function() {\nreturn ","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = codegen;\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @param {string[]} functionParams Function parameter names\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n */\r\nfunction codegen(functionParams, functionName) {\r\n\r\n /* istanbul ignore if */\r\n if (typeof functionParams === \"string\") {\r\n functionName = functionParams;\r\n functionParams = undefined;\r\n }\r\n\r\n var body = [];\r\n\r\n /**\r\n * Appends code to the function's body or finishes generation.\r\n * @typedef Codegen\r\n * @type {function}\r\n * @param {string|Object.} [formatStringOrScope] Format string or, to finish the function, an object of additional scope variables, if any\r\n * @param {...*} [formatParams] Format parameters\r\n * @returns {Codegen|Function} Itself or the generated function if finished\r\n * @throws {Error} If format parameter counts do not match\r\n */\r\n\r\n function Codegen(formatStringOrScope) {\r\n // note that explicit array handling below makes this ~50% faster\r\n\r\n // finish the function\r\n if (typeof formatStringOrScope !== \"string\") {\r\n var source = toString();\r\n if (codegen.verbose)\r\n console.log(\"codegen: \" + source); // eslint-disable-line no-console\r\n source = \"return \" + source;\r\n if (formatStringOrScope) {\r\n var scopeKeys = Object.keys(formatStringOrScope),\r\n scopeParams = new Array(scopeKeys.length + 1),\r\n scopeValues = new Array(scopeKeys.length),\r\n scopeOffset = 0;\r\n while (scopeOffset < scopeKeys.length) {\r\n scopeParams[scopeOffset] = scopeKeys[scopeOffset];\r\n scopeValues[scopeOffset] = formatStringOrScope[scopeKeys[scopeOffset++]];\r\n }\r\n scopeParams[scopeOffset] = source;\r\n return Function.apply(null, scopeParams).apply(null, scopeValues); // eslint-disable-line no-new-func\r\n }\r\n return Function(source)(); // eslint-disable-line no-new-func\r\n }\r\n\r\n // otherwise append to body\r\n var formatParams = new Array(arguments.length - 1),\r\n formatOffset = 0;\r\n while (formatOffset < formatParams.length)\r\n formatParams[formatOffset] = arguments[++formatOffset];\r\n formatOffset = 0;\r\n formatStringOrScope = formatStringOrScope.replace(/%([%dfijs])/g, function replace($0, $1) {\r\n var value = formatParams[formatOffset++];\r\n switch ($1) {\r\n case \"d\": case \"f\": return String(Number(value));\r\n case \"i\": return String(Math.floor(value));\r\n case \"j\": return JSON.stringify(value);\r\n case \"s\": return String(value);\r\n }\r\n return \"%\";\r\n });\r\n if (formatOffset !== formatParams.length)\r\n throw Error(\"parameter count mismatch\");\r\n body.push(formatStringOrScope);\r\n return Codegen;\r\n }\r\n\r\n function toString(functionNameOverride) {\r\n return \"function \" + (functionNameOverride || functionName || \"\") + \"(\" + (functionParams && functionParams.join(\",\") || \"\") + \"){\\n \" + body.join(\"\\n \") + \"\\n}\";\r\n }\r\n\r\n Codegen.toString = toString;\r\n return Codegen;\r\n}\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @function codegen\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * When set to `true`, codegen will log generated code to console. Useful for debugging.\r\n * @name util.codegen.verbose\r\n * @type {boolean}\r\n */\r\ncodegen.verbose = false;\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\nmodule.exports = fetch;\r\n\r\nvar asPromise = require(\"@protobufjs/aspromise\"),\r\n inquire = require(\"@protobufjs/inquire\");\r\n\r\nvar fs = inquire(\"fs\");\r\n\r\n/**\r\n * Node-style callback as used by {@link util.fetch}.\r\n * @typedef FetchCallback\r\n * @type {function}\r\n * @param {?Error} error Error, if any, otherwise `null`\r\n * @param {string} [contents] File contents, if there hasn't been an error\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Options as used by {@link util.fetch}.\r\n * @typedef FetchOptions\r\n * @type {Object}\r\n * @property {boolean} [binary=false] Whether expecting a binary response\r\n * @property {boolean} [xhr=false] If `true`, forces the use of XMLHttpRequest\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @memberof util\r\n * @param {string} filename File path or url\r\n * @param {FetchOptions} options Fetch options\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n */\r\nfunction fetch(filename, options, callback) {\r\n if (typeof options === \"function\") {\r\n callback = options;\r\n options = {};\r\n } else if (!options)\r\n options = {};\r\n\r\n if (!callback)\r\n return asPromise(fetch, this, filename, options); // eslint-disable-line no-invalid-this\r\n\r\n // if a node-like filesystem is present, try it first but fall back to XHR if nothing is found.\r\n if (!options.xhr && fs && fs.readFile)\r\n return fs.readFile(filename, function fetchReadFileCallback(err, contents) {\r\n return err && typeof XMLHttpRequest !== \"undefined\"\r\n ? fetch.xhr(filename, options, callback)\r\n : err\r\n ? callback(err)\r\n : callback(null, options.binary ? contents : contents.toString(\"utf8\"));\r\n });\r\n\r\n // use the XHR version otherwise.\r\n return fetch.xhr(filename, options, callback);\r\n}\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchOptions} [options] Fetch options\r\n * @returns {Promise} Promise\r\n * @variation 3\r\n */\r\n\r\n/**/\r\nfetch.xhr = function fetch_xhr(filename, options, callback) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.onreadystatechange /* works everywhere */ = function fetchOnReadyStateChange() {\r\n\r\n if (xhr.readyState !== 4)\r\n return undefined;\r\n\r\n // local cors security errors return status 0 / empty string, too. afaik this cannot be\r\n // reliably distinguished from an actually empty file for security reasons. feel free\r\n // to send a pull request if you are aware of a solution.\r\n if (xhr.status !== 0 && xhr.status !== 200)\r\n return callback(Error(\"status \" + xhr.status));\r\n\r\n // if binary data is expected, make sure that some sort of array is returned, even if\r\n // ArrayBuffers are not supported. the binary string fallback, however, is unsafe.\r\n if (options.binary) {\r\n var buffer = xhr.response;\r\n if (!buffer) {\r\n buffer = [];\r\n for (var i = 0; i < xhr.responseText.length; ++i)\r\n buffer.push(xhr.responseText.charCodeAt(i) & 255);\r\n }\r\n return callback(null, typeof Uint8Array !== \"undefined\" ? new Uint8Array(buffer) : buffer);\r\n }\r\n return callback(null, xhr.responseText);\r\n };\r\n\r\n if (options.binary) {\r\n // ref: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data#Receiving_binary_data_in_older_browsers\r\n if (\"overrideMimeType\" in xhr)\r\n xhr.overrideMimeType(\"text/plain; charset=x-user-defined\");\r\n xhr.responseType = \"arraybuffer\";\r\n }\r\n\r\n xhr.open(\"GET\", filename);\r\n xhr.send();\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal path module to resolve Unix, Windows and URL paths alike.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar path = exports;\r\n\r\nvar isAbsolute =\r\n/**\r\n * Tests if the specified path is absolute.\r\n * @param {string} path Path to test\r\n * @returns {boolean} `true` if path is absolute\r\n */\r\npath.isAbsolute = function isAbsolute(path) {\r\n return /^(?:\\/|\\w+:)/.test(path);\r\n};\r\n\r\nvar normalize =\r\n/**\r\n * Normalizes the specified path.\r\n * @param {string} path Path to normalize\r\n * @returns {string} Normalized path\r\n */\r\npath.normalize = function normalize(path) {\r\n path = path.replace(/\\\\/g, \"/\")\r\n .replace(/\\/{2,}/g, \"/\");\r\n var parts = path.split(\"/\"),\r\n absolute = isAbsolute(path),\r\n prefix = \"\";\r\n if (absolute)\r\n prefix = parts.shift() + \"/\";\r\n for (var i = 0; i < parts.length;) {\r\n if (parts[i] === \"..\") {\r\n if (i > 0 && parts[i - 1] !== \"..\")\r\n parts.splice(--i, 2);\r\n else if (absolute)\r\n parts.splice(i, 1);\r\n else\r\n ++i;\r\n } else if (parts[i] === \".\")\r\n parts.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n return prefix + parts.join(\"/\");\r\n};\r\n\r\n/**\r\n * Resolves the specified include path against the specified origin path.\r\n * @param {string} originPath Path to the origin file\r\n * @param {string} includePath Include path relative to origin path\r\n * @param {boolean} [alreadyNormalized=false] `true` if both paths are already known to be normalized\r\n * @returns {string} Path to the include file\r\n */\r\npath.resolve = function resolve(originPath, includePath, alreadyNormalized) {\r\n if (!alreadyNormalized)\r\n includePath = normalize(includePath);\r\n if (isAbsolute(includePath))\r\n return includePath;\r\n if (!alreadyNormalized)\r\n originPath = normalize(originPath);\r\n return (originPath = originPath.replace(/(?:\\/|^)[^/]+$/, \"\")).length ? normalize(originPath + \"/\" + includePath) : includePath;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","import EventEmitter from 'events';\nimport Subscription from './subscription';\n\nimport {\n JsonEncoder,\n JsonDecoder,\n JsonMethodType,\n JsonPushType\n} from './json';\n\nimport {\n isFunction,\n log,\n startsWith,\n errorExists,\n backoff,\n extend\n} from './utils';\n\nconst _errorTimeout = 'timeout';\nconst _errorConnectionClosed = 'connection closed';\n\nexport class Centrifuge extends EventEmitter {\n\n constructor(url, options) {\n super();\n this._url = url;\n this._websocket = null;\n this._sockjs = null;\n this._isSockjs = false;\n this._binary = false;\n this._methodType = null;\n this._pushType = null;\n this._encoder = null;\n this._decoder = null;\n this._status = 'disconnected';\n this._reconnect = true;\n this._reconnecting = false;\n this._transport = null;\n this._transportName = null;\n this._transportClosed = true;\n this._messageId = 0;\n this._clientID = null;\n this._refreshRequired = false;\n this._subs = {};\n this._serverSubs = {};\n this._lastSeq = {};\n this._lastGen = {};\n this._lastOffset = {};\n this._lastEpoch = {};\n this._messages = [];\n this._isBatching = false;\n this._isSubscribeBatching = false;\n this._privateChannels = {};\n this._numRefreshFailed = 0;\n this._refreshTimeout = null;\n this._pingTimeout = null;\n this._pongTimeout = null;\n this._subRefreshTimeouts = {};\n this._retries = 0;\n this._callbacks = {};\n this._latency = null;\n this._latencyStart = null;\n this._connectData = null;\n this._token = null;\n this._xhrID = 0;\n this._xhrs = {};\n this._dispatchPromise = Promise.resolve();\n this._config = {\n debug: false,\n name: '',\n version: '',\n websocket: null,\n sockjs: null,\n minRetry: 1000,\n maxRetry: 20000,\n timeout: 5000,\n ping: true,\n pingInterval: 25000,\n pongWaitTimeout: 5000,\n privateChannelPrefix: '$',\n onTransportClose: null,\n sockjsServer: null,\n sockjsTransports: [\n 'websocket',\n 'xdr-streaming',\n 'xhr-streaming',\n 'eventsource',\n 'iframe-eventsource',\n 'iframe-htmlfile',\n 'xdr-polling',\n 'xhr-polling',\n 'iframe-xhr-polling',\n 'jsonp-polling'\n ],\n refreshEndpoint: '/centrifuge/refresh',\n refreshHeaders: {},\n refreshParams: {},\n refreshData: {},\n refreshAttempts: null,\n refreshInterval: 1000,\n onRefreshFailed: null,\n onRefresh: null,\n subscribeEndpoint: '/centrifuge/subscribe',\n subscribeHeaders: {},\n subscribeParams: {},\n subRefreshInterval: 1000,\n onPrivateSubscribe: null\n };\n this._configure(options);\n }\n\n setToken(token) {\n this._token = token;\n }\n\n setConnectData(data) {\n this._connectData = data;\n }\n\n setRefreshHeaders(headers) {\n this._config.refreshHeaders = headers;\n }\n setRefreshParams(params) {\n this._config.refreshParams = params;\n }\n setRefreshData(data) {\n this._config.refreshData = data;\n }\n\n setSubscribeHeaders(headers) {\n this._config.subscribeHeaders = headers;\n }\n setSubscribeParams(params) {\n this._config.subscribeParams = params;\n }\n\n _ajax(url, params, headers, data, callback) {\n let query = '';\n this._debug('sending AJAX request to', url, 'with data', JSON.stringify(data));\n\n const xhr = (global.XMLHttpRequest ? new global.XMLHttpRequest() : new global.ActiveXObject('Microsoft.XMLHTTP'));\n\n for (const i in params) {\n if (params.hasOwnProperty(i)) {\n if (query.length > 0) {\n query += '&';\n }\n query += encodeURIComponent(i) + '=' + encodeURIComponent(params[i]);\n }\n }\n if (query.length > 0) {\n query = '?' + query;\n }\n xhr.open('POST', url + query, true);\n if ('withCredentials' in xhr) {\n xhr.withCredentials = true;\n }\n\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.setRequestHeader('Content-Type', 'application/json');\n for (const headerName in headers) {\n if (headers.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, headers[headerName]);\n }\n }\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data, parsed = false;\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback({\n error: 'Invalid JSON. Data was: ' + xhr.responseText,\n status: 200,\n data: null\n });\n }\n if (parsed) { // prevents double execution.\n callback({\n data: data,\n status: 200\n });\n }\n } else {\n this._log('wrong status code in AJAX response', xhr.status);\n callback({\n status: xhr.status,\n data: null\n });\n }\n }\n };\n setTimeout(() => xhr.send(JSON.stringify(data)), 20);\n return xhr;\n };\n\n _log() {\n log('info', arguments);\n };\n\n _debug() {\n if (this._config.debug === true) {\n log('debug', arguments);\n }\n };\n\n _websocketSupported() {\n if (this._config.websocket !== null) {\n return true;\n }\n return !(typeof WebSocket !== 'function' && typeof WebSocket !== 'object');\n };\n\n _setFormat(format) {\n if (this._formatOverride(format)) {\n return;\n }\n if (format === 'protobuf') {\n throw new Error('not implemented by JSON only Centrifuge client – use client with Protobuf');\n }\n this._binary = false;\n this._methodType = JsonMethodType;\n this._pushType = JsonPushType;\n this._encoder = new JsonEncoder();\n this._decoder = new JsonDecoder();\n }\n\n _formatOverride(format) {\n return false;\n }\n\n _configure(configuration) {\n if (!('Promise' in global)) {\n throw new Error('Promise polyfill required');\n }\n\n extend(this._config, configuration || {});\n this._debug('centrifuge config', this._config);\n\n if (!this._url) {\n throw new Error('url required');\n }\n\n if (startsWith(this._url, 'ws') && this._url.indexOf('format=protobuf') > -1) {\n this._setFormat('protobuf');\n } else {\n this._setFormat('json');\n }\n\n if (startsWith(this._url, 'http')) {\n this._debug('client will try to connect to SockJS endpoint');\n if (this._config.sockjs !== null) {\n this._debug('SockJS explicitly provided in options');\n this._sockjs = this._config.sockjs;\n } else {\n if (typeof global.SockJS === 'undefined') {\n throw new Error('SockJS not found, use ws:// in url or include SockJS');\n }\n this._debug('use globally defined SockJS');\n this._sockjs = global.SockJS;\n }\n } else {\n this._debug('client will connect to websocket endpoint');\n }\n };\n\n _setStatus(newStatus) {\n if (this._status !== newStatus) {\n this._debug('Status', this._status, '->', newStatus);\n this._status = newStatus;\n }\n };\n\n _isDisconnected() {\n return this._status === 'disconnected';\n };\n\n _isConnecting() {\n return this._status === 'connecting';\n };\n\n _isConnected() {\n return this._status === 'connected';\n };\n\n _nextMessageId() {\n return ++this._messageId;\n };\n\n _resetRetry() {\n this._debug('reset retries count to 0');\n this._retries = 0;\n };\n\n _getRetryInterval() {\n const interval = backoff(this._retries, this._config.minRetry, this._config.maxRetry);\n\n this._retries += 1;\n return interval;\n };\n\n _abortInflightXHRs() {\n for (const xhrID in this._xhrs) {\n try {\n this._xhrs[xhrID].abort();\n } catch (e) {\n this._debug('error aborting xhr', e);\n }\n delete this._xhrs[xhrID];\n }\n };\n\n _clearConnectedState(reconnect) {\n this._clientID = null;\n this._stopPing();\n\n // fire errbacks of registered outgoing calls.\n for (const id in this._callbacks) {\n if (this._callbacks.hasOwnProperty(id)) {\n const callbacks = this._callbacks[id];\n clearTimeout(callbacks.timeout);\n const errback = callbacks.errback;\n if (!errback) {\n continue;\n }\n errback({error: this._createErrorObject('disconnected')});\n }\n }\n this._callbacks = {};\n\n // fire unsubscribe events\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n\n if (reconnect) {\n if (sub._isSuccess()) {\n sub._triggerUnsubscribe();\n sub._recover = true;\n }\n if (sub._shouldResubscribe()) {\n sub._setSubscribing();\n }\n } else {\n sub._setUnsubscribed();\n }\n }\n }\n\n this._abortInflightXHRs();\n\n // clear refresh timer\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n // clear sub refresh timers\n for (const channel in this._subRefreshTimeouts) {\n if (this._subRefreshTimeouts.hasOwnProperty(channel) && this._subRefreshTimeouts[channel]) {\n this._clearSubRefreshTimeout(channel);\n }\n }\n this._subRefreshTimeouts = {};\n\n if (!this._reconnect) {\n // completely clear subscriptions\n this._subs = {};\n }\n };\n\n _isTransportOpen() {\n if (this._isSockjs) {\n return this._transport &&\n this._transport.transport &&\n this._transport.transport.readyState === this._transport.transport.OPEN;\n }\n return this._transport && this._transport.readyState === this._transport.OPEN;\n };\n\n _transportSend(commands) {\n if (!commands.length) {\n return true;\n }\n\n if (!this._isTransportOpen()) {\n // resolve pending commands with error if transport is not open\n for (let command in commands) {\n let id = command.id;\n if (!(id in this._callbacks)) {\n continue;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n const errback = callbacks.errback;\n errback({error: this._createErrorObject(_errorConnectionClosed, 0)});\n }\n return false;\n }\n this._transport.send(this._encoder.encodeCommands(commands));\n return true;\n }\n\n _setupTransport() {\n this._isSockjs = false;\n\n // detect transport to use - SockJS or Websocket\n if (this._sockjs !== null) {\n const sockjsOptions = {\n transports: this._config.sockjsTransports\n };\n\n if (this._config.sockjsServer !== null) {\n sockjsOptions.server = this._config.sockjsServer;\n }\n this._isSockjs = true;\n this._transport = new this._sockjs(this._url, null, sockjsOptions);\n } else {\n if (!this._websocketSupported()) {\n this._debug('No Websocket support and no SockJS configured, can not connect');\n return;\n }\n if (this._config.websocket !== null) {\n this._websocket = this._config.websocket;\n } else {\n this._websocket = WebSocket;\n }\n this._transport = new this._websocket(this._url);\n if (this._binary === true) {\n this._transport.binaryType = 'arraybuffer';\n }\n }\n\n this._transport.onopen = () => {\n this._transportClosed = false;\n\n if (this._isSockjs) {\n this._transportName = 'sockjs-' + this._transport.transport;\n this._transport.onheartbeat = () => this._restartPing();\n } else {\n this._transportName = 'websocket';\n }\n\n // Can omit method here due to zero value.\n const msg = {\n // method: this._methodType.CONNECT\n };\n\n if (this._token || this._connectData || this._config.name || this._config.version) {\n msg.params = {};\n }\n if (this._token) {\n msg.params.token = this._token;\n }\n if (this._connectData) {\n msg.params.data = this._connectData;\n }\n if (this._config.name) {\n msg.params.name = this._config.name;\n }\n if (this._config.version) {\n msg.params.version = this._config.version;\n }\n\n let subs = {};\n let hasSubs = false;\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel) && this._serverSubs[channel].recoverable) {\n hasSubs = true;\n let sub = {\n 'recover': true\n };\n if (this._serverSubs[channel].seq || this._serverSubs[channel].gen) {\n if (this._serverSubs[channel].seq) {\n sub['seq'] = this._serverSubs[channel].seq;\n }\n if (this._serverSubs[channel].gen) {\n sub['gen'] = this._serverSubs[channel].gen;\n }\n } else {\n if (this._serverSubs[channel].offset) {\n sub['offset'] = this._serverSubs[channel].offset;\n }\n }\n if (this._serverSubs[channel].epoch) {\n sub['epoch'] = this._serverSubs[channel].epoch;\n }\n subs[channel] = sub;\n }\n }\n if (hasSubs) {\n if (!msg.params) {msg.params = {};}\n msg.params.subs = subs;\n }\n\n this._latencyStart = new Date();\n this._call(msg).then(resolveCtx => {\n this._connectResponse(this._decoder.decodeCommandResult(this._methodType.CONNECT, resolveCtx.result), hasSubs);\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n const err = rejectCtx.error;\n if (err.code === 109) { // token expired.\n this._refreshRequired = true;\n }\n this._disconnect('connect error', true);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n this._transport.onerror = error => {\n this._debug('transport level error', error);\n };\n\n this._transport.onclose = closeEvent => {\n this._transportClosed = true;\n let reason = _errorConnectionClosed;\n let needReconnect = true;\n\n if (closeEvent && 'reason' in closeEvent && closeEvent.reason) {\n try {\n const advice = JSON.parse(closeEvent.reason);\n this._debug('reason is an advice object', advice);\n reason = advice.reason;\n needReconnect = advice.reconnect;\n } catch (e) {\n reason = closeEvent.reason;\n this._debug('reason is a plain string', reason);\n }\n }\n\n // onTransportClose callback should be executed every time transport was closed.\n // This can be helpful to catch failed connection events (because our disconnect\n // event only called once and every future attempts to connect do not fire disconnect\n // event again).\n if (this._config.onTransportClose !== null) {\n this._config.onTransportClose({\n event: closeEvent,\n reason: reason,\n reconnect: needReconnect\n });\n }\n\n this._disconnect(reason, needReconnect);\n\n if (this._reconnect === true) {\n this._reconnecting = true;\n const interval = this._getRetryInterval();\n\n this._debug('reconnect after ' + interval + ' milliseconds');\n setTimeout(() => {\n if (this._reconnect === true) {\n if (this._refreshRequired) {\n this._refresh();\n } else {\n this._connect();\n }\n }\n }, interval);\n }\n };\n\n this._transport.onmessage = event => {\n this._dataReceived(event.data);\n };\n };\n\n rpc(data) {\n return this._rpc('', data);\n }\n\n namedRPC(method, data) {\n return this._rpc(method, data);\n }\n\n _rpc(method, data) {\n let params = {\n data: data\n };\n if (method !== '') {\n params.method = method;\n };\n const msg = {\n method: this._methodType.RPC,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return result;\n });\n }\n\n send(data) {\n const msg = {\n method: this._methodType.SEND,\n params: {\n data: data\n }\n };\n\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n\n const sent = this._transportSend([msg]); // can send async message to server without id set\n if (!sent) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n };\n return Promise.resolve({});\n }\n\n _getHistoryParams(channel, options) {\n let params = {\n channel: channel\n };\n if (options !== undefined) {\n if (options.since) {\n params['use_since'] = true;\n if (options.since.offset) {\n params['offset'] = options.since.offset;\n }\n if (options.since.epoch) {\n params['epoch'] = options.since.epoch;\n }\n };\n if (options.limit !== undefined) {\n params['use_limit'] = true;\n params['limit'] = options.limit;\n }\n };\n return params;\n }\n\n _methodCall(msg, resultCB) {\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n return new Promise((resolve, reject) => {\n this._call(msg).then(resolveCtx => {\n resolve(resultCB(this._decoder.decodeCommandResult(msg.method, resolveCtx.result)));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n reject(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n });\n }\n\n publish(channel, data) {\n const msg = {\n method: this._methodType.PUBLISH,\n params: {\n channel: channel,\n data: data\n }\n };\n return this._methodCall(msg, function () {\n return {};\n });\n }\n\n history(channel, options) {\n const params = this._getHistoryParams(channel, options);\n const msg = {\n method: this._methodType.HISTORY,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return {\n 'publications': result.publications,\n 'epoch': result.epoch || '',\n 'offset': result.offset || 0\n };\n });\n }\n\n presence(channel) {\n const msg = {\n method: this._methodType.PRESENCE,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'presence': result.presence\n };\n });\n }\n\n presenceStats(channel) {\n const msg = {\n method: this._methodType.PRESENCE_STATS,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'num_users': result.num_users,\n 'num_clients': result.num_clients\n };\n });\n }\n\n _dataReceived(data) {\n const replies = this._decoder.decodeReplies(data);\n // we have to guarantee order of events in replies processing - i.e. start processing\n // next reply only when we finished processing of current one. Without syncing things in\n // this way we could get wrong publication events order as reply promises resolve\n // on next loop tick so for loop continues before we finished emitting all reply events.\n this._dispatchPromise = this._dispatchPromise.then(() => {\n let finishDispatch;\n this._dispatchPromise = new Promise(resolve =>{\n finishDispatch = resolve;\n });\n this._dispatchSynchronized(replies, finishDispatch);\n });\n this._restartPing();\n }\n\n _dispatchSynchronized(replies, finishDispatch) {\n let p = Promise.resolve();\n for (const i in replies) {\n if (replies.hasOwnProperty(i)) {\n p = p.then(() => {\n return this._dispatchReply(replies[i]);\n });\n }\n }\n p = p.then(() => {\n finishDispatch();\n });\n }\n\n _dispatchReply(reply) {\n var next;\n const p = new Promise(resolve =>{\n next = resolve;\n });\n\n if (reply === undefined || reply === null) {\n this._debug('dispatch: got undefined or null reply');\n next();\n return p;\n }\n\n const id = reply.id;\n\n if (id && id > 0) {\n this._handleReply(reply, next);\n } else {\n this._handlePush(reply.result, next);\n }\n\n return p;\n };\n\n _call(msg) {\n return new Promise((resolve, reject) => {\n const id = this._addMessage(msg);\n this._registerCall(id, resolve, reject);\n });\n }\n\n _connect() {\n if (this.isConnected()) {\n this._debug('connect called when already connected');\n return;\n }\n if (this._status === 'connecting') {\n return;\n }\n\n this._debug('start connecting');\n this._setStatus('connecting');\n this._clientID = null;\n this._reconnect = true;\n this._setupTransport();\n };\n\n _disconnect(reason, shouldReconnect) {\n\n const reconnect = shouldReconnect || false;\n if (reconnect === false) {\n this._reconnect = false;\n }\n\n if (this._isDisconnected()) {\n if (!reconnect) {\n this._clearConnectedState(reconnect);\n }\n return;\n }\n\n this._clearConnectedState(reconnect);\n\n this._debug('disconnected:', reason, shouldReconnect);\n this._setStatus('disconnected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._reconnecting === false) {\n // fire unsubscribe events for server side subs.\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel)) {\n this.emit('unsubscribe', {channel: channel});\n }\n }\n this.emit('disconnect', {\n reason: reason,\n reconnect: reconnect\n });\n }\n\n if (reconnect === false) {\n this._subs = {};\n this._serverSubs = {};\n }\n\n if (!this._transportClosed) {\n this._transport.close();\n }\n };\n\n _refreshFailed() {\n this._numRefreshFailed = 0;\n if (!this._isDisconnected()) {\n this._disconnect('refresh failed', false);\n }\n if (this._config.onRefreshFailed !== null) {\n this._config.onRefreshFailed();\n }\n };\n\n _refresh() {\n // ask application for new connection token.\n this._debug('refresh token');\n\n if (this._config.refreshAttempts === 0) {\n this._debug('refresh attempts set to 0, do not send refresh request at all');\n this._refreshFailed();\n return;\n }\n\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n // We don't perform any connection status related actions here as we are\n // relying on server that must close connection eventually.\n if (resp.error) {\n this._debug('error refreshing connection token', resp.error);\n } else {\n this._debug('error refreshing connection token: wrong status code', resp.status);\n }\n this._numRefreshFailed++;\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._config.refreshAttempts !== null && this._numRefreshFailed >= this._config.refreshAttempts) {\n this._refreshFailed();\n return;\n }\n const jitter = Math.round(Math.random() * 1000 * Math.max(this._numRefreshFailed, 20));\n const interval = this._config.refreshInterval + jitter;\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n return;\n }\n this._numRefreshFailed = 0;\n this._token = resp.data.token;\n if (!this._token) {\n this._refreshFailed();\n return;\n }\n if (this._isDisconnected() && this._reconnect) {\n this._debug('token refreshed, connect from scratch');\n this._connect();\n } else {\n this._debug('send refreshed token');\n const msg = {\n method: this._methodType.REFRESH,\n params: {\n token: this._token\n }\n };\n this._call(msg).then(resolveCtx => {\n this._refreshResponse(this._decoder.decodeCommandResult(this._methodType.REFRESH, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n if (this._config.onRefresh !== null) {\n const context = {};\n this._config.onRefresh(context, cb);\n } else {\n const xhr = this._ajax(\n this._config.refreshEndpoint,\n this._config.refreshParams,\n this._config.refreshHeaders,\n this._config.refreshData,\n cb\n );\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _refreshError(err) {\n this._debug('refresh error', err);\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n const interval = this._config.refreshInterval + Math.round(Math.random() * 1000);\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n }\n\n _refreshResponse(result) {\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (result.expires) {\n this._clientID = result.client;\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n };\n\n _newXHRID() {\n this._xhrID++;\n return this._xhrID;\n }\n\n _subRefresh(channel) {\n this._debug('refresh subscription token for channel', channel);\n\n if (this._subRefreshTimeouts[channel] !== undefined) {\n this._clearSubRefreshTimeout(channel);\n } else {\n return;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (resp.error || resp.status !== 200 || this._clientID !== clientID) {\n return;\n }\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n const token = channelsData[channel];\n if (!token) {\n return;\n }\n const msg = {\n method: this._methodType.SUB_REFRESH,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n\n this._call(msg).then(resolveCtx => {\n this._subRefreshResponse(\n channel,\n this._decoder.decodeCommandResult(this._methodType.SUB_REFRESH, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subRefreshError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n const data = {\n client: this._clientID,\n channels: [channel]\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _clearSubRefreshTimeout(channel) {\n if (this._subRefreshTimeouts[channel] !== undefined) {\n clearTimeout(this._subRefreshTimeouts[channel]);\n delete this._subRefreshTimeouts[channel];\n }\n }\n\n _subRefreshError(channel, err) {\n this._debug('subscription refresh error', channel, err);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n const jitter = Math.round(Math.random() * 1000);\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._config.subRefreshInterval + jitter);\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n return;\n }\n\n _subRefreshResponse(channel, result) {\n this._debug('subscription refresh success', channel);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n return;\n };\n\n _subscribe(sub, isResubscribe) {\n this._debug('subscribing on', sub.channel);\n const channel = sub.channel;\n\n if (!(channel in this._subs)) {\n this._subs[channel] = sub;\n }\n\n if (!this.isConnected()) {\n // subscribe will be called later\n sub._setNew();\n return;\n }\n\n sub._setSubscribing(isResubscribe);\n\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel\n }\n };\n\n // If channel name does not start with privateChannelPrefix - then we\n // can just send subscription message to Centrifuge. If channel name\n // starts with privateChannelPrefix - then this is a private channel\n // and we should ask web application backend for permission first.\n if (startsWith(channel, this._config.privateChannelPrefix)) {\n // private channel.\n if (this._isSubscribeBatching) {\n this._privateChannels[channel] = true;\n } else {\n this.startSubscribeBatching();\n this._subscribe(sub);\n this.stopSubscribeBatching();\n }\n } else {\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n _unsubscribe(sub) {\n delete this._subs[sub.channel];\n delete this._lastOffset[sub.channel];\n delete this._lastSeq[sub.channel];\n delete this._lastGen[sub.channel];\n if (this.isConnected()) {\n // No need to unsubscribe in disconnected state - i.e. client already unsubscribed.\n this._addMessage({\n method: this._methodType.UNSUBSCRIBE,\n params: {\n channel: sub.channel\n }\n });\n }\n };\n\n _getTTLMilliseconds(ttl) {\n // https://stackoverflow.com/questions/12633405/what-is-the-maximum-delay-for-setinterval\n return Math.min(ttl * 1000, 2147483647);\n }\n\n getSub(channel) {\n return this._getSub(channel);\n }\n\n _getSub(channel) {\n const sub = this._subs[channel];\n if (!sub) {\n return null;\n }\n return sub;\n };\n\n _isServerSub(channel) {\n return this._serverSubs[channel] !== undefined;\n };\n\n _connectResponse(result, isRecover) {\n const wasReconnecting = this._reconnecting;\n this._reconnecting = false;\n this._resetRetry();\n this._refreshRequired = false;\n\n if (this.isConnected()) {\n return;\n }\n\n if (this._latencyStart !== null) {\n this._latency = (new Date()).getTime() - this._latencyStart.getTime();\n this._latencyStart = null;\n }\n\n this._clientID = result.client;\n this._setStatus('connected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n }\n\n if (result.expires) {\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n\n this.startBatching();\n this.startSubscribeBatching();\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n if (sub._shouldResubscribe()) {\n this._subscribe(sub, wasReconnecting);\n }\n }\n }\n this.stopSubscribeBatching();\n this.stopBatching();\n\n this._startPing();\n\n const ctx = {\n client: result.client,\n transport: this._transportName,\n latency: this._latency\n };\n if (result.data) {\n ctx.data = result.data;\n }\n\n this.emit('connect', ctx);\n\n if (result.subs) {\n this._processServerSubs(result.subs);\n }\n };\n\n _processServerSubs(subs) {\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n const isResubscribe = this._serverSubs[channel] !== undefined;\n let subCtx = {channel: channel, isResubscribe: isResubscribe};\n subCtx = this._expandSubscribeContext(subCtx, sub);\n this.emit('subscribe', subCtx);\n }\n }\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n if (sub.recovered) {\n let pubs = sub.publications;\n if (pubs && pubs.length > 0) {\n\n // handle legacy order.\n // TODO: remove as soon as Centrifuge v1 released.\n if (pubs.length > 1 && (!pubs[0].offset || pubs[0].offset > pubs[1].offset)) {\n pubs = pubs.reverse();\n }\n\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n }\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n }\n }\n };\n\n _stopPing() {\n if (this._pongTimeout !== null) {\n clearTimeout(this._pongTimeout);\n this._pongTimeout = null;\n }\n if (this._pingTimeout !== null) {\n clearTimeout(this._pingTimeout);\n this._pingTimeout = null;\n }\n };\n\n _startPing() {\n if (this._config.ping !== true || this._config.pingInterval <= 0) {\n return;\n }\n if (!this.isConnected()) {\n return;\n }\n\n this._pingTimeout = setTimeout(() => {\n if (!this.isConnected()) {\n this._stopPing();\n return;\n }\n this.ping();\n this._pongTimeout = setTimeout(() => {\n this._disconnect('no ping', true);\n }, this._config.pongWaitTimeout);\n }, this._config.pingInterval);\n };\n\n _restartPing() {\n this._stopPing();\n this._startPing();\n };\n\n _subscribeError(channel, error) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n if (error.code === 0 && error.message === _errorTimeout) { // client side timeout.\n this._disconnect('timeout', true);\n return;\n }\n sub._setSubscribeError(error);\n };\n\n _expandSubscribeContext(ctx, result) {\n let recovered = false;\n if ('recovered' in result) {\n recovered = result.recovered;\n }\n ctx.recovered = recovered;\n\n let positioned = false;\n if ('positioned' in result) {\n positioned = result.positioned;\n }\n let epoch = '';\n if ('epoch' in result) {\n epoch = result.epoch;\n }\n let offset = 0;\n if ('offset' in result) {\n offset = result.offset;\n }\n if (positioned) {\n ctx.streamPosition = {\n 'offset': offset,\n 'epoch': epoch\n };\n };\n return ctx;\n }\n\n _subscribeResponse(channel, isRecover, result) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n sub._setSubscribeSuccess(result);\n\n let pubs = result.publications;\n if (pubs && pubs.length > 0) {\n if (pubs.length >= 2 && !pubs[0].offset && !pubs[1].offset) {\n // handle legacy order.\n pubs = pubs.reverse();\n }\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n\n if (result.recoverable && (!isRecover || !result.recovered)) {\n this._lastSeq[channel] = result.seq || 0;\n this._lastGen[channel] = result.gen || 0;\n this._lastOffset[channel] = result.offset || 0;\n }\n\n this._lastEpoch[channel] = result.epoch || '';\n\n if (result.recoverable) {\n sub._recoverable = true;\n }\n\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n };\n\n _handleReply(reply, next) {\n const id = reply.id;\n const result = reply.result;\n\n if (!(id in this._callbacks)) {\n next();\n return;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n\n if (!errorExists(reply)) {\n const callback = callbacks.callback;\n if (!callback) {\n return;\n }\n callback({result, next});\n } else {\n const errback = callbacks.errback;\n if (!errback) {\n next();\n return;\n }\n const error = reply.error;\n errback({error, next});\n }\n }\n\n _handleJoin(channel, join) {\n const ctx = {'info': join.info};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('join', ctx);\n }\n return;\n }\n sub.emit('join', ctx);\n };\n\n _handleLeave(channel, leave) {\n const ctx = {'info': leave.info};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('leave', ctx);\n }\n return;\n }\n sub.emit('leave', ctx);\n };\n\n _handleUnsub(channel, unsub) {\n const ctx = {};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n delete this._serverSubs[channel];\n ctx.channel = channel;\n this.emit('unsubscribe', ctx);\n }\n return;\n }\n sub.unsubscribe();\n if (unsub.resubscribe === true) {\n sub.subscribe();\n }\n };\n\n _handleSub(channel, sub) {\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n let ctx = {'channel': channel, isResubscribe: false};\n ctx = this._expandSubscribeContext(ctx, sub);\n this.emit('subscribe', ctx);\n };\n\n _handlePublication(channel, pub) {\n const sub = this._getSub(channel);\n const ctx = {\n 'data': pub.data,\n 'seq': pub.seq,\n 'gen': pub.gen,\n 'offset': pub.offset\n };\n if (pub.info) {\n ctx.info = pub.info;\n }\n if (!sub) {\n if (this._isServerSub(channel)) {\n if (pub.seq !== undefined) {\n this._serverSubs[channel].seq = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._serverSubs[channel].gen = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._serverSubs[channel].offset = pub.offset;\n }\n ctx.channel = channel;\n this.emit('publish', ctx);\n }\n return;\n }\n if (pub.seq !== undefined) {\n this._lastSeq[channel] = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._lastGen[channel] = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._lastOffset[channel] = pub.offset;\n }\n sub.emit('publish', ctx);\n };\n\n _handleMessage(message) {\n this.emit('message', message.data);\n };\n\n _handlePush(data, next) {\n const push = this._decoder.decodePush(data);\n let type = 0;\n if ('type' in push) {\n type = push['type'];\n }\n const channel = push.channel;\n\n if (type === this._pushType.PUBLICATION) {\n const pub = this._decoder.decodePushData(this._pushType.PUBLICATION, push.data);\n this._handlePublication(channel, pub);\n } else if (type === this._pushType.MESSAGE) {\n const message = this._decoder.decodePushData(this._pushType.MESSAGE, push.data);\n this._handleMessage(message);\n } else if (type === this._pushType.JOIN) {\n const join = this._decoder.decodePushData(this._pushType.JOIN, push.data);\n this._handleJoin(channel, join);\n } else if (type === this._pushType.LEAVE) {\n const leave = this._decoder.decodePushData(this._pushType.LEAVE, push.data);\n this._handleLeave(channel, leave);\n } else if (type === this._pushType.UNSUB) {\n const unsub = this._decoder.decodePushData(this._pushType.UNSUB, push.data);\n this._handleUnsub(channel, unsub);\n } else if (type === this._pushType.SUB) {\n const sub = this._decoder.decodePushData(this._pushType.SUB, push.data);\n this._handleSub(channel, sub);\n }\n next();\n }\n\n _flush() {\n const messages = this._messages.slice(0);\n this._messages = [];\n this._transportSend(messages);\n };\n\n _ping() {\n const msg = {\n method: this._methodType.PING\n };\n this._call(msg).then(resolveCtx => {\n this._pingResponse(this._decoder.decodeCommandResult(this._methodType.PING, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._debug('ping error', rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n _pingResponse(result) {\n if (!this.isConnected()) {\n return;\n }\n this._stopPing();\n this._startPing();\n }\n\n _getLastSeq(channel) {\n const lastSeq = this._lastSeq[channel];\n if (lastSeq) {\n return lastSeq;\n }\n return 0;\n };\n\n _getLastOffset(channel) {\n const lastOffset = this._lastOffset[channel];\n if (lastOffset) {\n return lastOffset;\n }\n return 0;\n };\n\n _getLastGen(channel) {\n const lastGen = this._lastGen[channel];\n if (lastGen) {\n return lastGen;\n }\n return 0;\n };\n\n _getLastEpoch(channel) {\n const lastEpoch = this._lastEpoch[channel];\n if (lastEpoch) {\n return lastEpoch;\n }\n return '';\n };\n\n _createErrorObject(message, code) {\n const errObject = {\n message: message,\n code: code || 0\n };\n\n return errObject;\n };\n\n _registerCall(id, callback, errback) {\n this._callbacks[id] = {\n callback: callback,\n errback: errback,\n timeout: null\n };\n this._callbacks[id].timeout = setTimeout(() => {\n delete this._callbacks[id];\n if (isFunction(errback)) {\n errback({error: this._createErrorObject(_errorTimeout)});\n }\n }, this._config.timeout);\n };\n\n _addMessage(message) {\n let id = this._nextMessageId();\n message.id = id;\n if (this._isBatching === true) {\n this._messages.push(message);\n } else {\n this._transportSend([message]);\n }\n return id;\n };\n\n isConnected() {\n return this._isConnected();\n }\n\n connect() {\n this._connect();\n };\n\n disconnect() {\n this._disconnect('client', false);\n };\n\n ping() {\n return this._ping();\n }\n\n startBatching() {\n // start collecting messages without sending them to Centrifuge until flush\n // method called\n this._isBatching = true;\n };\n\n stopBatching() {\n this._isBatching = false;\n this._flush();\n };\n\n startSubscribeBatching() {\n // start collecting private channels to create bulk authentication\n // request to subscribeEndpoint when stopSubscribeBatching will be called\n this._isSubscribeBatching = true;\n };\n\n stopSubscribeBatching() {\n // create request to subscribeEndpoint with collected private channels\n // to ask if this client can subscribe on each channel\n this._isSubscribeBatching = false;\n const authChannels = this._privateChannels;\n this._privateChannels = {};\n\n const channels = [];\n\n for (const channel in authChannels) {\n if (authChannels.hasOwnProperty(channel)) {\n const sub = this._getSub(channel);\n if (!sub) {\n continue;\n }\n channels.push(channel);\n }\n }\n\n if (channels.length === 0) {\n this._debug('no private channels found, no need to make request');\n return;\n }\n\n const data = {\n client: this._clientID,\n channels: channels\n };\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n this._debug('authorization request failed');\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n this._subscribeError(channel, this._createErrorObject('authorization request failed'));\n }\n }\n return;\n }\n\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n // try to send all subscriptions in one request.\n let batch = false;\n\n if (!this._isBatching) {\n this.startBatching();\n batch = true;\n }\n\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n const token = channelsData[channel];\n\n if (!token) {\n // subscription:error\n this._subscribeError(channel, this._createErrorObject('permission denied', 103));\n continue;\n } else {\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n continue;\n }\n\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n }\n }\n\n if (batch) {\n this.stopBatching();\n }\n\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n subscribe(channel, events) {\n const currentSub = this._getSub(channel);\n if (currentSub !== null) {\n currentSub._setEvents(events);\n if (currentSub._isUnsubscribed()) {\n currentSub.subscribe();\n }\n return currentSub;\n }\n const sub = new Subscription(this, channel, events);\n this._subs[channel] = sub;\n sub.subscribe();\n return sub;\n };\n}\n","import {CentrifugeProtobuf} from './protobuf.js';\nexport default CentrifugeProtobuf;\n","export const JsonMethodType = {\n CONNECT: 0,\n SUBSCRIBE: 1,\n UNSUBSCRIBE: 2,\n PUBLISH: 3,\n PRESENCE: 4,\n PRESENCE_STATS: 5,\n HISTORY: 6,\n PING: 7,\n SEND: 8,\n RPC: 9,\n REFRESH: 10,\n SUB_REFRESH: 11\n};\n\nexport const JsonPushType = {\n PUBLICATION: 0,\n JOIN: 1,\n LEAVE: 2,\n UNSUB: 3,\n MESSAGE: 4,\n SUB: 5\n};\n\nexport class JsonEncoder {\n encodeCommands(commands) {\n const encodedCommands = [];\n for (const i in commands) {\n if (commands.hasOwnProperty(i)) {\n encodedCommands.push(JSON.stringify(commands[i]));\n }\n }\n return encodedCommands.join('\\n');\n }\n}\n\nexport class JsonDecoder {\n decodeReplies(data) {\n const replies = [];\n const encodedReplies = data.split('\\n');\n for (const i in encodedReplies) {\n if (encodedReplies.hasOwnProperty(i)) {\n if (!encodedReplies[i]) {\n continue;\n }\n const reply = JSON.parse(encodedReplies[i]);\n replies.push(reply);\n }\n }\n return replies;\n }\n\n decodeCommandResult(methodType, data) {\n return data;\n }\n\n decodePush(data) {\n return data;\n }\n\n decodePushData(pushType, data) {\n return data;\n }\n}\n\n","import {Centrifuge} from './centrifuge.js';\n\nconst protobuf = require('protobufjs/light');\nconst proto = protobuf.Root.fromJSON(require('./client.proto.json'));\n\nconst methodValues = proto.lookupEnum('MethodType').values;\n\nconst protobufMethodType = {\n CONNECT: methodValues.CONNECT,\n SUBSCRIBE: methodValues.SUBSCRIBE,\n UNSUBSCRIBE: methodValues.UNSUBSCRIBE,\n PUBLISH: methodValues.PUBLISH,\n PRESENCE: methodValues.PRESENCE,\n PRESENCE_STATS: methodValues.PRESENCE_STATS,\n HISTORY: methodValues.HISTORY,\n PING: methodValues.PING,\n RPC: methodValues.RPC,\n SEND: methodValues.SEND,\n REFRESH: methodValues.REFRESH,\n SUB_REFRESH: methodValues.SUB_REFRESH\n};\n\nconst methodSchema = {\n CONNECT: [\n proto.lookupType('protocol.ConnectRequest'),\n proto.lookupType('protocol.ConnectResult')\n ],\n REFRESH: [\n proto.lookupType('protocol.RefreshRequest'),\n proto.lookupType('protocol.RefreshResult')\n ],\n SUBSCRIBE: [\n proto.lookupType('protocol.SubscribeRequest'),\n proto.lookupType('protocol.SubscribeResult')\n ],\n SUB_REFRESH: [\n proto.lookupType('protocol.SubRefreshRequest'),\n proto.lookupType('protocol.SubRefreshResult')\n ],\n UNSUBSCRIBE: [\n proto.lookupType('protocol.UnsubscribeRequest'),\n proto.lookupType('protocol.UnsubscribeResult')\n ],\n PUBLISH: [\n proto.lookupType('protocol.PublishRequest'),\n proto.lookupType('protocol.PublishResult')\n ],\n PRESENCE: [\n proto.lookupType('protocol.PresenceRequest'),\n proto.lookupType('protocol.PresenceResult')\n ],\n PRESENCE_STATS: [\n proto.lookupType('protocol.PresenceStatsRequest'),\n proto.lookupType('protocol.PresenceStatsResult')\n ],\n HISTORY: [\n proto.lookupType('protocol.HistoryRequest'),\n proto.lookupType('protocol.HistoryResult')\n ],\n PING: [\n proto.lookupType('protocol.PingRequest'),\n proto.lookupType('protocol.PingResult')\n ],\n RPC: [\n proto.lookupType('protocol.RPCRequest'),\n proto.lookupType('protocol.RPCResult')\n ],\n SEND: [\n proto.lookupType('protocol.SendRequest'),\n null\n ]\n};\n\nconst protobufPushType = {\n PUBLICATION: proto.lookupEnum('PushType').values.PUBLICATION,\n JOIN: proto.lookupEnum('PushType').values.JOIN,\n LEAVE: proto.lookupEnum('PushType').values.LEAVE,\n UNSUB: proto.lookupEnum('PushType').values.UNSUB,\n MESSAGE: proto.lookupEnum('PushType').values.MESSAGE,\n SUB: proto.lookupEnum('PushType').values.SUB\n};\n\nconst PushSchema = {\n PUBLICATION: proto.lookupType('protocol.Publication'),\n JOIN: proto.lookupType('protocol.Join'),\n LEAVE: proto.lookupType('protocol.Leave'),\n UNSUB: proto.lookupType('protocol.Unsub'),\n MESSAGE: proto.lookupType('protocol.Message'),\n SUB: proto.lookupType('protocol.Sub')\n};\n\nconst Push = proto.lookupType('protocol.Push');\nconst Command = proto.lookupType('protocol.Command');\nconst Reply = proto.lookupType('protocol.Reply');\n\nexport class ProtobufEncoder {\n encodeCommands(commands) {\n const writer = protobuf.Writer.create();\n for (const i in commands) {\n if (commands.hasOwnProperty(i)) {\n const command = Object.assign({}, commands[i]);\n if (command.params) {\n let type;\n if (!command.method) {\n command.method = protobufMethodType.CONNECT;\n };\n switch (command.method) {\n case protobufMethodType.CONNECT:\n type = methodSchema.CONNECT[0];\n break;\n case protobufMethodType.REFRESH:\n type = methodSchema.REFRESH[0];\n break;\n case protobufMethodType.SUBSCRIBE:\n type = methodSchema.SUBSCRIBE[0];\n break;\n case protobufMethodType.SUB_REFRESH:\n type = methodSchema.SUB_REFRESH[0];\n break;\n case protobufMethodType.UNSUBSCRIBE:\n type = methodSchema.UNSUBSCRIBE[0];\n break;\n case protobufMethodType.PUBLISH:\n type = methodSchema.PUBLISH[0];\n break;\n case protobufMethodType.PRESENCE:\n type = methodSchema.PRESENCE[0];\n break;\n case protobufMethodType.PRESENCE_STATS:\n type = methodSchema.PRESENCE_STATS[0];\n break;\n case protobufMethodType.HISTORY:\n type = methodSchema.HISTORY[0];\n break;\n case protobufMethodType.PING:\n type = methodSchema.PING[0];\n break;\n case protobufMethodType.RPC:\n type = methodSchema.RPC[0];\n break;\n case protobufMethodType.SEND:\n type = methodSchema.SEND[0];\n break;\n }\n command.params = type.encode(command.params).finish();\n }\n Command.encodeDelimited(command, writer);\n }\n }\n return writer.finish();\n }\n}\n\nexport class ProtobufDecoder {\n decodeReplies(data) {\n const replies = [];\n const reader = protobuf.Reader.create(new Uint8Array(data));\n while (reader.pos < reader.len) {\n const reply = Reply.decodeDelimited(reader);\n replies.push(reply);\n }\n return replies;\n }\n\n decodeCommandResult(methodType, data) {\n var type;\n switch (methodType) {\n case protobufMethodType.CONNECT:\n type = methodSchema.CONNECT[1];\n break;\n case protobufMethodType.REFRESH:\n type = methodSchema.REFRESH[1];\n break;\n case protobufMethodType.SUBSCRIBE:\n type = methodSchema.SUBSCRIBE[1];\n break;\n case protobufMethodType.SUB_REFRESH:\n type = methodSchema.SUB_REFRESH[1];\n break;\n case protobufMethodType.UNSUBSCRIBE:\n type = methodSchema.UNSUBSCRIBE[1];\n break;\n case protobufMethodType.PUBLISH:\n type = methodSchema.PUBLISH[1];\n break;\n case protobufMethodType.PRESENCE:\n type = methodSchema.PRESENCE[1];\n break;\n case protobufMethodType.PRESENCE_STATS:\n type = methodSchema.PRESENCE_STATS[1];\n break;\n case protobufMethodType.HISTORY:\n type = methodSchema.HISTORY[1];\n break;\n case protobufMethodType.PING:\n type = methodSchema.PING[1];\n break;\n case protobufMethodType.RPC:\n type = methodSchema.RPC[1];\n break;\n }\n return this._decode(type, data);\n }\n\n decodePush(data) {\n return this._decode(Push, data);\n }\n\n decodePushData(pushType, data) {\n var type;\n switch (pushType) {\n case protobufPushType.PUBLICATION:\n type = PushSchema.PUBLICATION;\n break;\n case protobufPushType.MESSAGE:\n type = PushSchema.MESSAGE;\n break;\n case protobufPushType.JOIN:\n type = PushSchema.JOIN;\n break;\n case protobufPushType.LEAVE:\n type = PushSchema.LEAVE;\n break;\n case protobufPushType.UNSUB:\n type = PushSchema.UNSUB;\n break;\n case protobufPushType.SUB:\n type = PushSchema.SUB;\n break;\n }\n return this._decode(type, data);\n }\n\n _decode(type, data) {\n let res;\n try {\n res = type.decode(data);\n } catch (err) {\n return null;\n }\n return res;\n }\n}\n\nexport class CentrifugeProtobuf extends Centrifuge {\n _formatOverride(format) {\n if (format === 'protobuf') {\n this._binary = true;\n this._methodType = protobufMethodType;\n this._pushType = protobufPushType;\n this._encoder = new ProtobufEncoder();\n this._decoder = new ProtobufDecoder();\n return true;\n }\n return false;\n }\n}\n","import EventEmitter from 'events';\n\nimport {\n isFunction\n} from './utils';\n\nconst _STATE_NEW = 0;\nconst _STATE_SUBSCRIBING = 1;\nconst _STATE_SUCCESS = 2;\nconst _STATE_ERROR = 3;\nconst _STATE_UNSUBSCRIBED = 4;\n\nexport default class Subscription extends EventEmitter {\n constructor(centrifuge, channel, events) {\n super();\n this.channel = channel;\n this._centrifuge = centrifuge;\n this._status = _STATE_NEW;\n this._error = null;\n this._isResubscribe = false;\n this._ready = false;\n this._subscriptionPromise = null;\n this._noResubscribe = false;\n this._recoverable = false;\n this._recover = false;\n this._setEvents(events);\n this._initializePromise();\n this._promises = {};\n this._promiseId = 0;\n this.on('error', function (errContext) {\n this._centrifuge._debug('subscription error', errContext);\n });\n }\n\n _nextPromiseId() {\n return ++this._promiseId;\n }\n\n _initializePromise() {\n // this helps us to wait until subscription will successfully\n // subscribe and call actions such as presence, history etc in\n // synchronous way.\n this._ready = false;\n\n this._subscriptionPromise = new Promise((resolve, reject) => {\n this._resolve = value => {\n this._ready = true;\n resolve(value);\n };\n this._reject = err => {\n this._ready = true;\n reject(err);\n };\n }).then(function () {}, function () {});\n };\n\n _needRecover() {\n return this._recoverable === true && this._recover === true;\n };\n\n _setEvents(events) {\n if (!events) {\n return;\n }\n if (isFunction(events)) {\n // events is just a function to handle publication received from channel.\n this.on('publish', events);\n } else if (Object.prototype.toString.call(events) === Object.prototype.toString.call({})) {\n const knownEvents = ['publish', 'join', 'leave', 'unsubscribe', 'subscribe', 'error'];\n for (let i = 0, l = knownEvents.length; i < l; i++) {\n const ev = knownEvents[i];\n if (ev in events) {\n this.on(ev, events[ev]);\n }\n }\n }\n };\n\n _isNew() {\n return this._status === _STATE_NEW;\n };\n\n _isUnsubscribed() {\n return this._status === _STATE_UNSUBSCRIBED;\n };\n\n _isSubscribing() {\n return this._status === _STATE_SUBSCRIBING;\n };\n\n _isReady() {\n return this._status === _STATE_SUCCESS || this._status === _STATE_ERROR;\n };\n\n _isSuccess() {\n return this._status === _STATE_SUCCESS;\n };\n\n _isError() {\n return this._status === _STATE_ERROR;\n };\n\n _setNew() {\n this._status = _STATE_NEW;\n };\n\n _setSubscribing(isResubscribe) {\n this._isResubscribe = isResubscribe || false;\n if (this._ready === true) {\n // new promise for this subscription\n this._initializePromise();\n }\n this._status = _STATE_SUBSCRIBING;\n };\n\n _setSubscribeSuccess(subscribeResult) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._status = _STATE_SUCCESS;\n const successContext = this._getSubscribeSuccessContext(subscribeResult);\n this._recover = false;\n this.emit('subscribe', successContext);\n this._resolve(successContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].resolve();\n delete this._promises[id];\n }\n };\n\n _setSubscribeError(err) {\n if (this._status === _STATE_ERROR) {\n return;\n }\n this._status = _STATE_ERROR;\n this._error = err;\n const errContext = this._getSubscribeErrorContext();\n this.emit('error', errContext);\n this._reject(errContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n };\n\n _triggerUnsubscribe() {\n this.emit('unsubscribe', {\n channel: this.channel\n });\n };\n\n _setUnsubscribed(noResubscribe) {\n this._centrifuge._clearSubRefreshTimeout(this.channel);\n if (this._status === _STATE_UNSUBSCRIBED) {\n return;\n }\n const needTrigger = this._status === _STATE_SUCCESS;\n this._status = _STATE_UNSUBSCRIBED;\n if (noResubscribe === true) {\n this._recover = false;\n this._noResubscribe = true;\n delete this._centrifuge._lastSeq[this.channel];\n delete this._centrifuge._lastGen[this.channel];\n delete this._centrifuge._lastEpoch[this.channel];\n }\n if (needTrigger) {\n this._triggerUnsubscribe();\n }\n };\n\n _shouldResubscribe() {\n return !this._noResubscribe;\n };\n\n _getSubscribeSuccessContext(subscribeResult) {\n let ctx = {\n channel: this.channel,\n isResubscribe: this._isResubscribe\n };\n if (subscribeResult) {\n // subscribeResult not available when called from Subscription.ready method at the moment.\n ctx = this._centrifuge._expandSubscribeContext(ctx, subscribeResult);\n }\n return ctx;\n };\n\n _getSubscribeErrorContext() {\n const subscribeErrorContext = this._error;\n subscribeErrorContext.channel = this.channel;\n subscribeErrorContext.isResubscribe = this._isResubscribe;\n return subscribeErrorContext;\n };\n\n ready(callback, errback) {\n if (this._ready) {\n if (this._isSuccess()) {\n callback(this._getSubscribeSuccessContext());\n } else {\n errback(this._getSubscribeErrorContext());\n }\n }\n };\n\n subscribe() {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._noResubscribe = false;\n this._centrifuge._subscribe(this);\n };\n\n unsubscribe() {\n this._setUnsubscribed(true);\n this._centrifuge._unsubscribe(this);\n };\n\n _methodCall() {\n if (this._isSuccess()) {\n return Promise.resolve();\n } else if (this._isError()) {\n return Promise.reject(this._error);\n }\n let subPromise = new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({'code': 0, 'message': 'timeout'});\n }, this._centrifuge._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n return subPromise;\n }\n\n publish(data) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.publish(self.channel, data);\n });\n };\n\n presence() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presence(self.channel);\n });\n };\n\n presenceStats() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presenceStats(self.channel);\n });\n };\n\n history(options) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.history(self.channel, options);\n });\n };\n}\n","export function startsWith(value, prefix) {\n return value.lastIndexOf(prefix, 0) === 0;\n};\n\nexport function isFunction(value) {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'function';\n};\n\nexport function log(level, args) {\n if (global.console) {\n const logger = global.console[level];\n\n if (isFunction(logger)) {\n logger.apply(global.console, args);\n }\n }\n};\n\nexport function backoff(step, min, max) {\n const jitter = 0.5 * Math.random();\n const interval = Math.min(max, min * Math.pow(2, step + 1));\n\n return Math.floor((1 - jitter) * interval);\n};\n\nexport function errorExists(data) {\n return 'error' in data && data.error !== null;\n};\n\nexport function extend(a, b) {\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n return a;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function eventListener() {\n if (errorListener !== undefined) {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n var errorListener;\n\n // Adding an error listener is not optional because\n // if an error is thrown on an event emitter we cannot\n // guarantee that the actual event we are waiting will\n // be fired. The result could be a silent way to create\n // memory or file descriptor leaks, which is something\n // we should avoid.\n if (name !== 'error') {\n errorListener = function errorListener(err) {\n emitter.removeListener(name, eventListener);\n reject(err);\n };\n\n emitter.once('error', errorListener);\n }\n\n emitter.once(name, eventListener);\n });\n}\n","// light library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-light\");","\"use strict\";\n/**\n * Runtime message from/to plain object converters.\n * @namespace\n */\nvar converter = exports;\n\nvar Enum = require(\"./enum\"),\n util = require(\"./util\");\n\n/**\n * Generates a partial value fromObject conveter.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} prop Property reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genValuePartial_fromObject(gen, field, fieldIndex, prop) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n if (field.resolvedType) {\n if (field.resolvedType instanceof Enum) { gen\n (\"switch(d%s){\", prop);\n for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0; i < keys.length; ++i) {\n if (field.repeated && values[keys[i]] === field.typeDefault) gen\n (\"default:\");\n gen\n (\"case%j:\", keys[i])\n (\"case %i:\", values[keys[i]])\n (\"m%s=%j\", prop, values[keys[i]])\n (\"break\");\n } gen\n (\"}\");\n } else gen\n (\"if(typeof d%s!==\\\"object\\\")\", prop)\n (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n (\"m%s=types[%i].fromObject(d%s)\", prop, fieldIndex, prop);\n } else {\n var isUnsigned = false;\n switch (field.type) {\n case \"double\":\n case \"float\": gen\n (\"m%s=Number(d%s)\", prop, prop); // also catches \"NaN\", \"Infinity\"\n break;\n case \"uint32\":\n case \"fixed32\": gen\n (\"m%s=d%s>>>0\", prop, prop);\n break;\n case \"int32\":\n case \"sint32\":\n case \"sfixed32\": gen\n (\"m%s=d%s|0\", prop, prop);\n break;\n case \"uint64\":\n isUnsigned = true;\n // eslint-disable-line no-fallthrough\n case \"int64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(util.Long)\")\n (\"(m%s=util.Long.fromValue(d%s)).unsigned=%j\", prop, prop, isUnsigned)\n (\"else if(typeof d%s===\\\"string\\\")\", prop)\n (\"m%s=parseInt(d%s,10)\", prop, prop)\n (\"else if(typeof d%s===\\\"number\\\")\", prop)\n (\"m%s=d%s\", prop, prop)\n (\"else if(typeof d%s===\\\"object\\\")\", prop)\n (\"m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)\", prop, prop, prop, isUnsigned ? \"true\" : \"\");\n break;\n case \"bytes\": gen\n (\"if(typeof d%s===\\\"string\\\")\", prop)\n (\"util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)\", prop, prop, prop)\n (\"else if(d%s.length)\", prop)\n (\"m%s=d%s\", prop, prop);\n break;\n case \"string\": gen\n (\"m%s=String(d%s)\", prop, prop);\n break;\n case \"bool\": gen\n (\"m%s=Boolean(d%s)\", prop, prop);\n break;\n /* default: gen\n (\"m%s=d%s\", prop, prop);\n break; */\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a plain object to runtime message converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.fromObject = function fromObject(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var fields = mtype.fieldsArray;\n var gen = util.codegen([\"d\"], mtype.name + \"$fromObject\")\n (\"if(d instanceof this.ctor)\")\n (\"return d\");\n if (!fields.length) return gen\n (\"return new this.ctor\");\n gen\n (\"var m=new this.ctor\");\n for (var i = 0; i < fields.length; ++i) {\n var field = fields[i].resolve(),\n prop = util.safeProp(field.name);\n\n // Map fields\n if (field.map) { gen\n (\"if(d%s){\", prop)\n (\"if(typeof d%s!==\\\"object\\\")\", prop)\n (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n (\"m%s={}\", prop)\n (\"for(var ks=Object.keys(d%s),i=0;i>>0,m%s.high>>>0).toNumber(%s):m%s\", prop, prop, prop, prop, isUnsigned ? \"true\": \"\", prop);\n break;\n case \"bytes\": gen\n (\"d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s\", prop, prop, prop, prop, prop);\n break;\n default: gen\n (\"d%s=m%s\", prop, prop);\n break;\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a runtime message to plain object converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.toObject = function toObject(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById);\n if (!fields.length)\n return util.codegen()(\"return {}\");\n var gen = util.codegen([\"m\", \"o\"], mtype.name + \"$toObject\")\n (\"if(!o)\")\n (\"o={}\")\n (\"var d={}\");\n\n var repeatedFields = [],\n mapFields = [],\n normalFields = [],\n i = 0;\n for (; i < fields.length; ++i)\n if (!fields[i].partOf)\n ( fields[i].resolve().repeated ? repeatedFields\n : fields[i].map ? mapFields\n : normalFields).push(fields[i]);\n\n if (repeatedFields.length) { gen\n (\"if(o.arrays||o.defaults){\");\n for (i = 0; i < repeatedFields.length; ++i) gen\n (\"d%s=[]\", util.safeProp(repeatedFields[i].name));\n gen\n (\"}\");\n }\n\n if (mapFields.length) { gen\n (\"if(o.objects||o.defaults){\");\n for (i = 0; i < mapFields.length; ++i) gen\n (\"d%s={}\", util.safeProp(mapFields[i].name));\n gen\n (\"}\");\n }\n\n if (normalFields.length) { gen\n (\"if(o.defaults){\");\n for (i = 0; i < normalFields.length; ++i) {\n var field = normalFields[i],\n prop = util.safeProp(field.name);\n if (field.resolvedType instanceof Enum) gen\n (\"d%s=o.enums===String?%j:%j\", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault);\n else if (field.long) gen\n (\"if(util.Long){\")\n (\"var n=new util.Long(%i,%i,%j)\", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)\n (\"d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():n\", prop)\n (\"}else\")\n (\"d%s=o.longs===String?%j:%i\", prop, field.typeDefault.toString(), field.typeDefault.toNumber());\n else if (field.bytes) {\n var arrayDefault = \"[\" + Array.prototype.slice.call(field.typeDefault).join(\",\") + \"]\";\n gen\n (\"if(o.bytes===String)d%s=%j\", prop, String.fromCharCode.apply(String, field.typeDefault))\n (\"else{\")\n (\"d%s=%s\", prop, arrayDefault)\n (\"if(o.bytes!==Array)d%s=util.newBuffer(d%s)\", prop, prop)\n (\"}\");\n } else gen\n (\"d%s=%j\", prop, field.typeDefault); // also messages (=null)\n } gen\n (\"}\");\n }\n var hasKs2 = false;\n for (i = 0; i < fields.length; ++i) {\n var field = fields[i],\n index = mtype._fieldsArray.indexOf(field),\n prop = util.safeProp(field.name);\n if (field.map) {\n if (!hasKs2) { hasKs2 = true; gen\n (\"var ks2\");\n } gen\n (\"if(m%s&&(ks2=Object.keys(m%s)).length){\", prop, prop)\n (\"d%s={}\", prop)\n (\"for(var j=0;j>>3){\");\n\n var i = 0;\n for (; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n var field = mtype._fieldsArray[i].resolve(),\n type = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n ref = \"m\" + util.safeProp(field.name); gen\n (\"case %i:\", field.id);\n\n // Map fields\n if (field.map) { gen\n (\"if(%s===util.emptyObject)\", ref)\n (\"%s={}\", ref)\n (\"var c2 = r.uint32()+r.pos\");\n\n if (types.defaults[field.keyType] !== undefined) gen\n (\"k=%j\", types.defaults[field.keyType]);\n else gen\n (\"k=null\");\n\n if (types.defaults[type] !== undefined) gen\n (\"value=%j\", types.defaults[type]);\n else gen\n (\"value=null\");\n\n gen\n (\"while(r.pos>>3){\")\n (\"case 1: k=r.%s(); break\", field.keyType)\n (\"case 2:\");\n\n if (types.basic[type] === undefined) gen\n (\"value=types[%i].decode(r,r.uint32())\", i); // can't be groups\n else gen\n (\"value=r.%s()\", type);\n\n gen\n (\"break\")\n (\"default:\")\n (\"r.skipType(tag2&7)\")\n (\"break\")\n (\"}\")\n (\"}\");\n\n if (types.long[field.keyType] !== undefined) gen\n (\"%s[typeof k===\\\"object\\\"?util.longToHash(k):k]=value\", ref);\n else gen\n (\"%s[k]=value\", ref);\n\n // Repeated fields\n } else if (field.repeated) { gen\n\n (\"if(!(%s&&%s.length))\", ref, ref)\n (\"%s=[]\", ref);\n\n // Packable (always check for forward and backward compatiblity)\n if (types.packed[type] !== undefined) gen\n (\"if((t&7)===2){\")\n (\"var c2=r.uint32()+r.pos\")\n (\"while(r.pos>> 0, (field.id << 3 | 4) >>> 0)\n : gen(\"types[%i].encode(%s,w.uint32(%i).fork()).ldelim()\", fieldIndex, ref, (field.id << 3 | 2) >>> 0);\n}\n\n/**\n * Generates an encoder specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction encoder(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var gen = util.codegen([\"m\", \"w\"], mtype.name + \"$encode\")\n (\"if(!w)\")\n (\"w=Writer.create()\");\n\n var i, ref;\n\n // \"when a message is serialized its known fields should be written sequentially by field number\"\n var fields = /* initializes */ mtype.fieldsArray.slice().sort(util.compareFieldsById);\n\n for (var i = 0; i < fields.length; ++i) {\n var field = fields[i].resolve(),\n index = mtype._fieldsArray.indexOf(field),\n type = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n wireType = types.basic[type];\n ref = \"m\" + util.safeProp(field.name);\n\n // Map fields\n if (field.map) {\n gen\n (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)){\", ref, field.name) // !== undefined && !== null\n (\"for(var ks=Object.keys(%s),i=0;i>> 0, 8 | types.mapKey[field.keyType], field.keyType);\n if (wireType === undefined) gen\n (\"types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()\", index, ref); // can't be groups\n else gen\n (\".uint32(%i).%s(%s[ks[i]]).ldelim()\", 16 | wireType, type, ref);\n gen\n (\"}\")\n (\"}\");\n\n // Repeated fields\n } else if (field.repeated) { gen\n (\"if(%s!=null&&%s.length){\", ref, ref); // !== undefined && !== null\n\n // Packed repeated\n if (field.packed && types.packed[type] !== undefined) { gen\n\n (\"w.uint32(%i).fork()\", (field.id << 3 | 2) >>> 0)\n (\"for(var i=0;i<%s.length;++i)\", ref)\n (\"w.%s(%s[i])\", type, ref)\n (\"w.ldelim()\");\n\n // Non-packed\n } else { gen\n\n (\"for(var i=0;i<%s.length;++i)\", ref);\n if (wireType === undefined)\n genTypePartial(gen, field, index, ref + \"[i]\");\n else gen\n (\"w.uint32(%i).%s(%s[i])\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n } gen\n (\"}\");\n\n // Non-repeated\n } else {\n if (field.optional) gen\n (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j))\", ref, field.name); // !== undefined && !== null\n\n if (wireType === undefined)\n genTypePartial(gen, field, index, ref);\n else gen\n (\"w.uint32(%i).%s(%s)\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n }\n }\n\n return gen\n (\"return w\");\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n","\"use strict\";\nmodule.exports = Enum;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Enum.prototype = Object.create(ReflectionObject.prototype)).constructor = Enum).className = \"Enum\";\n\nvar Namespace = require(\"./namespace\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new enum instance.\n * @classdesc Reflected enum.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {Object.} [values] Enum values as an object, by name\n * @param {Object.} [options] Declared options\n * @param {string} [comment] The comment for this enum\n * @param {Object.} [comments] The value comments for this enum\n */\nfunction Enum(name, values, options, comment, comments) {\n ReflectionObject.call(this, name, options);\n\n if (values && typeof values !== \"object\")\n throw TypeError(\"values must be an object\");\n\n /**\n * Enum values by id.\n * @type {Object.}\n */\n this.valuesById = {};\n\n /**\n * Enum values by name.\n * @type {Object.}\n */\n this.values = Object.create(this.valuesById); // toJSON, marker\n\n /**\n * Enum comment text.\n * @type {string|null}\n */\n this.comment = comment;\n\n /**\n * Value comment texts, if any.\n * @type {Object.}\n */\n this.comments = comments || {};\n\n /**\n * Reserved ranges, if any.\n * @type {Array.}\n */\n this.reserved = undefined; // toJSON\n\n // Note that values inherit valuesById on their prototype which makes them a TypeScript-\n // compatible enum. This is used by pbts to write actual enum definitions that work for\n // static and reflection code alike instead of emitting generic object definitions.\n\n if (values)\n for (var keys = Object.keys(values), i = 0; i < keys.length; ++i)\n if (typeof values[keys[i]] === \"number\") // use forward entries only\n this.valuesById[ this.values[keys[i]] = values[keys[i]] ] = keys[i];\n}\n\n/**\n * Enum descriptor.\n * @interface IEnum\n * @property {Object.} values Enum values\n * @property {Object.} [options] Enum options\n */\n\n/**\n * Constructs an enum from an enum descriptor.\n * @param {string} name Enum name\n * @param {IEnum} json Enum descriptor\n * @returns {Enum} Created enum\n * @throws {TypeError} If arguments are invalid\n */\nEnum.fromJSON = function fromJSON(name, json) {\n var enm = new Enum(name, json.values, json.options, json.comment, json.comments);\n enm.reserved = json.reserved;\n return enm;\n};\n\n/**\n * Converts this enum to an enum descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IEnum} Enum descriptor\n */\nEnum.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , this.options,\n \"values\" , this.values,\n \"reserved\" , this.reserved && this.reserved.length ? this.reserved : undefined,\n \"comment\" , keepComments ? this.comment : undefined,\n \"comments\" , keepComments ? this.comments : undefined\n ]);\n};\n\n/**\n * Adds a value to this enum.\n * @param {string} name Value name\n * @param {number} id Value id\n * @param {string} [comment] Comment, if any\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a value with this name or id\n */\nEnum.prototype.add = function add(name, id, comment) {\n // utilized by the parser but not by .fromJSON\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n if (!util.isInteger(id))\n throw TypeError(\"id must be an integer\");\n\n if (this.values[name] !== undefined)\n throw Error(\"duplicate name '\" + name + \"' in \" + this);\n\n if (this.isReservedId(id))\n throw Error(\"id \" + id + \" is reserved in \" + this);\n\n if (this.isReservedName(name))\n throw Error(\"name '\" + name + \"' is reserved in \" + this);\n\n if (this.valuesById[id] !== undefined) {\n if (!(this.options && this.options.allow_alias))\n throw Error(\"duplicate id \" + id + \" in \" + this);\n this.values[name] = id;\n } else\n this.valuesById[this.values[name] = id] = name;\n\n this.comments[name] = comment || null;\n return this;\n};\n\n/**\n * Removes a value from this enum\n * @param {string} name Value name\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `name` is not a name of this enum\n */\nEnum.prototype.remove = function remove(name) {\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n var val = this.values[name];\n if (val == null)\n throw Error(\"name '\" + name + \"' does not exist in \" + this);\n\n delete this.valuesById[val];\n delete this.values[name];\n delete this.comments[name];\n\n return this;\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedId = function isReservedId(id) {\n return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedName = function isReservedName(name) {\n return Namespace.isReservedName(this.reserved, name);\n};\n","\"use strict\";\nmodule.exports = Field;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Field.prototype = Object.create(ReflectionObject.prototype)).constructor = Field).className = \"Field\";\n\nvar Enum = require(\"./enum\"),\n types = require(\"./types\"),\n util = require(\"./util\");\n\nvar Type; // cyclic\n\nvar ruleRe = /^required|optional|repeated$/;\n\n/**\n * Constructs a new message field instance. Note that {@link MapField|map fields} have their own class.\n * @name Field\n * @classdesc Reflected message field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.} [rule=\"optional\"] Field rule\n * @param {string|Object.} [extend] Extended type if different from parent\n * @param {Object.} [options] Declared options\n */\n\n/**\n * Constructs a field from a field descriptor.\n * @param {string} name Field name\n * @param {IField} json Field descriptor\n * @returns {Field} Created field\n * @throws {TypeError} If arguments are invalid\n */\nField.fromJSON = function fromJSON(name, json) {\n return new Field(name, json.id, json.type, json.rule, json.extend, json.options, json.comment);\n};\n\n/**\n * Not an actual constructor. Use {@link Field} instead.\n * @classdesc Base class of all reflected message fields. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports FieldBase\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.} [rule=\"optional\"] Field rule\n * @param {string|Object.} [extend] Extended type if different from parent\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction Field(name, id, type, rule, extend, options, comment) {\n\n if (util.isObject(rule)) {\n comment = extend;\n options = rule;\n rule = extend = undefined;\n } else if (util.isObject(extend)) {\n comment = options;\n options = extend;\n extend = undefined;\n }\n\n ReflectionObject.call(this, name, options);\n\n if (!util.isInteger(id) || id < 0)\n throw TypeError(\"id must be a non-negative integer\");\n\n if (!util.isString(type))\n throw TypeError(\"type must be a string\");\n\n if (rule !== undefined && !ruleRe.test(rule = rule.toString().toLowerCase()))\n throw TypeError(\"rule must be a string rule\");\n\n if (extend !== undefined && !util.isString(extend))\n throw TypeError(\"extend must be a string\");\n\n /**\n * Field rule, if any.\n * @type {string|undefined}\n */\n this.rule = rule && rule !== \"optional\" ? rule : undefined; // toJSON\n\n /**\n * Field type.\n * @type {string}\n */\n this.type = type; // toJSON\n\n /**\n * Unique field id.\n * @type {number}\n */\n this.id = id; // toJSON, marker\n\n /**\n * Extended type if different from parent.\n * @type {string|undefined}\n */\n this.extend = extend || undefined; // toJSON\n\n /**\n * Whether this field is required.\n * @type {boolean}\n */\n this.required = rule === \"required\";\n\n /**\n * Whether this field is optional.\n * @type {boolean}\n */\n this.optional = !this.required;\n\n /**\n * Whether this field is repeated.\n * @type {boolean}\n */\n this.repeated = rule === \"repeated\";\n\n /**\n * Whether this field is a map or not.\n * @type {boolean}\n */\n this.map = false;\n\n /**\n * Message this field belongs to.\n * @type {Type|null}\n */\n this.message = null;\n\n /**\n * OneOf this field belongs to, if any,\n * @type {OneOf|null}\n */\n this.partOf = null;\n\n /**\n * The field type's default value.\n * @type {*}\n */\n this.typeDefault = null;\n\n /**\n * The field's default value on prototypes.\n * @type {*}\n */\n this.defaultValue = null;\n\n /**\n * Whether this field's value should be treated as a long.\n * @type {boolean}\n */\n this.long = util.Long ? types.long[type] !== undefined : /* istanbul ignore next */ false;\n\n /**\n * Whether this field's value is a buffer.\n * @type {boolean}\n */\n this.bytes = type === \"bytes\";\n\n /**\n * Resolved type if not a basic type.\n * @type {Type|Enum|null}\n */\n this.resolvedType = null;\n\n /**\n * Sister-field within the extended type if a declaring extension field.\n * @type {Field|null}\n */\n this.extensionField = null;\n\n /**\n * Sister-field within the declaring namespace if an extended field.\n * @type {Field|null}\n */\n this.declaringField = null;\n\n /**\n * Internally remembers whether this field is packed.\n * @type {boolean|null}\n * @private\n */\n this._packed = null;\n\n /**\n * Comment for this field.\n * @type {string|null}\n */\n this.comment = comment;\n}\n\n/**\n * Determines whether this field is packed. Only relevant when repeated and working with proto2.\n * @name Field#packed\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"packed\", {\n get: function() {\n // defaults to packed=true if not explicity set to false\n if (this._packed === null)\n this._packed = this.getOption(\"packed\") !== false;\n return this._packed;\n }\n});\n\n/**\n * @override\n */\nField.prototype.setOption = function setOption(name, value, ifNotSet) {\n if (name === \"packed\") // clear cached before setting\n this._packed = null;\n return ReflectionObject.prototype.setOption.call(this, name, value, ifNotSet);\n};\n\n/**\n * Field descriptor.\n * @interface IField\n * @property {string} [rule=\"optional\"] Field rule\n * @property {string} type Field type\n * @property {number} id Field id\n * @property {Object.} [options] Field options\n */\n\n/**\n * Extension field descriptor.\n * @interface IExtensionField\n * @extends IField\n * @property {string} extend Extended type\n */\n\n/**\n * Converts this field to a field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IField} Field descriptor\n */\nField.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"rule\" , this.rule !== \"optional\" && this.rule || undefined,\n \"type\" , this.type,\n \"id\" , this.id,\n \"extend\" , this.extend,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Resolves this field's type references.\n * @returns {Field} `this`\n * @throws {Error} If any reference cannot be resolved\n */\nField.prototype.resolve = function resolve() {\n\n if (this.resolved)\n return this;\n\n if ((this.typeDefault = types.defaults[this.type]) === undefined) { // if not a basic type, resolve it\n this.resolvedType = (this.declaringField ? this.declaringField.parent : this.parent).lookupTypeOrEnum(this.type);\n if (this.resolvedType instanceof Type)\n this.typeDefault = null;\n else // instanceof Enum\n this.typeDefault = this.resolvedType.values[Object.keys(this.resolvedType.values)[0]]; // first defined\n }\n\n // use explicitly set default value if present\n if (this.options && this.options[\"default\"] != null) {\n this.typeDefault = this.options[\"default\"];\n if (this.resolvedType instanceof Enum && typeof this.typeDefault === \"string\")\n this.typeDefault = this.resolvedType.values[this.typeDefault];\n }\n\n // remove unnecessary options\n if (this.options) {\n if (this.options.packed === true || this.options.packed !== undefined && this.resolvedType && !(this.resolvedType instanceof Enum))\n delete this.options.packed;\n if (!Object.keys(this.options).length)\n this.options = undefined;\n }\n\n // convert to internal data type if necesssary\n if (this.long) {\n this.typeDefault = util.Long.fromNumber(this.typeDefault, this.type.charAt(0) === \"u\");\n\n /* istanbul ignore else */\n if (Object.freeze)\n Object.freeze(this.typeDefault); // long instances are meant to be immutable anyway (i.e. use small int cache that even requires it)\n\n } else if (this.bytes && typeof this.typeDefault === \"string\") {\n var buf;\n if (util.base64.test(this.typeDefault))\n util.base64.decode(this.typeDefault, buf = util.newBuffer(util.base64.length(this.typeDefault)), 0);\n else\n util.utf8.write(this.typeDefault, buf = util.newBuffer(util.utf8.length(this.typeDefault)), 0);\n this.typeDefault = buf;\n }\n\n // take special care of maps and repeated fields\n if (this.map)\n this.defaultValue = util.emptyObject;\n else if (this.repeated)\n this.defaultValue = util.emptyArray;\n else\n this.defaultValue = this.typeDefault;\n\n // ensure proper value on prototype\n if (this.parent instanceof Type)\n this.parent.ctor.prototype[this.name] = this.defaultValue;\n\n return ReflectionObject.prototype.resolve.call(this);\n};\n\n/**\n * Decorator function as returned by {@link Field.d} and {@link MapField.d} (TypeScript).\n * @typedef FieldDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} fieldName Field name\n * @returns {undefined}\n */\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"string\"|\"bool\"|\"bytes\"|Object} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @param {T} [defaultValue] Default value\n * @returns {FieldDecorator} Decorator function\n * @template T extends number | number[] | Long | Long[] | string | string[] | boolean | boolean[] | Uint8Array | Uint8Array[] | Buffer | Buffer[]\n */\nField.d = function decorateField(fieldId, fieldType, fieldRule, defaultValue) {\n\n // submessage: decorate the submessage and use its name as the type\n if (typeof fieldType === \"function\")\n fieldType = util.decorateType(fieldType).name;\n\n // enum reference: create a reflected copy of the enum and keep reuseing it\n else if (fieldType && typeof fieldType === \"object\")\n fieldType = util.decorateEnum(fieldType).name;\n\n return function fieldDecorator(prototype, fieldName) {\n util.decorateType(prototype.constructor)\n .add(new Field(fieldName, fieldId, fieldType, fieldRule, { \"default\": defaultValue }));\n };\n};\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {Constructor|string} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @returns {FieldDecorator} Decorator function\n * @template T extends Message\n * @variation 2\n */\n// like Field.d but without a default value\n\n// Sets up cyclic dependencies (called in index-light)\nField._configure = function configure(Type_) {\n Type = Type_;\n};\n","\"use strict\";\nvar protobuf = module.exports = require(\"./index-minimal\");\n\nprotobuf.build = \"light\";\n\n/**\n * A node-style callback as used by {@link load} and {@link Root#load}.\n * @typedef LoadCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Root} [root] Root, if there hasn't been an error\n * @returns {undefined}\n */\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} root Root namespace, defaults to create a new one if omitted.\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n */\nfunction load(filename, root, callback) {\n if (typeof root === \"function\") {\n callback = root;\n root = new protobuf.Root();\n } else if (!root)\n root = new protobuf.Root();\n return root.load(filename, callback);\n}\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and returns a promise.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Promise} Promise\n * @see {@link Root#load}\n * @variation 3\n */\n// function load(filename:string, [root:Root]):Promise\n\nprotobuf.load = load;\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into a common root namespace (node only).\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n * @see {@link Root#loadSync}\n */\nfunction loadSync(filename, root) {\n if (!root)\n root = new protobuf.Root();\n return root.loadSync(filename);\n}\n\nprotobuf.loadSync = loadSync;\n\n// Serialization\nprotobuf.encoder = require(\"./encoder\");\nprotobuf.decoder = require(\"./decoder\");\nprotobuf.verifier = require(\"./verifier\");\nprotobuf.converter = require(\"./converter\");\n\n// Reflection\nprotobuf.ReflectionObject = require(\"./object\");\nprotobuf.Namespace = require(\"./namespace\");\nprotobuf.Root = require(\"./root\");\nprotobuf.Enum = require(\"./enum\");\nprotobuf.Type = require(\"./type\");\nprotobuf.Field = require(\"./field\");\nprotobuf.OneOf = require(\"./oneof\");\nprotobuf.MapField = require(\"./mapfield\");\nprotobuf.Service = require(\"./service\");\nprotobuf.Method = require(\"./method\");\n\n// Runtime\nprotobuf.Message = require(\"./message\");\nprotobuf.wrappers = require(\"./wrappers\");\n\n// Utility\nprotobuf.types = require(\"./types\");\nprotobuf.util = require(\"./util\");\n\n// Set up possibly cyclic reflection dependencies\nprotobuf.ReflectionObject._configure(protobuf.Root);\nprotobuf.Namespace._configure(protobuf.Type, protobuf.Service, protobuf.Enum);\nprotobuf.Root._configure(protobuf.Type);\nprotobuf.Field._configure(protobuf.Type);\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","\"use strict\";\nmodule.exports = MapField;\n\n// extends Field\nvar Field = require(\"./field\");\n((MapField.prototype = Object.create(Field.prototype)).constructor = MapField).className = \"MapField\";\n\nvar types = require(\"./types\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new map field instance.\n * @classdesc Reflected map field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} keyType Key type\n * @param {string} type Value type\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction MapField(name, id, keyType, type, options, comment) {\n Field.call(this, name, id, type, undefined, undefined, options, comment);\n\n /* istanbul ignore if */\n if (!util.isString(keyType))\n throw TypeError(\"keyType must be a string\");\n\n /**\n * Key type.\n * @type {string}\n */\n this.keyType = keyType; // toJSON, marker\n\n /**\n * Resolved key type if not a basic type.\n * @type {ReflectionObject|null}\n */\n this.resolvedKeyType = null;\n\n // Overrides Field#map\n this.map = true;\n}\n\n/**\n * Map field descriptor.\n * @interface IMapField\n * @extends {IField}\n * @property {string} keyType Key type\n */\n\n/**\n * Extension map field descriptor.\n * @interface IExtensionMapField\n * @extends IMapField\n * @property {string} extend Extended type\n */\n\n/**\n * Constructs a map field from a map field descriptor.\n * @param {string} name Field name\n * @param {IMapField} json Map field descriptor\n * @returns {MapField} Created map field\n * @throws {TypeError} If arguments are invalid\n */\nMapField.fromJSON = function fromJSON(name, json) {\n return new MapField(name, json.id, json.keyType, json.type, json.options, json.comment);\n};\n\n/**\n * Converts this map field to a map field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMapField} Map field descriptor\n */\nMapField.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"keyType\" , this.keyType,\n \"type\" , this.type,\n \"id\" , this.id,\n \"extend\" , this.extend,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * @override\n */\nMapField.prototype.resolve = function resolve() {\n if (this.resolved)\n return this;\n\n // Besides a value type, map fields have a key type that may be \"any scalar type except for floating point types and bytes\"\n if (types.mapKey[this.keyType] === undefined)\n throw Error(\"invalid key type: \" + this.keyType);\n\n return Field.prototype.resolve.call(this);\n};\n\n/**\n * Map field decorator (TypeScript).\n * @name MapField.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"} fieldKeyType Field key type\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"|\"bytes\"|Object|Constructor<{}>} fieldValueType Field value type\n * @returns {FieldDecorator} Decorator function\n * @template T extends { [key: string]: number | Long | string | boolean | Uint8Array | Buffer | number[] | Message<{}> }\n */\nMapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) {\n\n // submessage value: decorate the submessage and use its name as the type\n if (typeof fieldValueType === \"function\")\n fieldValueType = util.decorateType(fieldValueType).name;\n\n // enum reference value: create a reflected copy of the enum and keep reuseing it\n else if (fieldValueType && typeof fieldValueType === \"object\")\n fieldValueType = util.decorateEnum(fieldValueType).name;\n\n return function mapFieldDecorator(prototype, fieldName) {\n util.decorateType(prototype.constructor)\n .add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType));\n };\n};\n","\"use strict\";\nmodule.exports = Message;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new message instance.\n * @classdesc Abstract runtime message.\n * @constructor\n * @param {Properties} [properties] Properties to set\n * @template T extends object = object\n */\nfunction Message(properties) {\n // not used internally\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n this[keys[i]] = properties[keys[i]];\n}\n\n/**\n * Reference to the reflected type.\n * @name Message.$type\n * @type {Type}\n * @readonly\n */\n\n/**\n * Reference to the reflected type.\n * @name Message#$type\n * @type {Type}\n * @readonly\n */\n\n/*eslint-disable valid-jsdoc*/\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.} [properties] Properties to set\n * @returns {Message} Message instance\n * @template T extends Message\n * @this Constructor\n */\nMessage.create = function create(properties) {\n return this.$type.create(properties);\n};\n\n/**\n * Encodes a message of this type.\n * @param {T|Object.} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message\n * @this Constructor\n */\nMessage.encode = function encode(message, writer) {\n return this.$type.encode(message, writer);\n};\n\n/**\n * Encodes a message of this type preceeded by its length as a varint.\n * @param {T|Object.} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message\n * @this Constructor\n */\nMessage.encodeDelimited = function encodeDelimited(message, writer) {\n return this.$type.encodeDelimited(message, writer);\n};\n\n/**\n * Decodes a message of this type.\n * @name Message.decode\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message\n * @this Constructor\n */\nMessage.decode = function decode(reader) {\n return this.$type.decode(reader);\n};\n\n/**\n * Decodes a message of this type preceeded by its length as a varint.\n * @name Message.decodeDelimited\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message\n * @this Constructor\n */\nMessage.decodeDelimited = function decodeDelimited(reader) {\n return this.$type.decodeDelimited(reader);\n};\n\n/**\n * Verifies a message of this type.\n * @name Message.verify\n * @function\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\nMessage.verify = function verify(message) {\n return this.$type.verify(message);\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.} object Plain object\n * @returns {T} Message instance\n * @template T extends Message\n * @this Constructor\n */\nMessage.fromObject = function fromObject(object) {\n return this.$type.fromObject(object);\n};\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {T} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n * @template T extends Message\n * @this Constructor\n */\nMessage.toObject = function toObject(message, options) {\n return this.$type.toObject(message, options);\n};\n\n/**\n * Converts this message to JSON.\n * @returns {Object.} JSON object\n */\nMessage.prototype.toJSON = function toJSON() {\n return this.$type.toObject(this, util.toJSONOptions);\n};\n\n/*eslint-enable valid-jsdoc*/","\"use strict\";\nmodule.exports = Method;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Method.prototype = Object.create(ReflectionObject.prototype)).constructor = Method).className = \"Method\";\n\nvar util = require(\"./util\");\n\n/**\n * Constructs a new service method instance.\n * @classdesc Reflected service method.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Method name\n * @param {string|undefined} type Method type, usually `\"rpc\"`\n * @param {string} requestType Request message type\n * @param {string} responseType Response message type\n * @param {boolean|Object.} [requestStream] Whether the request is streamed\n * @param {boolean|Object.} [responseStream] Whether the response is streamed\n * @param {Object.} [options] Declared options\n * @param {string} [comment] The comment for this method\n * @param {Object.} [parsedOptions] Declared options, properly parsed into an object\n */\nfunction Method(name, type, requestType, responseType, requestStream, responseStream, options, comment, parsedOptions) {\n\n /* istanbul ignore next */\n if (util.isObject(requestStream)) {\n options = requestStream;\n requestStream = responseStream = undefined;\n } else if (util.isObject(responseStream)) {\n options = responseStream;\n responseStream = undefined;\n }\n\n /* istanbul ignore if */\n if (!(type === undefined || util.isString(type)))\n throw TypeError(\"type must be a string\");\n\n /* istanbul ignore if */\n if (!util.isString(requestType))\n throw TypeError(\"requestType must be a string\");\n\n /* istanbul ignore if */\n if (!util.isString(responseType))\n throw TypeError(\"responseType must be a string\");\n\n ReflectionObject.call(this, name, options);\n\n /**\n * Method type.\n * @type {string}\n */\n this.type = type || \"rpc\"; // toJSON\n\n /**\n * Request type.\n * @type {string}\n */\n this.requestType = requestType; // toJSON, marker\n\n /**\n * Whether requests are streamed or not.\n * @type {boolean|undefined}\n */\n this.requestStream = requestStream ? true : undefined; // toJSON\n\n /**\n * Response type.\n * @type {string}\n */\n this.responseType = responseType; // toJSON\n\n /**\n * Whether responses are streamed or not.\n * @type {boolean|undefined}\n */\n this.responseStream = responseStream ? true : undefined; // toJSON\n\n /**\n * Resolved request type.\n * @type {Type|null}\n */\n this.resolvedRequestType = null;\n\n /**\n * Resolved response type.\n * @type {Type|null}\n */\n this.resolvedResponseType = null;\n\n /**\n * Comment for this method\n * @type {string|null}\n */\n this.comment = comment;\n\n /**\n * Options properly parsed into an object\n */\n this.parsedOptions = parsedOptions;\n}\n\n/**\n * Method descriptor.\n * @interface IMethod\n * @property {string} [type=\"rpc\"] Method type\n * @property {string} requestType Request type\n * @property {string} responseType Response type\n * @property {boolean} [requestStream=false] Whether requests are streamed\n * @property {boolean} [responseStream=false] Whether responses are streamed\n * @property {Object.} [options] Method options\n * @property {string} comment Method comments\n * @property {Object.} [parsedOptions] Method options properly parsed into an object\n */\n\n/**\n * Constructs a method from a method descriptor.\n * @param {string} name Method name\n * @param {IMethod} json Method descriptor\n * @returns {Method} Created method\n * @throws {TypeError} If arguments are invalid\n */\nMethod.fromJSON = function fromJSON(name, json) {\n return new Method(name, json.type, json.requestType, json.responseType, json.requestStream, json.responseStream, json.options, json.comment, json.parsedOptions);\n};\n\n/**\n * Converts this method to a method descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMethod} Method descriptor\n */\nMethod.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"type\" , this.type !== \"rpc\" && /* istanbul ignore next */ this.type || undefined,\n \"requestType\" , this.requestType,\n \"requestStream\" , this.requestStream,\n \"responseType\" , this.responseType,\n \"responseStream\" , this.responseStream,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined,\n \"parsedOptions\" , this.parsedOptions,\n ]);\n};\n\n/**\n * @override\n */\nMethod.prototype.resolve = function resolve() {\n\n /* istanbul ignore if */\n if (this.resolved)\n return this;\n\n this.resolvedRequestType = this.parent.lookupType(this.requestType);\n this.resolvedResponseType = this.parent.lookupType(this.responseType);\n\n return ReflectionObject.prototype.resolve.call(this);\n};\n","\"use strict\";\nmodule.exports = Namespace;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Namespace.prototype = Object.create(ReflectionObject.prototype)).constructor = Namespace).className = \"Namespace\";\n\nvar Field = require(\"./field\"),\n util = require(\"./util\");\n\nvar Type, // cyclic\n Service,\n Enum;\n\n/**\n * Constructs a new namespace instance.\n * @name Namespace\n * @classdesc Reflected namespace.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.} [options] Declared options\n */\n\n/**\n * Constructs a namespace from JSON.\n * @memberof Namespace\n * @function\n * @param {string} name Namespace name\n * @param {Object.} json JSON object\n * @returns {Namespace} Created namespace\n * @throws {TypeError} If arguments are invalid\n */\nNamespace.fromJSON = function fromJSON(name, json) {\n return new Namespace(name, json.options).addJSON(json.nested);\n};\n\n/**\n * Converts an array of reflection objects to JSON.\n * @memberof Namespace\n * @param {ReflectionObject[]} array Object array\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {Object.|undefined} JSON object or `undefined` when array is empty\n */\nfunction arrayToJSON(array, toJSONOptions) {\n if (!(array && array.length))\n return undefined;\n var obj = {};\n for (var i = 0; i < array.length; ++i)\n obj[array[i].name] = array[i].toJSON(toJSONOptions);\n return obj;\n}\n\nNamespace.arrayToJSON = arrayToJSON;\n\n/**\n * Tests if the specified id is reserved.\n * @param {Array.|undefined} reserved Array of reserved ranges and names\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedId = function isReservedId(reserved, id) {\n if (reserved)\n for (var i = 0; i < reserved.length; ++i)\n if (typeof reserved[i] !== \"string\" && reserved[i][0] <= id && reserved[i][1] > id)\n return true;\n return false;\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {Array.|undefined} reserved Array of reserved ranges and names\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedName = function isReservedName(reserved, name) {\n if (reserved)\n for (var i = 0; i < reserved.length; ++i)\n if (reserved[i] === name)\n return true;\n return false;\n};\n\n/**\n * Not an actual constructor. Use {@link Namespace} instead.\n * @classdesc Base class of all reflection objects containing nested objects. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports NamespaceBase\n * @extends ReflectionObject\n * @abstract\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.} [options] Declared options\n * @see {@link Namespace}\n */\nfunction Namespace(name, options) {\n ReflectionObject.call(this, name, options);\n\n /**\n * Nested objects by name.\n * @type {Object.|undefined}\n */\n this.nested = undefined; // toJSON\n\n /**\n * Cached nested objects as an array.\n * @type {ReflectionObject[]|null}\n * @private\n */\n this._nestedArray = null;\n}\n\nfunction clearCache(namespace) {\n namespace._nestedArray = null;\n return namespace;\n}\n\n/**\n * Nested objects of this namespace as an array for iteration.\n * @name NamespaceBase#nestedArray\n * @type {ReflectionObject[]}\n * @readonly\n */\nObject.defineProperty(Namespace.prototype, \"nestedArray\", {\n get: function() {\n return this._nestedArray || (this._nestedArray = util.toArray(this.nested));\n }\n});\n\n/**\n * Namespace descriptor.\n * @interface INamespace\n * @property {Object.} [options] Namespace options\n * @property {Object.} [nested] Nested object descriptors\n */\n\n/**\n * Any extension field descriptor.\n * @typedef AnyExtensionField\n * @type {IExtensionField|IExtensionMapField}\n */\n\n/**\n * Any nested object descriptor.\n * @typedef AnyNestedObject\n * @type {IEnum|IType|IService|AnyExtensionField|INamespace}\n */\n// ^ BEWARE: VSCode hangs forever when using more than 5 types (that's why AnyExtensionField exists in the first place)\n\n/**\n * Converts this namespace to a namespace descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {INamespace} Namespace descriptor\n */\nNamespace.prototype.toJSON = function toJSON(toJSONOptions) {\n return util.toObject([\n \"options\" , this.options,\n \"nested\" , arrayToJSON(this.nestedArray, toJSONOptions)\n ]);\n};\n\n/**\n * Adds nested objects to this namespace from nested object descriptors.\n * @param {Object.} nestedJson Any nested object descriptors\n * @returns {Namespace} `this`\n */\nNamespace.prototype.addJSON = function addJSON(nestedJson) {\n var ns = this;\n /* istanbul ignore else */\n if (nestedJson) {\n for (var names = Object.keys(nestedJson), i = 0, nested; i < names.length; ++i) {\n nested = nestedJson[names[i]];\n ns.add( // most to least likely\n ( nested.fields !== undefined\n ? Type.fromJSON\n : nested.values !== undefined\n ? Enum.fromJSON\n : nested.methods !== undefined\n ? Service.fromJSON\n : nested.id !== undefined\n ? Field.fromJSON\n : Namespace.fromJSON )(names[i], nested)\n );\n }\n }\n return this;\n};\n\n/**\n * Gets the nested object of the specified name.\n * @param {string} name Nested object name\n * @returns {ReflectionObject|null} The reflection object or `null` if it doesn't exist\n */\nNamespace.prototype.get = function get(name) {\n return this.nested && this.nested[name]\n || null;\n};\n\n/**\n * Gets the values of the nested {@link Enum|enum} of the specified name.\n * This methods differs from {@link Namespace#get|get} in that it returns an enum's values directly and throws instead of returning `null`.\n * @param {string} name Nested enum name\n * @returns {Object.} Enum values\n * @throws {Error} If there is no such enum\n */\nNamespace.prototype.getEnum = function getEnum(name) {\n if (this.nested && this.nested[name] instanceof Enum)\n return this.nested[name].values;\n throw Error(\"no such enum: \" + name);\n};\n\n/**\n * Adds a nested object to this namespace.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name\n */\nNamespace.prototype.add = function add(object) {\n\n if (!(object instanceof Field && object.extend !== undefined || object instanceof Type || object instanceof Enum || object instanceof Service || object instanceof Namespace))\n throw TypeError(\"object must be a valid nested object\");\n\n if (!this.nested)\n this.nested = {};\n else {\n var prev = this.get(object.name);\n if (prev) {\n if (prev instanceof Namespace && object instanceof Namespace && !(prev instanceof Type || prev instanceof Service)) {\n // replace plain namespace but keep existing nested elements and options\n var nested = prev.nestedArray;\n for (var i = 0; i < nested.length; ++i)\n object.add(nested[i]);\n this.remove(prev);\n if (!this.nested)\n this.nested = {};\n object.setOptions(prev.options, true);\n\n } else\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n }\n }\n this.nested[object.name] = object;\n object.onAdd(this);\n return clearCache(this);\n};\n\n/**\n * Removes a nested object from this namespace.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this namespace\n */\nNamespace.prototype.remove = function remove(object) {\n\n if (!(object instanceof ReflectionObject))\n throw TypeError(\"object must be a ReflectionObject\");\n if (object.parent !== this)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.nested[object.name];\n if (!Object.keys(this.nested).length)\n this.nested = undefined;\n\n object.onRemove(this);\n return clearCache(this);\n};\n\n/**\n * Defines additial namespaces within this one if not yet existing.\n * @param {string|string[]} path Path to create\n * @param {*} [json] Nested types to create from JSON\n * @returns {Namespace} Pointer to the last namespace created or `this` if path is empty\n */\nNamespace.prototype.define = function define(path, json) {\n\n if (util.isString(path))\n path = path.split(\".\");\n else if (!Array.isArray(path))\n throw TypeError(\"illegal path\");\n if (path && path.length && path[0] === \"\")\n throw Error(\"path must be relative\");\n\n var ptr = this;\n while (path.length > 0) {\n var part = path.shift();\n if (ptr.nested && ptr.nested[part]) {\n ptr = ptr.nested[part];\n if (!(ptr instanceof Namespace))\n throw Error(\"path conflicts with non-namespace objects\");\n } else\n ptr.add(ptr = new Namespace(part));\n }\n if (json)\n ptr.addJSON(json);\n return ptr;\n};\n\n/**\n * Resolves this namespace's and all its nested objects' type references. Useful to validate a reflection tree, but comes at a cost.\n * @returns {Namespace} `this`\n */\nNamespace.prototype.resolveAll = function resolveAll() {\n var nested = this.nestedArray, i = 0;\n while (i < nested.length)\n if (nested[i] instanceof Namespace)\n nested[i++].resolveAll();\n else\n nested[i++].resolve();\n return this.resolve();\n};\n\n/**\n * Recursively looks up the reflection object matching the specified path in the scope of this namespace.\n * @param {string|string[]} path Path to look up\n * @param {*|Array.<*>} filterTypes Filter types, any combination of the constructors of `protobuf.Type`, `protobuf.Enum`, `protobuf.Service` etc.\n * @param {boolean} [parentAlreadyChecked=false] If known, whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n */\nNamespace.prototype.lookup = function lookup(path, filterTypes, parentAlreadyChecked) {\n\n /* istanbul ignore next */\n if (typeof filterTypes === \"boolean\") {\n parentAlreadyChecked = filterTypes;\n filterTypes = undefined;\n } else if (filterTypes && !Array.isArray(filterTypes))\n filterTypes = [ filterTypes ];\n\n if (util.isString(path) && path.length) {\n if (path === \".\")\n return this.root;\n path = path.split(\".\");\n } else if (!path.length)\n return this;\n\n // Start at root if path is absolute\n if (path[0] === \"\")\n return this.root.lookup(path.slice(1), filterTypes);\n\n // Test if the first part matches any nested object, and if so, traverse if path contains more\n var found = this.get(path[0]);\n if (found) {\n if (path.length === 1) {\n if (!filterTypes || filterTypes.indexOf(found.constructor) > -1)\n return found;\n } else if (found instanceof Namespace && (found = found.lookup(path.slice(1), filterTypes, true)))\n return found;\n\n // Otherwise try each nested namespace\n } else\n for (var i = 0; i < this.nestedArray.length; ++i)\n if (this._nestedArray[i] instanceof Namespace && (found = this._nestedArray[i].lookup(path, filterTypes, true)))\n return found;\n\n // If there hasn't been a match, try again at the parent\n if (this.parent === null || parentAlreadyChecked)\n return null;\n return this.parent.lookup(path, filterTypes);\n};\n\n/**\n * Looks up the reflection object at the specified path, relative to this namespace.\n * @name NamespaceBase#lookup\n * @function\n * @param {string|string[]} path Path to look up\n * @param {boolean} [parentAlreadyChecked=false] Whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n * @variation 2\n */\n// lookup(path: string, [parentAlreadyChecked: boolean])\n\n/**\n * Looks up the {@link Type|type} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type\n * @throws {Error} If `path` does not point to a type\n */\nNamespace.prototype.lookupType = function lookupType(path) {\n var found = this.lookup(path, [ Type ]);\n if (!found)\n throw Error(\"no such type: \" + path);\n return found;\n};\n\n/**\n * Looks up the values of the {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Enum} Looked up enum\n * @throws {Error} If `path` does not point to an enum\n */\nNamespace.prototype.lookupEnum = function lookupEnum(path) {\n var found = this.lookup(path, [ Enum ]);\n if (!found)\n throw Error(\"no such Enum '\" + path + \"' in \" + this);\n return found;\n};\n\n/**\n * Looks up the {@link Type|type} or {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type or enum\n * @throws {Error} If `path` does not point to a type or enum\n */\nNamespace.prototype.lookupTypeOrEnum = function lookupTypeOrEnum(path) {\n var found = this.lookup(path, [ Type, Enum ]);\n if (!found)\n throw Error(\"no such Type or Enum '\" + path + \"' in \" + this);\n return found;\n};\n\n/**\n * Looks up the {@link Service|service} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Service} Looked up service\n * @throws {Error} If `path` does not point to a service\n */\nNamespace.prototype.lookupService = function lookupService(path) {\n var found = this.lookup(path, [ Service ]);\n if (!found)\n throw Error(\"no such Service '\" + path + \"' in \" + this);\n return found;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nNamespace._configure = function(Type_, Service_, Enum_) {\n Type = Type_;\n Service = Service_;\n Enum = Enum_;\n};\n","\"use strict\";\nmodule.exports = ReflectionObject;\n\nReflectionObject.className = \"ReflectionObject\";\n\nvar util = require(\"./util\");\n\nvar Root; // cyclic\n\n/**\n * Constructs a new reflection object instance.\n * @classdesc Base class of all reflection objects.\n * @constructor\n * @param {string} name Object name\n * @param {Object.} [options] Declared options\n * @abstract\n */\nfunction ReflectionObject(name, options) {\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n if (options && !util.isObject(options))\n throw TypeError(\"options must be an object\");\n\n /**\n * Options.\n * @type {Object.|undefined}\n */\n this.options = options; // toJSON\n\n /**\n * Parsed Options.\n * @type {Array.>|undefined}\n */\n this.parsedOptions = null;\n\n /**\n * Unique name within its namespace.\n * @type {string}\n */\n this.name = name;\n\n /**\n * Parent namespace.\n * @type {Namespace|null}\n */\n this.parent = null;\n\n /**\n * Whether already resolved or not.\n * @type {boolean}\n */\n this.resolved = false;\n\n /**\n * Comment text, if any.\n * @type {string|null}\n */\n this.comment = null;\n\n /**\n * Defining file name.\n * @type {string|null}\n */\n this.filename = null;\n}\n\nObject.defineProperties(ReflectionObject.prototype, {\n\n /**\n * Reference to the root namespace.\n * @name ReflectionObject#root\n * @type {Root}\n * @readonly\n */\n root: {\n get: function() {\n var ptr = this;\n while (ptr.parent !== null)\n ptr = ptr.parent;\n return ptr;\n }\n },\n\n /**\n * Full name including leading dot.\n * @name ReflectionObject#fullName\n * @type {string}\n * @readonly\n */\n fullName: {\n get: function() {\n var path = [ this.name ],\n ptr = this.parent;\n while (ptr) {\n path.unshift(ptr.name);\n ptr = ptr.parent;\n }\n return path.join(\".\");\n }\n }\n});\n\n/**\n * Converts this reflection object to its descriptor representation.\n * @returns {Object.} Descriptor\n * @abstract\n */\nReflectionObject.prototype.toJSON = /* istanbul ignore next */ function toJSON() {\n throw Error(); // not implemented, shouldn't happen\n};\n\n/**\n * Called when this object is added to a parent.\n * @param {ReflectionObject} parent Parent added to\n * @returns {undefined}\n */\nReflectionObject.prototype.onAdd = function onAdd(parent) {\n if (this.parent && this.parent !== parent)\n this.parent.remove(this);\n this.parent = parent;\n this.resolved = false;\n var root = parent.root;\n if (root instanceof Root)\n root._handleAdd(this);\n};\n\n/**\n * Called when this object is removed from a parent.\n * @param {ReflectionObject} parent Parent removed from\n * @returns {undefined}\n */\nReflectionObject.prototype.onRemove = function onRemove(parent) {\n var root = parent.root;\n if (root instanceof Root)\n root._handleRemove(this);\n this.parent = null;\n this.resolved = false;\n};\n\n/**\n * Resolves this objects type references.\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.resolve = function resolve() {\n if (this.resolved)\n return this;\n if (this.root instanceof Root)\n this.resolved = true; // only if part of a root\n return this;\n};\n\n/**\n * Gets an option value.\n * @param {string} name Option name\n * @returns {*} Option value or `undefined` if not set\n */\nReflectionObject.prototype.getOption = function getOption(name) {\n if (this.options)\n return this.options[name];\n return undefined;\n};\n\n/**\n * Sets an option.\n * @param {string} name Option name\n * @param {*} value Option value\n * @param {boolean} [ifNotSet] Sets the option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOption = function setOption(name, value, ifNotSet) {\n if (!ifNotSet || !this.options || this.options[name] === undefined)\n (this.options || (this.options = {}))[name] = value;\n return this;\n};\n\n/**\n * Sets a parsed option.\n * @param {string} name parsed Option name\n * @param {*} value Option value\n * @param {string} propName dot '.' delimited full path of property within the option to set. if undefined\\empty, will add a new option with that value\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setParsedOption = function setParsedOption(name, value, propName) {\n if (!this.parsedOptions) {\n this.parsedOptions = [];\n }\n var parsedOptions = this.parsedOptions;\n if (propName) {\n // If setting a sub property of an option then try to merge it\n // with an existing option\n var opt = parsedOptions.find(function (opt) {\n return Object.prototype.hasOwnProperty.call(opt, name);\n });\n if (opt) {\n // If we found an existing option - just merge the property value\n var newValue = opt[name];\n util.setProperty(newValue, propName, value);\n } else {\n // otherwise, create a new option, set it's property and add it to the list\n opt = {};\n opt[name] = util.setProperty({}, propName, value);\n parsedOptions.push(opt);\n }\n } else {\n // Always create a new option when setting the value of the option itself\n var newOpt = {};\n newOpt[name] = value;\n parsedOptions.push(newOpt);\n }\n return this;\n};\n\n/**\n * Sets multiple options.\n * @param {Object.} options Options to set\n * @param {boolean} [ifNotSet] Sets an option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOptions = function setOptions(options, ifNotSet) {\n if (options)\n for (var keys = Object.keys(options), i = 0; i < keys.length; ++i)\n this.setOption(keys[i], options[keys[i]], ifNotSet);\n return this;\n};\n\n/**\n * Converts this instance to its string representation.\n * @returns {string} Class name[, space, full name]\n */\nReflectionObject.prototype.toString = function toString() {\n var className = this.constructor.className,\n fullName = this.fullName;\n if (fullName.length)\n return className + \" \" + fullName;\n return className;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nReflectionObject._configure = function(Root_) {\n Root = Root_;\n};\n","\"use strict\";\nmodule.exports = OneOf;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((OneOf.prototype = Object.create(ReflectionObject.prototype)).constructor = OneOf).className = \"OneOf\";\n\nvar Field = require(\"./field\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new oneof instance.\n * @classdesc Reflected oneof.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Oneof name\n * @param {string[]|Object.} [fieldNames] Field names\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction OneOf(name, fieldNames, options, comment) {\n if (!Array.isArray(fieldNames)) {\n options = fieldNames;\n fieldNames = undefined;\n }\n ReflectionObject.call(this, name, options);\n\n /* istanbul ignore if */\n if (!(fieldNames === undefined || Array.isArray(fieldNames)))\n throw TypeError(\"fieldNames must be an Array\");\n\n /**\n * Field names that belong to this oneof.\n * @type {string[]}\n */\n this.oneof = fieldNames || []; // toJSON, marker\n\n /**\n * Fields that belong to this oneof as an array for iteration.\n * @type {Field[]}\n * @readonly\n */\n this.fieldsArray = []; // declared readonly for conformance, possibly not yet added to parent\n\n /**\n * Comment for this field.\n * @type {string|null}\n */\n this.comment = comment;\n}\n\n/**\n * Oneof descriptor.\n * @interface IOneOf\n * @property {Array.} oneof Oneof field names\n * @property {Object.} [options] Oneof options\n */\n\n/**\n * Constructs a oneof from a oneof descriptor.\n * @param {string} name Oneof name\n * @param {IOneOf} json Oneof descriptor\n * @returns {OneOf} Created oneof\n * @throws {TypeError} If arguments are invalid\n */\nOneOf.fromJSON = function fromJSON(name, json) {\n return new OneOf(name, json.oneof, json.options, json.comment);\n};\n\n/**\n * Converts this oneof to a oneof descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IOneOf} Oneof descriptor\n */\nOneOf.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , this.options,\n \"oneof\" , this.oneof,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Adds the fields of the specified oneof to the parent if not already done so.\n * @param {OneOf} oneof The oneof\n * @returns {undefined}\n * @inner\n * @ignore\n */\nfunction addFieldsToParent(oneof) {\n if (oneof.parent)\n for (var i = 0; i < oneof.fieldsArray.length; ++i)\n if (!oneof.fieldsArray[i].parent)\n oneof.parent.add(oneof.fieldsArray[i]);\n}\n\n/**\n * Adds a field to this oneof and removes it from its current parent, if any.\n * @param {Field} field Field to add\n * @returns {OneOf} `this`\n */\nOneOf.prototype.add = function add(field) {\n\n /* istanbul ignore if */\n if (!(field instanceof Field))\n throw TypeError(\"field must be a Field\");\n\n if (field.parent && field.parent !== this.parent)\n field.parent.remove(field);\n this.oneof.push(field.name);\n this.fieldsArray.push(field);\n field.partOf = this; // field.parent remains null\n addFieldsToParent(this);\n return this;\n};\n\n/**\n * Removes a field from this oneof and puts it back to the oneof's parent.\n * @param {Field} field Field to remove\n * @returns {OneOf} `this`\n */\nOneOf.prototype.remove = function remove(field) {\n\n /* istanbul ignore if */\n if (!(field instanceof Field))\n throw TypeError(\"field must be a Field\");\n\n var index = this.fieldsArray.indexOf(field);\n\n /* istanbul ignore if */\n if (index < 0)\n throw Error(field + \" is not a member of \" + this);\n\n this.fieldsArray.splice(index, 1);\n index = this.oneof.indexOf(field.name);\n\n /* istanbul ignore else */\n if (index > -1) // theoretical\n this.oneof.splice(index, 1);\n\n field.partOf = null;\n return this;\n};\n\n/**\n * @override\n */\nOneOf.prototype.onAdd = function onAdd(parent) {\n ReflectionObject.prototype.onAdd.call(this, parent);\n var self = this;\n // Collect present fields\n for (var i = 0; i < this.oneof.length; ++i) {\n var field = parent.get(this.oneof[i]);\n if (field && !field.partOf) {\n field.partOf = self;\n self.fieldsArray.push(field);\n }\n }\n // Add not yet present fields\n addFieldsToParent(this);\n};\n\n/**\n * @override\n */\nOneOf.prototype.onRemove = function onRemove(parent) {\n for (var i = 0, field; i < this.fieldsArray.length; ++i)\n if ((field = this.fieldsArray[i]).parent)\n field.parent.remove(field);\n ReflectionObject.prototype.onRemove.call(this, parent);\n};\n\n/**\n * Decorator function as returned by {@link OneOf.d} (TypeScript).\n * @typedef OneOfDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} oneofName OneOf name\n * @returns {undefined}\n */\n\n/**\n * OneOf decorator (TypeScript).\n * @function\n * @param {...string} fieldNames Field names\n * @returns {OneOfDecorator} Decorator function\n * @template T extends string\n */\nOneOf.d = function decorateOneOf() {\n var fieldNames = new Array(arguments.length),\n index = 0;\n while (index < arguments.length)\n fieldNames[index] = arguments[index++];\n return function oneOfDecorator(prototype, oneofName) {\n util.decorateType(prototype.constructor)\n .add(new OneOf(oneofName, fieldNames));\n Object.defineProperty(prototype, oneofName, {\n get: util.oneOfGetter(fieldNames),\n set: util.oneOfSetter(fieldNames)\n });\n };\n};\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Root;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Root.prototype = Object.create(Namespace.prototype)).constructor = Root).className = \"Root\";\n\nvar Field = require(\"./field\"),\n Enum = require(\"./enum\"),\n OneOf = require(\"./oneof\"),\n util = require(\"./util\");\n\nvar Type, // cyclic\n parse, // might be excluded\n common; // \"\n\n/**\n * Constructs a new root namespace instance.\n * @classdesc Root namespace wrapping all types, enums, services, sub-namespaces etc. that belong together.\n * @extends NamespaceBase\n * @constructor\n * @param {Object.} [options] Top level options\n */\nfunction Root(options) {\n Namespace.call(this, \"\", options);\n\n /**\n * Deferred extension fields.\n * @type {Field[]}\n */\n this.deferred = [];\n\n /**\n * Resolved file names of loaded files.\n * @type {string[]}\n */\n this.files = [];\n}\n\n/**\n * Loads a namespace descriptor into a root namespace.\n * @param {INamespace} json Nameespace descriptor\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted\n * @returns {Root} Root namespace\n */\nRoot.fromJSON = function fromJSON(json, root) {\n if (!root)\n root = new Root();\n if (json.options)\n root.setOptions(json.options);\n return root.addJSON(json.nested);\n};\n\n/**\n * Resolves the path of an imported file, relative to the importing origin.\n * This method exists so you can override it with your own logic in case your imports are scattered over multiple directories.\n * @function\n * @param {string} origin The file name of the importing file\n * @param {string} target The file name being imported\n * @returns {string|null} Resolved path to `target` or `null` to skip the file\n */\nRoot.prototype.resolvePath = util.path.resolve;\n\n/**\n * Fetch content from file path or url\n * This method exists so you can override it with your own logic.\n * @function\n * @param {string} path File path or url\n * @param {FetchCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.fetch = util.fetch;\n\n// A symbol-like function to safely signal synchronous loading\n/* istanbul ignore next */\nfunction SYNC() {} // eslint-disable-line no-empty-function\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} options Parse options\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.load = function load(filename, options, callback) {\n if (typeof options === \"function\") {\n callback = options;\n options = undefined;\n }\n var self = this;\n if (!callback)\n return util.asPromise(load, self, filename, options);\n\n var sync = callback === SYNC; // undocumented\n\n // Finishes loading by calling the callback (exactly once)\n function finish(err, root) {\n /* istanbul ignore if */\n if (!callback)\n return;\n var cb = callback;\n callback = null;\n if (sync)\n throw err;\n cb(err, root);\n }\n\n // Bundled definition existence checking\n function getBundledFileName(filename) {\n var idx = filename.lastIndexOf(\"google/protobuf/\");\n if (idx > -1) {\n var altname = filename.substring(idx);\n if (altname in common) return altname;\n }\n return null;\n }\n\n // Processes a single file\n function process(filename, source) {\n try {\n if (util.isString(source) && source.charAt(0) === \"{\")\n source = JSON.parse(source);\n if (!util.isString(source))\n self.setOptions(source.options).addJSON(source.nested);\n else {\n parse.filename = filename;\n var parsed = parse(source, self, options),\n resolved,\n i = 0;\n if (parsed.imports)\n for (; i < parsed.imports.length; ++i)\n if (resolved = getBundledFileName(parsed.imports[i]) || self.resolvePath(filename, parsed.imports[i]))\n fetch(resolved);\n if (parsed.weakImports)\n for (i = 0; i < parsed.weakImports.length; ++i)\n if (resolved = getBundledFileName(parsed.weakImports[i]) || self.resolvePath(filename, parsed.weakImports[i]))\n fetch(resolved, true);\n }\n } catch (err) {\n finish(err);\n }\n if (!sync && !queued)\n finish(null, self); // only once anyway\n }\n\n // Fetches a single file\n function fetch(filename, weak) {\n\n // Skip if already loaded / attempted\n if (self.files.indexOf(filename) > -1)\n return;\n self.files.push(filename);\n\n // Shortcut bundled definitions\n if (filename in common) {\n if (sync)\n process(filename, common[filename]);\n else {\n ++queued;\n setTimeout(function() {\n --queued;\n process(filename, common[filename]);\n });\n }\n return;\n }\n\n // Otherwise fetch from disk or network\n if (sync) {\n var source;\n try {\n source = util.fs.readFileSync(filename).toString(\"utf8\");\n } catch (err) {\n if (!weak)\n finish(err);\n return;\n }\n process(filename, source);\n } else {\n ++queued;\n self.fetch(filename, function(err, source) {\n --queued;\n /* istanbul ignore if */\n if (!callback)\n return; // terminated meanwhile\n if (err) {\n /* istanbul ignore else */\n if (!weak)\n finish(err);\n else if (!queued) // can't be covered reliably\n finish(null, self);\n return;\n }\n process(filename, source);\n });\n }\n }\n var queued = 0;\n\n // Assembling the root namespace doesn't require working type\n // references anymore, so we can load everything in parallel\n if (util.isString(filename))\n filename = [ filename ];\n for (var i = 0, resolved; i < filename.length; ++i)\n if (resolved = self.resolvePath(\"\", filename[i]))\n fetch(resolved);\n\n if (sync)\n return self;\n if (!queued)\n finish(null, self);\n return undefined;\n};\n// function load(filename:string, options:IParseOptions, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and returns a promise.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Promise} Promise\n * @variation 3\n */\n// function load(filename:string, [options:IParseOptions]):Promise\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into this root namespace (node only).\n * @function Root#loadSync\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n */\nRoot.prototype.loadSync = function loadSync(filename, options) {\n if (!util.isNode)\n throw Error(\"not supported\");\n return this.load(filename, options, SYNC);\n};\n\n/**\n * @override\n */\nRoot.prototype.resolveAll = function resolveAll() {\n if (this.deferred.length)\n throw Error(\"unresolvable extensions: \" + this.deferred.map(function(field) {\n return \"'extend \" + field.extend + \"' in \" + field.parent.fullName;\n }).join(\", \"));\n return Namespace.prototype.resolveAll.call(this);\n};\n\n// only uppercased (and thus conflict-free) children are exposed, see below\nvar exposeRe = /^[A-Z]/;\n\n/**\n * Handles a deferred declaring extension field by creating a sister field to represent it within its extended type.\n * @param {Root} root Root instance\n * @param {Field} field Declaring extension field witin the declaring type\n * @returns {boolean} `true` if successfully added to the extended type, `false` otherwise\n * @inner\n * @ignore\n */\nfunction tryHandleExtension(root, field) {\n var extendedType = field.parent.lookup(field.extend);\n if (extendedType) {\n var sisterField = new Field(field.fullName, field.id, field.type, field.rule, undefined, field.options);\n sisterField.declaringField = field;\n field.extensionField = sisterField;\n extendedType.add(sisterField);\n return true;\n }\n return false;\n}\n\n/**\n * Called when any object is added to this root or its sub-namespaces.\n * @param {ReflectionObject} object Object added\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleAdd = function _handleAdd(object) {\n if (object instanceof Field) {\n\n if (/* an extension field (implies not part of a oneof) */ object.extend !== undefined && /* not already handled */ !object.extensionField)\n if (!tryHandleExtension(this, object))\n this.deferred.push(object);\n\n } else if (object instanceof Enum) {\n\n if (exposeRe.test(object.name))\n object.parent[object.name] = object.values; // expose enum values as property of its parent\n\n } else if (!(object instanceof OneOf)) /* everything else is a namespace */ {\n\n if (object instanceof Type) // Try to handle any deferred extensions\n for (var i = 0; i < this.deferred.length;)\n if (tryHandleExtension(this, this.deferred[i]))\n this.deferred.splice(i, 1);\n else\n ++i;\n for (var j = 0; j < /* initializes */ object.nestedArray.length; ++j) // recurse into the namespace\n this._handleAdd(object._nestedArray[j]);\n if (exposeRe.test(object.name))\n object.parent[object.name] = object; // expose namespace as property of its parent\n }\n\n // The above also adds uppercased (and thus conflict-free) nested types, services and enums as\n // properties of namespaces just like static code does. This allows using a .d.ts generated for\n // a static module with reflection-based solutions where the condition is met.\n};\n\n/**\n * Called when any object is removed from this root or its sub-namespaces.\n * @param {ReflectionObject} object Object removed\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleRemove = function _handleRemove(object) {\n if (object instanceof Field) {\n\n if (/* an extension field */ object.extend !== undefined) {\n if (/* already handled */ object.extensionField) { // remove its sister field\n object.extensionField.parent.remove(object.extensionField);\n object.extensionField = null;\n } else { // cancel the extension\n var index = this.deferred.indexOf(object);\n /* istanbul ignore else */\n if (index > -1)\n this.deferred.splice(index, 1);\n }\n }\n\n } else if (object instanceof Enum) {\n\n if (exposeRe.test(object.name))\n delete object.parent[object.name]; // unexpose enum values\n\n } else if (object instanceof Namespace) {\n\n for (var i = 0; i < /* initializes */ object.nestedArray.length; ++i) // recurse into the namespace\n this._handleRemove(object._nestedArray[i]);\n\n if (exposeRe.test(object.name))\n delete object.parent[object.name]; // unexpose namespaces\n\n }\n};\n\n// Sets up cyclic dependencies (called in index-light)\nRoot._configure = function(Type_, parse_, common_) {\n Type = Type_;\n parse = parse_;\n common = common_;\n};\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available accross modules.\n * @name roots\n * @type {Object.}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message\n * @template TRes extends Message\n * @type {function}\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod} method Reflected or static method\n * @param {Constructor} requestCtor Request constructor\n * @param {Constructor} responseCtor Response constructor\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message\n * @template TRes extends Message\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\nmodule.exports = Service;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Service.prototype = Object.create(Namespace.prototype)).constructor = Service).className = \"Service\";\n\nvar Method = require(\"./method\"),\n util = require(\"./util\"),\n rpc = require(\"./rpc\");\n\n/**\n * Constructs a new service instance.\n * @classdesc Reflected service.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Service name\n * @param {Object.} [options] Service options\n * @throws {TypeError} If arguments are invalid\n */\nfunction Service(name, options) {\n Namespace.call(this, name, options);\n\n /**\n * Service methods.\n * @type {Object.}\n */\n this.methods = {}; // toJSON, marker\n\n /**\n * Cached methods as an array.\n * @type {Method[]|null}\n * @private\n */\n this._methodsArray = null;\n}\n\n/**\n * Service descriptor.\n * @interface IService\n * @extends INamespace\n * @property {Object.} methods Method descriptors\n */\n\n/**\n * Constructs a service from a service descriptor.\n * @param {string} name Service name\n * @param {IService} json Service descriptor\n * @returns {Service} Created service\n * @throws {TypeError} If arguments are invalid\n */\nService.fromJSON = function fromJSON(name, json) {\n var service = new Service(name, json.options);\n /* istanbul ignore else */\n if (json.methods)\n for (var names = Object.keys(json.methods), i = 0; i < names.length; ++i)\n service.add(Method.fromJSON(names[i], json.methods[names[i]]));\n if (json.nested)\n service.addJSON(json.nested);\n service.comment = json.comment;\n return service;\n};\n\n/**\n * Converts this service to a service descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IService} Service descriptor\n */\nService.prototype.toJSON = function toJSON(toJSONOptions) {\n var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , inherited && inherited.options || undefined,\n \"methods\" , Namespace.arrayToJSON(this.methodsArray, toJSONOptions) || /* istanbul ignore next */ {},\n \"nested\" , inherited && inherited.nested || undefined,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Methods of this service as an array for iteration.\n * @name Service#methodsArray\n * @type {Method[]}\n * @readonly\n */\nObject.defineProperty(Service.prototype, \"methodsArray\", {\n get: function() {\n return this._methodsArray || (this._methodsArray = util.toArray(this.methods));\n }\n});\n\nfunction clearCache(service) {\n service._methodsArray = null;\n return service;\n}\n\n/**\n * @override\n */\nService.prototype.get = function get(name) {\n return this.methods[name]\n || Namespace.prototype.get.call(this, name);\n};\n\n/**\n * @override\n */\nService.prototype.resolveAll = function resolveAll() {\n var methods = this.methodsArray;\n for (var i = 0; i < methods.length; ++i)\n methods[i].resolve();\n return Namespace.prototype.resolve.call(this);\n};\n\n/**\n * @override\n */\nService.prototype.add = function add(object) {\n\n /* istanbul ignore if */\n if (this.get(object.name))\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n if (object instanceof Method) {\n this.methods[object.name] = object;\n object.parent = this;\n return clearCache(this);\n }\n return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * @override\n */\nService.prototype.remove = function remove(object) {\n if (object instanceof Method) {\n\n /* istanbul ignore if */\n if (this.methods[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.methods[object.name];\n object.parent = null;\n return clearCache(this);\n }\n return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Creates a runtime service using the specified rpc implementation.\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n * @returns {rpc.Service} RPC service. Useful where requests and/or responses are streamed.\n */\nService.prototype.create = function create(rpcImpl, requestDelimited, responseDelimited) {\n var rpcService = new rpc.Service(rpcImpl, requestDelimited, responseDelimited);\n for (var i = 0, method; i < /* initializes */ this.methodsArray.length; ++i) {\n var methodName = util.lcFirst((method = this._methodsArray[i]).resolve().name).replace(/[^$\\w_]/g, \"\");\n rpcService[methodName] = util.codegen([\"r\",\"c\"], util.isReserved(methodName) ? methodName + \"_\" : methodName)(\"return this.rpcCall(m,q,s,r,c)\")({\n m: method,\n q: method.resolvedRequestType.ctor,\n s: method.resolvedResponseType.ctor\n });\n }\n return rpcService;\n};\n","\"use strict\";\nmodule.exports = Type;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Type.prototype = Object.create(Namespace.prototype)).constructor = Type).className = \"Type\";\n\nvar Enum = require(\"./enum\"),\n OneOf = require(\"./oneof\"),\n Field = require(\"./field\"),\n MapField = require(\"./mapfield\"),\n Service = require(\"./service\"),\n Message = require(\"./message\"),\n Reader = require(\"./reader\"),\n Writer = require(\"./writer\"),\n util = require(\"./util\"),\n encoder = require(\"./encoder\"),\n decoder = require(\"./decoder\"),\n verifier = require(\"./verifier\"),\n converter = require(\"./converter\"),\n wrappers = require(\"./wrappers\");\n\n/**\n * Constructs a new reflected message type instance.\n * @classdesc Reflected message type.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Message name\n * @param {Object.} [options] Declared options\n */\nfunction Type(name, options) {\n Namespace.call(this, name, options);\n\n /**\n * Message fields.\n * @type {Object.}\n */\n this.fields = {}; // toJSON, marker\n\n /**\n * Oneofs declared within this namespace, if any.\n * @type {Object.}\n */\n this.oneofs = undefined; // toJSON\n\n /**\n * Extension ranges, if any.\n * @type {number[][]}\n */\n this.extensions = undefined; // toJSON\n\n /**\n * Reserved ranges, if any.\n * @type {Array.}\n */\n this.reserved = undefined; // toJSON\n\n /*?\n * Whether this type is a legacy group.\n * @type {boolean|undefined}\n */\n this.group = undefined; // toJSON\n\n /**\n * Cached fields by id.\n * @type {Object.|null}\n * @private\n */\n this._fieldsById = null;\n\n /**\n * Cached fields as an array.\n * @type {Field[]|null}\n * @private\n */\n this._fieldsArray = null;\n\n /**\n * Cached oneofs as an array.\n * @type {OneOf[]|null}\n * @private\n */\n this._oneofsArray = null;\n\n /**\n * Cached constructor.\n * @type {Constructor<{}>}\n * @private\n */\n this._ctor = null;\n}\n\nObject.defineProperties(Type.prototype, {\n\n /**\n * Message fields by id.\n * @name Type#fieldsById\n * @type {Object.}\n * @readonly\n */\n fieldsById: {\n get: function() {\n\n /* istanbul ignore if */\n if (this._fieldsById)\n return this._fieldsById;\n\n this._fieldsById = {};\n for (var names = Object.keys(this.fields), i = 0; i < names.length; ++i) {\n var field = this.fields[names[i]],\n id = field.id;\n\n /* istanbul ignore if */\n if (this._fieldsById[id])\n throw Error(\"duplicate id \" + id + \" in \" + this);\n\n this._fieldsById[id] = field;\n }\n return this._fieldsById;\n }\n },\n\n /**\n * Fields of this message as an array for iteration.\n * @name Type#fieldsArray\n * @type {Field[]}\n * @readonly\n */\n fieldsArray: {\n get: function() {\n return this._fieldsArray || (this._fieldsArray = util.toArray(this.fields));\n }\n },\n\n /**\n * Oneofs of this message as an array for iteration.\n * @name Type#oneofsArray\n * @type {OneOf[]}\n * @readonly\n */\n oneofsArray: {\n get: function() {\n return this._oneofsArray || (this._oneofsArray = util.toArray(this.oneofs));\n }\n },\n\n /**\n * The registered constructor, if any registered, otherwise a generic constructor.\n * Assigning a function replaces the internal constructor. If the function does not extend {@link Message} yet, its prototype will be setup accordingly and static methods will be populated. If it already extends {@link Message}, it will just replace the internal constructor.\n * @name Type#ctor\n * @type {Constructor<{}>}\n */\n ctor: {\n get: function() {\n return this._ctor || (this.ctor = Type.generateConstructor(this)());\n },\n set: function(ctor) {\n\n // Ensure proper prototype\n var prototype = ctor.prototype;\n if (!(prototype instanceof Message)) {\n (ctor.prototype = new Message()).constructor = ctor;\n util.merge(ctor.prototype, prototype);\n }\n\n // Classes and messages reference their reflected type\n ctor.$type = ctor.prototype.$type = this;\n\n // Mix in static methods\n util.merge(ctor, Message, true);\n\n this._ctor = ctor;\n\n // Messages have non-enumerable default values on their prototype\n var i = 0;\n for (; i < /* initializes */ this.fieldsArray.length; ++i)\n this._fieldsArray[i].resolve(); // ensures a proper value\n\n // Messages have non-enumerable getters and setters for each virtual oneof field\n var ctorProperties = {};\n for (i = 0; i < /* initializes */ this.oneofsArray.length; ++i)\n ctorProperties[this._oneofsArray[i].resolve().name] = {\n get: util.oneOfGetter(this._oneofsArray[i].oneof),\n set: util.oneOfSetter(this._oneofsArray[i].oneof)\n };\n if (i)\n Object.defineProperties(ctor.prototype, ctorProperties);\n }\n }\n});\n\n/**\n * Generates a constructor function for the specified type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nType.generateConstructor = function generateConstructor(mtype) {\n /* eslint-disable no-unexpected-multiline */\n var gen = util.codegen([\"p\"], mtype.name);\n // explicitly initialize mutable object/array fields so that these aren't just inherited from the prototype\n for (var i = 0, field; i < mtype.fieldsArray.length; ++i)\n if ((field = mtype._fieldsArray[i]).map) gen\n (\"this%s={}\", util.safeProp(field.name));\n else if (field.repeated) gen\n (\"this%s=[]\", util.safeProp(field.name));\n return gen\n (\"if(p)for(var ks=Object.keys(p),i=0;i} [oneofs] Oneof descriptors\n * @property {Object.} fields Field descriptors\n * @property {number[][]} [extensions] Extension ranges\n * @property {number[][]} [reserved] Reserved ranges\n * @property {boolean} [group=false] Whether a legacy group or not\n */\n\n/**\n * Creates a message type from a message type descriptor.\n * @param {string} name Message name\n * @param {IType} json Message type descriptor\n * @returns {Type} Created message type\n */\nType.fromJSON = function fromJSON(name, json) {\n var type = new Type(name, json.options);\n type.extensions = json.extensions;\n type.reserved = json.reserved;\n var names = Object.keys(json.fields),\n i = 0;\n for (; i < names.length; ++i)\n type.add(\n ( typeof json.fields[names[i]].keyType !== \"undefined\"\n ? MapField.fromJSON\n : Field.fromJSON )(names[i], json.fields[names[i]])\n );\n if (json.oneofs)\n for (names = Object.keys(json.oneofs), i = 0; i < names.length; ++i)\n type.add(OneOf.fromJSON(names[i], json.oneofs[names[i]]));\n if (json.nested)\n for (names = Object.keys(json.nested), i = 0; i < names.length; ++i) {\n var nested = json.nested[names[i]];\n type.add( // most to least likely\n ( nested.id !== undefined\n ? Field.fromJSON\n : nested.fields !== undefined\n ? Type.fromJSON\n : nested.values !== undefined\n ? Enum.fromJSON\n : nested.methods !== undefined\n ? Service.fromJSON\n : Namespace.fromJSON )(names[i], nested)\n );\n }\n if (json.extensions && json.extensions.length)\n type.extensions = json.extensions;\n if (json.reserved && json.reserved.length)\n type.reserved = json.reserved;\n if (json.group)\n type.group = true;\n if (json.comment)\n type.comment = json.comment;\n return type;\n};\n\n/**\n * Converts this message type to a message type descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IType} Message type descriptor\n */\nType.prototype.toJSON = function toJSON(toJSONOptions) {\n var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , inherited && inherited.options || undefined,\n \"oneofs\" , Namespace.arrayToJSON(this.oneofsArray, toJSONOptions),\n \"fields\" , Namespace.arrayToJSON(this.fieldsArray.filter(function(obj) { return !obj.declaringField; }), toJSONOptions) || {},\n \"extensions\" , this.extensions && this.extensions.length ? this.extensions : undefined,\n \"reserved\" , this.reserved && this.reserved.length ? this.reserved : undefined,\n \"group\" , this.group || undefined,\n \"nested\" , inherited && inherited.nested || undefined,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * @override\n */\nType.prototype.resolveAll = function resolveAll() {\n var fields = this.fieldsArray, i = 0;\n while (i < fields.length)\n fields[i++].resolve();\n var oneofs = this.oneofsArray; i = 0;\n while (i < oneofs.length)\n oneofs[i++].resolve();\n return Namespace.prototype.resolveAll.call(this);\n};\n\n/**\n * @override\n */\nType.prototype.get = function get(name) {\n return this.fields[name]\n || this.oneofs && this.oneofs[name]\n || this.nested && this.nested[name]\n || null;\n};\n\n/**\n * Adds a nested object to this type.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name or, if a field, when there is already a field with this id\n */\nType.prototype.add = function add(object) {\n\n if (this.get(object.name))\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n if (object instanceof Field && object.extend === undefined) {\n // NOTE: Extension fields aren't actual fields on the declaring type, but nested objects.\n // The root object takes care of adding distinct sister-fields to the respective extended\n // type instead.\n\n // avoids calling the getter if not absolutely necessary because it's called quite frequently\n if (this._fieldsById ? /* istanbul ignore next */ this._fieldsById[object.id] : this.fieldsById[object.id])\n throw Error(\"duplicate id \" + object.id + \" in \" + this);\n if (this.isReservedId(object.id))\n throw Error(\"id \" + object.id + \" is reserved in \" + this);\n if (this.isReservedName(object.name))\n throw Error(\"name '\" + object.name + \"' is reserved in \" + this);\n\n if (object.parent)\n object.parent.remove(object);\n this.fields[object.name] = object;\n object.message = this;\n object.onAdd(this);\n return clearCache(this);\n }\n if (object instanceof OneOf) {\n if (!this.oneofs)\n this.oneofs = {};\n this.oneofs[object.name] = object;\n object.onAdd(this);\n return clearCache(this);\n }\n return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * Removes a nested object from this type.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this type\n */\nType.prototype.remove = function remove(object) {\n if (object instanceof Field && object.extend === undefined) {\n // See Type#add for the reason why extension fields are excluded here.\n\n /* istanbul ignore if */\n if (!this.fields || this.fields[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.fields[object.name];\n object.parent = null;\n object.onRemove(this);\n return clearCache(this);\n }\n if (object instanceof OneOf) {\n\n /* istanbul ignore if */\n if (!this.oneofs || this.oneofs[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.oneofs[object.name];\n object.parent = null;\n object.onRemove(this);\n return clearCache(this);\n }\n return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedId = function isReservedId(id) {\n return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedName = function isReservedName(name) {\n return Namespace.isReservedName(this.reserved, name);\n};\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.} [properties] Properties to set\n * @returns {Message<{}>} Message instance\n */\nType.prototype.create = function create(properties) {\n return new this.ctor(properties);\n};\n\n/**\n * Sets up {@link Type#encode|encode}, {@link Type#decode|decode} and {@link Type#verify|verify}.\n * @returns {Type} `this`\n */\nType.prototype.setup = function setup() {\n // Sets up everything at once so that the prototype chain does not have to be re-evaluated\n // multiple times (V8, soft-deopt prototype-check).\n\n var fullName = this.fullName,\n types = [];\n for (var i = 0; i < /* initializes */ this.fieldsArray.length; ++i)\n types.push(this._fieldsArray[i].resolve().resolvedType);\n\n // Replace setup methods with type-specific generated functions\n this.encode = encoder(this)({\n Writer : Writer,\n types : types,\n util : util\n });\n this.decode = decoder(this)({\n Reader : Reader,\n types : types,\n util : util\n });\n this.verify = verifier(this)({\n types : types,\n util : util\n });\n this.fromObject = converter.fromObject(this)({\n types : types,\n util : util\n });\n this.toObject = converter.toObject(this)({\n types : types,\n util : util\n });\n\n // Inject custom wrappers for common types\n var wrapper = wrappers[fullName];\n if (wrapper) {\n var originalThis = Object.create(this);\n // if (wrapper.fromObject) {\n originalThis.fromObject = this.fromObject;\n this.fromObject = wrapper.fromObject.bind(originalThis);\n // }\n // if (wrapper.toObject) {\n originalThis.toObject = this.toObject;\n this.toObject = wrapper.toObject.bind(originalThis);\n // }\n }\n\n return this;\n};\n\n/**\n * Encodes a message of this type. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encode = function encode_setup(message, writer) {\n return this.setup().encode(message, writer); // overrides this method\n};\n\n/**\n * Encodes a message of this type preceeded by its byte length as a varint. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();\n};\n\n/**\n * Decodes a message of this type.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Length of the message, if known beforehand\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError<{}>} If required fields are missing\n */\nType.prototype.decode = function decode_setup(reader, length) {\n return this.setup().decode(reader, length); // overrides this method\n};\n\n/**\n * Decodes a message of this type preceeded by its byte length as a varint.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError} If required fields are missing\n */\nType.prototype.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof Reader))\n reader = Reader.create(reader);\n return this.decode(reader, reader.uint32());\n};\n\n/**\n * Verifies that field values are valid and that required fields are present.\n * @param {Object.} message Plain object to verify\n * @returns {null|string} `null` if valid, otherwise the reason why it is not\n */\nType.prototype.verify = function verify_setup(message) {\n return this.setup().verify(message); // overrides this method\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.} object Plain object to convert\n * @returns {Message<{}>} Message instance\n */\nType.prototype.fromObject = function fromObject(object) {\n return this.setup().fromObject(object);\n};\n\n/**\n * Conversion options as used by {@link Type#toObject} and {@link Message.toObject}.\n * @interface IConversionOptions\n * @property {Function} [longs] Long conversion type.\n * Valid values are `String` and `Number` (the global types).\n * Defaults to copy the present value, which is a possibly unsafe number without and a {@link Long} with a long library.\n * @property {Function} [enums] Enum value conversion type.\n * Only valid value is `String` (the global type).\n * Defaults to copy the present value, which is the numeric id.\n * @property {Function} [bytes] Bytes value conversion type.\n * Valid values are `Array` and (a base64 encoded) `String` (the global types).\n * Defaults to copy the present value, which usually is a Buffer under node and an Uint8Array in the browser.\n * @property {boolean} [defaults=false] Also sets default values on the resulting object\n * @property {boolean} [arrays=false] Sets empty arrays for missing repeated fields even if `defaults=false`\n * @property {boolean} [objects=false] Sets empty objects for missing map fields even if `defaults=false`\n * @property {boolean} [oneofs=false] Includes virtual oneof properties set to the present field's name, if any\n * @property {boolean} [json=false] Performs additional JSON compatibility conversions, i.e. NaN and Infinity to strings\n */\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\nType.prototype.toObject = function toObject(message, options) {\n return this.setup().toObject(message, options);\n};\n\n/**\n * Decorator function as returned by {@link Type.d} (TypeScript).\n * @typedef TypeDecorator\n * @type {function}\n * @param {Constructor} target Target constructor\n * @returns {undefined}\n * @template T extends Message\n */\n\n/**\n * Type decorator (TypeScript).\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {TypeDecorator} Decorator function\n * @template T extends Message\n */\nType.d = function decorateType(typeName) {\n return function typeDecorator(target) {\n util.decorateType(target, typeName);\n };\n};\n","\"use strict\";\n\n/**\n * Common type constants.\n * @namespace\n */\nvar types = exports;\n\nvar util = require(\"./util\");\n\nvar s = [\n \"double\", // 0\n \"float\", // 1\n \"int32\", // 2\n \"uint32\", // 3\n \"sint32\", // 4\n \"fixed32\", // 5\n \"sfixed32\", // 6\n \"int64\", // 7\n \"uint64\", // 8\n \"sint64\", // 9\n \"fixed64\", // 10\n \"sfixed64\", // 11\n \"bool\", // 12\n \"string\", // 13\n \"bytes\" // 14\n];\n\nfunction bake(values, offset) {\n var i = 0, o = {};\n offset |= 0;\n while (i < values.length) o[s[i + offset]] = values[i++];\n return o;\n}\n\n/**\n * Basic type wire types.\n * @type {Object.}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n * @property {number} bytes=2 Ldelim wire type\n */\ntypes.basic = bake([\n /* double */ 1,\n /* float */ 5,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0,\n /* string */ 2,\n /* bytes */ 2\n]);\n\n/**\n * Basic type defaults.\n * @type {Object.}\n * @const\n * @property {number} double=0 Double default\n * @property {number} float=0 Float default\n * @property {number} int32=0 Int32 default\n * @property {number} uint32=0 Uint32 default\n * @property {number} sint32=0 Sint32 default\n * @property {number} fixed32=0 Fixed32 default\n * @property {number} sfixed32=0 Sfixed32 default\n * @property {number} int64=0 Int64 default\n * @property {number} uint64=0 Uint64 default\n * @property {number} sint64=0 Sint32 default\n * @property {number} fixed64=0 Fixed64 default\n * @property {number} sfixed64=0 Sfixed64 default\n * @property {boolean} bool=false Bool default\n * @property {string} string=\"\" String default\n * @property {Array.} bytes=Array(0) Bytes default\n * @property {null} message=null Message default\n */\ntypes.defaults = bake([\n /* double */ 0,\n /* float */ 0,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 0,\n /* sfixed32 */ 0,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 0,\n /* sfixed64 */ 0,\n /* bool */ false,\n /* string */ \"\",\n /* bytes */ util.emptyArray,\n /* message */ null\n]);\n\n/**\n * Basic long type wire types.\n * @type {Object.}\n * @const\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n */\ntypes.long = bake([\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1\n], 7);\n\n/**\n * Allowed types for map keys with their associated wire type.\n * @type {Object.}\n * @const\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n */\ntypes.mapKey = bake([\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0,\n /* string */ 2\n], 2);\n\n/**\n * Allowed types for packed repeated fields with their associated wire type.\n * @type {Object.}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n */\ntypes.packed = bake([\n /* double */ 1,\n /* float */ 5,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0\n]);\n","\"use strict\";\n\n/**\n * Various utility functions.\n * @namespace\n */\nvar util = module.exports = require(\"./util/minimal\");\n\nvar roots = require(\"./roots\");\n\nvar Type, // cyclic\n Enum;\n\nutil.codegen = require(\"@protobufjs/codegen\");\nutil.fetch = require(\"@protobufjs/fetch\");\nutil.path = require(\"@protobufjs/path\");\n\n/**\n * Node's fs module if available.\n * @type {Object.}\n */\nutil.fs = util.inquire(\"fs\");\n\n/**\n * Converts an object's values to an array.\n * @param {Object.} object Object to convert\n * @returns {Array.<*>} Converted array\n */\nutil.toArray = function toArray(object) {\n if (object) {\n var keys = Object.keys(object),\n array = new Array(keys.length),\n index = 0;\n while (index < keys.length)\n array[index] = object[keys[index++]];\n return array;\n }\n return [];\n};\n\n/**\n * Converts an array of keys immediately followed by their respective value to an object, omitting undefined values.\n * @param {Array.<*>} array Array to convert\n * @returns {Object.} Converted object\n */\nutil.toObject = function toObject(array) {\n var object = {},\n index = 0;\n while (index < array.length) {\n var key = array[index++],\n val = array[index++];\n if (val !== undefined)\n object[key] = val;\n }\n return object;\n};\n\nvar safePropBackslashRe = /\\\\/g,\n safePropQuoteRe = /\"/g;\n\n/**\n * Tests whether the specified name is a reserved word in JS.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nutil.isReserved = function isReserved(name) {\n return /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$/.test(name);\n};\n\n/**\n * Returns a safe property accessor for the specified property name.\n * @param {string} prop Property name\n * @returns {string} Safe accessor\n */\nutil.safeProp = function safeProp(prop) {\n if (!/^[$\\w_]+$/.test(prop) || util.isReserved(prop))\n return \"[\\\"\" + prop.replace(safePropBackslashRe, \"\\\\\\\\\").replace(safePropQuoteRe, \"\\\\\\\"\") + \"\\\"]\";\n return \".\" + prop;\n};\n\n/**\n * Converts the first character of a string to upper case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.ucFirst = function ucFirst(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n};\n\nvar camelCaseRe = /_([a-z])/g;\n\n/**\n * Converts a string to camel case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.camelCase = function camelCase(str) {\n return str.substring(0, 1)\n + str.substring(1)\n .replace(camelCaseRe, function($0, $1) { return $1.toUpperCase(); });\n};\n\n/**\n * Compares reflected fields by id.\n * @param {Field} a First field\n * @param {Field} b Second field\n * @returns {number} Comparison value\n */\nutil.compareFieldsById = function compareFieldsById(a, b) {\n return a.id - b.id;\n};\n\n/**\n * Decorator helper for types (TypeScript).\n * @param {Constructor} ctor Constructor function\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {Type} Reflected type\n * @template T extends Message\n * @property {Root} root Decorators root\n */\nutil.decorateType = function decorateType(ctor, typeName) {\n\n /* istanbul ignore if */\n if (ctor.$type) {\n if (typeName && ctor.$type.name !== typeName) {\n util.decorateRoot.remove(ctor.$type);\n ctor.$type.name = typeName;\n util.decorateRoot.add(ctor.$type);\n }\n return ctor.$type;\n }\n\n /* istanbul ignore next */\n if (!Type)\n Type = require(\"./type\");\n\n var type = new Type(typeName || ctor.name);\n util.decorateRoot.add(type);\n type.ctor = ctor; // sets up .encode, .decode etc.\n Object.defineProperty(ctor, \"$type\", { value: type, enumerable: false });\n Object.defineProperty(ctor.prototype, \"$type\", { value: type, enumerable: false });\n return type;\n};\n\nvar decorateEnumIndex = 0;\n\n/**\n * Decorator helper for enums (TypeScript).\n * @param {Object} object Enum object\n * @returns {Enum} Reflected enum\n */\nutil.decorateEnum = function decorateEnum(object) {\n\n /* istanbul ignore if */\n if (object.$type)\n return object.$type;\n\n /* istanbul ignore next */\n if (!Enum)\n Enum = require(\"./enum\");\n\n var enm = new Enum(\"Enum\" + decorateEnumIndex++, object);\n util.decorateRoot.add(enm);\n Object.defineProperty(object, \"$type\", { value: enm, enumerable: false });\n return enm;\n};\n\n\n/**\n * Sets the value of a property by property path. If a value already exists, it is turned to an array\n * @param {Object.} dst Destination object\n * @param {string} path dot '.' delimited path of the property to set\n * @param {Object} value the value to set\n * @returns {Object.} Destination object\n */\nutil.setProperty = function setProperty(dst, path, value) {\n function setProp(dst, path, value) {\n var part = path.shift();\n if (path.length > 0) {\n dst[part] = setProp(dst[part] || {}, path, value);\n } else {\n var prevValue = dst[part];\n if (prevValue)\n value = [].concat(prevValue).concat(value);\n dst[part] = value;\n }\n return dst;\n }\n\n if (typeof dst !== \"object\")\n throw TypeError(\"dst must be an object\");\n if (!path)\n throw TypeError(\"path must be specified\");\n\n path = path.split(\".\");\n return setProp(dst, path, value);\n};\n\n/**\n * Decorator root (TypeScript).\n * @name util.decorateRoot\n * @type {Root}\n * @readonly\n */\nObject.defineProperty(util, \"decorateRoot\", {\n get: function() {\n return roots[\"decorated\"] || (roots[\"decorated\"] = new (require(\"./root\"))());\n }\n});\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.} dst Destination object\n * @param {Object.} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message\n * @constructor\n * @param {string} message Error message\n * @param {Object.} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","\"use strict\";\nmodule.exports = verifier;\n\nvar Enum = require(\"./enum\"),\n util = require(\"./util\");\n\nfunction invalid(field, expected) {\n return field.name + \": \" + expected + (field.repeated && expected !== \"array\" ? \"[]\" : field.map && expected !== \"object\" ? \"{k:\"+field.keyType+\"}\" : \"\") + \" expected\";\n}\n\n/**\n * Generates a partial value verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyValue(gen, field, fieldIndex, ref) {\n /* eslint-disable no-unexpected-multiline */\n if (field.resolvedType) {\n if (field.resolvedType instanceof Enum) { gen\n (\"switch(%s){\", ref)\n (\"default:\")\n (\"return%j\", invalid(field, \"enum value\"));\n for (var keys = Object.keys(field.resolvedType.values), j = 0; j < keys.length; ++j) gen\n (\"case %i:\", field.resolvedType.values[keys[j]]);\n gen\n (\"break\")\n (\"}\");\n } else {\n gen\n (\"{\")\n (\"var e=types[%i].verify(%s);\", fieldIndex, ref)\n (\"if(e)\")\n (\"return%j+e\", field.name + \".\")\n (\"}\");\n }\n } else {\n switch (field.type) {\n case \"int32\":\n case \"uint32\":\n case \"sint32\":\n case \"fixed32\":\n case \"sfixed32\": gen\n (\"if(!util.isInteger(%s))\", ref)\n (\"return%j\", invalid(field, \"integer\"));\n break;\n case \"int64\":\n case \"uint64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))\", ref, ref, ref, ref)\n (\"return%j\", invalid(field, \"integer|Long\"));\n break;\n case \"float\":\n case \"double\": gen\n (\"if(typeof %s!==\\\"number\\\")\", ref)\n (\"return%j\", invalid(field, \"number\"));\n break;\n case \"bool\": gen\n (\"if(typeof %s!==\\\"boolean\\\")\", ref)\n (\"return%j\", invalid(field, \"boolean\"));\n break;\n case \"string\": gen\n (\"if(!util.isString(%s))\", ref)\n (\"return%j\", invalid(field, \"string\"));\n break;\n case \"bytes\": gen\n (\"if(!(%s&&typeof %s.length===\\\"number\\\"||util.isString(%s)))\", ref, ref, ref)\n (\"return%j\", invalid(field, \"buffer\"));\n break;\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a partial key verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyKey(gen, field, ref) {\n /* eslint-disable no-unexpected-multiline */\n switch (field.keyType) {\n case \"int32\":\n case \"uint32\":\n case \"sint32\":\n case \"fixed32\":\n case \"sfixed32\": gen\n (\"if(!util.key32Re.test(%s))\", ref)\n (\"return%j\", invalid(field, \"integer key\"));\n break;\n case \"int64\":\n case \"uint64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(!util.key64Re.test(%s))\", ref) // see comment above: x is ok, d is not\n (\"return%j\", invalid(field, \"integer|Long key\"));\n break;\n case \"bool\": gen\n (\"if(!util.key2Re.test(%s))\", ref)\n (\"return%j\", invalid(field, \"boolean key\"));\n break;\n }\n return gen;\n /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a verifier specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction verifier(mtype) {\n /* eslint-disable no-unexpected-multiline */\n\n var gen = util.codegen([\"m\"], mtype.name + \"$verify\")\n (\"if(typeof m!==\\\"object\\\"||m===null)\")\n (\"return%j\", \"object expected\");\n var oneofs = mtype.oneofsArray,\n seenFirstField = {};\n if (oneofs.length) gen\n (\"var p={}\");\n\n for (var i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n var field = mtype._fieldsArray[i].resolve(),\n ref = \"m\" + util.safeProp(field.name);\n\n if (field.optional) gen\n (\"if(%s!=null&&m.hasOwnProperty(%j)){\", ref, field.name); // !== undefined && !== null\n\n // map fields\n if (field.map) { gen\n (\"if(!util.isObject(%s))\", ref)\n (\"return%j\", invalid(field, \"object\"))\n (\"var k=Object.keys(%s)\", ref)\n (\"for(var i=0;i}\n * @const\n */\nvar wrappers = exports;\n\nvar Message = require(\"./message\");\n\n/**\n * From object converter part of an {@link IWrapper}.\n * @typedef WrapperFromObjectConverter\n * @type {function}\n * @param {Object.} object Plain object\n * @returns {Message<{}>} Message instance\n * @this Type\n */\n\n/**\n * To object converter part of an {@link IWrapper}.\n * @typedef WrapperToObjectConverter\n * @type {function}\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n * @this Type\n */\n\n/**\n * Common type wrapper part of {@link wrappers}.\n * @interface IWrapper\n * @property {WrapperFromObjectConverter} [fromObject] From object converter\n * @property {WrapperToObjectConverter} [toObject] To object converter\n */\n\n// Custom wrapper for Any\nwrappers[\".google.protobuf.Any\"] = {\n\n fromObject: function(object) {\n\n // unwrap value type if mapped\n if (object && object[\"@type\"]) {\n // Only use fully qualified type name after the last '/'\n var name = object[\"@type\"].substring(object[\"@type\"].lastIndexOf(\"/\") + 1);\n var type = this.lookup(name);\n /* istanbul ignore else */\n if (type) {\n // type_url does not accept leading \".\"\n var type_url = object[\"@type\"].charAt(0) === \".\" ?\n object[\"@type\"].substr(1) : object[\"@type\"];\n // type_url prefix is optional, but path seperator is required\n if (type_url.indexOf(\"/\") === -1) {\n type_url = \"/\" + type_url;\n }\n return this.create({\n type_url: type_url,\n value: type.encode(type.fromObject(object)).finish()\n });\n }\n }\n\n return this.fromObject(object);\n },\n\n toObject: function(message, options) {\n\n // Default prefix\n var googleApi = \"type.googleapis.com/\";\n var prefix = \"\";\n var name = \"\";\n\n // decode value if requested and unmapped\n if (options && options.json && message.type_url && message.value) {\n // Only use fully qualified type name after the last '/'\n name = message.type_url.substring(message.type_url.lastIndexOf(\"/\") + 1);\n // Separate the prefix used\n prefix = message.type_url.substring(0, message.type_url.lastIndexOf(\"/\") + 1);\n var type = this.lookup(name);\n /* istanbul ignore else */\n if (type)\n message = type.decode(message.value);\n }\n\n // wrap value if unmapped\n if (!(message instanceof this.ctor) && message instanceof Message) {\n var object = message.$type.toObject(message, options);\n var messageName = message.$type.fullName[0] === \".\" ?\n message.$type.fullName.substr(1) : message.$type.fullName;\n // Default to type.googleapis.com prefix if no prefix is used\n if (prefix === \"\") {\n prefix = googleApi;\n }\n name = prefix + messageName;\n object[\"@type\"] = name;\n return object;\n }\n\n return this.toObject(message, options);\n }\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(714);\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://Centrifuge/webpack/universalModuleDefinition","webpack://Centrifuge/./node_modules/@protobufjs/aspromise/index.js","webpack://Centrifuge/./node_modules/@protobufjs/base64/index.js","webpack://Centrifuge/./node_modules/@protobufjs/codegen/index.js","webpack://Centrifuge/./node_modules/@protobufjs/eventemitter/index.js","webpack://Centrifuge/./node_modules/@protobufjs/fetch/index.js","webpack://Centrifuge/./node_modules/@protobufjs/float/index.js","webpack://Centrifuge/./node_modules/@protobufjs/inquire/index.js","webpack://Centrifuge/./node_modules/@protobufjs/path/index.js","webpack://Centrifuge/./node_modules/@protobufjs/pool/index.js","webpack://Centrifuge/./node_modules/@protobufjs/utf8/index.js","webpack://Centrifuge/./src/centrifuge.js","webpack://Centrifuge/./src/index_protobuf.js","webpack://Centrifuge/./src/json.js","webpack://Centrifuge/./src/protobuf.js","webpack://Centrifuge/./src/subscription.js","webpack://Centrifuge/./src/utils.js","webpack://Centrifuge/./node_modules/events/events.js","webpack://Centrifuge/./node_modules/protobufjs/light.js","webpack://Centrifuge/./node_modules/protobufjs/src/converter.js","webpack://Centrifuge/./node_modules/protobufjs/src/decoder.js","webpack://Centrifuge/./node_modules/protobufjs/src/encoder.js","webpack://Centrifuge/./node_modules/protobufjs/src/enum.js","webpack://Centrifuge/./node_modules/protobufjs/src/field.js","webpack://Centrifuge/./node_modules/protobufjs/src/index-light.js","webpack://Centrifuge/./node_modules/protobufjs/src/index-minimal.js","webpack://Centrifuge/./node_modules/protobufjs/src/mapfield.js","webpack://Centrifuge/./node_modules/protobufjs/src/message.js","webpack://Centrifuge/./node_modules/protobufjs/src/method.js","webpack://Centrifuge/./node_modules/protobufjs/src/namespace.js","webpack://Centrifuge/./node_modules/protobufjs/src/object.js","webpack://Centrifuge/./node_modules/protobufjs/src/oneof.js","webpack://Centrifuge/./node_modules/protobufjs/src/reader.js","webpack://Centrifuge/./node_modules/protobufjs/src/reader_buffer.js","webpack://Centrifuge/./node_modules/protobufjs/src/root.js","webpack://Centrifuge/./node_modules/protobufjs/src/roots.js","webpack://Centrifuge/./node_modules/protobufjs/src/rpc.js","webpack://Centrifuge/./node_modules/protobufjs/src/rpc/service.js","webpack://Centrifuge/./node_modules/protobufjs/src/service.js","webpack://Centrifuge/./node_modules/protobufjs/src/type.js","webpack://Centrifuge/./node_modules/protobufjs/src/types.js","webpack://Centrifuge/./node_modules/protobufjs/src/util.js","webpack://Centrifuge/./node_modules/protobufjs/src/util/longbits.js","webpack://Centrifuge/./node_modules/protobufjs/src/util/minimal.js","webpack://Centrifuge/./node_modules/protobufjs/src/verifier.js","webpack://Centrifuge/./node_modules/protobufjs/src/wrappers.js","webpack://Centrifuge/./node_modules/protobufjs/src/writer.js","webpack://Centrifuge/./node_modules/protobufjs/src/writer_buffer.js","webpack://Centrifuge/webpack/bootstrap","webpack://Centrifuge/webpack/startup","webpack://Centrifuge/webpack/runtime/global"],"names":["root","factory","exports","module","define","amd","this","fn","ctx","params","Array","arguments","length","offset","index","pending","Promise","resolve","reject","err","apply","base64","string","p","n","charAt","Math","ceil","b64","s64","i","encode","buffer","start","end","t","parts","chunk","j","b","push","String","fromCharCode","slice","join","invalidEncoding","decode","c","charCodeAt","undefined","Error","test","codegen","functionParams","functionName","body","Codegen","formatStringOrScope","source","toString","verbose","console","log","scopeKeys","Object","keys","scopeParams","scopeValues","scopeOffset","Function","formatParams","formatOffset","replace","$0","$1","value","Number","floor","JSON","stringify","functionNameOverride","EventEmitter","_listeners","prototype","on","evt","off","listeners","splice","emit","args","fetch","asPromise","fs","inquire","filename","options","callback","xhr","readFile","contents","XMLHttpRequest","binary","onreadystatechange","readyState","status","response","responseText","Uint8Array","overrideMimeType","responseType","open","send","Float32Array","f32","f8b","le","writeFloat_f32_cpy","val","buf","pos","writeFloat_f32_rev","readFloat_f32_cpy","readFloat_f32_rev","writeFloatLE","writeFloatBE","readFloatLE","readFloatBE","writeFloat_ieee754","writeUint","sign","isNaN","round","exponent","LN2","pow","readFloat_ieee754","readUint","uint","mantissa","NaN","Infinity","bind","writeUintLE","writeUintBE","readUintLE","readUintBE","Float64Array","f64","writeDouble_f64_cpy","writeDouble_f64_rev","readDouble_f64_cpy","readDouble_f64_rev","writeDoubleLE","writeDoubleBE","readDoubleLE","readDoubleBE","writeDouble_ieee754","off0","off1","readDouble_ieee754","lo","hi","moduleName","mod","eval","e","path","isAbsolute","normalize","split","absolute","prefix","shift","originPath","includePath","alreadyNormalized","alloc","size","SIZE","MAX","slab","call","utf8","len","read","write","c1","c2","_errorTimeout","_errorConnectionClosed","Centrifuge","url","_url","_websocket","_sockjs","_isSockjs","_binary","_methodType","_pushType","_encoder","_decoder","_status","_reconnect","_reconnecting","_transport","_transportName","_transportClosed","_messageId","_clientID","_refreshRequired","_subs","_serverSubs","_lastSeq","_lastGen","_lastOffset","_lastEpoch","_messages","_isBatching","_isSubscribeBatching","_privateChannels","_numRefreshFailed","_refreshTimeout","_pingTimeout","_pongTimeout","_subRefreshTimeouts","_retries","_callbacks","_latency","_latencyStart","_connectData","_token","_xhrID","_xhrs","_dispatchPromise","_config","debug","name","version","websocket","sockjs","minRetry","maxRetry","timeout","ping","pingInterval","pongWaitTimeout","privateChannelPrefix","onTransportClose","sockjsServer","sockjsTransports","refreshEndpoint","refreshHeaders","refreshParams","refreshData","refreshAttempts","refreshInterval","onRefreshFailed","onRefresh","subscribeEndpoint","subscribeHeaders","subscribeParams","subRefreshInterval","onPrivateSubscribe","_configure","token","data","headers","query","_debug","global","ActiveXObject","hasOwnProperty","encodeURIComponent","headerName","withCredentials","setRequestHeader","parsed","parse","error","_log","setTimeout","WebSocket","format","_formatOverride","JsonMethodType","JsonPushType","JsonEncoder","JsonDecoder","configuration","extend","startsWith","indexOf","_setFormat","SockJS","newStatus","interval","backoff","xhrID","abort","reconnect","id","_stopPing","callbacks","clearTimeout","errback","_createErrorObject","channel","sub","_isSuccess","_triggerUnsubscribe","_recover","_shouldResubscribe","_setSubscribing","_setUnsubscribed","_abortInflightXHRs","_clearSubRefreshTimeout","transport","OPEN","commands","_isTransportOpen","command","encodeCommands","sockjsOptions","transports","server","_websocketSupported","binaryType","onopen","onheartbeat","_restartPing","msg","subs","hasSubs","recoverable","seq","gen","epoch","Date","_call","then","resolveCtx","_connectResponse","decodeCommandResult","CONNECT","result","next","rejectCtx","code","_disconnect","onerror","onclose","closeEvent","reason","needReconnect","advice","event","_getRetryInterval","_refresh","_connect","onmessage","_dataReceived","_rpc","method","RPC","_methodCall","SEND","isConnected","_transportSend","since","limit","resultCB","PUBLISH","_getHistoryParams","HISTORY","publications","PRESENCE","presence","PRESENCE_STATS","num_users","num_clients","replies","decodeReplies","finishDispatch","_dispatchSynchronized","_dispatchReply","reply","_handleReply","_handlePush","_addMessage","_registerCall","_setStatus","_setupTransport","shouldReconnect","_isDisconnected","_clearConnectedState","close","_refreshFailed","clientID","_newXHRID","cb","resp","jitter","random","max","REFRESH","_refreshResponse","_refreshError","_ajax","expires","client","_getTTLMilliseconds","ttl","channelsData","channels","channelData","SUB_REFRESH","_getSub","_subRefreshResponse","_subRefreshError","subRefreshTimeout","_subRefresh","isResubscribe","SUBSCRIBE","startSubscribeBatching","_subscribe","stopSubscribeBatching","recover","_needRecover","_getLastSeq","_getLastGen","_getLastOffset","_getLastEpoch","_subscribeResponse","_subscribeError","_setNew","UNSUBSCRIBE","min","isRecover","wasReconnecting","_resetRetry","getTime","startBatching","stopBatching","_startPing","latency","_processServerSubs","subCtx","_expandSubscribeContext","recovered","pubs","reverse","_handlePublication","_isSubscribing","message","_setSubscribeError","positioned","streamPosition","_setSubscribeSuccess","_recoverable","errorExists","info","_isServerSub","leave","unsub","unsubscribe","resubscribe","subscribe","pub","decodePush","type","PUBLICATION","decodePushData","MESSAGE","_handleMessage","JOIN","_handleJoin","LEAVE","_handleLeave","UNSUB","_handleUnsub","SUB","_handleSub","messages","PING","_pingResponse","isFunction","_nextMessageId","_isConnected","_ping","_flush","authChannels","batch","events","currentSub","_setEvents","_isUnsubscribed","Subscription","CentrifugeProtobuf","encodedCommands","encodedReplies","methodType","pushType","protobuf","require","proto","Root","fromJSON","methodValues","lookupEnum","values","protobufMethodType","methodSchema","lookupType","protobufPushType","PushSchema","Push","Command","Reply","ProtobufEncoder","writer","Writer","create","assign","finish","encodeDelimited","ProtobufDecoder","reader","Reader","decodeDelimited","_decode","res","centrifuge","_centrifuge","_error","_isResubscribe","_ready","_subscriptionPromise","_noResubscribe","_initializePromise","_promises","_promiseId","errContext","_resolve","_reject","knownEvents","l","ev","subscribeResult","successContext","_getSubscribeSuccessContext","_getSubscribeErrorContext","noResubscribe","needTrigger","subscribeErrorContext","_unsubscribe","_isError","rej","_nextPromiseId","self","publish","presenceStats","history","lastIndexOf","level","logger","step","a","key","ReflectOwnKeys","R","Reflect","ReflectApply","target","receiver","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","concat","NumberIsNaN","init","once","emitter","eventListener","errorListener","removeListener","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","TypeError","_getMaxListeners","that","_addListener","prepend","m","existing","warning","newListener","unshift","warned","w","count","warn","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","unwrap","evlistener","arr","ret","unwrapListeners","arrayClone","listenerCount","copy","defineProperty","enumerable","get","set","arg","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","context","handler","addListener","prependListener","prependOnceListener","list","position","originalListener","pop","spliceOne","removeAllListeners","rawListeners","eventNames","converter","Enum","util","genValuePartial_fromObject","field","fieldIndex","prop","resolvedType","repeated","typeDefault","fullName","isUnsigned","genValuePartial_toObject","fromObject","mtype","fields","fieldsArray","safeProp","map","toObject","sort","compareFieldsById","repeatedFields","mapFields","normalFields","partOf","valuesById","long","low","high","unsigned","toNumber","bytes","arrayDefault","hasKs2","_fieldsArray","filter","group","ref","types","defaults","keyType","basic","packed","rfield","required","missing","wireType","mapKey","genTypePartial","optional","ReflectionObject","constructor","className","Namespace","comment","comments","reserved","json","enm","toJSON","toJSONOptions","keepComments","Boolean","add","isString","isInteger","isReservedId","isReservedName","allow_alias","remove","Field","Type","ruleRe","rule","isObject","toLowerCase","defaultValue","Long","extensionField","declaringField","_packed","getOption","setOption","ifNotSet","resolved","parent","lookupTypeOrEnum","fromNumber","freeze","newBuffer","emptyObject","emptyArray","ctor","d","fieldId","fieldType","fieldRule","decorateType","decorateEnum","fieldName","Type_","build","load","loadSync","encoder","decoder","verifier","OneOf","MapField","Service","Method","Message","wrappers","configure","BufferWriter","BufferReader","rpc","roots","resolvedKeyType","fieldKeyType","fieldValueType","properties","$type","verify","object","requestType","requestStream","responseStream","parsedOptions","resolvedRequestType","resolvedResponseType","arrayToJSON","array","obj","nested","_nestedArray","clearCache","namespace","addJSON","toArray","nestedArray","nestedJson","names","methods","getEnum","prev","setOptions","onAdd","onRemove","isArray","ptr","part","resolveAll","lookup","filterTypes","parentAlreadyChecked","found","lookupService","Service_","Enum_","defineProperties","_handleAdd","_handleRemove","setParsedOption","propName","opt","find","newValue","setProperty","newOpt","Root_","fieldNames","oneof","addFieldsToParent","oneofName","oneOfGetter","oneOfSetter","LongBits","indexOutOfRange","writeLength","create_array","Buffer","isBuffer","readLongVarint","bits","readFixed32_end","readFixed64","_slice","subarray","uint32","int32","sint32","bool","fixed32","sfixed32","float","double","skip","skipType","BufferReader_","merge","int64","uint64","sint64","zzDecode","fixed64","sfixed64","utf8Slice","common","deferred","files","SYNC","resolvePath","sync","getBundledFileName","idx","altname","substring","process","imports","weakImports","queued","weak","readFileSync","isNode","exposeRe","tryHandleExtension","extendedType","sisterField","parse_","common_","rpcImpl","requestDelimited","responseDelimited","rpcCall","requestCtor","responseCtor","request","endedByRPC","_methodsArray","service","inherited","methodsArray","rpcService","methodName","lcFirst","isReserved","q","s","oneofs","extensions","_fieldsById","_oneofsArray","_ctor","fieldsById","oneofsArray","generateConstructor","ctorProperties","setup","wrapper","originalThis","fork","ldelim","typeName","bake","o","safePropBackslashRe","safePropQuoteRe","ucFirst","str","toUpperCase","camelCaseRe","camelCase","decorateRoot","decorateEnumIndex","dst","setProp","prevValue","zero","zzEncode","zeroHash","from","parseInt","fromString","toLong","fromHash","hash","toHash","mask","part0","part1","part2","src","newError","CustomError","captureStackTrace","stack","pool","g","versions","node","window","isFinite","isset","isSet","utf8Write","_Buffer_from","_Buffer_allocUnsafe","sizeOrArray","dcodeIO","key2Re","key32Re","key64Re","longToHash","longFromHash","fromBits","ProtocolError","fieldMap","longs","enums","encoding","allocUnsafe","seenFirstField","invalid","genVerifyKey","genVerifyValue","oneofProp","expected","type_url","substr","Op","noop","State","head","tail","states","writeByte","VarintOp","writeVarint64","writeFixed32","_push","writeBytes","reset","BufferWriter_","writeStringBuffer","writeBytesBuffer","byteLength","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__","globalThis"],"mappings":"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","file":"centrifuge.protobuf.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Centrifuge\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Centrifuge\"] = factory();\n\telse\n\t\troot[\"Centrifuge\"] = factory();\n})(this, function() {\nreturn ","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = codegen;\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @param {string[]} functionParams Function parameter names\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n */\r\nfunction codegen(functionParams, functionName) {\r\n\r\n /* istanbul ignore if */\r\n if (typeof functionParams === \"string\") {\r\n functionName = functionParams;\r\n functionParams = undefined;\r\n }\r\n\r\n var body = [];\r\n\r\n /**\r\n * Appends code to the function's body or finishes generation.\r\n * @typedef Codegen\r\n * @type {function}\r\n * @param {string|Object.} [formatStringOrScope] Format string or, to finish the function, an object of additional scope variables, if any\r\n * @param {...*} [formatParams] Format parameters\r\n * @returns {Codegen|Function} Itself or the generated function if finished\r\n * @throws {Error} If format parameter counts do not match\r\n */\r\n\r\n function Codegen(formatStringOrScope) {\r\n // note that explicit array handling below makes this ~50% faster\r\n\r\n // finish the function\r\n if (typeof formatStringOrScope !== \"string\") {\r\n var source = toString();\r\n if (codegen.verbose)\r\n console.log(\"codegen: \" + source); // eslint-disable-line no-console\r\n source = \"return \" + source;\r\n if (formatStringOrScope) {\r\n var scopeKeys = Object.keys(formatStringOrScope),\r\n scopeParams = new Array(scopeKeys.length + 1),\r\n scopeValues = new Array(scopeKeys.length),\r\n scopeOffset = 0;\r\n while (scopeOffset < scopeKeys.length) {\r\n scopeParams[scopeOffset] = scopeKeys[scopeOffset];\r\n scopeValues[scopeOffset] = formatStringOrScope[scopeKeys[scopeOffset++]];\r\n }\r\n scopeParams[scopeOffset] = source;\r\n return Function.apply(null, scopeParams).apply(null, scopeValues); // eslint-disable-line no-new-func\r\n }\r\n return Function(source)(); // eslint-disable-line no-new-func\r\n }\r\n\r\n // otherwise append to body\r\n var formatParams = new Array(arguments.length - 1),\r\n formatOffset = 0;\r\n while (formatOffset < formatParams.length)\r\n formatParams[formatOffset] = arguments[++formatOffset];\r\n formatOffset = 0;\r\n formatStringOrScope = formatStringOrScope.replace(/%([%dfijs])/g, function replace($0, $1) {\r\n var value = formatParams[formatOffset++];\r\n switch ($1) {\r\n case \"d\": case \"f\": return String(Number(value));\r\n case \"i\": return String(Math.floor(value));\r\n case \"j\": return JSON.stringify(value);\r\n case \"s\": return String(value);\r\n }\r\n return \"%\";\r\n });\r\n if (formatOffset !== formatParams.length)\r\n throw Error(\"parameter count mismatch\");\r\n body.push(formatStringOrScope);\r\n return Codegen;\r\n }\r\n\r\n function toString(functionNameOverride) {\r\n return \"function \" + (functionNameOverride || functionName || \"\") + \"(\" + (functionParams && functionParams.join(\",\") || \"\") + \"){\\n \" + body.join(\"\\n \") + \"\\n}\";\r\n }\r\n\r\n Codegen.toString = toString;\r\n return Codegen;\r\n}\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @function codegen\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * When set to `true`, codegen will log generated code to console. Useful for debugging.\r\n * @name util.codegen.verbose\r\n * @type {boolean}\r\n */\r\ncodegen.verbose = false;\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\nmodule.exports = fetch;\r\n\r\nvar asPromise = require(\"@protobufjs/aspromise\"),\r\n inquire = require(\"@protobufjs/inquire\");\r\n\r\nvar fs = inquire(\"fs\");\r\n\r\n/**\r\n * Node-style callback as used by {@link util.fetch}.\r\n * @typedef FetchCallback\r\n * @type {function}\r\n * @param {?Error} error Error, if any, otherwise `null`\r\n * @param {string} [contents] File contents, if there hasn't been an error\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Options as used by {@link util.fetch}.\r\n * @typedef FetchOptions\r\n * @type {Object}\r\n * @property {boolean} [binary=false] Whether expecting a binary response\r\n * @property {boolean} [xhr=false] If `true`, forces the use of XMLHttpRequest\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @memberof util\r\n * @param {string} filename File path or url\r\n * @param {FetchOptions} options Fetch options\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n */\r\nfunction fetch(filename, options, callback) {\r\n if (typeof options === \"function\") {\r\n callback = options;\r\n options = {};\r\n } else if (!options)\r\n options = {};\r\n\r\n if (!callback)\r\n return asPromise(fetch, this, filename, options); // eslint-disable-line no-invalid-this\r\n\r\n // if a node-like filesystem is present, try it first but fall back to XHR if nothing is found.\r\n if (!options.xhr && fs && fs.readFile)\r\n return fs.readFile(filename, function fetchReadFileCallback(err, contents) {\r\n return err && typeof XMLHttpRequest !== \"undefined\"\r\n ? fetch.xhr(filename, options, callback)\r\n : err\r\n ? callback(err)\r\n : callback(null, options.binary ? contents : contents.toString(\"utf8\"));\r\n });\r\n\r\n // use the XHR version otherwise.\r\n return fetch.xhr(filename, options, callback);\r\n}\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchOptions} [options] Fetch options\r\n * @returns {Promise} Promise\r\n * @variation 3\r\n */\r\n\r\n/**/\r\nfetch.xhr = function fetch_xhr(filename, options, callback) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.onreadystatechange /* works everywhere */ = function fetchOnReadyStateChange() {\r\n\r\n if (xhr.readyState !== 4)\r\n return undefined;\r\n\r\n // local cors security errors return status 0 / empty string, too. afaik this cannot be\r\n // reliably distinguished from an actually empty file for security reasons. feel free\r\n // to send a pull request if you are aware of a solution.\r\n if (xhr.status !== 0 && xhr.status !== 200)\r\n return callback(Error(\"status \" + xhr.status));\r\n\r\n // if binary data is expected, make sure that some sort of array is returned, even if\r\n // ArrayBuffers are not supported. the binary string fallback, however, is unsafe.\r\n if (options.binary) {\r\n var buffer = xhr.response;\r\n if (!buffer) {\r\n buffer = [];\r\n for (var i = 0; i < xhr.responseText.length; ++i)\r\n buffer.push(xhr.responseText.charCodeAt(i) & 255);\r\n }\r\n return callback(null, typeof Uint8Array !== \"undefined\" ? new Uint8Array(buffer) : buffer);\r\n }\r\n return callback(null, xhr.responseText);\r\n };\r\n\r\n if (options.binary) {\r\n // ref: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data#Receiving_binary_data_in_older_browsers\r\n if (\"overrideMimeType\" in xhr)\r\n xhr.overrideMimeType(\"text/plain; charset=x-user-defined\");\r\n xhr.responseType = \"arraybuffer\";\r\n }\r\n\r\n xhr.open(\"GET\", filename);\r\n xhr.send();\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal path module to resolve Unix, Windows and URL paths alike.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar path = exports;\r\n\r\nvar isAbsolute =\r\n/**\r\n * Tests if the specified path is absolute.\r\n * @param {string} path Path to test\r\n * @returns {boolean} `true` if path is absolute\r\n */\r\npath.isAbsolute = function isAbsolute(path) {\r\n return /^(?:\\/|\\w+:)/.test(path);\r\n};\r\n\r\nvar normalize =\r\n/**\r\n * Normalizes the specified path.\r\n * @param {string} path Path to normalize\r\n * @returns {string} Normalized path\r\n */\r\npath.normalize = function normalize(path) {\r\n path = path.replace(/\\\\/g, \"/\")\r\n .replace(/\\/{2,}/g, \"/\");\r\n var parts = path.split(\"/\"),\r\n absolute = isAbsolute(path),\r\n prefix = \"\";\r\n if (absolute)\r\n prefix = parts.shift() + \"/\";\r\n for (var i = 0; i < parts.length;) {\r\n if (parts[i] === \"..\") {\r\n if (i > 0 && parts[i - 1] !== \"..\")\r\n parts.splice(--i, 2);\r\n else if (absolute)\r\n parts.splice(i, 1);\r\n else\r\n ++i;\r\n } else if (parts[i] === \".\")\r\n parts.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n return prefix + parts.join(\"/\");\r\n};\r\n\r\n/**\r\n * Resolves the specified include path against the specified origin path.\r\n * @param {string} originPath Path to the origin file\r\n * @param {string} includePath Include path relative to origin path\r\n * @param {boolean} [alreadyNormalized=false] `true` if both paths are already known to be normalized\r\n * @returns {string} Path to the include file\r\n */\r\npath.resolve = function resolve(originPath, includePath, alreadyNormalized) {\r\n if (!alreadyNormalized)\r\n includePath = normalize(includePath);\r\n if (isAbsolute(includePath))\r\n return includePath;\r\n if (!alreadyNormalized)\r\n originPath = normalize(originPath);\r\n return (originPath = originPath.replace(/(?:\\/|^)[^/]+$/, \"\")).length ? normalize(originPath + \"/\" + includePath) : includePath;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","import EventEmitter from 'events';\nimport Subscription from './subscription';\n\nimport {\n JsonEncoder,\n JsonDecoder,\n JsonMethodType,\n JsonPushType\n} from './json';\n\nimport {\n isFunction,\n log,\n startsWith,\n errorExists,\n backoff,\n extend\n} from './utils';\n\nconst _errorTimeout = 'timeout';\nconst _errorConnectionClosed = 'connection closed';\n\nexport class Centrifuge extends EventEmitter {\n\n constructor(url, options) {\n super();\n this._url = url;\n this._websocket = null;\n this._sockjs = null;\n this._isSockjs = false;\n this._binary = false;\n this._methodType = null;\n this._pushType = null;\n this._encoder = null;\n this._decoder = null;\n this._status = 'disconnected';\n this._reconnect = true;\n this._reconnecting = false;\n this._transport = null;\n this._transportName = null;\n this._transportClosed = true;\n this._messageId = 0;\n this._clientID = null;\n this._refreshRequired = false;\n this._subs = {};\n this._serverSubs = {};\n this._lastSeq = {};\n this._lastGen = {};\n this._lastOffset = {};\n this._lastEpoch = {};\n this._messages = [];\n this._isBatching = false;\n this._isSubscribeBatching = false;\n this._privateChannels = {};\n this._numRefreshFailed = 0;\n this._refreshTimeout = null;\n this._pingTimeout = null;\n this._pongTimeout = null;\n this._subRefreshTimeouts = {};\n this._retries = 0;\n this._callbacks = {};\n this._latency = null;\n this._latencyStart = null;\n this._connectData = null;\n this._token = null;\n this._xhrID = 0;\n this._xhrs = {};\n this._dispatchPromise = Promise.resolve();\n this._config = {\n debug: false,\n name: '',\n version: '',\n websocket: null,\n sockjs: null,\n minRetry: 1000,\n maxRetry: 20000,\n timeout: 5000,\n ping: true,\n pingInterval: 25000,\n pongWaitTimeout: 5000,\n privateChannelPrefix: '$',\n onTransportClose: null,\n sockjsServer: null,\n sockjsTransports: [\n 'websocket',\n 'xdr-streaming',\n 'xhr-streaming',\n 'eventsource',\n 'iframe-eventsource',\n 'iframe-htmlfile',\n 'xdr-polling',\n 'xhr-polling',\n 'iframe-xhr-polling',\n 'jsonp-polling'\n ],\n refreshEndpoint: '/centrifuge/refresh',\n refreshHeaders: {},\n refreshParams: {},\n refreshData: {},\n refreshAttempts: null,\n refreshInterval: 1000,\n onRefreshFailed: null,\n onRefresh: null,\n subscribeEndpoint: '/centrifuge/subscribe',\n subscribeHeaders: {},\n subscribeParams: {},\n subRefreshInterval: 1000,\n onPrivateSubscribe: null\n };\n this._configure(options);\n }\n\n setToken(token) {\n this._token = token;\n }\n\n setConnectData(data) {\n this._connectData = data;\n }\n\n setRefreshHeaders(headers) {\n this._config.refreshHeaders = headers;\n }\n setRefreshParams(params) {\n this._config.refreshParams = params;\n }\n setRefreshData(data) {\n this._config.refreshData = data;\n }\n\n setSubscribeHeaders(headers) {\n this._config.subscribeHeaders = headers;\n }\n setSubscribeParams(params) {\n this._config.subscribeParams = params;\n }\n\n _ajax(url, params, headers, data, callback) {\n let query = '';\n this._debug('sending AJAX request to', url, 'with data', JSON.stringify(data));\n\n const xhr = (global.XMLHttpRequest ? new global.XMLHttpRequest() : new global.ActiveXObject('Microsoft.XMLHTTP'));\n\n for (const i in params) {\n if (params.hasOwnProperty(i)) {\n if (query.length > 0) {\n query += '&';\n }\n query += encodeURIComponent(i) + '=' + encodeURIComponent(params[i]);\n }\n }\n if (query.length > 0) {\n query = '?' + query;\n }\n xhr.open('POST', url + query, true);\n if ('withCredentials' in xhr) {\n xhr.withCredentials = true;\n }\n\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.setRequestHeader('Content-Type', 'application/json');\n for (const headerName in headers) {\n if (headers.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, headers[headerName]);\n }\n }\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data, parsed = false;\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback({\n error: 'Invalid JSON. Data was: ' + xhr.responseText,\n status: 200,\n data: null\n });\n }\n if (parsed) { // prevents double execution.\n callback({\n data: data,\n status: 200\n });\n }\n } else {\n this._log('wrong status code in AJAX response', xhr.status);\n callback({\n status: xhr.status,\n data: null\n });\n }\n }\n };\n setTimeout(() => xhr.send(JSON.stringify(data)), 20);\n return xhr;\n };\n\n _log() {\n log('info', arguments);\n };\n\n _debug() {\n if (this._config.debug === true) {\n log('debug', arguments);\n }\n };\n\n _websocketSupported() {\n if (this._config.websocket !== null) {\n return true;\n }\n return !(typeof WebSocket !== 'function' && typeof WebSocket !== 'object');\n };\n\n _setFormat(format) {\n if (this._formatOverride(format)) {\n return;\n }\n if (format === 'protobuf') {\n throw new Error('not implemented by JSON only Centrifuge client – use client with Protobuf');\n }\n this._binary = false;\n this._methodType = JsonMethodType;\n this._pushType = JsonPushType;\n this._encoder = new JsonEncoder();\n this._decoder = new JsonDecoder();\n }\n\n _formatOverride(format) {\n return false;\n }\n\n _configure(configuration) {\n if (!('Promise' in global)) {\n throw new Error('Promise polyfill required');\n }\n\n extend(this._config, configuration || {});\n this._debug('centrifuge config', this._config);\n\n if (!this._url) {\n throw new Error('url required');\n }\n\n if (startsWith(this._url, 'ws') && this._url.indexOf('format=protobuf') > -1) {\n this._setFormat('protobuf');\n } else {\n this._setFormat('json');\n }\n\n if (startsWith(this._url, 'http')) {\n this._debug('client will try to connect to SockJS endpoint');\n if (this._config.sockjs !== null) {\n this._debug('SockJS explicitly provided in options');\n this._sockjs = this._config.sockjs;\n } else {\n if (typeof global.SockJS === 'undefined') {\n throw new Error('SockJS not found, use ws:// in url or include SockJS');\n }\n this._debug('use globally defined SockJS');\n this._sockjs = global.SockJS;\n }\n } else {\n this._debug('client will connect to websocket endpoint');\n }\n };\n\n _setStatus(newStatus) {\n if (this._status !== newStatus) {\n this._debug('Status', this._status, '->', newStatus);\n this._status = newStatus;\n }\n };\n\n _isDisconnected() {\n return this._status === 'disconnected';\n };\n\n _isConnecting() {\n return this._status === 'connecting';\n };\n\n _isConnected() {\n return this._status === 'connected';\n };\n\n _nextMessageId() {\n return ++this._messageId;\n };\n\n _resetRetry() {\n this._debug('reset retries count to 0');\n this._retries = 0;\n };\n\n _getRetryInterval() {\n const interval = backoff(this._retries, this._config.minRetry, this._config.maxRetry);\n\n this._retries += 1;\n return interval;\n };\n\n _abortInflightXHRs() {\n for (const xhrID in this._xhrs) {\n try {\n this._xhrs[xhrID].abort();\n } catch (e) {\n this._debug('error aborting xhr', e);\n }\n delete this._xhrs[xhrID];\n }\n };\n\n _clearConnectedState(reconnect) {\n this._clientID = null;\n this._stopPing();\n\n // fire errbacks of registered outgoing calls.\n for (const id in this._callbacks) {\n if (this._callbacks.hasOwnProperty(id)) {\n const callbacks = this._callbacks[id];\n clearTimeout(callbacks.timeout);\n const errback = callbacks.errback;\n if (!errback) {\n continue;\n }\n errback({error: this._createErrorObject('disconnected')});\n }\n }\n this._callbacks = {};\n\n // fire unsubscribe events\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n\n if (reconnect) {\n if (sub._isSuccess()) {\n sub._triggerUnsubscribe();\n sub._recover = true;\n }\n if (sub._shouldResubscribe()) {\n sub._setSubscribing();\n }\n } else {\n sub._setUnsubscribed();\n }\n }\n }\n\n this._abortInflightXHRs();\n\n // clear refresh timer\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n // clear sub refresh timers\n for (const channel in this._subRefreshTimeouts) {\n if (this._subRefreshTimeouts.hasOwnProperty(channel) && this._subRefreshTimeouts[channel]) {\n this._clearSubRefreshTimeout(channel);\n }\n }\n this._subRefreshTimeouts = {};\n\n if (!this._reconnect) {\n // completely clear subscriptions\n this._subs = {};\n }\n };\n\n _isTransportOpen() {\n if (this._isSockjs) {\n return this._transport &&\n this._transport.transport &&\n this._transport.transport.readyState === this._transport.transport.OPEN;\n }\n return this._transport && this._transport.readyState === this._transport.OPEN;\n };\n\n _transportSend(commands) {\n if (!commands.length) {\n return true;\n }\n\n if (!this._isTransportOpen()) {\n // resolve pending commands with error if transport is not open\n for (let command in commands) {\n let id = command.id;\n if (!(id in this._callbacks)) {\n continue;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n const errback = callbacks.errback;\n errback({error: this._createErrorObject(_errorConnectionClosed, 0)});\n }\n return false;\n }\n this._transport.send(this._encoder.encodeCommands(commands));\n return true;\n }\n\n _setupTransport() {\n this._isSockjs = false;\n\n // detect transport to use - SockJS or Websocket\n if (this._sockjs !== null) {\n const sockjsOptions = {\n transports: this._config.sockjsTransports\n };\n\n if (this._config.sockjsServer !== null) {\n sockjsOptions.server = this._config.sockjsServer;\n }\n this._isSockjs = true;\n this._transport = new this._sockjs(this._url, null, sockjsOptions);\n } else {\n if (!this._websocketSupported()) {\n this._debug('No Websocket support and no SockJS configured, can not connect');\n return;\n }\n if (this._config.websocket !== null) {\n this._websocket = this._config.websocket;\n } else {\n this._websocket = WebSocket;\n }\n this._transport = new this._websocket(this._url);\n if (this._binary === true) {\n this._transport.binaryType = 'arraybuffer';\n }\n }\n\n this._transport.onopen = () => {\n this._transportClosed = false;\n\n if (this._isSockjs) {\n this._transportName = 'sockjs-' + this._transport.transport;\n this._transport.onheartbeat = () => this._restartPing();\n } else {\n this._transportName = 'websocket';\n }\n\n // Can omit method here due to zero value.\n const msg = {\n // method: this._methodType.CONNECT\n };\n\n if (this._token || this._connectData || this._config.name || this._config.version) {\n msg.params = {};\n }\n if (this._token) {\n msg.params.token = this._token;\n }\n if (this._connectData) {\n msg.params.data = this._connectData;\n }\n if (this._config.name) {\n msg.params.name = this._config.name;\n }\n if (this._config.version) {\n msg.params.version = this._config.version;\n }\n\n let subs = {};\n let hasSubs = false;\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel) && this._serverSubs[channel].recoverable) {\n hasSubs = true;\n let sub = {\n 'recover': true\n };\n if (this._serverSubs[channel].seq || this._serverSubs[channel].gen) {\n if (this._serverSubs[channel].seq) {\n sub['seq'] = this._serverSubs[channel].seq;\n }\n if (this._serverSubs[channel].gen) {\n sub['gen'] = this._serverSubs[channel].gen;\n }\n } else {\n if (this._serverSubs[channel].offset) {\n sub['offset'] = this._serverSubs[channel].offset;\n }\n }\n if (this._serverSubs[channel].epoch) {\n sub['epoch'] = this._serverSubs[channel].epoch;\n }\n subs[channel] = sub;\n }\n }\n if (hasSubs) {\n if (!msg.params) {msg.params = {};}\n msg.params.subs = subs;\n }\n\n this._latencyStart = new Date();\n this._call(msg).then(resolveCtx => {\n this._connectResponse(this._decoder.decodeCommandResult(this._methodType.CONNECT, resolveCtx.result), hasSubs);\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n const err = rejectCtx.error;\n if (err.code === 109) { // token expired.\n this._refreshRequired = true;\n }\n this._disconnect('connect error', true);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n this._transport.onerror = error => {\n this._debug('transport level error', error);\n };\n\n this._transport.onclose = closeEvent => {\n this._transportClosed = true;\n let reason = _errorConnectionClosed;\n let needReconnect = true;\n\n if (closeEvent && 'reason' in closeEvent && closeEvent.reason) {\n try {\n const advice = JSON.parse(closeEvent.reason);\n this._debug('reason is an advice object', advice);\n reason = advice.reason;\n needReconnect = advice.reconnect;\n } catch (e) {\n reason = closeEvent.reason;\n this._debug('reason is a plain string', reason);\n }\n }\n\n // onTransportClose callback should be executed every time transport was closed.\n // This can be helpful to catch failed connection events (because our disconnect\n // event only called once and every future attempts to connect do not fire disconnect\n // event again).\n if (this._config.onTransportClose !== null) {\n this._config.onTransportClose({\n event: closeEvent,\n reason: reason,\n reconnect: needReconnect\n });\n }\n\n this._disconnect(reason, needReconnect);\n\n if (this._reconnect === true) {\n this._reconnecting = true;\n const interval = this._getRetryInterval();\n\n this._debug('reconnect after ' + interval + ' milliseconds');\n setTimeout(() => {\n if (this._reconnect === true) {\n if (this._refreshRequired) {\n this._refresh();\n } else {\n this._connect();\n }\n }\n }, interval);\n }\n };\n\n this._transport.onmessage = event => {\n this._dataReceived(event.data);\n };\n };\n\n rpc(data) {\n return this._rpc('', data);\n }\n\n namedRPC(method, data) {\n return this._rpc(method, data);\n }\n\n _rpc(method, data) {\n let params = {\n data: data\n };\n if (method !== '') {\n params.method = method;\n };\n const msg = {\n method: this._methodType.RPC,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return result;\n });\n }\n\n send(data) {\n const msg = {\n method: this._methodType.SEND,\n params: {\n data: data\n }\n };\n\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n\n const sent = this._transportSend([msg]); // can send async message to server without id set\n if (!sent) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n };\n return Promise.resolve({});\n }\n\n _getHistoryParams(channel, options) {\n let params = {\n channel: channel\n };\n if (options !== undefined) {\n if (options.since) {\n params['use_since'] = true;\n if (options.since.offset) {\n params['offset'] = options.since.offset;\n }\n if (options.since.epoch) {\n params['epoch'] = options.since.epoch;\n }\n };\n if (options.limit !== undefined) {\n params['use_limit'] = true;\n params['limit'] = options.limit;\n }\n };\n return params;\n }\n\n _methodCall(msg, resultCB) {\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n return new Promise((resolve, reject) => {\n this._call(msg).then(resolveCtx => {\n resolve(resultCB(this._decoder.decodeCommandResult(msg.method, resolveCtx.result)));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n reject(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n });\n }\n\n publish(channel, data) {\n const msg = {\n method: this._methodType.PUBLISH,\n params: {\n channel: channel,\n data: data\n }\n };\n return this._methodCall(msg, function () {\n return {};\n });\n }\n\n history(channel, options) {\n const params = this._getHistoryParams(channel, options);\n const msg = {\n method: this._methodType.HISTORY,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return {\n 'publications': result.publications,\n 'epoch': result.epoch || '',\n 'offset': result.offset || 0\n };\n });\n }\n\n presence(channel) {\n const msg = {\n method: this._methodType.PRESENCE,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'presence': result.presence\n };\n });\n }\n\n presenceStats(channel) {\n const msg = {\n method: this._methodType.PRESENCE_STATS,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'num_users': result.num_users,\n 'num_clients': result.num_clients\n };\n });\n }\n\n _dataReceived(data) {\n const replies = this._decoder.decodeReplies(data);\n // we have to guarantee order of events in replies processing - i.e. start processing\n // next reply only when we finished processing of current one. Without syncing things in\n // this way we could get wrong publication events order as reply promises resolve\n // on next loop tick so for loop continues before we finished emitting all reply events.\n this._dispatchPromise = this._dispatchPromise.then(() => {\n let finishDispatch;\n this._dispatchPromise = new Promise(resolve =>{\n finishDispatch = resolve;\n });\n this._dispatchSynchronized(replies, finishDispatch);\n });\n this._restartPing();\n }\n\n _dispatchSynchronized(replies, finishDispatch) {\n let p = Promise.resolve();\n for (const i in replies) {\n if (replies.hasOwnProperty(i)) {\n p = p.then(() => {\n return this._dispatchReply(replies[i]);\n });\n }\n }\n p = p.then(() => {\n finishDispatch();\n });\n }\n\n _dispatchReply(reply) {\n var next;\n const p = new Promise(resolve =>{\n next = resolve;\n });\n\n if (reply === undefined || reply === null) {\n this._debug('dispatch: got undefined or null reply');\n next();\n return p;\n }\n\n const id = reply.id;\n\n if (id && id > 0) {\n this._handleReply(reply, next);\n } else {\n this._handlePush(reply.result, next);\n }\n\n return p;\n };\n\n _call(msg) {\n return new Promise((resolve, reject) => {\n const id = this._addMessage(msg);\n this._registerCall(id, resolve, reject);\n });\n }\n\n _connect() {\n if (this.isConnected()) {\n this._debug('connect called when already connected');\n return;\n }\n if (this._status === 'connecting') {\n return;\n }\n\n this._debug('start connecting');\n this._setStatus('connecting');\n this._clientID = null;\n this._reconnect = true;\n this._setupTransport();\n };\n\n _disconnect(reason, shouldReconnect) {\n\n const reconnect = shouldReconnect || false;\n if (reconnect === false) {\n this._reconnect = false;\n }\n\n if (this._isDisconnected()) {\n if (!reconnect) {\n this._clearConnectedState(reconnect);\n }\n return;\n }\n\n this._clearConnectedState(reconnect);\n\n this._debug('disconnected:', reason, shouldReconnect);\n this._setStatus('disconnected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._reconnecting === false) {\n // fire unsubscribe events for server side subs.\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel)) {\n this.emit('unsubscribe', {channel: channel});\n }\n }\n this.emit('disconnect', {\n reason: reason,\n reconnect: reconnect\n });\n }\n\n if (reconnect === false) {\n this._subs = {};\n this._serverSubs = {};\n }\n\n if (!this._transportClosed) {\n this._transport.close();\n }\n };\n\n _refreshFailed() {\n this._numRefreshFailed = 0;\n if (!this._isDisconnected()) {\n this._disconnect('refresh failed', false);\n }\n if (this._config.onRefreshFailed !== null) {\n this._config.onRefreshFailed();\n }\n };\n\n _refresh() {\n // ask application for new connection token.\n this._debug('refresh token');\n\n if (this._config.refreshAttempts === 0) {\n this._debug('refresh attempts set to 0, do not send refresh request at all');\n this._refreshFailed();\n return;\n }\n\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n // We don't perform any connection status related actions here as we are\n // relying on server that must close connection eventually.\n if (resp.error) {\n this._debug('error refreshing connection token', resp.error);\n } else {\n this._debug('error refreshing connection token: wrong status code', resp.status);\n }\n this._numRefreshFailed++;\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._config.refreshAttempts !== null && this._numRefreshFailed >= this._config.refreshAttempts) {\n this._refreshFailed();\n return;\n }\n const jitter = Math.round(Math.random() * 1000 * Math.max(this._numRefreshFailed, 20));\n const interval = this._config.refreshInterval + jitter;\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n return;\n }\n this._numRefreshFailed = 0;\n this._token = resp.data.token;\n if (!this._token) {\n this._refreshFailed();\n return;\n }\n if (this._isDisconnected() && this._reconnect) {\n this._debug('token refreshed, connect from scratch');\n this._connect();\n } else {\n this._debug('send refreshed token');\n const msg = {\n method: this._methodType.REFRESH,\n params: {\n token: this._token\n }\n };\n this._call(msg).then(resolveCtx => {\n this._refreshResponse(this._decoder.decodeCommandResult(this._methodType.REFRESH, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n if (this._config.onRefresh !== null) {\n const context = {};\n this._config.onRefresh(context, cb);\n } else {\n const xhr = this._ajax(\n this._config.refreshEndpoint,\n this._config.refreshParams,\n this._config.refreshHeaders,\n this._config.refreshData,\n cb\n );\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _refreshError(err) {\n this._debug('refresh error', err);\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n const interval = this._config.refreshInterval + Math.round(Math.random() * 1000);\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n }\n\n _refreshResponse(result) {\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (result.expires) {\n this._clientID = result.client;\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n };\n\n _newXHRID() {\n this._xhrID++;\n return this._xhrID;\n }\n\n _subRefresh(channel) {\n this._debug('refresh subscription token for channel', channel);\n\n if (this._subRefreshTimeouts[channel] !== undefined) {\n this._clearSubRefreshTimeout(channel);\n } else {\n return;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (resp.error || resp.status !== 200 || this._clientID !== clientID) {\n return;\n }\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n const token = channelsData[channel];\n if (!token) {\n return;\n }\n const msg = {\n method: this._methodType.SUB_REFRESH,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n\n this._call(msg).then(resolveCtx => {\n this._subRefreshResponse(\n channel,\n this._decoder.decodeCommandResult(this._methodType.SUB_REFRESH, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subRefreshError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n const data = {\n client: this._clientID,\n channels: [channel]\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _clearSubRefreshTimeout(channel) {\n if (this._subRefreshTimeouts[channel] !== undefined) {\n clearTimeout(this._subRefreshTimeouts[channel]);\n delete this._subRefreshTimeouts[channel];\n }\n }\n\n _subRefreshError(channel, err) {\n this._debug('subscription refresh error', channel, err);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n const jitter = Math.round(Math.random() * 1000);\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._config.subRefreshInterval + jitter);\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n return;\n }\n\n _subRefreshResponse(channel, result) {\n this._debug('subscription refresh success', channel);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n return;\n };\n\n _subscribe(sub, isResubscribe) {\n this._debug('subscribing on', sub.channel);\n const channel = sub.channel;\n\n if (!(channel in this._subs)) {\n this._subs[channel] = sub;\n }\n\n if (!this.isConnected()) {\n // subscribe will be called later\n sub._setNew();\n return;\n }\n\n sub._setSubscribing(isResubscribe);\n\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel\n }\n };\n\n // If channel name does not start with privateChannelPrefix - then we\n // can just send subscription message to Centrifuge. If channel name\n // starts with privateChannelPrefix - then this is a private channel\n // and we should ask web application backend for permission first.\n if (startsWith(channel, this._config.privateChannelPrefix)) {\n // private channel.\n if (this._isSubscribeBatching) {\n this._privateChannels[channel] = true;\n } else {\n this.startSubscribeBatching();\n this._subscribe(sub);\n this.stopSubscribeBatching();\n }\n } else {\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n _unsubscribe(sub) {\n delete this._subs[sub.channel];\n delete this._lastOffset[sub.channel];\n delete this._lastSeq[sub.channel];\n delete this._lastGen[sub.channel];\n if (this.isConnected()) {\n // No need to unsubscribe in disconnected state - i.e. client already unsubscribed.\n this._addMessage({\n method: this._methodType.UNSUBSCRIBE,\n params: {\n channel: sub.channel\n }\n });\n }\n };\n\n _getTTLMilliseconds(ttl) {\n // https://stackoverflow.com/questions/12633405/what-is-the-maximum-delay-for-setinterval\n return Math.min(ttl * 1000, 2147483647);\n }\n\n getSub(channel) {\n return this._getSub(channel);\n }\n\n _getSub(channel) {\n const sub = this._subs[channel];\n if (!sub) {\n return null;\n }\n return sub;\n };\n\n _isServerSub(channel) {\n return this._serverSubs[channel] !== undefined;\n };\n\n _connectResponse(result, isRecover) {\n const wasReconnecting = this._reconnecting;\n this._reconnecting = false;\n this._resetRetry();\n this._refreshRequired = false;\n\n if (this.isConnected()) {\n return;\n }\n\n if (this._latencyStart !== null) {\n this._latency = (new Date()).getTime() - this._latencyStart.getTime();\n this._latencyStart = null;\n }\n\n this._clientID = result.client;\n this._setStatus('connected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n }\n\n if (result.expires) {\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n\n this.startBatching();\n this.startSubscribeBatching();\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n if (sub._shouldResubscribe()) {\n this._subscribe(sub, wasReconnecting);\n }\n }\n }\n this.stopSubscribeBatching();\n this.stopBatching();\n\n this._startPing();\n\n const ctx = {\n client: result.client,\n transport: this._transportName,\n latency: this._latency\n };\n if (result.data) {\n ctx.data = result.data;\n }\n\n this.emit('connect', ctx);\n\n if (result.subs) {\n this._processServerSubs(result.subs);\n }\n };\n\n _processServerSubs(subs) {\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n const isResubscribe = this._serverSubs[channel] !== undefined;\n let subCtx = {channel: channel, isResubscribe: isResubscribe};\n subCtx = this._expandSubscribeContext(subCtx, sub);\n this.emit('subscribe', subCtx);\n }\n }\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n if (sub.recovered) {\n let pubs = sub.publications;\n if (pubs && pubs.length > 0) {\n\n // handle legacy order.\n // TODO: remove as soon as Centrifuge v1 released.\n if (pubs.length > 1 && (!pubs[0].offset || pubs[0].offset > pubs[1].offset)) {\n pubs = pubs.reverse();\n }\n\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n }\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n }\n }\n };\n\n _stopPing() {\n if (this._pongTimeout !== null) {\n clearTimeout(this._pongTimeout);\n this._pongTimeout = null;\n }\n if (this._pingTimeout !== null) {\n clearTimeout(this._pingTimeout);\n this._pingTimeout = null;\n }\n };\n\n _startPing() {\n if (this._config.ping !== true || this._config.pingInterval <= 0) {\n return;\n }\n if (!this.isConnected()) {\n return;\n }\n\n this._pingTimeout = setTimeout(() => {\n if (!this.isConnected()) {\n this._stopPing();\n return;\n }\n this.ping();\n this._pongTimeout = setTimeout(() => {\n this._disconnect('no ping', true);\n }, this._config.pongWaitTimeout);\n }, this._config.pingInterval);\n };\n\n _restartPing() {\n this._stopPing();\n this._startPing();\n };\n\n _subscribeError(channel, error) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n if (error.code === 0 && error.message === _errorTimeout) { // client side timeout.\n this._disconnect('timeout', true);\n return;\n }\n sub._setSubscribeError(error);\n };\n\n _expandSubscribeContext(ctx, result) {\n let recovered = false;\n if ('recovered' in result) {\n recovered = result.recovered;\n }\n ctx.recovered = recovered;\n\n let positioned = false;\n if ('positioned' in result) {\n positioned = result.positioned;\n }\n let epoch = '';\n if ('epoch' in result) {\n epoch = result.epoch;\n }\n let offset = 0;\n if ('offset' in result) {\n offset = result.offset;\n }\n if (positioned) {\n ctx.streamPosition = {\n 'offset': offset,\n 'epoch': epoch\n };\n };\n if (result.data) {\n ctx.data = result.data;\n }\n return ctx;\n }\n\n _subscribeResponse(channel, isRecover, result) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n sub._setSubscribeSuccess(result);\n\n let pubs = result.publications;\n if (pubs && pubs.length > 0) {\n if (pubs.length >= 2 && !pubs[0].offset && !pubs[1].offset) {\n // handle legacy order.\n pubs = pubs.reverse();\n }\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n\n if (result.recoverable && (!isRecover || !result.recovered)) {\n this._lastSeq[channel] = result.seq || 0;\n this._lastGen[channel] = result.gen || 0;\n this._lastOffset[channel] = result.offset || 0;\n }\n\n this._lastEpoch[channel] = result.epoch || '';\n\n if (result.recoverable) {\n sub._recoverable = true;\n }\n\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n };\n\n _handleReply(reply, next) {\n const id = reply.id;\n const result = reply.result;\n\n if (!(id in this._callbacks)) {\n next();\n return;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n\n if (!errorExists(reply)) {\n const callback = callbacks.callback;\n if (!callback) {\n return;\n }\n callback({result, next});\n } else {\n const errback = callbacks.errback;\n if (!errback) {\n next();\n return;\n }\n const error = reply.error;\n errback({error, next});\n }\n }\n\n _handleJoin(channel, join) {\n const ctx = {'info': join.info};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('join', ctx);\n }\n return;\n }\n sub.emit('join', ctx);\n };\n\n _handleLeave(channel, leave) {\n const ctx = {'info': leave.info};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('leave', ctx);\n }\n return;\n }\n sub.emit('leave', ctx);\n };\n\n _handleUnsub(channel, unsub) {\n const ctx = {};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n delete this._serverSubs[channel];\n ctx.channel = channel;\n this.emit('unsubscribe', ctx);\n }\n return;\n }\n sub.unsubscribe();\n if (unsub.resubscribe === true) {\n sub.subscribe();\n }\n };\n\n _handleSub(channel, sub) {\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n let ctx = {'channel': channel, isResubscribe: false};\n ctx = this._expandSubscribeContext(ctx, sub);\n this.emit('subscribe', ctx);\n };\n\n _handlePublication(channel, pub) {\n const sub = this._getSub(channel);\n const ctx = {\n 'data': pub.data,\n 'seq': pub.seq,\n 'gen': pub.gen,\n 'offset': pub.offset\n };\n if (pub.info) {\n ctx.info = pub.info;\n }\n if (!sub) {\n if (this._isServerSub(channel)) {\n if (pub.seq !== undefined) {\n this._serverSubs[channel].seq = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._serverSubs[channel].gen = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._serverSubs[channel].offset = pub.offset;\n }\n ctx.channel = channel;\n this.emit('publish', ctx);\n }\n return;\n }\n if (pub.seq !== undefined) {\n this._lastSeq[channel] = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._lastGen[channel] = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._lastOffset[channel] = pub.offset;\n }\n sub.emit('publish', ctx);\n };\n\n _handleMessage(message) {\n this.emit('message', message.data);\n };\n\n _handlePush(data, next) {\n const push = this._decoder.decodePush(data);\n let type = 0;\n if ('type' in push) {\n type = push['type'];\n }\n const channel = push.channel;\n\n if (type === this._pushType.PUBLICATION) {\n const pub = this._decoder.decodePushData(this._pushType.PUBLICATION, push.data);\n this._handlePublication(channel, pub);\n } else if (type === this._pushType.MESSAGE) {\n const message = this._decoder.decodePushData(this._pushType.MESSAGE, push.data);\n this._handleMessage(message);\n } else if (type === this._pushType.JOIN) {\n const join = this._decoder.decodePushData(this._pushType.JOIN, push.data);\n this._handleJoin(channel, join);\n } else if (type === this._pushType.LEAVE) {\n const leave = this._decoder.decodePushData(this._pushType.LEAVE, push.data);\n this._handleLeave(channel, leave);\n } else if (type === this._pushType.UNSUB) {\n const unsub = this._decoder.decodePushData(this._pushType.UNSUB, push.data);\n this._handleUnsub(channel, unsub);\n } else if (type === this._pushType.SUB) {\n const sub = this._decoder.decodePushData(this._pushType.SUB, push.data);\n this._handleSub(channel, sub);\n }\n next();\n }\n\n _flush() {\n const messages = this._messages.slice(0);\n this._messages = [];\n this._transportSend(messages);\n };\n\n _ping() {\n const msg = {\n method: this._methodType.PING\n };\n this._call(msg).then(resolveCtx => {\n this._pingResponse(this._decoder.decodeCommandResult(this._methodType.PING, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._debug('ping error', rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n _pingResponse(result) {\n if (!this.isConnected()) {\n return;\n }\n this._stopPing();\n this._startPing();\n }\n\n _getLastSeq(channel) {\n const lastSeq = this._lastSeq[channel];\n if (lastSeq) {\n return lastSeq;\n }\n return 0;\n };\n\n _getLastOffset(channel) {\n const lastOffset = this._lastOffset[channel];\n if (lastOffset) {\n return lastOffset;\n }\n return 0;\n };\n\n _getLastGen(channel) {\n const lastGen = this._lastGen[channel];\n if (lastGen) {\n return lastGen;\n }\n return 0;\n };\n\n _getLastEpoch(channel) {\n const lastEpoch = this._lastEpoch[channel];\n if (lastEpoch) {\n return lastEpoch;\n }\n return '';\n };\n\n _createErrorObject(message, code) {\n const errObject = {\n message: message,\n code: code || 0\n };\n\n return errObject;\n };\n\n _registerCall(id, callback, errback) {\n this._callbacks[id] = {\n callback: callback,\n errback: errback,\n timeout: null\n };\n this._callbacks[id].timeout = setTimeout(() => {\n delete this._callbacks[id];\n if (isFunction(errback)) {\n errback({error: this._createErrorObject(_errorTimeout)});\n }\n }, this._config.timeout);\n };\n\n _addMessage(message) {\n let id = this._nextMessageId();\n message.id = id;\n if (this._isBatching === true) {\n this._messages.push(message);\n } else {\n this._transportSend([message]);\n }\n return id;\n };\n\n isConnected() {\n return this._isConnected();\n }\n\n connect() {\n this._connect();\n };\n\n disconnect() {\n this._disconnect('client', false);\n };\n\n ping() {\n return this._ping();\n }\n\n startBatching() {\n // start collecting messages without sending them to Centrifuge until flush\n // method called\n this._isBatching = true;\n };\n\n stopBatching() {\n this._isBatching = false;\n this._flush();\n };\n\n startSubscribeBatching() {\n // start collecting private channels to create bulk authentication\n // request to subscribeEndpoint when stopSubscribeBatching will be called\n this._isSubscribeBatching = true;\n };\n\n stopSubscribeBatching() {\n // create request to subscribeEndpoint with collected private channels\n // to ask if this client can subscribe on each channel\n this._isSubscribeBatching = false;\n const authChannels = this._privateChannels;\n this._privateChannels = {};\n\n const channels = [];\n\n for (const channel in authChannels) {\n if (authChannels.hasOwnProperty(channel)) {\n const sub = this._getSub(channel);\n if (!sub) {\n continue;\n }\n channels.push(channel);\n }\n }\n\n if (channels.length === 0) {\n this._debug('no private channels found, no need to make request');\n return;\n }\n\n const data = {\n client: this._clientID,\n channels: channels\n };\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n this._debug('authorization request failed');\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n this._subscribeError(channel, this._createErrorObject('authorization request failed'));\n }\n }\n return;\n }\n\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n // try to send all subscriptions in one request.\n let batch = false;\n\n if (!this._isBatching) {\n this.startBatching();\n batch = true;\n }\n\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n const token = channelsData[channel];\n\n if (!token) {\n // subscription:error\n this._subscribeError(channel, this._createErrorObject('permission denied', 103));\n continue;\n } else {\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n continue;\n }\n\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n }\n }\n\n if (batch) {\n this.stopBatching();\n }\n\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n subscribe(channel, events) {\n const currentSub = this._getSub(channel);\n if (currentSub !== null) {\n currentSub._setEvents(events);\n if (currentSub._isUnsubscribed()) {\n currentSub.subscribe();\n }\n return currentSub;\n }\n const sub = new Subscription(this, channel, events);\n this._subs[channel] = sub;\n sub.subscribe();\n return sub;\n };\n}\n","import {CentrifugeProtobuf} from './protobuf.js';\nexport default CentrifugeProtobuf;\n","export const JsonMethodType = {\n CONNECT: 0,\n SUBSCRIBE: 1,\n UNSUBSCRIBE: 2,\n PUBLISH: 3,\n PRESENCE: 4,\n PRESENCE_STATS: 5,\n HISTORY: 6,\n PING: 7,\n SEND: 8,\n RPC: 9,\n REFRESH: 10,\n SUB_REFRESH: 11\n};\n\nexport const JsonPushType = {\n PUBLICATION: 0,\n JOIN: 1,\n LEAVE: 2,\n UNSUB: 3,\n MESSAGE: 4,\n SUB: 5\n};\n\nexport class JsonEncoder {\n encodeCommands(commands) {\n const encodedCommands = [];\n for (const i in commands) {\n if (commands.hasOwnProperty(i)) {\n encodedCommands.push(JSON.stringify(commands[i]));\n }\n }\n return encodedCommands.join('\\n');\n }\n}\n\nexport class JsonDecoder {\n decodeReplies(data) {\n const replies = [];\n const encodedReplies = data.split('\\n');\n for (const i in encodedReplies) {\n if (encodedReplies.hasOwnProperty(i)) {\n if (!encodedReplies[i]) {\n continue;\n }\n const reply = JSON.parse(encodedReplies[i]);\n replies.push(reply);\n }\n }\n return replies;\n }\n\n decodeCommandResult(methodType, data) {\n return data;\n }\n\n decodePush(data) {\n return data;\n }\n\n decodePushData(pushType, data) {\n return data;\n }\n}\n\n","import {Centrifuge} from './centrifuge.js';\n\nconst protobuf = require('protobufjs/light');\nconst proto = protobuf.Root.fromJSON(require('./client.proto.json'));\n\nconst methodValues = proto.lookupEnum('MethodType').values;\n\nconst protobufMethodType = {\n CONNECT: methodValues.CONNECT,\n SUBSCRIBE: methodValues.SUBSCRIBE,\n UNSUBSCRIBE: methodValues.UNSUBSCRIBE,\n PUBLISH: methodValues.PUBLISH,\n PRESENCE: methodValues.PRESENCE,\n PRESENCE_STATS: methodValues.PRESENCE_STATS,\n HISTORY: methodValues.HISTORY,\n PING: methodValues.PING,\n RPC: methodValues.RPC,\n SEND: methodValues.SEND,\n REFRESH: methodValues.REFRESH,\n SUB_REFRESH: methodValues.SUB_REFRESH\n};\n\nconst methodSchema = {\n CONNECT: [\n proto.lookupType('protocol.ConnectRequest'),\n proto.lookupType('protocol.ConnectResult')\n ],\n REFRESH: [\n proto.lookupType('protocol.RefreshRequest'),\n proto.lookupType('protocol.RefreshResult')\n ],\n SUBSCRIBE: [\n proto.lookupType('protocol.SubscribeRequest'),\n proto.lookupType('protocol.SubscribeResult')\n ],\n SUB_REFRESH: [\n proto.lookupType('protocol.SubRefreshRequest'),\n proto.lookupType('protocol.SubRefreshResult')\n ],\n UNSUBSCRIBE: [\n proto.lookupType('protocol.UnsubscribeRequest'),\n proto.lookupType('protocol.UnsubscribeResult')\n ],\n PUBLISH: [\n proto.lookupType('protocol.PublishRequest'),\n proto.lookupType('protocol.PublishResult')\n ],\n PRESENCE: [\n proto.lookupType('protocol.PresenceRequest'),\n proto.lookupType('protocol.PresenceResult')\n ],\n PRESENCE_STATS: [\n proto.lookupType('protocol.PresenceStatsRequest'),\n proto.lookupType('protocol.PresenceStatsResult')\n ],\n HISTORY: [\n proto.lookupType('protocol.HistoryRequest'),\n proto.lookupType('protocol.HistoryResult')\n ],\n PING: [\n proto.lookupType('protocol.PingRequest'),\n proto.lookupType('protocol.PingResult')\n ],\n RPC: [\n proto.lookupType('protocol.RPCRequest'),\n proto.lookupType('protocol.RPCResult')\n ],\n SEND: [\n proto.lookupType('protocol.SendRequest'),\n null\n ]\n};\n\nconst protobufPushType = {\n PUBLICATION: proto.lookupEnum('PushType').values.PUBLICATION,\n JOIN: proto.lookupEnum('PushType').values.JOIN,\n LEAVE: proto.lookupEnum('PushType').values.LEAVE,\n UNSUB: proto.lookupEnum('PushType').values.UNSUB,\n MESSAGE: proto.lookupEnum('PushType').values.MESSAGE,\n SUB: proto.lookupEnum('PushType').values.SUB\n};\n\nconst PushSchema = {\n PUBLICATION: proto.lookupType('protocol.Publication'),\n JOIN: proto.lookupType('protocol.Join'),\n LEAVE: proto.lookupType('protocol.Leave'),\n UNSUB: proto.lookupType('protocol.Unsub'),\n MESSAGE: proto.lookupType('protocol.Message'),\n SUB: proto.lookupType('protocol.Sub')\n};\n\nconst Push = proto.lookupType('protocol.Push');\nconst Command = proto.lookupType('protocol.Command');\nconst Reply = proto.lookupType('protocol.Reply');\n\nexport class ProtobufEncoder {\n encodeCommands(commands) {\n const writer = protobuf.Writer.create();\n for (const i in commands) {\n if (commands.hasOwnProperty(i)) {\n const command = Object.assign({}, commands[i]);\n if (command.params) {\n let type;\n if (!command.method) {\n command.method = protobufMethodType.CONNECT;\n };\n switch (command.method) {\n case protobufMethodType.CONNECT:\n type = methodSchema.CONNECT[0];\n break;\n case protobufMethodType.REFRESH:\n type = methodSchema.REFRESH[0];\n break;\n case protobufMethodType.SUBSCRIBE:\n type = methodSchema.SUBSCRIBE[0];\n break;\n case protobufMethodType.SUB_REFRESH:\n type = methodSchema.SUB_REFRESH[0];\n break;\n case protobufMethodType.UNSUBSCRIBE:\n type = methodSchema.UNSUBSCRIBE[0];\n break;\n case protobufMethodType.PUBLISH:\n type = methodSchema.PUBLISH[0];\n break;\n case protobufMethodType.PRESENCE:\n type = methodSchema.PRESENCE[0];\n break;\n case protobufMethodType.PRESENCE_STATS:\n type = methodSchema.PRESENCE_STATS[0];\n break;\n case protobufMethodType.HISTORY:\n type = methodSchema.HISTORY[0];\n break;\n case protobufMethodType.PING:\n type = methodSchema.PING[0];\n break;\n case protobufMethodType.RPC:\n type = methodSchema.RPC[0];\n break;\n case protobufMethodType.SEND:\n type = methodSchema.SEND[0];\n break;\n }\n command.params = type.encode(command.params).finish();\n }\n Command.encodeDelimited(command, writer);\n }\n }\n return writer.finish();\n }\n}\n\nexport class ProtobufDecoder {\n decodeReplies(data) {\n const replies = [];\n const reader = protobuf.Reader.create(new Uint8Array(data));\n while (reader.pos < reader.len) {\n const reply = Reply.decodeDelimited(reader);\n replies.push(reply);\n }\n return replies;\n }\n\n decodeCommandResult(methodType, data) {\n var type;\n switch (methodType) {\n case protobufMethodType.CONNECT:\n type = methodSchema.CONNECT[1];\n break;\n case protobufMethodType.REFRESH:\n type = methodSchema.REFRESH[1];\n break;\n case protobufMethodType.SUBSCRIBE:\n type = methodSchema.SUBSCRIBE[1];\n break;\n case protobufMethodType.SUB_REFRESH:\n type = methodSchema.SUB_REFRESH[1];\n break;\n case protobufMethodType.UNSUBSCRIBE:\n type = methodSchema.UNSUBSCRIBE[1];\n break;\n case protobufMethodType.PUBLISH:\n type = methodSchema.PUBLISH[1];\n break;\n case protobufMethodType.PRESENCE:\n type = methodSchema.PRESENCE[1];\n break;\n case protobufMethodType.PRESENCE_STATS:\n type = methodSchema.PRESENCE_STATS[1];\n break;\n case protobufMethodType.HISTORY:\n type = methodSchema.HISTORY[1];\n break;\n case protobufMethodType.PING:\n type = methodSchema.PING[1];\n break;\n case protobufMethodType.RPC:\n type = methodSchema.RPC[1];\n break;\n }\n return this._decode(type, data);\n }\n\n decodePush(data) {\n return this._decode(Push, data);\n }\n\n decodePushData(pushType, data) {\n var type;\n switch (pushType) {\n case protobufPushType.PUBLICATION:\n type = PushSchema.PUBLICATION;\n break;\n case protobufPushType.MESSAGE:\n type = PushSchema.MESSAGE;\n break;\n case protobufPushType.JOIN:\n type = PushSchema.JOIN;\n break;\n case protobufPushType.LEAVE:\n type = PushSchema.LEAVE;\n break;\n case protobufPushType.UNSUB:\n type = PushSchema.UNSUB;\n break;\n case protobufPushType.SUB:\n type = PushSchema.SUB;\n break;\n }\n return this._decode(type, data);\n }\n\n _decode(type, data) {\n let res;\n try {\n res = type.decode(data);\n } catch (err) {\n return null;\n }\n return res;\n }\n}\n\nexport class CentrifugeProtobuf extends Centrifuge {\n _formatOverride(format) {\n if (format === 'protobuf') {\n this._binary = true;\n this._methodType = protobufMethodType;\n this._pushType = protobufPushType;\n this._encoder = new ProtobufEncoder();\n this._decoder = new ProtobufDecoder();\n return true;\n }\n return false;\n }\n}\n","import EventEmitter from 'events';\n\nimport {\n isFunction\n} from './utils';\n\nconst _STATE_NEW = 0;\nconst _STATE_SUBSCRIBING = 1;\nconst _STATE_SUCCESS = 2;\nconst _STATE_ERROR = 3;\nconst _STATE_UNSUBSCRIBED = 4;\n\nexport default class Subscription extends EventEmitter {\n constructor(centrifuge, channel, events) {\n super();\n this.channel = channel;\n this._centrifuge = centrifuge;\n this._status = _STATE_NEW;\n this._error = null;\n this._isResubscribe = false;\n this._ready = false;\n this._subscriptionPromise = null;\n this._noResubscribe = false;\n this._recoverable = false;\n this._recover = false;\n this._setEvents(events);\n this._initializePromise();\n this._promises = {};\n this._promiseId = 0;\n this.on('error', function (errContext) {\n this._centrifuge._debug('subscription error', errContext);\n });\n }\n\n _nextPromiseId() {\n return ++this._promiseId;\n }\n\n _initializePromise() {\n // this helps us to wait until subscription will successfully\n // subscribe and call actions such as presence, history etc in\n // synchronous way.\n this._ready = false;\n\n this._subscriptionPromise = new Promise((resolve, reject) => {\n this._resolve = value => {\n this._ready = true;\n resolve(value);\n };\n this._reject = err => {\n this._ready = true;\n reject(err);\n };\n }).then(function () {}, function () {});\n };\n\n _needRecover() {\n return this._recoverable === true && this._recover === true;\n };\n\n _setEvents(events) {\n if (!events) {\n return;\n }\n if (isFunction(events)) {\n // events is just a function to handle publication received from channel.\n this.on('publish', events);\n } else if (Object.prototype.toString.call(events) === Object.prototype.toString.call({})) {\n const knownEvents = ['publish', 'join', 'leave', 'unsubscribe', 'subscribe', 'error'];\n for (let i = 0, l = knownEvents.length; i < l; i++) {\n const ev = knownEvents[i];\n if (ev in events) {\n this.on(ev, events[ev]);\n }\n }\n }\n };\n\n _isNew() {\n return this._status === _STATE_NEW;\n };\n\n _isUnsubscribed() {\n return this._status === _STATE_UNSUBSCRIBED;\n };\n\n _isSubscribing() {\n return this._status === _STATE_SUBSCRIBING;\n };\n\n _isReady() {\n return this._status === _STATE_SUCCESS || this._status === _STATE_ERROR;\n };\n\n _isSuccess() {\n return this._status === _STATE_SUCCESS;\n };\n\n _isError() {\n return this._status === _STATE_ERROR;\n };\n\n _setNew() {\n this._status = _STATE_NEW;\n };\n\n _setSubscribing(isResubscribe) {\n this._isResubscribe = isResubscribe || false;\n if (this._ready === true) {\n // new promise for this subscription\n this._initializePromise();\n }\n this._status = _STATE_SUBSCRIBING;\n };\n\n _setSubscribeSuccess(subscribeResult) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._status = _STATE_SUCCESS;\n const successContext = this._getSubscribeSuccessContext(subscribeResult);\n this._recover = false;\n this.emit('subscribe', successContext);\n this._resolve(successContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].resolve();\n delete this._promises[id];\n }\n };\n\n _setSubscribeError(err) {\n if (this._status === _STATE_ERROR) {\n return;\n }\n this._status = _STATE_ERROR;\n this._error = err;\n const errContext = this._getSubscribeErrorContext();\n this.emit('error', errContext);\n this._reject(errContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n };\n\n _triggerUnsubscribe() {\n this.emit('unsubscribe', {\n channel: this.channel\n });\n };\n\n _setUnsubscribed(noResubscribe) {\n this._centrifuge._clearSubRefreshTimeout(this.channel);\n if (this._status === _STATE_UNSUBSCRIBED) {\n return;\n }\n const needTrigger = this._status === _STATE_SUCCESS;\n this._status = _STATE_UNSUBSCRIBED;\n if (noResubscribe === true) {\n this._recover = false;\n this._noResubscribe = true;\n delete this._centrifuge._lastSeq[this.channel];\n delete this._centrifuge._lastGen[this.channel];\n delete this._centrifuge._lastEpoch[this.channel];\n }\n if (needTrigger) {\n this._triggerUnsubscribe();\n }\n };\n\n _shouldResubscribe() {\n return !this._noResubscribe;\n };\n\n _getSubscribeSuccessContext(subscribeResult) {\n let ctx = {\n channel: this.channel,\n isResubscribe: this._isResubscribe\n };\n if (subscribeResult) {\n // subscribeResult not available when called from Subscription.ready method at the moment.\n ctx = this._centrifuge._expandSubscribeContext(ctx, subscribeResult);\n }\n return ctx;\n };\n\n _getSubscribeErrorContext() {\n const subscribeErrorContext = this._error;\n subscribeErrorContext.channel = this.channel;\n subscribeErrorContext.isResubscribe = this._isResubscribe;\n return subscribeErrorContext;\n };\n\n ready(callback, errback) {\n if (this._ready) {\n if (this._isSuccess()) {\n callback(this._getSubscribeSuccessContext());\n } else {\n errback(this._getSubscribeErrorContext());\n }\n }\n };\n\n subscribe() {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._noResubscribe = false;\n this._centrifuge._subscribe(this);\n };\n\n unsubscribe() {\n this._setUnsubscribed(true);\n this._centrifuge._unsubscribe(this);\n };\n\n _methodCall() {\n if (this._isSuccess()) {\n return Promise.resolve();\n } else if (this._isError()) {\n return Promise.reject(this._error);\n }\n let subPromise = new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({'code': 0, 'message': 'timeout'});\n }, this._centrifuge._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n return subPromise;\n }\n\n publish(data) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.publish(self.channel, data);\n });\n };\n\n presence() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presence(self.channel);\n });\n };\n\n presenceStats() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presenceStats(self.channel);\n });\n };\n\n history(options) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.history(self.channel, options);\n });\n };\n}\n","export function startsWith(value, prefix) {\n return value.lastIndexOf(prefix, 0) === 0;\n};\n\nexport function isFunction(value) {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'function';\n};\n\nexport function log(level, args) {\n if (global.console) {\n const logger = global.console[level];\n\n if (isFunction(logger)) {\n logger.apply(global.console, args);\n }\n }\n};\n\nexport function backoff(step, min, max) {\n const jitter = 0.5 * Math.random();\n const interval = Math.min(max, min * Math.pow(2, step + 1));\n\n return Math.floor((1 - jitter) * interval);\n};\n\nexport function errorExists(data) {\n return 'error' in data && data.error !== null;\n};\n\nexport function extend(a, b) {\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n return a;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function eventListener() {\n if (errorListener !== undefined) {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n var errorListener;\n\n // Adding an error listener is not optional because\n // if an error is thrown on an event emitter we cannot\n // guarantee that the actual event we are waiting will\n // be fired. The result could be a silent way to create\n // memory or file descriptor leaks, which is something\n // we should avoid.\n if (name !== 'error') {\n errorListener = function errorListener(err) {\n emitter.removeListener(name, eventListener);\n reject(err);\n };\n\n emitter.once('error', errorListener);\n }\n\n emitter.once(name, eventListener);\n });\n}\n","// light library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-light\");","\"use strict\";\n/**\n * Runtime message from/to plain object converters.\n * @namespace\n */\nvar converter = exports;\n\nvar Enum = require(\"./enum\"),\n util = require(\"./util\");\n\n/**\n * Generates a partial value fromObject conveter.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} prop Property reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genValuePartial_fromObject(gen, field, fieldIndex, prop) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n if (field.resolvedType) {\n if (field.resolvedType instanceof Enum) { gen\n (\"switch(d%s){\", prop);\n for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0; i < keys.length; ++i) {\n if (field.repeated && values[keys[i]] === field.typeDefault) gen\n (\"default:\");\n gen\n (\"case%j:\", keys[i])\n (\"case %i:\", values[keys[i]])\n (\"m%s=%j\", prop, values[keys[i]])\n (\"break\");\n } gen\n (\"}\");\n } else gen\n (\"if(typeof d%s!==\\\"object\\\")\", prop)\n (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n (\"m%s=types[%i].fromObject(d%s)\", prop, fieldIndex, prop);\n } else {\n var isUnsigned = false;\n switch (field.type) {\n case \"double\":\n case \"float\": gen\n (\"m%s=Number(d%s)\", prop, prop); // also catches \"NaN\", \"Infinity\"\n break;\n case \"uint32\":\n case \"fixed32\": gen\n (\"m%s=d%s>>>0\", prop, prop);\n break;\n case \"int32\":\n case \"sint32\":\n case \"sfixed32\": gen\n (\"m%s=d%s|0\", prop, prop);\n break;\n case \"uint64\":\n isUnsigned = true;\n // eslint-disable-line no-fallthrough\n case \"int64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(util.Long)\")\n (\"(m%s=util.Long.fromValue(d%s)).unsigned=%j\", prop, prop, isUnsigned)\n (\"else if(typeof d%s===\\\"string\\\")\", prop)\n (\"m%s=parseInt(d%s,10)\", prop, prop)\n (\"else if(typeof d%s===\\\"number\\\")\", prop)\n (\"m%s=d%s\", prop, prop)\n (\"else if(typeof d%s===\\\"object\\\")\", prop)\n (\"m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)\", prop, prop, prop, isUnsigned ? \"true\" : \"\");\n break;\n case \"bytes\": gen\n (\"if(typeof d%s===\\\"string\\\")\", prop)\n (\"util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)\", prop, prop, prop)\n (\"else if(d%s.length)\", prop)\n (\"m%s=d%s\", prop, prop);\n break;\n case \"string\": gen\n (\"m%s=String(d%s)\", prop, prop);\n break;\n case \"bool\": gen\n (\"m%s=Boolean(d%s)\", prop, prop);\n break;\n /* default: gen\n (\"m%s=d%s\", prop, prop);\n break; */\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a plain object to runtime message converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.fromObject = function fromObject(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var fields = mtype.fieldsArray;\n var gen = util.codegen([\"d\"], mtype.name + \"$fromObject\")\n (\"if(d instanceof this.ctor)\")\n (\"return d\");\n if (!fields.length) return gen\n (\"return new this.ctor\");\n gen\n (\"var m=new this.ctor\");\n for (var i = 0; i < fields.length; ++i) {\n var field = fields[i].resolve(),\n prop = util.safeProp(field.name);\n\n // Map fields\n if (field.map) { gen\n (\"if(d%s){\", prop)\n (\"if(typeof d%s!==\\\"object\\\")\", prop)\n (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n (\"m%s={}\", prop)\n (\"for(var ks=Object.keys(d%s),i=0;i>>0,m%s.high>>>0).toNumber(%s):m%s\", prop, prop, prop, prop, isUnsigned ? \"true\": \"\", prop);\n break;\n case \"bytes\": gen\n (\"d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s\", prop, prop, prop, prop, prop);\n break;\n default: gen\n (\"d%s=m%s\", prop, prop);\n break;\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a runtime message to plain object converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.toObject = function toObject(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById);\n if (!fields.length)\n return util.codegen()(\"return {}\");\n var gen = util.codegen([\"m\", \"o\"], mtype.name + \"$toObject\")\n (\"if(!o)\")\n (\"o={}\")\n (\"var d={}\");\n\n var repeatedFields = [],\n mapFields = [],\n normalFields = [],\n i = 0;\n for (; i < fields.length; ++i)\n if (!fields[i].partOf)\n ( fields[i].resolve().repeated ? repeatedFields\n : fields[i].map ? mapFields\n : normalFields).push(fields[i]);\n\n if (repeatedFields.length) { gen\n (\"if(o.arrays||o.defaults){\");\n for (i = 0; i < repeatedFields.length; ++i) gen\n (\"d%s=[]\", util.safeProp(repeatedFields[i].name));\n gen\n (\"}\");\n }\n\n if (mapFields.length) { gen\n (\"if(o.objects||o.defaults){\");\n for (i = 0; i < mapFields.length; ++i) gen\n (\"d%s={}\", util.safeProp(mapFields[i].name));\n gen\n (\"}\");\n }\n\n if (normalFields.length) { gen\n (\"if(o.defaults){\");\n for (i = 0; i < normalFields.length; ++i) {\n var field = normalFields[i],\n prop = util.safeProp(field.name);\n if (field.resolvedType instanceof Enum) gen\n (\"d%s=o.enums===String?%j:%j\", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault);\n else if (field.long) gen\n (\"if(util.Long){\")\n (\"var n=new util.Long(%i,%i,%j)\", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)\n (\"d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():n\", prop)\n (\"}else\")\n (\"d%s=o.longs===String?%j:%i\", prop, field.typeDefault.toString(), field.typeDefault.toNumber());\n else if (field.bytes) {\n var arrayDefault = \"[\" + Array.prototype.slice.call(field.typeDefault).join(\",\") + \"]\";\n gen\n (\"if(o.bytes===String)d%s=%j\", prop, String.fromCharCode.apply(String, field.typeDefault))\n (\"else{\")\n (\"d%s=%s\", prop, arrayDefault)\n (\"if(o.bytes!==Array)d%s=util.newBuffer(d%s)\", prop, prop)\n (\"}\");\n } else gen\n (\"d%s=%j\", prop, field.typeDefault); // also messages (=null)\n } gen\n (\"}\");\n }\n var hasKs2 = false;\n for (i = 0; i < fields.length; ++i) {\n var field = fields[i],\n index = mtype._fieldsArray.indexOf(field),\n prop = util.safeProp(field.name);\n if (field.map) {\n if (!hasKs2) { hasKs2 = true; gen\n (\"var ks2\");\n } gen\n (\"if(m%s&&(ks2=Object.keys(m%s)).length){\", prop, prop)\n (\"d%s={}\", prop)\n (\"for(var j=0;j>>3){\");\n\n var i = 0;\n for (; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n var field = mtype._fieldsArray[i].resolve(),\n type = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n ref = \"m\" + util.safeProp(field.name); gen\n (\"case %i:\", field.id);\n\n // Map fields\n if (field.map) { gen\n (\"if(%s===util.emptyObject)\", ref)\n (\"%s={}\", ref)\n (\"var c2 = r.uint32()+r.pos\");\n\n if (types.defaults[field.keyType] !== undefined) gen\n (\"k=%j\", types.defaults[field.keyType]);\n else gen\n (\"k=null\");\n\n if (types.defaults[type] !== undefined) gen\n (\"value=%j\", types.defaults[type]);\n else gen\n (\"value=null\");\n\n gen\n (\"while(r.pos>>3){\")\n (\"case 1: k=r.%s(); break\", field.keyType)\n (\"case 2:\");\n\n if (types.basic[type] === undefined) gen\n (\"value=types[%i].decode(r,r.uint32())\", i); // can't be groups\n else gen\n (\"value=r.%s()\", type);\n\n gen\n (\"break\")\n (\"default:\")\n (\"r.skipType(tag2&7)\")\n (\"break\")\n (\"}\")\n (\"}\");\n\n if (types.long[field.keyType] !== undefined) gen\n (\"%s[typeof k===\\\"object\\\"?util.longToHash(k):k]=value\", ref);\n else gen\n (\"%s[k]=value\", ref);\n\n // Repeated fields\n } else if (field.repeated) { gen\n\n (\"if(!(%s&&%s.length))\", ref, ref)\n (\"%s=[]\", ref);\n\n // Packable (always check for forward and backward compatiblity)\n if (types.packed[type] !== undefined) gen\n (\"if((t&7)===2){\")\n (\"var c2=r.uint32()+r.pos\")\n (\"while(r.pos>> 0, (field.id << 3 | 4) >>> 0)\n : gen(\"types[%i].encode(%s,w.uint32(%i).fork()).ldelim()\", fieldIndex, ref, (field.id << 3 | 2) >>> 0);\n}\n\n/**\n * Generates an encoder specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction encoder(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var gen = util.codegen([\"m\", \"w\"], mtype.name + \"$encode\")\n (\"if(!w)\")\n (\"w=Writer.create()\");\n\n var i, ref;\n\n // \"when a message is serialized its known fields should be written sequentially by field number\"\n var fields = /* initializes */ mtype.fieldsArray.slice().sort(util.compareFieldsById);\n\n for (var i = 0; i < fields.length; ++i) {\n var field = fields[i].resolve(),\n index = mtype._fieldsArray.indexOf(field),\n type = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n wireType = types.basic[type];\n ref = \"m\" + util.safeProp(field.name);\n\n // Map fields\n if (field.map) {\n gen\n (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)){\", ref, field.name) // !== undefined && !== null\n (\"for(var ks=Object.keys(%s),i=0;i>> 0, 8 | types.mapKey[field.keyType], field.keyType);\n if (wireType === undefined) gen\n (\"types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()\", index, ref); // can't be groups\n else gen\n (\".uint32(%i).%s(%s[ks[i]]).ldelim()\", 16 | wireType, type, ref);\n gen\n (\"}\")\n (\"}\");\n\n // Repeated fields\n } else if (field.repeated) { gen\n (\"if(%s!=null&&%s.length){\", ref, ref); // !== undefined && !== null\n\n // Packed repeated\n if (field.packed && types.packed[type] !== undefined) { gen\n\n (\"w.uint32(%i).fork()\", (field.id << 3 | 2) >>> 0)\n (\"for(var i=0;i<%s.length;++i)\", ref)\n (\"w.%s(%s[i])\", type, ref)\n (\"w.ldelim()\");\n\n // Non-packed\n } else { gen\n\n (\"for(var i=0;i<%s.length;++i)\", ref);\n if (wireType === undefined)\n genTypePartial(gen, field, index, ref + \"[i]\");\n else gen\n (\"w.uint32(%i).%s(%s[i])\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n } gen\n (\"}\");\n\n // Non-repeated\n } else {\n if (field.optional) gen\n (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j))\", ref, field.name); // !== undefined && !== null\n\n if (wireType === undefined)\n genTypePartial(gen, field, index, ref);\n else gen\n (\"w.uint32(%i).%s(%s)\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n }\n }\n\n return gen\n (\"return w\");\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n","\"use strict\";\nmodule.exports = Enum;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Enum.prototype = Object.create(ReflectionObject.prototype)).constructor = Enum).className = \"Enum\";\n\nvar Namespace = require(\"./namespace\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new enum instance.\n * @classdesc Reflected enum.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {Object.} [values] Enum values as an object, by name\n * @param {Object.} [options] Declared options\n * @param {string} [comment] The comment for this enum\n * @param {Object.} [comments] The value comments for this enum\n */\nfunction Enum(name, values, options, comment, comments) {\n ReflectionObject.call(this, name, options);\n\n if (values && typeof values !== \"object\")\n throw TypeError(\"values must be an object\");\n\n /**\n * Enum values by id.\n * @type {Object.}\n */\n this.valuesById = {};\n\n /**\n * Enum values by name.\n * @type {Object.}\n */\n this.values = Object.create(this.valuesById); // toJSON, marker\n\n /**\n * Enum comment text.\n * @type {string|null}\n */\n this.comment = comment;\n\n /**\n * Value comment texts, if any.\n * @type {Object.}\n */\n this.comments = comments || {};\n\n /**\n * Reserved ranges, if any.\n * @type {Array.}\n */\n this.reserved = undefined; // toJSON\n\n // Note that values inherit valuesById on their prototype which makes them a TypeScript-\n // compatible enum. This is used by pbts to write actual enum definitions that work for\n // static and reflection code alike instead of emitting generic object definitions.\n\n if (values)\n for (var keys = Object.keys(values), i = 0; i < keys.length; ++i)\n if (typeof values[keys[i]] === \"number\") // use forward entries only\n this.valuesById[ this.values[keys[i]] = values[keys[i]] ] = keys[i];\n}\n\n/**\n * Enum descriptor.\n * @interface IEnum\n * @property {Object.} values Enum values\n * @property {Object.} [options] Enum options\n */\n\n/**\n * Constructs an enum from an enum descriptor.\n * @param {string} name Enum name\n * @param {IEnum} json Enum descriptor\n * @returns {Enum} Created enum\n * @throws {TypeError} If arguments are invalid\n */\nEnum.fromJSON = function fromJSON(name, json) {\n var enm = new Enum(name, json.values, json.options, json.comment, json.comments);\n enm.reserved = json.reserved;\n return enm;\n};\n\n/**\n * Converts this enum to an enum descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IEnum} Enum descriptor\n */\nEnum.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , this.options,\n \"values\" , this.values,\n \"reserved\" , this.reserved && this.reserved.length ? this.reserved : undefined,\n \"comment\" , keepComments ? this.comment : undefined,\n \"comments\" , keepComments ? this.comments : undefined\n ]);\n};\n\n/**\n * Adds a value to this enum.\n * @param {string} name Value name\n * @param {number} id Value id\n * @param {string} [comment] Comment, if any\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a value with this name or id\n */\nEnum.prototype.add = function add(name, id, comment) {\n // utilized by the parser but not by .fromJSON\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n if (!util.isInteger(id))\n throw TypeError(\"id must be an integer\");\n\n if (this.values[name] !== undefined)\n throw Error(\"duplicate name '\" + name + \"' in \" + this);\n\n if (this.isReservedId(id))\n throw Error(\"id \" + id + \" is reserved in \" + this);\n\n if (this.isReservedName(name))\n throw Error(\"name '\" + name + \"' is reserved in \" + this);\n\n if (this.valuesById[id] !== undefined) {\n if (!(this.options && this.options.allow_alias))\n throw Error(\"duplicate id \" + id + \" in \" + this);\n this.values[name] = id;\n } else\n this.valuesById[this.values[name] = id] = name;\n\n this.comments[name] = comment || null;\n return this;\n};\n\n/**\n * Removes a value from this enum\n * @param {string} name Value name\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `name` is not a name of this enum\n */\nEnum.prototype.remove = function remove(name) {\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n var val = this.values[name];\n if (val == null)\n throw Error(\"name '\" + name + \"' does not exist in \" + this);\n\n delete this.valuesById[val];\n delete this.values[name];\n delete this.comments[name];\n\n return this;\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedId = function isReservedId(id) {\n return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedName = function isReservedName(name) {\n return Namespace.isReservedName(this.reserved, name);\n};\n","\"use strict\";\nmodule.exports = Field;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Field.prototype = Object.create(ReflectionObject.prototype)).constructor = Field).className = \"Field\";\n\nvar Enum = require(\"./enum\"),\n types = require(\"./types\"),\n util = require(\"./util\");\n\nvar Type; // cyclic\n\nvar ruleRe = /^required|optional|repeated$/;\n\n/**\n * Constructs a new message field instance. Note that {@link MapField|map fields} have their own class.\n * @name Field\n * @classdesc Reflected message field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.} [rule=\"optional\"] Field rule\n * @param {string|Object.} [extend] Extended type if different from parent\n * @param {Object.} [options] Declared options\n */\n\n/**\n * Constructs a field from a field descriptor.\n * @param {string} name Field name\n * @param {IField} json Field descriptor\n * @returns {Field} Created field\n * @throws {TypeError} If arguments are invalid\n */\nField.fromJSON = function fromJSON(name, json) {\n return new Field(name, json.id, json.type, json.rule, json.extend, json.options, json.comment);\n};\n\n/**\n * Not an actual constructor. Use {@link Field} instead.\n * @classdesc Base class of all reflected message fields. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports FieldBase\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.} [rule=\"optional\"] Field rule\n * @param {string|Object.} [extend] Extended type if different from parent\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction Field(name, id, type, rule, extend, options, comment) {\n\n if (util.isObject(rule)) {\n comment = extend;\n options = rule;\n rule = extend = undefined;\n } else if (util.isObject(extend)) {\n comment = options;\n options = extend;\n extend = undefined;\n }\n\n ReflectionObject.call(this, name, options);\n\n if (!util.isInteger(id) || id < 0)\n throw TypeError(\"id must be a non-negative integer\");\n\n if (!util.isString(type))\n throw TypeError(\"type must be a string\");\n\n if (rule !== undefined && !ruleRe.test(rule = rule.toString().toLowerCase()))\n throw TypeError(\"rule must be a string rule\");\n\n if (extend !== undefined && !util.isString(extend))\n throw TypeError(\"extend must be a string\");\n\n /**\n * Field rule, if any.\n * @type {string|undefined}\n */\n this.rule = rule && rule !== \"optional\" ? rule : undefined; // toJSON\n\n /**\n * Field type.\n * @type {string}\n */\n this.type = type; // toJSON\n\n /**\n * Unique field id.\n * @type {number}\n */\n this.id = id; // toJSON, marker\n\n /**\n * Extended type if different from parent.\n * @type {string|undefined}\n */\n this.extend = extend || undefined; // toJSON\n\n /**\n * Whether this field is required.\n * @type {boolean}\n */\n this.required = rule === \"required\";\n\n /**\n * Whether this field is optional.\n * @type {boolean}\n */\n this.optional = !this.required;\n\n /**\n * Whether this field is repeated.\n * @type {boolean}\n */\n this.repeated = rule === \"repeated\";\n\n /**\n * Whether this field is a map or not.\n * @type {boolean}\n */\n this.map = false;\n\n /**\n * Message this field belongs to.\n * @type {Type|null}\n */\n this.message = null;\n\n /**\n * OneOf this field belongs to, if any,\n * @type {OneOf|null}\n */\n this.partOf = null;\n\n /**\n * The field type's default value.\n * @type {*}\n */\n this.typeDefault = null;\n\n /**\n * The field's default value on prototypes.\n * @type {*}\n */\n this.defaultValue = null;\n\n /**\n * Whether this field's value should be treated as a long.\n * @type {boolean}\n */\n this.long = util.Long ? types.long[type] !== undefined : /* istanbul ignore next */ false;\n\n /**\n * Whether this field's value is a buffer.\n * @type {boolean}\n */\n this.bytes = type === \"bytes\";\n\n /**\n * Resolved type if not a basic type.\n * @type {Type|Enum|null}\n */\n this.resolvedType = null;\n\n /**\n * Sister-field within the extended type if a declaring extension field.\n * @type {Field|null}\n */\n this.extensionField = null;\n\n /**\n * Sister-field within the declaring namespace if an extended field.\n * @type {Field|null}\n */\n this.declaringField = null;\n\n /**\n * Internally remembers whether this field is packed.\n * @type {boolean|null}\n * @private\n */\n this._packed = null;\n\n /**\n * Comment for this field.\n * @type {string|null}\n */\n this.comment = comment;\n}\n\n/**\n * Determines whether this field is packed. Only relevant when repeated and working with proto2.\n * @name Field#packed\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"packed\", {\n get: function() {\n // defaults to packed=true if not explicity set to false\n if (this._packed === null)\n this._packed = this.getOption(\"packed\") !== false;\n return this._packed;\n }\n});\n\n/**\n * @override\n */\nField.prototype.setOption = function setOption(name, value, ifNotSet) {\n if (name === \"packed\") // clear cached before setting\n this._packed = null;\n return ReflectionObject.prototype.setOption.call(this, name, value, ifNotSet);\n};\n\n/**\n * Field descriptor.\n * @interface IField\n * @property {string} [rule=\"optional\"] Field rule\n * @property {string} type Field type\n * @property {number} id Field id\n * @property {Object.} [options] Field options\n */\n\n/**\n * Extension field descriptor.\n * @interface IExtensionField\n * @extends IField\n * @property {string} extend Extended type\n */\n\n/**\n * Converts this field to a field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IField} Field descriptor\n */\nField.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"rule\" , this.rule !== \"optional\" && this.rule || undefined,\n \"type\" , this.type,\n \"id\" , this.id,\n \"extend\" , this.extend,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Resolves this field's type references.\n * @returns {Field} `this`\n * @throws {Error} If any reference cannot be resolved\n */\nField.prototype.resolve = function resolve() {\n\n if (this.resolved)\n return this;\n\n if ((this.typeDefault = types.defaults[this.type]) === undefined) { // if not a basic type, resolve it\n this.resolvedType = (this.declaringField ? this.declaringField.parent : this.parent).lookupTypeOrEnum(this.type);\n if (this.resolvedType instanceof Type)\n this.typeDefault = null;\n else // instanceof Enum\n this.typeDefault = this.resolvedType.values[Object.keys(this.resolvedType.values)[0]]; // first defined\n }\n\n // use explicitly set default value if present\n if (this.options && this.options[\"default\"] != null) {\n this.typeDefault = this.options[\"default\"];\n if (this.resolvedType instanceof Enum && typeof this.typeDefault === \"string\")\n this.typeDefault = this.resolvedType.values[this.typeDefault];\n }\n\n // remove unnecessary options\n if (this.options) {\n if (this.options.packed === true || this.options.packed !== undefined && this.resolvedType && !(this.resolvedType instanceof Enum))\n delete this.options.packed;\n if (!Object.keys(this.options).length)\n this.options = undefined;\n }\n\n // convert to internal data type if necesssary\n if (this.long) {\n this.typeDefault = util.Long.fromNumber(this.typeDefault, this.type.charAt(0) === \"u\");\n\n /* istanbul ignore else */\n if (Object.freeze)\n Object.freeze(this.typeDefault); // long instances are meant to be immutable anyway (i.e. use small int cache that even requires it)\n\n } else if (this.bytes && typeof this.typeDefault === \"string\") {\n var buf;\n if (util.base64.test(this.typeDefault))\n util.base64.decode(this.typeDefault, buf = util.newBuffer(util.base64.length(this.typeDefault)), 0);\n else\n util.utf8.write(this.typeDefault, buf = util.newBuffer(util.utf8.length(this.typeDefault)), 0);\n this.typeDefault = buf;\n }\n\n // take special care of maps and repeated fields\n if (this.map)\n this.defaultValue = util.emptyObject;\n else if (this.repeated)\n this.defaultValue = util.emptyArray;\n else\n this.defaultValue = this.typeDefault;\n\n // ensure proper value on prototype\n if (this.parent instanceof Type)\n this.parent.ctor.prototype[this.name] = this.defaultValue;\n\n return ReflectionObject.prototype.resolve.call(this);\n};\n\n/**\n * Decorator function as returned by {@link Field.d} and {@link MapField.d} (TypeScript).\n * @typedef FieldDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} fieldName Field name\n * @returns {undefined}\n */\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"string\"|\"bool\"|\"bytes\"|Object} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @param {T} [defaultValue] Default value\n * @returns {FieldDecorator} Decorator function\n * @template T extends number | number[] | Long | Long[] | string | string[] | boolean | boolean[] | Uint8Array | Uint8Array[] | Buffer | Buffer[]\n */\nField.d = function decorateField(fieldId, fieldType, fieldRule, defaultValue) {\n\n // submessage: decorate the submessage and use its name as the type\n if (typeof fieldType === \"function\")\n fieldType = util.decorateType(fieldType).name;\n\n // enum reference: create a reflected copy of the enum and keep reuseing it\n else if (fieldType && typeof fieldType === \"object\")\n fieldType = util.decorateEnum(fieldType).name;\n\n return function fieldDecorator(prototype, fieldName) {\n util.decorateType(prototype.constructor)\n .add(new Field(fieldName, fieldId, fieldType, fieldRule, { \"default\": defaultValue }));\n };\n};\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {Constructor|string} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @returns {FieldDecorator} Decorator function\n * @template T extends Message\n * @variation 2\n */\n// like Field.d but without a default value\n\n// Sets up cyclic dependencies (called in index-light)\nField._configure = function configure(Type_) {\n Type = Type_;\n};\n","\"use strict\";\nvar protobuf = module.exports = require(\"./index-minimal\");\n\nprotobuf.build = \"light\";\n\n/**\n * A node-style callback as used by {@link load} and {@link Root#load}.\n * @typedef LoadCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Root} [root] Root, if there hasn't been an error\n * @returns {undefined}\n */\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} root Root namespace, defaults to create a new one if omitted.\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n */\nfunction load(filename, root, callback) {\n if (typeof root === \"function\") {\n callback = root;\n root = new protobuf.Root();\n } else if (!root)\n root = new protobuf.Root();\n return root.load(filename, callback);\n}\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and returns a promise.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Promise} Promise\n * @see {@link Root#load}\n * @variation 3\n */\n// function load(filename:string, [root:Root]):Promise\n\nprotobuf.load = load;\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into a common root namespace (node only).\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n * @see {@link Root#loadSync}\n */\nfunction loadSync(filename, root) {\n if (!root)\n root = new protobuf.Root();\n return root.loadSync(filename);\n}\n\nprotobuf.loadSync = loadSync;\n\n// Serialization\nprotobuf.encoder = require(\"./encoder\");\nprotobuf.decoder = require(\"./decoder\");\nprotobuf.verifier = require(\"./verifier\");\nprotobuf.converter = require(\"./converter\");\n\n// Reflection\nprotobuf.ReflectionObject = require(\"./object\");\nprotobuf.Namespace = require(\"./namespace\");\nprotobuf.Root = require(\"./root\");\nprotobuf.Enum = require(\"./enum\");\nprotobuf.Type = require(\"./type\");\nprotobuf.Field = require(\"./field\");\nprotobuf.OneOf = require(\"./oneof\");\nprotobuf.MapField = require(\"./mapfield\");\nprotobuf.Service = require(\"./service\");\nprotobuf.Method = require(\"./method\");\n\n// Runtime\nprotobuf.Message = require(\"./message\");\nprotobuf.wrappers = require(\"./wrappers\");\n\n// Utility\nprotobuf.types = require(\"./types\");\nprotobuf.util = require(\"./util\");\n\n// Set up possibly cyclic reflection dependencies\nprotobuf.ReflectionObject._configure(protobuf.Root);\nprotobuf.Namespace._configure(protobuf.Type, protobuf.Service, protobuf.Enum);\nprotobuf.Root._configure(protobuf.Type);\nprotobuf.Field._configure(protobuf.Type);\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","\"use strict\";\nmodule.exports = MapField;\n\n// extends Field\nvar Field = require(\"./field\");\n((MapField.prototype = Object.create(Field.prototype)).constructor = MapField).className = \"MapField\";\n\nvar types = require(\"./types\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new map field instance.\n * @classdesc Reflected map field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} keyType Key type\n * @param {string} type Value type\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction MapField(name, id, keyType, type, options, comment) {\n Field.call(this, name, id, type, undefined, undefined, options, comment);\n\n /* istanbul ignore if */\n if (!util.isString(keyType))\n throw TypeError(\"keyType must be a string\");\n\n /**\n * Key type.\n * @type {string}\n */\n this.keyType = keyType; // toJSON, marker\n\n /**\n * Resolved key type if not a basic type.\n * @type {ReflectionObject|null}\n */\n this.resolvedKeyType = null;\n\n // Overrides Field#map\n this.map = true;\n}\n\n/**\n * Map field descriptor.\n * @interface IMapField\n * @extends {IField}\n * @property {string} keyType Key type\n */\n\n/**\n * Extension map field descriptor.\n * @interface IExtensionMapField\n * @extends IMapField\n * @property {string} extend Extended type\n */\n\n/**\n * Constructs a map field from a map field descriptor.\n * @param {string} name Field name\n * @param {IMapField} json Map field descriptor\n * @returns {MapField} Created map field\n * @throws {TypeError} If arguments are invalid\n */\nMapField.fromJSON = function fromJSON(name, json) {\n return new MapField(name, json.id, json.keyType, json.type, json.options, json.comment);\n};\n\n/**\n * Converts this map field to a map field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMapField} Map field descriptor\n */\nMapField.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"keyType\" , this.keyType,\n \"type\" , this.type,\n \"id\" , this.id,\n \"extend\" , this.extend,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * @override\n */\nMapField.prototype.resolve = function resolve() {\n if (this.resolved)\n return this;\n\n // Besides a value type, map fields have a key type that may be \"any scalar type except for floating point types and bytes\"\n if (types.mapKey[this.keyType] === undefined)\n throw Error(\"invalid key type: \" + this.keyType);\n\n return Field.prototype.resolve.call(this);\n};\n\n/**\n * Map field decorator (TypeScript).\n * @name MapField.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"} fieldKeyType Field key type\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"|\"bytes\"|Object|Constructor<{}>} fieldValueType Field value type\n * @returns {FieldDecorator} Decorator function\n * @template T extends { [key: string]: number | Long | string | boolean | Uint8Array | Buffer | number[] | Message<{}> }\n */\nMapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) {\n\n // submessage value: decorate the submessage and use its name as the type\n if (typeof fieldValueType === \"function\")\n fieldValueType = util.decorateType(fieldValueType).name;\n\n // enum reference value: create a reflected copy of the enum and keep reuseing it\n else if (fieldValueType && typeof fieldValueType === \"object\")\n fieldValueType = util.decorateEnum(fieldValueType).name;\n\n return function mapFieldDecorator(prototype, fieldName) {\n util.decorateType(prototype.constructor)\n .add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType));\n };\n};\n","\"use strict\";\nmodule.exports = Message;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new message instance.\n * @classdesc Abstract runtime message.\n * @constructor\n * @param {Properties} [properties] Properties to set\n * @template T extends object = object\n */\nfunction Message(properties) {\n // not used internally\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n this[keys[i]] = properties[keys[i]];\n}\n\n/**\n * Reference to the reflected type.\n * @name Message.$type\n * @type {Type}\n * @readonly\n */\n\n/**\n * Reference to the reflected type.\n * @name Message#$type\n * @type {Type}\n * @readonly\n */\n\n/*eslint-disable valid-jsdoc*/\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.} [properties] Properties to set\n * @returns {Message} Message instance\n * @template T extends Message\n * @this Constructor\n */\nMessage.create = function create(properties) {\n return this.$type.create(properties);\n};\n\n/**\n * Encodes a message of this type.\n * @param {T|Object.} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message\n * @this Constructor\n */\nMessage.encode = function encode(message, writer) {\n return this.$type.encode(message, writer);\n};\n\n/**\n * Encodes a message of this type preceeded by its length as a varint.\n * @param {T|Object.} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message\n * @this Constructor\n */\nMessage.encodeDelimited = function encodeDelimited(message, writer) {\n return this.$type.encodeDelimited(message, writer);\n};\n\n/**\n * Decodes a message of this type.\n * @name Message.decode\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message\n * @this Constructor\n */\nMessage.decode = function decode(reader) {\n return this.$type.decode(reader);\n};\n\n/**\n * Decodes a message of this type preceeded by its length as a varint.\n * @name Message.decodeDelimited\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message\n * @this Constructor\n */\nMessage.decodeDelimited = function decodeDelimited(reader) {\n return this.$type.decodeDelimited(reader);\n};\n\n/**\n * Verifies a message of this type.\n * @name Message.verify\n * @function\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\nMessage.verify = function verify(message) {\n return this.$type.verify(message);\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.} object Plain object\n * @returns {T} Message instance\n * @template T extends Message\n * @this Constructor\n */\nMessage.fromObject = function fromObject(object) {\n return this.$type.fromObject(object);\n};\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {T} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n * @template T extends Message\n * @this Constructor\n */\nMessage.toObject = function toObject(message, options) {\n return this.$type.toObject(message, options);\n};\n\n/**\n * Converts this message to JSON.\n * @returns {Object.} JSON object\n */\nMessage.prototype.toJSON = function toJSON() {\n return this.$type.toObject(this, util.toJSONOptions);\n};\n\n/*eslint-enable valid-jsdoc*/","\"use strict\";\nmodule.exports = Method;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Method.prototype = Object.create(ReflectionObject.prototype)).constructor = Method).className = \"Method\";\n\nvar util = require(\"./util\");\n\n/**\n * Constructs a new service method instance.\n * @classdesc Reflected service method.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Method name\n * @param {string|undefined} type Method type, usually `\"rpc\"`\n * @param {string} requestType Request message type\n * @param {string} responseType Response message type\n * @param {boolean|Object.} [requestStream] Whether the request is streamed\n * @param {boolean|Object.} [responseStream] Whether the response is streamed\n * @param {Object.} [options] Declared options\n * @param {string} [comment] The comment for this method\n * @param {Object.} [parsedOptions] Declared options, properly parsed into an object\n */\nfunction Method(name, type, requestType, responseType, requestStream, responseStream, options, comment, parsedOptions) {\n\n /* istanbul ignore next */\n if (util.isObject(requestStream)) {\n options = requestStream;\n requestStream = responseStream = undefined;\n } else if (util.isObject(responseStream)) {\n options = responseStream;\n responseStream = undefined;\n }\n\n /* istanbul ignore if */\n if (!(type === undefined || util.isString(type)))\n throw TypeError(\"type must be a string\");\n\n /* istanbul ignore if */\n if (!util.isString(requestType))\n throw TypeError(\"requestType must be a string\");\n\n /* istanbul ignore if */\n if (!util.isString(responseType))\n throw TypeError(\"responseType must be a string\");\n\n ReflectionObject.call(this, name, options);\n\n /**\n * Method type.\n * @type {string}\n */\n this.type = type || \"rpc\"; // toJSON\n\n /**\n * Request type.\n * @type {string}\n */\n this.requestType = requestType; // toJSON, marker\n\n /**\n * Whether requests are streamed or not.\n * @type {boolean|undefined}\n */\n this.requestStream = requestStream ? true : undefined; // toJSON\n\n /**\n * Response type.\n * @type {string}\n */\n this.responseType = responseType; // toJSON\n\n /**\n * Whether responses are streamed or not.\n * @type {boolean|undefined}\n */\n this.responseStream = responseStream ? true : undefined; // toJSON\n\n /**\n * Resolved request type.\n * @type {Type|null}\n */\n this.resolvedRequestType = null;\n\n /**\n * Resolved response type.\n * @type {Type|null}\n */\n this.resolvedResponseType = null;\n\n /**\n * Comment for this method\n * @type {string|null}\n */\n this.comment = comment;\n\n /**\n * Options properly parsed into an object\n */\n this.parsedOptions = parsedOptions;\n}\n\n/**\n * Method descriptor.\n * @interface IMethod\n * @property {string} [type=\"rpc\"] Method type\n * @property {string} requestType Request type\n * @property {string} responseType Response type\n * @property {boolean} [requestStream=false] Whether requests are streamed\n * @property {boolean} [responseStream=false] Whether responses are streamed\n * @property {Object.} [options] Method options\n * @property {string} comment Method comments\n * @property {Object.} [parsedOptions] Method options properly parsed into an object\n */\n\n/**\n * Constructs a method from a method descriptor.\n * @param {string} name Method name\n * @param {IMethod} json Method descriptor\n * @returns {Method} Created method\n * @throws {TypeError} If arguments are invalid\n */\nMethod.fromJSON = function fromJSON(name, json) {\n return new Method(name, json.type, json.requestType, json.responseType, json.requestStream, json.responseStream, json.options, json.comment, json.parsedOptions);\n};\n\n/**\n * Converts this method to a method descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMethod} Method descriptor\n */\nMethod.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"type\" , this.type !== \"rpc\" && /* istanbul ignore next */ this.type || undefined,\n \"requestType\" , this.requestType,\n \"requestStream\" , this.requestStream,\n \"responseType\" , this.responseType,\n \"responseStream\" , this.responseStream,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined,\n \"parsedOptions\" , this.parsedOptions,\n ]);\n};\n\n/**\n * @override\n */\nMethod.prototype.resolve = function resolve() {\n\n /* istanbul ignore if */\n if (this.resolved)\n return this;\n\n this.resolvedRequestType = this.parent.lookupType(this.requestType);\n this.resolvedResponseType = this.parent.lookupType(this.responseType);\n\n return ReflectionObject.prototype.resolve.call(this);\n};\n","\"use strict\";\nmodule.exports = Namespace;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Namespace.prototype = Object.create(ReflectionObject.prototype)).constructor = Namespace).className = \"Namespace\";\n\nvar Field = require(\"./field\"),\n util = require(\"./util\");\n\nvar Type, // cyclic\n Service,\n Enum;\n\n/**\n * Constructs a new namespace instance.\n * @name Namespace\n * @classdesc Reflected namespace.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.} [options] Declared options\n */\n\n/**\n * Constructs a namespace from JSON.\n * @memberof Namespace\n * @function\n * @param {string} name Namespace name\n * @param {Object.} json JSON object\n * @returns {Namespace} Created namespace\n * @throws {TypeError} If arguments are invalid\n */\nNamespace.fromJSON = function fromJSON(name, json) {\n return new Namespace(name, json.options).addJSON(json.nested);\n};\n\n/**\n * Converts an array of reflection objects to JSON.\n * @memberof Namespace\n * @param {ReflectionObject[]} array Object array\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {Object.|undefined} JSON object or `undefined` when array is empty\n */\nfunction arrayToJSON(array, toJSONOptions) {\n if (!(array && array.length))\n return undefined;\n var obj = {};\n for (var i = 0; i < array.length; ++i)\n obj[array[i].name] = array[i].toJSON(toJSONOptions);\n return obj;\n}\n\nNamespace.arrayToJSON = arrayToJSON;\n\n/**\n * Tests if the specified id is reserved.\n * @param {Array.|undefined} reserved Array of reserved ranges and names\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedId = function isReservedId(reserved, id) {\n if (reserved)\n for (var i = 0; i < reserved.length; ++i)\n if (typeof reserved[i] !== \"string\" && reserved[i][0] <= id && reserved[i][1] > id)\n return true;\n return false;\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {Array.|undefined} reserved Array of reserved ranges and names\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedName = function isReservedName(reserved, name) {\n if (reserved)\n for (var i = 0; i < reserved.length; ++i)\n if (reserved[i] === name)\n return true;\n return false;\n};\n\n/**\n * Not an actual constructor. Use {@link Namespace} instead.\n * @classdesc Base class of all reflection objects containing nested objects. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports NamespaceBase\n * @extends ReflectionObject\n * @abstract\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.} [options] Declared options\n * @see {@link Namespace}\n */\nfunction Namespace(name, options) {\n ReflectionObject.call(this, name, options);\n\n /**\n * Nested objects by name.\n * @type {Object.|undefined}\n */\n this.nested = undefined; // toJSON\n\n /**\n * Cached nested objects as an array.\n * @type {ReflectionObject[]|null}\n * @private\n */\n this._nestedArray = null;\n}\n\nfunction clearCache(namespace) {\n namespace._nestedArray = null;\n return namespace;\n}\n\n/**\n * Nested objects of this namespace as an array for iteration.\n * @name NamespaceBase#nestedArray\n * @type {ReflectionObject[]}\n * @readonly\n */\nObject.defineProperty(Namespace.prototype, \"nestedArray\", {\n get: function() {\n return this._nestedArray || (this._nestedArray = util.toArray(this.nested));\n }\n});\n\n/**\n * Namespace descriptor.\n * @interface INamespace\n * @property {Object.} [options] Namespace options\n * @property {Object.} [nested] Nested object descriptors\n */\n\n/**\n * Any extension field descriptor.\n * @typedef AnyExtensionField\n * @type {IExtensionField|IExtensionMapField}\n */\n\n/**\n * Any nested object descriptor.\n * @typedef AnyNestedObject\n * @type {IEnum|IType|IService|AnyExtensionField|INamespace}\n */\n// ^ BEWARE: VSCode hangs forever when using more than 5 types (that's why AnyExtensionField exists in the first place)\n\n/**\n * Converts this namespace to a namespace descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {INamespace} Namespace descriptor\n */\nNamespace.prototype.toJSON = function toJSON(toJSONOptions) {\n return util.toObject([\n \"options\" , this.options,\n \"nested\" , arrayToJSON(this.nestedArray, toJSONOptions)\n ]);\n};\n\n/**\n * Adds nested objects to this namespace from nested object descriptors.\n * @param {Object.} nestedJson Any nested object descriptors\n * @returns {Namespace} `this`\n */\nNamespace.prototype.addJSON = function addJSON(nestedJson) {\n var ns = this;\n /* istanbul ignore else */\n if (nestedJson) {\n for (var names = Object.keys(nestedJson), i = 0, nested; i < names.length; ++i) {\n nested = nestedJson[names[i]];\n ns.add( // most to least likely\n ( nested.fields !== undefined\n ? Type.fromJSON\n : nested.values !== undefined\n ? Enum.fromJSON\n : nested.methods !== undefined\n ? Service.fromJSON\n : nested.id !== undefined\n ? Field.fromJSON\n : Namespace.fromJSON )(names[i], nested)\n );\n }\n }\n return this;\n};\n\n/**\n * Gets the nested object of the specified name.\n * @param {string} name Nested object name\n * @returns {ReflectionObject|null} The reflection object or `null` if it doesn't exist\n */\nNamespace.prototype.get = function get(name) {\n return this.nested && this.nested[name]\n || null;\n};\n\n/**\n * Gets the values of the nested {@link Enum|enum} of the specified name.\n * This methods differs from {@link Namespace#get|get} in that it returns an enum's values directly and throws instead of returning `null`.\n * @param {string} name Nested enum name\n * @returns {Object.} Enum values\n * @throws {Error} If there is no such enum\n */\nNamespace.prototype.getEnum = function getEnum(name) {\n if (this.nested && this.nested[name] instanceof Enum)\n return this.nested[name].values;\n throw Error(\"no such enum: \" + name);\n};\n\n/**\n * Adds a nested object to this namespace.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name\n */\nNamespace.prototype.add = function add(object) {\n\n if (!(object instanceof Field && object.extend !== undefined || object instanceof Type || object instanceof Enum || object instanceof Service || object instanceof Namespace))\n throw TypeError(\"object must be a valid nested object\");\n\n if (!this.nested)\n this.nested = {};\n else {\n var prev = this.get(object.name);\n if (prev) {\n if (prev instanceof Namespace && object instanceof Namespace && !(prev instanceof Type || prev instanceof Service)) {\n // replace plain namespace but keep existing nested elements and options\n var nested = prev.nestedArray;\n for (var i = 0; i < nested.length; ++i)\n object.add(nested[i]);\n this.remove(prev);\n if (!this.nested)\n this.nested = {};\n object.setOptions(prev.options, true);\n\n } else\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n }\n }\n this.nested[object.name] = object;\n object.onAdd(this);\n return clearCache(this);\n};\n\n/**\n * Removes a nested object from this namespace.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this namespace\n */\nNamespace.prototype.remove = function remove(object) {\n\n if (!(object instanceof ReflectionObject))\n throw TypeError(\"object must be a ReflectionObject\");\n if (object.parent !== this)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.nested[object.name];\n if (!Object.keys(this.nested).length)\n this.nested = undefined;\n\n object.onRemove(this);\n return clearCache(this);\n};\n\n/**\n * Defines additial namespaces within this one if not yet existing.\n * @param {string|string[]} path Path to create\n * @param {*} [json] Nested types to create from JSON\n * @returns {Namespace} Pointer to the last namespace created or `this` if path is empty\n */\nNamespace.prototype.define = function define(path, json) {\n\n if (util.isString(path))\n path = path.split(\".\");\n else if (!Array.isArray(path))\n throw TypeError(\"illegal path\");\n if (path && path.length && path[0] === \"\")\n throw Error(\"path must be relative\");\n\n var ptr = this;\n while (path.length > 0) {\n var part = path.shift();\n if (ptr.nested && ptr.nested[part]) {\n ptr = ptr.nested[part];\n if (!(ptr instanceof Namespace))\n throw Error(\"path conflicts with non-namespace objects\");\n } else\n ptr.add(ptr = new Namespace(part));\n }\n if (json)\n ptr.addJSON(json);\n return ptr;\n};\n\n/**\n * Resolves this namespace's and all its nested objects' type references. Useful to validate a reflection tree, but comes at a cost.\n * @returns {Namespace} `this`\n */\nNamespace.prototype.resolveAll = function resolveAll() {\n var nested = this.nestedArray, i = 0;\n while (i < nested.length)\n if (nested[i] instanceof Namespace)\n nested[i++].resolveAll();\n else\n nested[i++].resolve();\n return this.resolve();\n};\n\n/**\n * Recursively looks up the reflection object matching the specified path in the scope of this namespace.\n * @param {string|string[]} path Path to look up\n * @param {*|Array.<*>} filterTypes Filter types, any combination of the constructors of `protobuf.Type`, `protobuf.Enum`, `protobuf.Service` etc.\n * @param {boolean} [parentAlreadyChecked=false] If known, whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n */\nNamespace.prototype.lookup = function lookup(path, filterTypes, parentAlreadyChecked) {\n\n /* istanbul ignore next */\n if (typeof filterTypes === \"boolean\") {\n parentAlreadyChecked = filterTypes;\n filterTypes = undefined;\n } else if (filterTypes && !Array.isArray(filterTypes))\n filterTypes = [ filterTypes ];\n\n if (util.isString(path) && path.length) {\n if (path === \".\")\n return this.root;\n path = path.split(\".\");\n } else if (!path.length)\n return this;\n\n // Start at root if path is absolute\n if (path[0] === \"\")\n return this.root.lookup(path.slice(1), filterTypes);\n\n // Test if the first part matches any nested object, and if so, traverse if path contains more\n var found = this.get(path[0]);\n if (found) {\n if (path.length === 1) {\n if (!filterTypes || filterTypes.indexOf(found.constructor) > -1)\n return found;\n } else if (found instanceof Namespace && (found = found.lookup(path.slice(1), filterTypes, true)))\n return found;\n\n // Otherwise try each nested namespace\n } else\n for (var i = 0; i < this.nestedArray.length; ++i)\n if (this._nestedArray[i] instanceof Namespace && (found = this._nestedArray[i].lookup(path, filterTypes, true)))\n return found;\n\n // If there hasn't been a match, try again at the parent\n if (this.parent === null || parentAlreadyChecked)\n return null;\n return this.parent.lookup(path, filterTypes);\n};\n\n/**\n * Looks up the reflection object at the specified path, relative to this namespace.\n * @name NamespaceBase#lookup\n * @function\n * @param {string|string[]} path Path to look up\n * @param {boolean} [parentAlreadyChecked=false] Whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n * @variation 2\n */\n// lookup(path: string, [parentAlreadyChecked: boolean])\n\n/**\n * Looks up the {@link Type|type} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type\n * @throws {Error} If `path` does not point to a type\n */\nNamespace.prototype.lookupType = function lookupType(path) {\n var found = this.lookup(path, [ Type ]);\n if (!found)\n throw Error(\"no such type: \" + path);\n return found;\n};\n\n/**\n * Looks up the values of the {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Enum} Looked up enum\n * @throws {Error} If `path` does not point to an enum\n */\nNamespace.prototype.lookupEnum = function lookupEnum(path) {\n var found = this.lookup(path, [ Enum ]);\n if (!found)\n throw Error(\"no such Enum '\" + path + \"' in \" + this);\n return found;\n};\n\n/**\n * Looks up the {@link Type|type} or {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type or enum\n * @throws {Error} If `path` does not point to a type or enum\n */\nNamespace.prototype.lookupTypeOrEnum = function lookupTypeOrEnum(path) {\n var found = this.lookup(path, [ Type, Enum ]);\n if (!found)\n throw Error(\"no such Type or Enum '\" + path + \"' in \" + this);\n return found;\n};\n\n/**\n * Looks up the {@link Service|service} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Service} Looked up service\n * @throws {Error} If `path` does not point to a service\n */\nNamespace.prototype.lookupService = function lookupService(path) {\n var found = this.lookup(path, [ Service ]);\n if (!found)\n throw Error(\"no such Service '\" + path + \"' in \" + this);\n return found;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nNamespace._configure = function(Type_, Service_, Enum_) {\n Type = Type_;\n Service = Service_;\n Enum = Enum_;\n};\n","\"use strict\";\nmodule.exports = ReflectionObject;\n\nReflectionObject.className = \"ReflectionObject\";\n\nvar util = require(\"./util\");\n\nvar Root; // cyclic\n\n/**\n * Constructs a new reflection object instance.\n * @classdesc Base class of all reflection objects.\n * @constructor\n * @param {string} name Object name\n * @param {Object.} [options] Declared options\n * @abstract\n */\nfunction ReflectionObject(name, options) {\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n if (options && !util.isObject(options))\n throw TypeError(\"options must be an object\");\n\n /**\n * Options.\n * @type {Object.|undefined}\n */\n this.options = options; // toJSON\n\n /**\n * Parsed Options.\n * @type {Array.>|undefined}\n */\n this.parsedOptions = null;\n\n /**\n * Unique name within its namespace.\n * @type {string}\n */\n this.name = name;\n\n /**\n * Parent namespace.\n * @type {Namespace|null}\n */\n this.parent = null;\n\n /**\n * Whether already resolved or not.\n * @type {boolean}\n */\n this.resolved = false;\n\n /**\n * Comment text, if any.\n * @type {string|null}\n */\n this.comment = null;\n\n /**\n * Defining file name.\n * @type {string|null}\n */\n this.filename = null;\n}\n\nObject.defineProperties(ReflectionObject.prototype, {\n\n /**\n * Reference to the root namespace.\n * @name ReflectionObject#root\n * @type {Root}\n * @readonly\n */\n root: {\n get: function() {\n var ptr = this;\n while (ptr.parent !== null)\n ptr = ptr.parent;\n return ptr;\n }\n },\n\n /**\n * Full name including leading dot.\n * @name ReflectionObject#fullName\n * @type {string}\n * @readonly\n */\n fullName: {\n get: function() {\n var path = [ this.name ],\n ptr = this.parent;\n while (ptr) {\n path.unshift(ptr.name);\n ptr = ptr.parent;\n }\n return path.join(\".\");\n }\n }\n});\n\n/**\n * Converts this reflection object to its descriptor representation.\n * @returns {Object.} Descriptor\n * @abstract\n */\nReflectionObject.prototype.toJSON = /* istanbul ignore next */ function toJSON() {\n throw Error(); // not implemented, shouldn't happen\n};\n\n/**\n * Called when this object is added to a parent.\n * @param {ReflectionObject} parent Parent added to\n * @returns {undefined}\n */\nReflectionObject.prototype.onAdd = function onAdd(parent) {\n if (this.parent && this.parent !== parent)\n this.parent.remove(this);\n this.parent = parent;\n this.resolved = false;\n var root = parent.root;\n if (root instanceof Root)\n root._handleAdd(this);\n};\n\n/**\n * Called when this object is removed from a parent.\n * @param {ReflectionObject} parent Parent removed from\n * @returns {undefined}\n */\nReflectionObject.prototype.onRemove = function onRemove(parent) {\n var root = parent.root;\n if (root instanceof Root)\n root._handleRemove(this);\n this.parent = null;\n this.resolved = false;\n};\n\n/**\n * Resolves this objects type references.\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.resolve = function resolve() {\n if (this.resolved)\n return this;\n if (this.root instanceof Root)\n this.resolved = true; // only if part of a root\n return this;\n};\n\n/**\n * Gets an option value.\n * @param {string} name Option name\n * @returns {*} Option value or `undefined` if not set\n */\nReflectionObject.prototype.getOption = function getOption(name) {\n if (this.options)\n return this.options[name];\n return undefined;\n};\n\n/**\n * Sets an option.\n * @param {string} name Option name\n * @param {*} value Option value\n * @param {boolean} [ifNotSet] Sets the option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOption = function setOption(name, value, ifNotSet) {\n if (!ifNotSet || !this.options || this.options[name] === undefined)\n (this.options || (this.options = {}))[name] = value;\n return this;\n};\n\n/**\n * Sets a parsed option.\n * @param {string} name parsed Option name\n * @param {*} value Option value\n * @param {string} propName dot '.' delimited full path of property within the option to set. if undefined\\empty, will add a new option with that value\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setParsedOption = function setParsedOption(name, value, propName) {\n if (!this.parsedOptions) {\n this.parsedOptions = [];\n }\n var parsedOptions = this.parsedOptions;\n if (propName) {\n // If setting a sub property of an option then try to merge it\n // with an existing option\n var opt = parsedOptions.find(function (opt) {\n return Object.prototype.hasOwnProperty.call(opt, name);\n });\n if (opt) {\n // If we found an existing option - just merge the property value\n var newValue = opt[name];\n util.setProperty(newValue, propName, value);\n } else {\n // otherwise, create a new option, set it's property and add it to the list\n opt = {};\n opt[name] = util.setProperty({}, propName, value);\n parsedOptions.push(opt);\n }\n } else {\n // Always create a new option when setting the value of the option itself\n var newOpt = {};\n newOpt[name] = value;\n parsedOptions.push(newOpt);\n }\n return this;\n};\n\n/**\n * Sets multiple options.\n * @param {Object.} options Options to set\n * @param {boolean} [ifNotSet] Sets an option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOptions = function setOptions(options, ifNotSet) {\n if (options)\n for (var keys = Object.keys(options), i = 0; i < keys.length; ++i)\n this.setOption(keys[i], options[keys[i]], ifNotSet);\n return this;\n};\n\n/**\n * Converts this instance to its string representation.\n * @returns {string} Class name[, space, full name]\n */\nReflectionObject.prototype.toString = function toString() {\n var className = this.constructor.className,\n fullName = this.fullName;\n if (fullName.length)\n return className + \" \" + fullName;\n return className;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nReflectionObject._configure = function(Root_) {\n Root = Root_;\n};\n","\"use strict\";\nmodule.exports = OneOf;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((OneOf.prototype = Object.create(ReflectionObject.prototype)).constructor = OneOf).className = \"OneOf\";\n\nvar Field = require(\"./field\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new oneof instance.\n * @classdesc Reflected oneof.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Oneof name\n * @param {string[]|Object.} [fieldNames] Field names\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction OneOf(name, fieldNames, options, comment) {\n if (!Array.isArray(fieldNames)) {\n options = fieldNames;\n fieldNames = undefined;\n }\n ReflectionObject.call(this, name, options);\n\n /* istanbul ignore if */\n if (!(fieldNames === undefined || Array.isArray(fieldNames)))\n throw TypeError(\"fieldNames must be an Array\");\n\n /**\n * Field names that belong to this oneof.\n * @type {string[]}\n */\n this.oneof = fieldNames || []; // toJSON, marker\n\n /**\n * Fields that belong to this oneof as an array for iteration.\n * @type {Field[]}\n * @readonly\n */\n this.fieldsArray = []; // declared readonly for conformance, possibly not yet added to parent\n\n /**\n * Comment for this field.\n * @type {string|null}\n */\n this.comment = comment;\n}\n\n/**\n * Oneof descriptor.\n * @interface IOneOf\n * @property {Array.} oneof Oneof field names\n * @property {Object.} [options] Oneof options\n */\n\n/**\n * Constructs a oneof from a oneof descriptor.\n * @param {string} name Oneof name\n * @param {IOneOf} json Oneof descriptor\n * @returns {OneOf} Created oneof\n * @throws {TypeError} If arguments are invalid\n */\nOneOf.fromJSON = function fromJSON(name, json) {\n return new OneOf(name, json.oneof, json.options, json.comment);\n};\n\n/**\n * Converts this oneof to a oneof descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IOneOf} Oneof descriptor\n */\nOneOf.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , this.options,\n \"oneof\" , this.oneof,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Adds the fields of the specified oneof to the parent if not already done so.\n * @param {OneOf} oneof The oneof\n * @returns {undefined}\n * @inner\n * @ignore\n */\nfunction addFieldsToParent(oneof) {\n if (oneof.parent)\n for (var i = 0; i < oneof.fieldsArray.length; ++i)\n if (!oneof.fieldsArray[i].parent)\n oneof.parent.add(oneof.fieldsArray[i]);\n}\n\n/**\n * Adds a field to this oneof and removes it from its current parent, if any.\n * @param {Field} field Field to add\n * @returns {OneOf} `this`\n */\nOneOf.prototype.add = function add(field) {\n\n /* istanbul ignore if */\n if (!(field instanceof Field))\n throw TypeError(\"field must be a Field\");\n\n if (field.parent && field.parent !== this.parent)\n field.parent.remove(field);\n this.oneof.push(field.name);\n this.fieldsArray.push(field);\n field.partOf = this; // field.parent remains null\n addFieldsToParent(this);\n return this;\n};\n\n/**\n * Removes a field from this oneof and puts it back to the oneof's parent.\n * @param {Field} field Field to remove\n * @returns {OneOf} `this`\n */\nOneOf.prototype.remove = function remove(field) {\n\n /* istanbul ignore if */\n if (!(field instanceof Field))\n throw TypeError(\"field must be a Field\");\n\n var index = this.fieldsArray.indexOf(field);\n\n /* istanbul ignore if */\n if (index < 0)\n throw Error(field + \" is not a member of \" + this);\n\n this.fieldsArray.splice(index, 1);\n index = this.oneof.indexOf(field.name);\n\n /* istanbul ignore else */\n if (index > -1) // theoretical\n this.oneof.splice(index, 1);\n\n field.partOf = null;\n return this;\n};\n\n/**\n * @override\n */\nOneOf.prototype.onAdd = function onAdd(parent) {\n ReflectionObject.prototype.onAdd.call(this, parent);\n var self = this;\n // Collect present fields\n for (var i = 0; i < this.oneof.length; ++i) {\n var field = parent.get(this.oneof[i]);\n if (field && !field.partOf) {\n field.partOf = self;\n self.fieldsArray.push(field);\n }\n }\n // Add not yet present fields\n addFieldsToParent(this);\n};\n\n/**\n * @override\n */\nOneOf.prototype.onRemove = function onRemove(parent) {\n for (var i = 0, field; i < this.fieldsArray.length; ++i)\n if ((field = this.fieldsArray[i]).parent)\n field.parent.remove(field);\n ReflectionObject.prototype.onRemove.call(this, parent);\n};\n\n/**\n * Decorator function as returned by {@link OneOf.d} (TypeScript).\n * @typedef OneOfDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} oneofName OneOf name\n * @returns {undefined}\n */\n\n/**\n * OneOf decorator (TypeScript).\n * @function\n * @param {...string} fieldNames Field names\n * @returns {OneOfDecorator} Decorator function\n * @template T extends string\n */\nOneOf.d = function decorateOneOf() {\n var fieldNames = new Array(arguments.length),\n index = 0;\n while (index < arguments.length)\n fieldNames[index] = arguments[index++];\n return function oneOfDecorator(prototype, oneofName) {\n util.decorateType(prototype.constructor)\n .add(new OneOf(oneofName, fieldNames));\n Object.defineProperty(prototype, oneofName, {\n get: util.oneOfGetter(fieldNames),\n set: util.oneOfSetter(fieldNames)\n });\n };\n};\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Root;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Root.prototype = Object.create(Namespace.prototype)).constructor = Root).className = \"Root\";\n\nvar Field = require(\"./field\"),\n Enum = require(\"./enum\"),\n OneOf = require(\"./oneof\"),\n util = require(\"./util\");\n\nvar Type, // cyclic\n parse, // might be excluded\n common; // \"\n\n/**\n * Constructs a new root namespace instance.\n * @classdesc Root namespace wrapping all types, enums, services, sub-namespaces etc. that belong together.\n * @extends NamespaceBase\n * @constructor\n * @param {Object.} [options] Top level options\n */\nfunction Root(options) {\n Namespace.call(this, \"\", options);\n\n /**\n * Deferred extension fields.\n * @type {Field[]}\n */\n this.deferred = [];\n\n /**\n * Resolved file names of loaded files.\n * @type {string[]}\n */\n this.files = [];\n}\n\n/**\n * Loads a namespace descriptor into a root namespace.\n * @param {INamespace} json Nameespace descriptor\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted\n * @returns {Root} Root namespace\n */\nRoot.fromJSON = function fromJSON(json, root) {\n if (!root)\n root = new Root();\n if (json.options)\n root.setOptions(json.options);\n return root.addJSON(json.nested);\n};\n\n/**\n * Resolves the path of an imported file, relative to the importing origin.\n * This method exists so you can override it with your own logic in case your imports are scattered over multiple directories.\n * @function\n * @param {string} origin The file name of the importing file\n * @param {string} target The file name being imported\n * @returns {string|null} Resolved path to `target` or `null` to skip the file\n */\nRoot.prototype.resolvePath = util.path.resolve;\n\n/**\n * Fetch content from file path or url\n * This method exists so you can override it with your own logic.\n * @function\n * @param {string} path File path or url\n * @param {FetchCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.fetch = util.fetch;\n\n// A symbol-like function to safely signal synchronous loading\n/* istanbul ignore next */\nfunction SYNC() {} // eslint-disable-line no-empty-function\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} options Parse options\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.load = function load(filename, options, callback) {\n if (typeof options === \"function\") {\n callback = options;\n options = undefined;\n }\n var self = this;\n if (!callback)\n return util.asPromise(load, self, filename, options);\n\n var sync = callback === SYNC; // undocumented\n\n // Finishes loading by calling the callback (exactly once)\n function finish(err, root) {\n /* istanbul ignore if */\n if (!callback)\n return;\n var cb = callback;\n callback = null;\n if (sync)\n throw err;\n cb(err, root);\n }\n\n // Bundled definition existence checking\n function getBundledFileName(filename) {\n var idx = filename.lastIndexOf(\"google/protobuf/\");\n if (idx > -1) {\n var altname = filename.substring(idx);\n if (altname in common) return altname;\n }\n return null;\n }\n\n // Processes a single file\n function process(filename, source) {\n try {\n if (util.isString(source) && source.charAt(0) === \"{\")\n source = JSON.parse(source);\n if (!util.isString(source))\n self.setOptions(source.options).addJSON(source.nested);\n else {\n parse.filename = filename;\n var parsed = parse(source, self, options),\n resolved,\n i = 0;\n if (parsed.imports)\n for (; i < parsed.imports.length; ++i)\n if (resolved = getBundledFileName(parsed.imports[i]) || self.resolvePath(filename, parsed.imports[i]))\n fetch(resolved);\n if (parsed.weakImports)\n for (i = 0; i < parsed.weakImports.length; ++i)\n if (resolved = getBundledFileName(parsed.weakImports[i]) || self.resolvePath(filename, parsed.weakImports[i]))\n fetch(resolved, true);\n }\n } catch (err) {\n finish(err);\n }\n if (!sync && !queued)\n finish(null, self); // only once anyway\n }\n\n // Fetches a single file\n function fetch(filename, weak) {\n\n // Skip if already loaded / attempted\n if (self.files.indexOf(filename) > -1)\n return;\n self.files.push(filename);\n\n // Shortcut bundled definitions\n if (filename in common) {\n if (sync)\n process(filename, common[filename]);\n else {\n ++queued;\n setTimeout(function() {\n --queued;\n process(filename, common[filename]);\n });\n }\n return;\n }\n\n // Otherwise fetch from disk or network\n if (sync) {\n var source;\n try {\n source = util.fs.readFileSync(filename).toString(\"utf8\");\n } catch (err) {\n if (!weak)\n finish(err);\n return;\n }\n process(filename, source);\n } else {\n ++queued;\n self.fetch(filename, function(err, source) {\n --queued;\n /* istanbul ignore if */\n if (!callback)\n return; // terminated meanwhile\n if (err) {\n /* istanbul ignore else */\n if (!weak)\n finish(err);\n else if (!queued) // can't be covered reliably\n finish(null, self);\n return;\n }\n process(filename, source);\n });\n }\n }\n var queued = 0;\n\n // Assembling the root namespace doesn't require working type\n // references anymore, so we can load everything in parallel\n if (util.isString(filename))\n filename = [ filename ];\n for (var i = 0, resolved; i < filename.length; ++i)\n if (resolved = self.resolvePath(\"\", filename[i]))\n fetch(resolved);\n\n if (sync)\n return self;\n if (!queued)\n finish(null, self);\n return undefined;\n};\n// function load(filename:string, options:IParseOptions, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and returns a promise.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Promise} Promise\n * @variation 3\n */\n// function load(filename:string, [options:IParseOptions]):Promise\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into this root namespace (node only).\n * @function Root#loadSync\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n */\nRoot.prototype.loadSync = function loadSync(filename, options) {\n if (!util.isNode)\n throw Error(\"not supported\");\n return this.load(filename, options, SYNC);\n};\n\n/**\n * @override\n */\nRoot.prototype.resolveAll = function resolveAll() {\n if (this.deferred.length)\n throw Error(\"unresolvable extensions: \" + this.deferred.map(function(field) {\n return \"'extend \" + field.extend + \"' in \" + field.parent.fullName;\n }).join(\", \"));\n return Namespace.prototype.resolveAll.call(this);\n};\n\n// only uppercased (and thus conflict-free) children are exposed, see below\nvar exposeRe = /^[A-Z]/;\n\n/**\n * Handles a deferred declaring extension field by creating a sister field to represent it within its extended type.\n * @param {Root} root Root instance\n * @param {Field} field Declaring extension field witin the declaring type\n * @returns {boolean} `true` if successfully added to the extended type, `false` otherwise\n * @inner\n * @ignore\n */\nfunction tryHandleExtension(root, field) {\n var extendedType = field.parent.lookup(field.extend);\n if (extendedType) {\n var sisterField = new Field(field.fullName, field.id, field.type, field.rule, undefined, field.options);\n sisterField.declaringField = field;\n field.extensionField = sisterField;\n extendedType.add(sisterField);\n return true;\n }\n return false;\n}\n\n/**\n * Called when any object is added to this root or its sub-namespaces.\n * @param {ReflectionObject} object Object added\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleAdd = function _handleAdd(object) {\n if (object instanceof Field) {\n\n if (/* an extension field (implies not part of a oneof) */ object.extend !== undefined && /* not already handled */ !object.extensionField)\n if (!tryHandleExtension(this, object))\n this.deferred.push(object);\n\n } else if (object instanceof Enum) {\n\n if (exposeRe.test(object.name))\n object.parent[object.name] = object.values; // expose enum values as property of its parent\n\n } else if (!(object instanceof OneOf)) /* everything else is a namespace */ {\n\n if (object instanceof Type) // Try to handle any deferred extensions\n for (var i = 0; i < this.deferred.length;)\n if (tryHandleExtension(this, this.deferred[i]))\n this.deferred.splice(i, 1);\n else\n ++i;\n for (var j = 0; j < /* initializes */ object.nestedArray.length; ++j) // recurse into the namespace\n this._handleAdd(object._nestedArray[j]);\n if (exposeRe.test(object.name))\n object.parent[object.name] = object; // expose namespace as property of its parent\n }\n\n // The above also adds uppercased (and thus conflict-free) nested types, services and enums as\n // properties of namespaces just like static code does. This allows using a .d.ts generated for\n // a static module with reflection-based solutions where the condition is met.\n};\n\n/**\n * Called when any object is removed from this root or its sub-namespaces.\n * @param {ReflectionObject} object Object removed\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleRemove = function _handleRemove(object) {\n if (object instanceof Field) {\n\n if (/* an extension field */ object.extend !== undefined) {\n if (/* already handled */ object.extensionField) { // remove its sister field\n object.extensionField.parent.remove(object.extensionField);\n object.extensionField = null;\n } else { // cancel the extension\n var index = this.deferred.indexOf(object);\n /* istanbul ignore else */\n if (index > -1)\n this.deferred.splice(index, 1);\n }\n }\n\n } else if (object instanceof Enum) {\n\n if (exposeRe.test(object.name))\n delete object.parent[object.name]; // unexpose enum values\n\n } else if (object instanceof Namespace) {\n\n for (var i = 0; i < /* initializes */ object.nestedArray.length; ++i) // recurse into the namespace\n this._handleRemove(object._nestedArray[i]);\n\n if (exposeRe.test(object.name))\n delete object.parent[object.name]; // unexpose namespaces\n\n }\n};\n\n// Sets up cyclic dependencies (called in index-light)\nRoot._configure = function(Type_, parse_, common_) {\n Type = Type_;\n parse = parse_;\n common = common_;\n};\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available accross modules.\n * @name roots\n * @type {Object.}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message\n * @template TRes extends Message\n * @type {function}\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod} method Reflected or static method\n * @param {Constructor} requestCtor Request constructor\n * @param {Constructor} responseCtor Response constructor\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message\n * @template TRes extends Message\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\nmodule.exports = Service;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Service.prototype = Object.create(Namespace.prototype)).constructor = Service).className = \"Service\";\n\nvar Method = require(\"./method\"),\n util = require(\"./util\"),\n rpc = require(\"./rpc\");\n\n/**\n * Constructs a new service instance.\n * @classdesc Reflected service.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Service name\n * @param {Object.} [options] Service options\n * @throws {TypeError} If arguments are invalid\n */\nfunction Service(name, options) {\n Namespace.call(this, name, options);\n\n /**\n * Service methods.\n * @type {Object.}\n */\n this.methods = {}; // toJSON, marker\n\n /**\n * Cached methods as an array.\n * @type {Method[]|null}\n * @private\n */\n this._methodsArray = null;\n}\n\n/**\n * Service descriptor.\n * @interface IService\n * @extends INamespace\n * @property {Object.} methods Method descriptors\n */\n\n/**\n * Constructs a service from a service descriptor.\n * @param {string} name Service name\n * @param {IService} json Service descriptor\n * @returns {Service} Created service\n * @throws {TypeError} If arguments are invalid\n */\nService.fromJSON = function fromJSON(name, json) {\n var service = new Service(name, json.options);\n /* istanbul ignore else */\n if (json.methods)\n for (var names = Object.keys(json.methods), i = 0; i < names.length; ++i)\n service.add(Method.fromJSON(names[i], json.methods[names[i]]));\n if (json.nested)\n service.addJSON(json.nested);\n service.comment = json.comment;\n return service;\n};\n\n/**\n * Converts this service to a service descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IService} Service descriptor\n */\nService.prototype.toJSON = function toJSON(toJSONOptions) {\n var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , inherited && inherited.options || undefined,\n \"methods\" , Namespace.arrayToJSON(this.methodsArray, toJSONOptions) || /* istanbul ignore next */ {},\n \"nested\" , inherited && inherited.nested || undefined,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Methods of this service as an array for iteration.\n * @name Service#methodsArray\n * @type {Method[]}\n * @readonly\n */\nObject.defineProperty(Service.prototype, \"methodsArray\", {\n get: function() {\n return this._methodsArray || (this._methodsArray = util.toArray(this.methods));\n }\n});\n\nfunction clearCache(service) {\n service._methodsArray = null;\n return service;\n}\n\n/**\n * @override\n */\nService.prototype.get = function get(name) {\n return this.methods[name]\n || Namespace.prototype.get.call(this, name);\n};\n\n/**\n * @override\n */\nService.prototype.resolveAll = function resolveAll() {\n var methods = this.methodsArray;\n for (var i = 0; i < methods.length; ++i)\n methods[i].resolve();\n return Namespace.prototype.resolve.call(this);\n};\n\n/**\n * @override\n */\nService.prototype.add = function add(object) {\n\n /* istanbul ignore if */\n if (this.get(object.name))\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n if (object instanceof Method) {\n this.methods[object.name] = object;\n object.parent = this;\n return clearCache(this);\n }\n return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * @override\n */\nService.prototype.remove = function remove(object) {\n if (object instanceof Method) {\n\n /* istanbul ignore if */\n if (this.methods[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.methods[object.name];\n object.parent = null;\n return clearCache(this);\n }\n return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Creates a runtime service using the specified rpc implementation.\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n * @returns {rpc.Service} RPC service. Useful where requests and/or responses are streamed.\n */\nService.prototype.create = function create(rpcImpl, requestDelimited, responseDelimited) {\n var rpcService = new rpc.Service(rpcImpl, requestDelimited, responseDelimited);\n for (var i = 0, method; i < /* initializes */ this.methodsArray.length; ++i) {\n var methodName = util.lcFirst((method = this._methodsArray[i]).resolve().name).replace(/[^$\\w_]/g, \"\");\n rpcService[methodName] = util.codegen([\"r\",\"c\"], util.isReserved(methodName) ? methodName + \"_\" : methodName)(\"return this.rpcCall(m,q,s,r,c)\")({\n m: method,\n q: method.resolvedRequestType.ctor,\n s: method.resolvedResponseType.ctor\n });\n }\n return rpcService;\n};\n","\"use strict\";\nmodule.exports = Type;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Type.prototype = Object.create(Namespace.prototype)).constructor = Type).className = \"Type\";\n\nvar Enum = require(\"./enum\"),\n OneOf = require(\"./oneof\"),\n Field = require(\"./field\"),\n MapField = require(\"./mapfield\"),\n Service = require(\"./service\"),\n Message = require(\"./message\"),\n Reader = require(\"./reader\"),\n Writer = require(\"./writer\"),\n util = require(\"./util\"),\n encoder = require(\"./encoder\"),\n decoder = require(\"./decoder\"),\n verifier = require(\"./verifier\"),\n converter = require(\"./converter\"),\n wrappers = require(\"./wrappers\");\n\n/**\n * Constructs a new reflected message type instance.\n * @classdesc Reflected message type.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Message name\n * @param {Object.} [options] Declared options\n */\nfunction Type(name, options) {\n Namespace.call(this, name, options);\n\n /**\n * Message fields.\n * @type {Object.}\n */\n this.fields = {}; // toJSON, marker\n\n /**\n * Oneofs declared within this namespace, if any.\n * @type {Object.}\n */\n this.oneofs = undefined; // toJSON\n\n /**\n * Extension ranges, if any.\n * @type {number[][]}\n */\n this.extensions = undefined; // toJSON\n\n /**\n * Reserved ranges, if any.\n * @type {Array.}\n */\n this.reserved = undefined; // toJSON\n\n /*?\n * Whether this type is a legacy group.\n * @type {boolean|undefined}\n */\n this.group = undefined; // toJSON\n\n /**\n * Cached fields by id.\n * @type {Object.|null}\n * @private\n */\n this._fieldsById = null;\n\n /**\n * Cached fields as an array.\n * @type {Field[]|null}\n * @private\n */\n this._fieldsArray = null;\n\n /**\n * Cached oneofs as an array.\n * @type {OneOf[]|null}\n * @private\n */\n this._oneofsArray = null;\n\n /**\n * Cached constructor.\n * @type {Constructor<{}>}\n * @private\n */\n this._ctor = null;\n}\n\nObject.defineProperties(Type.prototype, {\n\n /**\n * Message fields by id.\n * @name Type#fieldsById\n * @type {Object.}\n * @readonly\n */\n fieldsById: {\n get: function() {\n\n /* istanbul ignore if */\n if (this._fieldsById)\n return this._fieldsById;\n\n this._fieldsById = {};\n for (var names = Object.keys(this.fields), i = 0; i < names.length; ++i) {\n var field = this.fields[names[i]],\n id = field.id;\n\n /* istanbul ignore if */\n if (this._fieldsById[id])\n throw Error(\"duplicate id \" + id + \" in \" + this);\n\n this._fieldsById[id] = field;\n }\n return this._fieldsById;\n }\n },\n\n /**\n * Fields of this message as an array for iteration.\n * @name Type#fieldsArray\n * @type {Field[]}\n * @readonly\n */\n fieldsArray: {\n get: function() {\n return this._fieldsArray || (this._fieldsArray = util.toArray(this.fields));\n }\n },\n\n /**\n * Oneofs of this message as an array for iteration.\n * @name Type#oneofsArray\n * @type {OneOf[]}\n * @readonly\n */\n oneofsArray: {\n get: function() {\n return this._oneofsArray || (this._oneofsArray = util.toArray(this.oneofs));\n }\n },\n\n /**\n * The registered constructor, if any registered, otherwise a generic constructor.\n * Assigning a function replaces the internal constructor. If the function does not extend {@link Message} yet, its prototype will be setup accordingly and static methods will be populated. If it already extends {@link Message}, it will just replace the internal constructor.\n * @name Type#ctor\n * @type {Constructor<{}>}\n */\n ctor: {\n get: function() {\n return this._ctor || (this.ctor = Type.generateConstructor(this)());\n },\n set: function(ctor) {\n\n // Ensure proper prototype\n var prototype = ctor.prototype;\n if (!(prototype instanceof Message)) {\n (ctor.prototype = new Message()).constructor = ctor;\n util.merge(ctor.prototype, prototype);\n }\n\n // Classes and messages reference their reflected type\n ctor.$type = ctor.prototype.$type = this;\n\n // Mix in static methods\n util.merge(ctor, Message, true);\n\n this._ctor = ctor;\n\n // Messages have non-enumerable default values on their prototype\n var i = 0;\n for (; i < /* initializes */ this.fieldsArray.length; ++i)\n this._fieldsArray[i].resolve(); // ensures a proper value\n\n // Messages have non-enumerable getters and setters for each virtual oneof field\n var ctorProperties = {};\n for (i = 0; i < /* initializes */ this.oneofsArray.length; ++i)\n ctorProperties[this._oneofsArray[i].resolve().name] = {\n get: util.oneOfGetter(this._oneofsArray[i].oneof),\n set: util.oneOfSetter(this._oneofsArray[i].oneof)\n };\n if (i)\n Object.defineProperties(ctor.prototype, ctorProperties);\n }\n }\n});\n\n/**\n * Generates a constructor function for the specified type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nType.generateConstructor = function generateConstructor(mtype) {\n /* eslint-disable no-unexpected-multiline */\n var gen = util.codegen([\"p\"], mtype.name);\n // explicitly initialize mutable object/array fields so that these aren't just inherited from the prototype\n for (var i = 0, field; i < mtype.fieldsArray.length; ++i)\n if ((field = mtype._fieldsArray[i]).map) gen\n (\"this%s={}\", util.safeProp(field.name));\n else if (field.repeated) gen\n (\"this%s=[]\", util.safeProp(field.name));\n return gen\n (\"if(p)for(var ks=Object.keys(p),i=0;i} [oneofs] Oneof descriptors\n * @property {Object.} fields Field descriptors\n * @property {number[][]} [extensions] Extension ranges\n * @property {number[][]} [reserved] Reserved ranges\n * @property {boolean} [group=false] Whether a legacy group or not\n */\n\n/**\n * Creates a message type from a message type descriptor.\n * @param {string} name Message name\n * @param {IType} json Message type descriptor\n * @returns {Type} Created message type\n */\nType.fromJSON = function fromJSON(name, json) {\n var type = new Type(name, json.options);\n type.extensions = json.extensions;\n type.reserved = json.reserved;\n var names = Object.keys(json.fields),\n i = 0;\n for (; i < names.length; ++i)\n type.add(\n ( typeof json.fields[names[i]].keyType !== \"undefined\"\n ? MapField.fromJSON\n : Field.fromJSON )(names[i], json.fields[names[i]])\n );\n if (json.oneofs)\n for (names = Object.keys(json.oneofs), i = 0; i < names.length; ++i)\n type.add(OneOf.fromJSON(names[i], json.oneofs[names[i]]));\n if (json.nested)\n for (names = Object.keys(json.nested), i = 0; i < names.length; ++i) {\n var nested = json.nested[names[i]];\n type.add( // most to least likely\n ( nested.id !== undefined\n ? Field.fromJSON\n : nested.fields !== undefined\n ? Type.fromJSON\n : nested.values !== undefined\n ? Enum.fromJSON\n : nested.methods !== undefined\n ? Service.fromJSON\n : Namespace.fromJSON )(names[i], nested)\n );\n }\n if (json.extensions && json.extensions.length)\n type.extensions = json.extensions;\n if (json.reserved && json.reserved.length)\n type.reserved = json.reserved;\n if (json.group)\n type.group = true;\n if (json.comment)\n type.comment = json.comment;\n return type;\n};\n\n/**\n * Converts this message type to a message type descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IType} Message type descriptor\n */\nType.prototype.toJSON = function toJSON(toJSONOptions) {\n var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , inherited && inherited.options || undefined,\n \"oneofs\" , Namespace.arrayToJSON(this.oneofsArray, toJSONOptions),\n \"fields\" , Namespace.arrayToJSON(this.fieldsArray.filter(function(obj) { return !obj.declaringField; }), toJSONOptions) || {},\n \"extensions\" , this.extensions && this.extensions.length ? this.extensions : undefined,\n \"reserved\" , this.reserved && this.reserved.length ? this.reserved : undefined,\n \"group\" , this.group || undefined,\n \"nested\" , inherited && inherited.nested || undefined,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * @override\n */\nType.prototype.resolveAll = function resolveAll() {\n var fields = this.fieldsArray, i = 0;\n while (i < fields.length)\n fields[i++].resolve();\n var oneofs = this.oneofsArray; i = 0;\n while (i < oneofs.length)\n oneofs[i++].resolve();\n return Namespace.prototype.resolveAll.call(this);\n};\n\n/**\n * @override\n */\nType.prototype.get = function get(name) {\n return this.fields[name]\n || this.oneofs && this.oneofs[name]\n || this.nested && this.nested[name]\n || null;\n};\n\n/**\n * Adds a nested object to this type.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name or, if a field, when there is already a field with this id\n */\nType.prototype.add = function add(object) {\n\n if (this.get(object.name))\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n if (object instanceof Field && object.extend === undefined) {\n // NOTE: Extension fields aren't actual fields on the declaring type, but nested objects.\n // The root object takes care of adding distinct sister-fields to the respective extended\n // type instead.\n\n // avoids calling the getter if not absolutely necessary because it's called quite frequently\n if (this._fieldsById ? /* istanbul ignore next */ this._fieldsById[object.id] : this.fieldsById[object.id])\n throw Error(\"duplicate id \" + object.id + \" in \" + this);\n if (this.isReservedId(object.id))\n throw Error(\"id \" + object.id + \" is reserved in \" + this);\n if (this.isReservedName(object.name))\n throw Error(\"name '\" + object.name + \"' is reserved in \" + this);\n\n if (object.parent)\n object.parent.remove(object);\n this.fields[object.name] = object;\n object.message = this;\n object.onAdd(this);\n return clearCache(this);\n }\n if (object instanceof OneOf) {\n if (!this.oneofs)\n this.oneofs = {};\n this.oneofs[object.name] = object;\n object.onAdd(this);\n return clearCache(this);\n }\n return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * Removes a nested object from this type.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this type\n */\nType.prototype.remove = function remove(object) {\n if (object instanceof Field && object.extend === undefined) {\n // See Type#add for the reason why extension fields are excluded here.\n\n /* istanbul ignore if */\n if (!this.fields || this.fields[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.fields[object.name];\n object.parent = null;\n object.onRemove(this);\n return clearCache(this);\n }\n if (object instanceof OneOf) {\n\n /* istanbul ignore if */\n if (!this.oneofs || this.oneofs[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.oneofs[object.name];\n object.parent = null;\n object.onRemove(this);\n return clearCache(this);\n }\n return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedId = function isReservedId(id) {\n return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedName = function isReservedName(name) {\n return Namespace.isReservedName(this.reserved, name);\n};\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.} [properties] Properties to set\n * @returns {Message<{}>} Message instance\n */\nType.prototype.create = function create(properties) {\n return new this.ctor(properties);\n};\n\n/**\n * Sets up {@link Type#encode|encode}, {@link Type#decode|decode} and {@link Type#verify|verify}.\n * @returns {Type} `this`\n */\nType.prototype.setup = function setup() {\n // Sets up everything at once so that the prototype chain does not have to be re-evaluated\n // multiple times (V8, soft-deopt prototype-check).\n\n var fullName = this.fullName,\n types = [];\n for (var i = 0; i < /* initializes */ this.fieldsArray.length; ++i)\n types.push(this._fieldsArray[i].resolve().resolvedType);\n\n // Replace setup methods with type-specific generated functions\n this.encode = encoder(this)({\n Writer : Writer,\n types : types,\n util : util\n });\n this.decode = decoder(this)({\n Reader : Reader,\n types : types,\n util : util\n });\n this.verify = verifier(this)({\n types : types,\n util : util\n });\n this.fromObject = converter.fromObject(this)({\n types : types,\n util : util\n });\n this.toObject = converter.toObject(this)({\n types : types,\n util : util\n });\n\n // Inject custom wrappers for common types\n var wrapper = wrappers[fullName];\n if (wrapper) {\n var originalThis = Object.create(this);\n // if (wrapper.fromObject) {\n originalThis.fromObject = this.fromObject;\n this.fromObject = wrapper.fromObject.bind(originalThis);\n // }\n // if (wrapper.toObject) {\n originalThis.toObject = this.toObject;\n this.toObject = wrapper.toObject.bind(originalThis);\n // }\n }\n\n return this;\n};\n\n/**\n * Encodes a message of this type. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encode = function encode_setup(message, writer) {\n return this.setup().encode(message, writer); // overrides this method\n};\n\n/**\n * Encodes a message of this type preceeded by its byte length as a varint. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();\n};\n\n/**\n * Decodes a message of this type.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Length of the message, if known beforehand\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError<{}>} If required fields are missing\n */\nType.prototype.decode = function decode_setup(reader, length) {\n return this.setup().decode(reader, length); // overrides this method\n};\n\n/**\n * Decodes a message of this type preceeded by its byte length as a varint.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError} If required fields are missing\n */\nType.prototype.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof Reader))\n reader = Reader.create(reader);\n return this.decode(reader, reader.uint32());\n};\n\n/**\n * Verifies that field values are valid and that required fields are present.\n * @param {Object.} message Plain object to verify\n * @returns {null|string} `null` if valid, otherwise the reason why it is not\n */\nType.prototype.verify = function verify_setup(message) {\n return this.setup().verify(message); // overrides this method\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.} object Plain object to convert\n * @returns {Message<{}>} Message instance\n */\nType.prototype.fromObject = function fromObject(object) {\n return this.setup().fromObject(object);\n};\n\n/**\n * Conversion options as used by {@link Type#toObject} and {@link Message.toObject}.\n * @interface IConversionOptions\n * @property {Function} [longs] Long conversion type.\n * Valid values are `String` and `Number` (the global types).\n * Defaults to copy the present value, which is a possibly unsafe number without and a {@link Long} with a long library.\n * @property {Function} [enums] Enum value conversion type.\n * Only valid value is `String` (the global type).\n * Defaults to copy the present value, which is the numeric id.\n * @property {Function} [bytes] Bytes value conversion type.\n * Valid values are `Array` and (a base64 encoded) `String` (the global types).\n * Defaults to copy the present value, which usually is a Buffer under node and an Uint8Array in the browser.\n * @property {boolean} [defaults=false] Also sets default values on the resulting object\n * @property {boolean} [arrays=false] Sets empty arrays for missing repeated fields even if `defaults=false`\n * @property {boolean} [objects=false] Sets empty objects for missing map fields even if `defaults=false`\n * @property {boolean} [oneofs=false] Includes virtual oneof properties set to the present field's name, if any\n * @property {boolean} [json=false] Performs additional JSON compatibility conversions, i.e. NaN and Infinity to strings\n */\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\nType.prototype.toObject = function toObject(message, options) {\n return this.setup().toObject(message, options);\n};\n\n/**\n * Decorator function as returned by {@link Type.d} (TypeScript).\n * @typedef TypeDecorator\n * @type {function}\n * @param {Constructor} target Target constructor\n * @returns {undefined}\n * @template T extends Message\n */\n\n/**\n * Type decorator (TypeScript).\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {TypeDecorator} Decorator function\n * @template T extends Message\n */\nType.d = function decorateType(typeName) {\n return function typeDecorator(target) {\n util.decorateType(target, typeName);\n };\n};\n","\"use strict\";\n\n/**\n * Common type constants.\n * @namespace\n */\nvar types = exports;\n\nvar util = require(\"./util\");\n\nvar s = [\n \"double\", // 0\n \"float\", // 1\n \"int32\", // 2\n \"uint32\", // 3\n \"sint32\", // 4\n \"fixed32\", // 5\n \"sfixed32\", // 6\n \"int64\", // 7\n \"uint64\", // 8\n \"sint64\", // 9\n \"fixed64\", // 10\n \"sfixed64\", // 11\n \"bool\", // 12\n \"string\", // 13\n \"bytes\" // 14\n];\n\nfunction bake(values, offset) {\n var i = 0, o = {};\n offset |= 0;\n while (i < values.length) o[s[i + offset]] = values[i++];\n return o;\n}\n\n/**\n * Basic type wire types.\n * @type {Object.}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n * @property {number} bytes=2 Ldelim wire type\n */\ntypes.basic = bake([\n /* double */ 1,\n /* float */ 5,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0,\n /* string */ 2,\n /* bytes */ 2\n]);\n\n/**\n * Basic type defaults.\n * @type {Object.}\n * @const\n * @property {number} double=0 Double default\n * @property {number} float=0 Float default\n * @property {number} int32=0 Int32 default\n * @property {number} uint32=0 Uint32 default\n * @property {number} sint32=0 Sint32 default\n * @property {number} fixed32=0 Fixed32 default\n * @property {number} sfixed32=0 Sfixed32 default\n * @property {number} int64=0 Int64 default\n * @property {number} uint64=0 Uint64 default\n * @property {number} sint64=0 Sint32 default\n * @property {number} fixed64=0 Fixed64 default\n * @property {number} sfixed64=0 Sfixed64 default\n * @property {boolean} bool=false Bool default\n * @property {string} string=\"\" String default\n * @property {Array.} bytes=Array(0) Bytes default\n * @property {null} message=null Message default\n */\ntypes.defaults = bake([\n /* double */ 0,\n /* float */ 0,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 0,\n /* sfixed32 */ 0,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 0,\n /* sfixed64 */ 0,\n /* bool */ false,\n /* string */ \"\",\n /* bytes */ util.emptyArray,\n /* message */ null\n]);\n\n/**\n * Basic long type wire types.\n * @type {Object.}\n * @const\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n */\ntypes.long = bake([\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1\n], 7);\n\n/**\n * Allowed types for map keys with their associated wire type.\n * @type {Object.}\n * @const\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n */\ntypes.mapKey = bake([\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0,\n /* string */ 2\n], 2);\n\n/**\n * Allowed types for packed repeated fields with their associated wire type.\n * @type {Object.}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n */\ntypes.packed = bake([\n /* double */ 1,\n /* float */ 5,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0\n]);\n","\"use strict\";\n\n/**\n * Various utility functions.\n * @namespace\n */\nvar util = module.exports = require(\"./util/minimal\");\n\nvar roots = require(\"./roots\");\n\nvar Type, // cyclic\n Enum;\n\nutil.codegen = require(\"@protobufjs/codegen\");\nutil.fetch = require(\"@protobufjs/fetch\");\nutil.path = require(\"@protobufjs/path\");\n\n/**\n * Node's fs module if available.\n * @type {Object.}\n */\nutil.fs = util.inquire(\"fs\");\n\n/**\n * Converts an object's values to an array.\n * @param {Object.} object Object to convert\n * @returns {Array.<*>} Converted array\n */\nutil.toArray = function toArray(object) {\n if (object) {\n var keys = Object.keys(object),\n array = new Array(keys.length),\n index = 0;\n while (index < keys.length)\n array[index] = object[keys[index++]];\n return array;\n }\n return [];\n};\n\n/**\n * Converts an array of keys immediately followed by their respective value to an object, omitting undefined values.\n * @param {Array.<*>} array Array to convert\n * @returns {Object.} Converted object\n */\nutil.toObject = function toObject(array) {\n var object = {},\n index = 0;\n while (index < array.length) {\n var key = array[index++],\n val = array[index++];\n if (val !== undefined)\n object[key] = val;\n }\n return object;\n};\n\nvar safePropBackslashRe = /\\\\/g,\n safePropQuoteRe = /\"/g;\n\n/**\n * Tests whether the specified name is a reserved word in JS.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nutil.isReserved = function isReserved(name) {\n return /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$/.test(name);\n};\n\n/**\n * Returns a safe property accessor for the specified property name.\n * @param {string} prop Property name\n * @returns {string} Safe accessor\n */\nutil.safeProp = function safeProp(prop) {\n if (!/^[$\\w_]+$/.test(prop) || util.isReserved(prop))\n return \"[\\\"\" + prop.replace(safePropBackslashRe, \"\\\\\\\\\").replace(safePropQuoteRe, \"\\\\\\\"\") + \"\\\"]\";\n return \".\" + prop;\n};\n\n/**\n * Converts the first character of a string to upper case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.ucFirst = function ucFirst(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n};\n\nvar camelCaseRe = /_([a-z])/g;\n\n/**\n * Converts a string to camel case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.camelCase = function camelCase(str) {\n return str.substring(0, 1)\n + str.substring(1)\n .replace(camelCaseRe, function($0, $1) { return $1.toUpperCase(); });\n};\n\n/**\n * Compares reflected fields by id.\n * @param {Field} a First field\n * @param {Field} b Second field\n * @returns {number} Comparison value\n */\nutil.compareFieldsById = function compareFieldsById(a, b) {\n return a.id - b.id;\n};\n\n/**\n * Decorator helper for types (TypeScript).\n * @param {Constructor} ctor Constructor function\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {Type} Reflected type\n * @template T extends Message\n * @property {Root} root Decorators root\n */\nutil.decorateType = function decorateType(ctor, typeName) {\n\n /* istanbul ignore if */\n if (ctor.$type) {\n if (typeName && ctor.$type.name !== typeName) {\n util.decorateRoot.remove(ctor.$type);\n ctor.$type.name = typeName;\n util.decorateRoot.add(ctor.$type);\n }\n return ctor.$type;\n }\n\n /* istanbul ignore next */\n if (!Type)\n Type = require(\"./type\");\n\n var type = new Type(typeName || ctor.name);\n util.decorateRoot.add(type);\n type.ctor = ctor; // sets up .encode, .decode etc.\n Object.defineProperty(ctor, \"$type\", { value: type, enumerable: false });\n Object.defineProperty(ctor.prototype, \"$type\", { value: type, enumerable: false });\n return type;\n};\n\nvar decorateEnumIndex = 0;\n\n/**\n * Decorator helper for enums (TypeScript).\n * @param {Object} object Enum object\n * @returns {Enum} Reflected enum\n */\nutil.decorateEnum = function decorateEnum(object) {\n\n /* istanbul ignore if */\n if (object.$type)\n return object.$type;\n\n /* istanbul ignore next */\n if (!Enum)\n Enum = require(\"./enum\");\n\n var enm = new Enum(\"Enum\" + decorateEnumIndex++, object);\n util.decorateRoot.add(enm);\n Object.defineProperty(object, \"$type\", { value: enm, enumerable: false });\n return enm;\n};\n\n\n/**\n * Sets the value of a property by property path. If a value already exists, it is turned to an array\n * @param {Object.} dst Destination object\n * @param {string} path dot '.' delimited path of the property to set\n * @param {Object} value the value to set\n * @returns {Object.} Destination object\n */\nutil.setProperty = function setProperty(dst, path, value) {\n function setProp(dst, path, value) {\n var part = path.shift();\n if (path.length > 0) {\n dst[part] = setProp(dst[part] || {}, path, value);\n } else {\n var prevValue = dst[part];\n if (prevValue)\n value = [].concat(prevValue).concat(value);\n dst[part] = value;\n }\n return dst;\n }\n\n if (typeof dst !== \"object\")\n throw TypeError(\"dst must be an object\");\n if (!path)\n throw TypeError(\"path must be specified\");\n\n path = path.split(\".\");\n return setProp(dst, path, value);\n};\n\n/**\n * Decorator root (TypeScript).\n * @name util.decorateRoot\n * @type {Root}\n * @readonly\n */\nObject.defineProperty(util, \"decorateRoot\", {\n get: function() {\n return roots[\"decorated\"] || (roots[\"decorated\"] = new (require(\"./root\"))());\n }\n});\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.} dst Destination object\n * @param {Object.} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message\n * @constructor\n * @param {string} message Error message\n * @param {Object.} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","\"use strict\";\nmodule.exports = verifier;\n\nvar Enum = require(\"./enum\"),\n util = require(\"./util\");\n\nfunction invalid(field, expected) {\n return field.name + \": \" + expected + (field.repeated && expected !== \"array\" ? \"[]\" : field.map && expected !== \"object\" ? \"{k:\"+field.keyType+\"}\" : \"\") + \" expected\";\n}\n\n/**\n * Generates a partial value verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyValue(gen, field, fieldIndex, ref) {\n /* eslint-disable no-unexpected-multiline */\n if (field.resolvedType) {\n if (field.resolvedType instanceof Enum) { gen\n (\"switch(%s){\", ref)\n (\"default:\")\n (\"return%j\", invalid(field, \"enum value\"));\n for (var keys = Object.keys(field.resolvedType.values), j = 0; j < keys.length; ++j) gen\n (\"case %i:\", field.resolvedType.values[keys[j]]);\n gen\n (\"break\")\n (\"}\");\n } else {\n gen\n (\"{\")\n (\"var e=types[%i].verify(%s);\", fieldIndex, ref)\n (\"if(e)\")\n (\"return%j+e\", field.name + \".\")\n (\"}\");\n }\n } else {\n switch (field.type) {\n case \"int32\":\n case \"uint32\":\n case \"sint32\":\n case \"fixed32\":\n case \"sfixed32\": gen\n (\"if(!util.isInteger(%s))\", ref)\n (\"return%j\", invalid(field, \"integer\"));\n break;\n case \"int64\":\n case \"uint64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))\", ref, ref, ref, ref)\n (\"return%j\", invalid(field, \"integer|Long\"));\n break;\n case \"float\":\n case \"double\": gen\n (\"if(typeof %s!==\\\"number\\\")\", ref)\n (\"return%j\", invalid(field, \"number\"));\n break;\n case \"bool\": gen\n (\"if(typeof %s!==\\\"boolean\\\")\", ref)\n (\"return%j\", invalid(field, \"boolean\"));\n break;\n case \"string\": gen\n (\"if(!util.isString(%s))\", ref)\n (\"return%j\", invalid(field, \"string\"));\n break;\n case \"bytes\": gen\n (\"if(!(%s&&typeof %s.length===\\\"number\\\"||util.isString(%s)))\", ref, ref, ref)\n (\"return%j\", invalid(field, \"buffer\"));\n break;\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a partial key verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyKey(gen, field, ref) {\n /* eslint-disable no-unexpected-multiline */\n switch (field.keyType) {\n case \"int32\":\n case \"uint32\":\n case \"sint32\":\n case \"fixed32\":\n case \"sfixed32\": gen\n (\"if(!util.key32Re.test(%s))\", ref)\n (\"return%j\", invalid(field, \"integer key\"));\n break;\n case \"int64\":\n case \"uint64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(!util.key64Re.test(%s))\", ref) // see comment above: x is ok, d is not\n (\"return%j\", invalid(field, \"integer|Long key\"));\n break;\n case \"bool\": gen\n (\"if(!util.key2Re.test(%s))\", ref)\n (\"return%j\", invalid(field, \"boolean key\"));\n break;\n }\n return gen;\n /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a verifier specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction verifier(mtype) {\n /* eslint-disable no-unexpected-multiline */\n\n var gen = util.codegen([\"m\"], mtype.name + \"$verify\")\n (\"if(typeof m!==\\\"object\\\"||m===null)\")\n (\"return%j\", \"object expected\");\n var oneofs = mtype.oneofsArray,\n seenFirstField = {};\n if (oneofs.length) gen\n (\"var p={}\");\n\n for (var i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n var field = mtype._fieldsArray[i].resolve(),\n ref = \"m\" + util.safeProp(field.name);\n\n if (field.optional) gen\n (\"if(%s!=null&&m.hasOwnProperty(%j)){\", ref, field.name); // !== undefined && !== null\n\n // map fields\n if (field.map) { gen\n (\"if(!util.isObject(%s))\", ref)\n (\"return%j\", invalid(field, \"object\"))\n (\"var k=Object.keys(%s)\", ref)\n (\"for(var i=0;i}\n * @const\n */\nvar wrappers = exports;\n\nvar Message = require(\"./message\");\n\n/**\n * From object converter part of an {@link IWrapper}.\n * @typedef WrapperFromObjectConverter\n * @type {function}\n * @param {Object.} object Plain object\n * @returns {Message<{}>} Message instance\n * @this Type\n */\n\n/**\n * To object converter part of an {@link IWrapper}.\n * @typedef WrapperToObjectConverter\n * @type {function}\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n * @this Type\n */\n\n/**\n * Common type wrapper part of {@link wrappers}.\n * @interface IWrapper\n * @property {WrapperFromObjectConverter} [fromObject] From object converter\n * @property {WrapperToObjectConverter} [toObject] To object converter\n */\n\n// Custom wrapper for Any\nwrappers[\".google.protobuf.Any\"] = {\n\n fromObject: function(object) {\n\n // unwrap value type if mapped\n if (object && object[\"@type\"]) {\n // Only use fully qualified type name after the last '/'\n var name = object[\"@type\"].substring(object[\"@type\"].lastIndexOf(\"/\") + 1);\n var type = this.lookup(name);\n /* istanbul ignore else */\n if (type) {\n // type_url does not accept leading \".\"\n var type_url = object[\"@type\"].charAt(0) === \".\" ?\n object[\"@type\"].substr(1) : object[\"@type\"];\n // type_url prefix is optional, but path seperator is required\n if (type_url.indexOf(\"/\") === -1) {\n type_url = \"/\" + type_url;\n }\n return this.create({\n type_url: type_url,\n value: type.encode(type.fromObject(object)).finish()\n });\n }\n }\n\n return this.fromObject(object);\n },\n\n toObject: function(message, options) {\n\n // Default prefix\n var googleApi = \"type.googleapis.com/\";\n var prefix = \"\";\n var name = \"\";\n\n // decode value if requested and unmapped\n if (options && options.json && message.type_url && message.value) {\n // Only use fully qualified type name after the last '/'\n name = message.type_url.substring(message.type_url.lastIndexOf(\"/\") + 1);\n // Separate the prefix used\n prefix = message.type_url.substring(0, message.type_url.lastIndexOf(\"/\") + 1);\n var type = this.lookup(name);\n /* istanbul ignore else */\n if (type)\n message = type.decode(message.value);\n }\n\n // wrap value if unmapped\n if (!(message instanceof this.ctor) && message instanceof Message) {\n var object = message.$type.toObject(message, options);\n var messageName = message.$type.fullName[0] === \".\" ?\n message.$type.fullName.substr(1) : message.$type.fullName;\n // Default to type.googleapis.com prefix if no prefix is used\n if (prefix === \"\") {\n prefix = googleApi;\n }\n name = prefix + messageName;\n object[\"@type\"] = name;\n return object;\n }\n\n return this.toObject(message, options);\n }\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(714);\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();"],"sourceRoot":""} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 74868adb..2823ee08 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "centrifuge", - "version": "2.7.0", + "version": "2.7.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 218dceca..d116a93c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "centrifuge", - "version": "2.7.2", + "version": "2.7.3", "description": "Centrifuge and Centrifugo client for NodeJS and browser", "main": "dist/centrifuge.js", "types": "dist/centrifuge.d.ts", diff --git a/src/centrifuge.js b/src/centrifuge.js index 1cd4cc15..22af6741 100644 --- a/src/centrifuge.js +++ b/src/centrifuge.js @@ -1369,6 +1369,9 @@ export class Centrifuge extends EventEmitter { 'epoch': epoch }; }; + if (result.data) { + ctx.data = result.data; + } return ctx; }