["^ ","~:resource-id",["~:shadow.build.classpath/resource","com/cognitect/transit/impl/writer.js"],"~:js","goog.provide(\"com.cognitect.transit.impl.writer\");\ngoog.require(\"com.cognitect.transit.util\");\ngoog.require(\"com.cognitect.transit.caching\");\ngoog.require(\"com.cognitect.transit.handlers\");\ngoog.require(\"com.cognitect.transit.types\");\ngoog.require(\"com.cognitect.transit.delimiters\");\ngoog.require(\"goog.math.Long\");\ngoog.scope(function() {\n  var writer = com.cognitect.transit.impl.writer, util = com.cognitect.transit.util, caching = com.cognitect.transit.caching, handlers = com.cognitect.transit.handlers, types = com.cognitect.transit.types, d = com.cognitect.transit.delimiters, Long = goog.math.Long;\n  writer.escape = function(string) {\n    if (string.length > 0) {\n      var c = string.charAt(0);\n      if (c === d.ESC || c === d.SUB || c === d.RES) {\n        return d.ESC + string;\n      } else {\n        return string;\n      }\n    } else {\n      return string;\n    }\n  };\n  writer.JSONMarshaller = function Transit$JSONMarshaller(opts) {\n    this.opts = opts || {};\n    this.preferStrings = this.opts[\"preferStrings\"] != null ? this.opts[\"preferStrings\"] : true;\n    this.objectBuilder = this.opts[\"objectBuilder\"] || null;\n    this.transform = this.opts[\"transform\"] || null;\n    this.handlers = new handlers.Handlers();\n    var optsHandlers = this.opts[\"handlers\"];\n    if (optsHandlers) {\n      if (util.isArray(optsHandlers) || !optsHandlers.forEach) {\n        throw new Error('transit writer \"handlers\" option must be a map');\n      }\n      var self = this;\n      optsHandlers.forEach(function(v, k) {\n        if (k !== undefined) {\n          self.handlers.set(k, v);\n        } else {\n          throw new Error(\"Cannot create handler for JavaScript undefined\");\n        }\n      });\n    }\n    this.handlerForForeign = this.opts[\"handlerForForeign\"];\n    this.unpack = this.opts[\"unpack\"] || function(x) {\n      if (types.isArrayMap(x) && x.backingMap === null) {\n        return x._entries;\n      } else {\n        return false;\n      }\n    };\n    this.verbose = this.opts && this.opts[\"verbose\"] || false;\n  };\n  writer.JSONMarshaller.prototype.handler = function(obj) {\n    var h = this.handlers.get(handlers.constructor(obj));\n    if (h != null) {\n      return h;\n    } else {\n      var tag = obj && obj[\"transitTag\"];\n      if (tag) {\n        return this.handlers.get(tag);\n      } else {\n        return null;\n      }\n    }\n  };\n  writer.JSONMarshaller.prototype.registerHandler = function(ctor, handler) {\n    this.handlers.set(ctor, handler);\n  };\n  writer.JSONMarshaller.prototype.emitNil = function(asMapKey, cache) {\n    if (asMapKey) {\n      return this.emitString(d.ESC, \"_\", \"\", asMapKey, cache);\n    } else {\n      return null;\n    }\n  };\n  writer.JSONMarshaller.prototype.emitString = function(prefix, tag, s, asMapKey, cache) {\n    var string = prefix + tag + s;\n    if (cache) {\n      return cache.write(string, asMapKey);\n    } else {\n      return string;\n    }\n  };\n  writer.JSONMarshaller.prototype.emitBoolean = function(b, asMapKey, cache) {\n    if (asMapKey) {\n      var s = b.toString();\n      return this.emitString(d.ESC, \"?\", s[0], asMapKey, cache);\n    } else {\n      return b;\n    }\n  };\n  writer.JSONMarshaller.prototype.emitInteger = function(i, asMapKey, cache) {\n    if (i === Infinity) {\n      return this.emitString(d.ESC, \"z\", \"INF\", asMapKey, cache);\n    } else if (i === -Infinity) {\n      return this.emitString(d.ESC, \"z\", \"-INF\", asMapKey, cache);\n    } else if (isNaN(i)) {\n      return this.emitString(d.ESC, \"z\", \"NaN\", asMapKey, cache);\n    } else if (asMapKey || typeof i === \"string\" || i instanceof Long) {\n      return this.emitString(d.ESC, \"i\", i.toString(), asMapKey, cache);\n    } else {\n      return i;\n    }\n  };\n  writer.JSONMarshaller.prototype.emitDouble = function(d, asMapKey, cache) {\n    if (asMapKey) {\n      return this.emitString(d.ESC, \"d\", d, asMapKey, cache);\n    } else {\n      return d;\n    }\n  };\n  writer.JSONMarshaller.prototype.emitBinary = function(b, asMapKey, cache) {\n    return this.emitString(d.ESC, \"b\", b, asMapKey, cache);\n  };\n  writer.JSONMarshaller.prototype.emitQuoted = function(em, obj, cache) {\n    if (em.verbose) {\n      var ret = {}, k = this.emitString(d.ESC_TAG, \"'\", \"\", true, cache);\n      ret[k] = writer.marshal(this, obj, false, cache);\n      return ret;\n    } else {\n      return [this.emitString(d.ESC_TAG, \"'\", \"\", true, cache), writer.marshal(this, obj, false, cache)];\n    }\n  };\n  writer.emitObjects = function(em, iterable, cache) {\n    var ret = [];\n    if (util.isArray(iterable)) {\n      for (var i = 0; i < iterable.length; i++) {\n        ret.push(writer.marshal(em, iterable[i], false, cache));\n      }\n    } else {\n      iterable.forEach(function(v, i) {\n        ret.push(writer.marshal(em, v, false, cache));\n      });\n    }\n    return ret;\n  };\n  writer.emitArray = function(em, iterable, skip, cache) {\n    return writer.emitObjects(em, iterable, cache);\n  };\n  writer.isStringableKey = function(em, k) {\n    if (typeof k !== \"string\") {\n      var h = em.handler(k);\n      return h && h.tag(k).length === 1;\n    } else {\n      return true;\n    }\n  };\n  writer.stringableKeys = function(em, obj) {\n    var arr = em.unpack(obj), stringableKeys = true;\n    if (arr) {\n      for (var i = 0; i < arr.length; i += 2) {\n        stringableKeys = writer.isStringableKey(em, arr[i]);\n        if (!stringableKeys) {\n          break;\n        }\n      }\n      return stringableKeys;\n    } else if (obj.keys) {\n      var iter = obj.keys(), step = null;\n      if (iter.next) {\n        step = iter.next();\n        while (!step.done) {\n          stringableKeys = writer.isStringableKey(em, step.value);\n          if (!stringableKeys) {\n            break;\n          }\n          step = iter.next();\n        }\n        return stringableKeys;\n      }\n    }\n    if (obj.forEach) {\n      obj.forEach(function(v, k) {\n        stringableKeys = stringableKeys && writer.isStringableKey(em, k);\n      });\n      return stringableKeys;\n    } else {\n      throw new Error(\"Cannot walk keys of object type \" + handlers.constructor(obj).name);\n    }\n  };\n  writer.isForeignObject = function(x) {\n    if (x.constructor[\"transit$isObject\"]) {\n      return true;\n    }\n    var ret = x.constructor.toString();\n    ret = ret.substr(\"function \".length);\n    ret = ret.substr(0, ret.indexOf(\"(\"));\n    var isObject = ret == \"Object\";\n    if (typeof Object.defineProperty != \"undefined\") {\n      Object.defineProperty(x.constructor, \"transit$isObject\", {value:isObject, enumerable:false});\n    } else {\n      x.constructor[\"transit$isObject\"] = isObject;\n    }\n    return isObject;\n  };\n  writer.emitMap = function(em, obj, skip, cache) {\n    var arr = null, rep = null, tag = null, ks = null, i = 0;\n    if (obj.constructor === Object || obj.forEach != null || em.handlerForForeign && writer.isForeignObject(obj)) {\n      if (em.verbose) {\n        if (obj.forEach != null) {\n          if (writer.stringableKeys(em, obj)) {\n            var ret = {};\n            obj.forEach(function(v, k) {\n              ret[writer.marshal(em, k, true, false)] = writer.marshal(em, v, false, cache);\n            });\n            return ret;\n          } else {\n            arr = em.unpack(obj);\n            rep = [];\n            tag = em.emitString(d.ESC_TAG, \"cmap\", \"\", true, cache);\n            if (arr) {\n              for (; i < arr.length; i += 2) {\n                rep.push(writer.marshal(em, arr[i], false, false));\n                rep.push(writer.marshal(em, arr[i + 1], false, cache));\n              }\n            } else {\n              obj.forEach(function(v, k) {\n                rep.push(writer.marshal(em, k, false, false));\n                rep.push(writer.marshal(em, v, false, cache));\n              });\n            }\n            ret = {};\n            ret[tag] = rep;\n            return ret;\n          }\n        } else {\n          ks = util.objectKeys(obj);\n          ret = {};\n          for (; i < ks.length; i++) {\n            ret[writer.marshal(em, ks[i], true, false)] = writer.marshal(em, obj[ks[i]], false, cache);\n          }\n          return ret;\n        }\n      } else {\n        if (obj.forEach != null) {\n          if (writer.stringableKeys(em, obj)) {\n            arr = em.unpack(obj);\n            ret = [\"^ \"];\n            if (arr) {\n              for (; i < arr.length; i += 2) {\n                ret.push(writer.marshal(em, arr[i], true, cache));\n                ret.push(writer.marshal(em, arr[i + 1], false, cache));\n              }\n            } else {\n              obj.forEach(function(v, k) {\n                ret.push(writer.marshal(em, k, true, cache));\n                ret.push(writer.marshal(em, v, false, cache));\n              });\n            }\n            return ret;\n          } else {\n            arr = em.unpack(obj);\n            rep = [];\n            tag = em.emitString(d.ESC_TAG, \"cmap\", \"\", true, cache);\n            if (arr) {\n              for (; i < arr.length; i += 2) {\n                rep.push(writer.marshal(em, arr[i], false, cache));\n                rep.push(writer.marshal(em, arr[i + 1], false, cache));\n              }\n            } else {\n              obj.forEach(function(v, k) {\n                rep.push(writer.marshal(em, k, false, cache));\n                rep.push(writer.marshal(em, v, false, cache));\n              });\n            }\n            return [tag, rep];\n          }\n        } else {\n          ret = [\"^ \"];\n          ks = util.objectKeys(obj);\n          for (; i < ks.length; i++) {\n            ret.push(writer.marshal(em, ks[i], true, cache));\n            ret.push(writer.marshal(em, obj[ks[i]], false, cache));\n          }\n          return ret;\n        }\n      }\n    } else if (em.objectBuilder != null) {\n      return em.objectBuilder(obj, function(k) {\n        return writer.marshal(em, k, true, cache);\n      }, function(v) {\n        return writer.marshal(em, v, false, cache);\n      });\n    } else {\n      var name = handlers.constructor(obj).name, err = new Error(\"Cannot write \" + name);\n      err.data = {obj:obj, type:name};\n      throw err;\n    }\n  };\n  writer.emitTaggedMap = function(em, tag, rep, skip, cache) {\n    if (em.verbose) {\n      var ret = {};\n      ret[em.emitString(d.ESC_TAG, tag, \"\", true, cache)] = writer.marshal(em, rep, false, cache);\n      return ret;\n    } else {\n      return [em.emitString(d.ESC_TAG, tag, \"\", true, cache), writer.marshal(em, rep, false, cache)];\n    }\n  };\n  writer.emitEncoded = function(em, h, tag, rep, obj, asMapKey, cache) {\n    if (tag.length === 1) {\n      if (typeof rep === \"string\") {\n        return em.emitString(d.ESC, tag, rep, asMapKey, cache);\n      } else if (asMapKey || em.preferStrings) {\n        var vh = em.verbose && h.getVerboseHandler();\n        if (vh) {\n          tag = vh.tag(obj);\n          rep = vh.stringRep(obj, vh);\n        } else {\n          rep = h.stringRep(obj, h);\n        }\n        if (rep !== null) {\n          return em.emitString(d.ESC, tag, rep, asMapKey, cache);\n        } else {\n          var err = new Error('Tag \"' + tag + '\" cannot be encoded as string');\n          err.data = {tag:tag, rep:rep, obj:obj};\n          throw err;\n        }\n      } else {\n        return writer.emitTaggedMap(em, tag, rep, asMapKey, cache);\n      }\n    } else {\n      return writer.emitTaggedMap(em, tag, rep, asMapKey, cache);\n    }\n  };\n  writer.marshal = function(em, obj, asMapKey, cache) {\n    if (em.transform !== null) {\n      obj = em.transform(obj);\n    }\n    var h = em.handler(obj) || (em.handlerForForeign ? em.handlerForForeign(obj, em.handlers) : null), tag = h ? h.tag(obj) : null, rep = h ? h.rep(obj) : null;\n    if (h != null && tag != null) {\n      switch(tag) {\n        case \"_\":\n          return em.emitNil(asMapKey, cache);\n          break;\n        case \"s\":\n          return em.emitString(\"\", \"\", writer.escape(rep), asMapKey, cache);\n          break;\n        case \"?\":\n          return em.emitBoolean(rep, asMapKey, cache);\n          break;\n        case \"i\":\n          return em.emitInteger(rep, asMapKey, cache);\n          break;\n        case \"d\":\n          return em.emitDouble(rep, asMapKey, cache);\n          break;\n        case \"b\":\n          return em.emitBinary(rep, asMapKey, cache);\n          break;\n        case \"'\":\n          return em.emitQuoted(em, rep, cache);\n          break;\n        case \"array\":\n          return writer.emitArray(em, rep, asMapKey, cache);\n          break;\n        case \"map\":\n          return writer.emitMap(em, rep, asMapKey, cache);\n          break;\n        default:\n          return writer.emitEncoded(em, h, tag, rep, obj, asMapKey, cache);\n          break;\n      }\n    } else {\n      var name = handlers.constructor(obj).name, err = new Error(\"Cannot write \" + name);\n      err.data = {obj:obj, type:name};\n      throw err;\n    }\n  };\n  writer.maybeQuoted = function(em, obj) {\n    var h = em.handler(obj) || (em.handlerForForeign ? em.handlerForForeign(obj, em.handlers) : null);\n    if (h != null) {\n      if (h.tag(obj).length === 1) {\n        return types.quoted(obj);\n      } else {\n        return obj;\n      }\n    } else {\n      var name = handlers.constructor(obj).name, err = new Error(\"Cannot write \" + name);\n      err.data = {obj:obj, type:name};\n      throw err;\n    }\n  };\n  writer.marshalTop = function(em, obj, asMapKey, cache) {\n    return JSON.stringify(writer.marshal(em, writer.maybeQuoted(em, obj), asMapKey, cache));\n  };\n  writer.Writer = function Transit$Writer(marshaller, options) {\n    this._marshaller = marshaller;\n    this.options = options || {};\n    if (this.options[\"cache\"] === false) {\n      this.cache = null;\n    } else {\n      this.cache = this.options[\"cache\"] ? this.options[\"cache\"] : new caching.WriteCache();\n    }\n  };\n  writer.Writer.prototype.marshaller = function() {\n    return this._marshaller;\n  };\n  writer.Writer.prototype[\"marshaller\"] = writer.Writer.prototype.marshaller;\n  writer.Writer.prototype.write = function(obj, opts) {\n    var ret = null, ropts = opts || {}, asMapKey = ropts[\"asMapKey\"] || false, cache = this._marshaller.verbose ? false : this.cache;\n    if (ropts[\"marshalTop\"] === false) {\n      ret = writer.marshal(this._marshaller, obj, asMapKey, cache);\n    } else {\n      ret = writer.marshalTop(this._marshaller, obj, asMapKey, cache);\n    }\n    if (this.cache != null) {\n      this.cache.clear();\n    }\n    return ret;\n  };\n  writer.Writer.prototype[\"write\"] = writer.Writer.prototype.write;\n  writer.Writer.prototype.register = function(type, handler) {\n    this._marshaller.registerHandler(type, handler);\n  };\n  writer.Writer.prototype[\"register\"] = writer.Writer.prototype.register;\n});\n","~:source","// Copyright 2014 Cognitect. All Rights Reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS-IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\ngoog.provide(\"com.cognitect.transit.impl.writer\");\ngoog.require(\"com.cognitect.transit.util\");\ngoog.require(\"com.cognitect.transit.caching\");\ngoog.require(\"com.cognitect.transit.handlers\");\ngoog.require(\"com.cognitect.transit.types\");\ngoog.require(\"com.cognitect.transit.delimiters\");\ngoog.require(\"goog.math.Long\");\n\ngoog.scope(function () {\n\n    var writer   = com.cognitect.transit.impl.writer,\n        util     = com.cognitect.transit.util,\n        caching  = com.cognitect.transit.caching,\n        handlers = com.cognitect.transit.handlers,\n        types    = com.cognitect.transit.types,\n        d        = com.cognitect.transit.delimiters,\n        Long     = goog.math.Long;\n\n    writer.escape = function (string) {\n        if (string.length > 0) {\n            var c = string.charAt(0);\n            if (c === d.ESC || c === d.SUB || c === d.RES) {\n                return d.ESC + string;\n            } else {\n                return string;\n            }\n        } else {\n            return string;\n        }\n    };\n\n    /**\n     * @constructor\n     */\n    writer.JSONMarshaller = function Transit$JSONMarshaller(opts) {\n        this.opts = opts || {};\n        this.preferStrings = this.opts[\"preferStrings\"] != null ? this.opts[\"preferStrings\"] : true;\n\n        this.objectBuilder = this.opts[\"objectBuilder\"] || null;\n        this.transform = this.opts[\"transform\"] || null;\n\n        this.handlers = new handlers.Handlers();\n\n        var optsHandlers = this.opts[\"handlers\"];\n        if (optsHandlers) {\n            if (util.isArray(optsHandlers) || !optsHandlers.forEach) {\n                throw new Error(\"transit writer \\\"handlers\\\" option must be a map\");\n            }\n            var self = this;\n            optsHandlers.forEach(function (v, k) {\n                if (k !== undefined) {\n                    self.handlers.set(k, v);\n                } else {\n                    throw new Error(\"Cannot create handler for JavaScript undefined\");\n                }\n            });\n        }\n\n        // Multiple JS context helper\n        this.handlerForForeign = this.opts[\"handlerForForeign\"];\n\n        this.unpack = this.opts[\"unpack\"] || function (x) {\n                if (types.isArrayMap(x) && x.backingMap === null) {\n                    return x._entries;\n                } else {\n                    return false;\n                }\n            };\n\n        this.verbose = (this.opts && this.opts[\"verbose\"]) || false;\n    };\n\n    writer.JSONMarshaller.prototype.handler = function (obj) {\n        var h = this.handlers.get(handlers.constructor(obj));\n\n        if (h != null) {\n            return h;\n        } else {\n            var tag = obj && obj[\"transitTag\"];\n            if (tag) {\n                return this.handlers.get(tag)\n            } else {\n                return null;\n            }\n        }\n    };\n\n    writer.JSONMarshaller.prototype.registerHandler = function (ctor, handler) {\n        this.handlers.set(ctor, handler);\n    };\n\n    writer.JSONMarshaller.prototype.emitNil = function (asMapKey, cache) {\n        if (asMapKey) {\n            return this.emitString(d.ESC, \"_\", \"\", asMapKey, cache);\n        } else {\n            return null;\n        }\n    };\n\n    writer.JSONMarshaller.prototype.emitString = function (prefix, tag, s, asMapKey, cache) {\n        var string = prefix + tag + s;\n        if (cache) {\n            return cache.write(string, asMapKey);\n        } else {\n            return string;\n        }\n    };\n\n    writer.JSONMarshaller.prototype.emitBoolean = function (b, asMapKey, cache) {\n        if (asMapKey) {\n            var s = b.toString();\n            return this.emitString(d.ESC, \"?\", s[0], asMapKey, cache);\n        } else {\n            return b;\n        }\n    };\n\n    writer.JSONMarshaller.prototype.emitInteger = function (i, asMapKey, cache) {\n        if (i === Infinity) {\n            return this.emitString(d.ESC, \"z\", \"INF\", asMapKey, cache);\n        } else if (i === -Infinity) {\n            return this.emitString(d.ESC, \"z\", \"-INF\", asMapKey, cache);\n        } else if (isNaN(i)) {\n            return this.emitString(d.ESC, \"z\", \"NaN\", asMapKey, cache);\n        } else if (asMapKey || (typeof i === \"string\") || (i instanceof Long)) {\n            return this.emitString(d.ESC, \"i\", i.toString(), asMapKey, cache);\n        } else {\n            return i;\n        }\n    };\n\n    writer.JSONMarshaller.prototype.emitDouble = function (d, asMapKey, cache) {\n        if (asMapKey) {\n            return this.emitString(d.ESC, \"d\", d, asMapKey, cache);\n        } else {\n            return d;\n        }\n    };\n\n    writer.JSONMarshaller.prototype.emitBinary = function (b, asMapKey, cache) {\n        return this.emitString(d.ESC, \"b\", b, asMapKey, cache);\n    };\n\n    writer.JSONMarshaller.prototype.emitQuoted = function (em, obj, cache) {\n        if (em.verbose) {\n            var ret = {},\n                k = this.emitString(d.ESC_TAG, \"'\", \"\", true, cache);\n            ret[k] = writer.marshal(this, obj, false, cache);\n            return ret;\n        } else {\n            return [this.emitString(d.ESC_TAG, \"'\", \"\", true, cache), writer.marshal(this, obj, false, cache)];\n        }\n    };\n\n    writer.emitObjects = function (em, iterable, cache) {\n        var ret = [];\n        if (util.isArray(iterable)) {\n            for (var i = 0; i < iterable.length; i++) {\n                ret.push(writer.marshal(em, iterable[i], false, cache));\n            }\n        } else {\n            iterable.forEach(function (v, i) {\n                ret.push(writer.marshal(em, v, false, cache));\n            });\n        }\n        return ret;\n    };\n\n    writer.emitArray = function (em, iterable, skip, cache) {\n        return writer.emitObjects(em, iterable, cache);\n    };\n\n    writer.isStringableKey = function (em, k) {\n        if (typeof k !== \"string\") {\n            var h = em.handler(k);\n            return h && h.tag(k).length === 1;\n        } else {\n            return true;\n        }\n    };\n\n    /**\n     * Returns true if map-like obj parameter has only stringable keys -\n     * strings, symbols or keywords. If false, obj is a cmap value.\n     * @param em\n     * @param obj\n     * @returns {boolean}\n     */\n    writer.stringableKeys = function (em, obj) {\n        var arr = em.unpack(obj),\n            stringableKeys = true;\n\n        if (arr) {\n            for (var i = 0; i < arr.length; i += 2) {\n                stringableKeys = writer.isStringableKey(em, arr[i]);\n                if (!stringableKeys) {\n                    break;\n                }\n            }\n            return stringableKeys;\n        } else if (obj.keys) {\n            var iter = obj.keys(),\n                step = null;\n\n            if (iter.next) {\n                step = iter.next();\n                while (!step.done) {\n                    stringableKeys = writer.isStringableKey(em, step.value);\n                    if (!stringableKeys) {\n                        break;\n                    }\n                    step = iter.next();\n                }\n                return stringableKeys;\n            }\n        }\n\n        if (obj.forEach) {\n            obj.forEach(function (v, k) {\n                stringableKeys = stringableKeys && writer.isStringableKey(em, k);\n            });\n            return stringableKeys;\n        } else {\n            throw new Error(\"Cannot walk keys of object type \" + handlers.constructor(obj).name);\n        }\n    };\n\n    /**\n     * Returns true if x is an Object instance from a different JavaScript\n     * context.\n     * @param x\n     * @returns {boolean}\n     */\n    writer.isForeignObject = function (x) {\n        if (x.constructor[\"transit$isObject\"]) {\n            return true;\n        }\n\n        var ret = x.constructor.toString();\n\n        ret = ret.substr('function '.length);\n        ret = ret.substr(0, ret.indexOf('('));\n        var isObject = ret == \"Object\";\n\n        if (typeof Object.defineProperty != \"undefined\") {\n            Object.defineProperty(x.constructor, \"transit$isObject\", {\n                value: isObject,\n                enumerable: false\n            });\n        } else {\n            x.constructor[\"transit$isObject\"] = isObject;\n        }\n\n        return isObject;\n    };\n\n    writer.emitMap = function (em, obj, skip, cache) {\n        var arr = null, rep = null, tag = null, ks = null, i = 0;\n\n        if ((obj.constructor === Object) ||\n            (obj.forEach != null) ||\n            (em.handlerForForeign && writer.isForeignObject(obj))) {\n            if (em.verbose) {\n                if (obj.forEach != null) {\n                    if (writer.stringableKeys(em, obj)) {\n                        var ret = {};\n                        obj.forEach(function (v, k) {\n                            ret[writer.marshal(em, k, true, false)] = writer.marshal(em, v, false, cache);\n                        });\n                        return ret;\n                    } else {\n                        arr = em.unpack(obj);\n                        rep = [];\n                        tag = em.emitString(d.ESC_TAG, \"cmap\", \"\", true, cache);\n                        if (arr) {\n                            for (; i < arr.length; i += 2) {\n                                rep.push(writer.marshal(em, arr[i], false, false));\n                                rep.push(writer.marshal(em, arr[i + 1], false, cache));\n                            }\n                        } else {\n                            obj.forEach(function (v, k) {\n                                rep.push(writer.marshal(em, k, false, false));\n                                rep.push(writer.marshal(em, v, false, cache));\n                            });\n                        }\n                        ret = {};\n                        ret[tag] = rep;\n                        return ret;\n                    }\n                } else {\n                    ks = util.objectKeys(obj);\n                    ret = {};\n                    for (; i < ks.length; i++) {\n                        ret[writer.marshal(em, ks[i], true, false)] = writer.marshal(em, obj[ks[i]], false, cache);\n                    }\n                    return ret;\n                }\n            } else {\n                if (obj.forEach != null) {\n                    if (writer.stringableKeys(em, obj)) {\n                        arr = em.unpack(obj);\n                        ret = [\"^ \"];\n                        if (arr) {\n                            for (; i < arr.length; i += 2) {\n                                ret.push(writer.marshal(em, arr[i], true, cache));\n                                ret.push(writer.marshal(em, arr[i + 1], false, cache));\n                            }\n                        } else {\n                            obj.forEach(function (v, k) {\n                                ret.push(writer.marshal(em, k, true, cache));\n                                ret.push(writer.marshal(em, v, false, cache));\n                            });\n                        }\n                        return ret;\n                    } else {\n                        arr = em.unpack(obj);\n                        rep = [];\n                        tag = em.emitString(d.ESC_TAG, \"cmap\", \"\", true, cache);\n                        if (arr) {\n                            for (; i < arr.length; i += 2) {\n                                rep.push(writer.marshal(em, arr[i], false, cache));\n                                rep.push(writer.marshal(em, arr[i + 1], false, cache));\n                            }\n                        } else {\n                            obj.forEach(function (v, k) {\n                                rep.push(writer.marshal(em, k, false, cache));\n                                rep.push(writer.marshal(em, v, false, cache));\n                            });\n                        }\n                        return [tag, rep];\n                    }\n                } else {\n                    ret = [\"^ \"];\n                    ks = util.objectKeys(obj);\n                    for (; i < ks.length; i++) {\n                        ret.push(writer.marshal(em, ks[i], true, cache));\n                        ret.push(writer.marshal(em, obj[ks[i]], false, cache));\n                    }\n                    return ret;\n                }\n            }\n        } else if (em.objectBuilder != null) {\n            return em.objectBuilder(obj, function (k) {\n                    return writer.marshal(em, k, true, cache);\n                },\n                function (v) {\n                    return writer.marshal(em, v, false, cache);\n                });\n        } else {\n            var name = handlers.constructor(obj).name,\n                err = new Error(\"Cannot write \" + name);\n            err.data = {obj: obj, type: name};\n            throw err;\n        }\n    };\n\n    writer.emitTaggedMap = function (em, tag, rep, skip, cache) {\n        if (em.verbose) {\n            var ret = {};\n            ret[em.emitString(d.ESC_TAG, tag, \"\", true, cache)] = writer.marshal(em, rep, false, cache);\n            return ret;\n        } else {\n            return [em.emitString(d.ESC_TAG, tag, \"\", true, cache), writer.marshal(em, rep, false, cache)];\n        }\n    };\n\n    writer.emitEncoded = function (em, h, tag, rep, obj, asMapKey, cache) {\n        if (tag.length === 1) {\n            if (typeof rep === \"string\") {\n                return em.emitString(d.ESC, tag, rep, asMapKey, cache);\n            } else if (asMapKey || em.preferStrings) {\n                var vh = em.verbose && h.getVerboseHandler();\n                if (vh) {\n                    tag = vh.tag(obj);\n                    rep = vh.stringRep(obj, vh);\n                } else {\n                    rep = h.stringRep(obj, h);\n                }\n                if (rep !== null) {\n                    return em.emitString(d.ESC, tag, rep, asMapKey, cache);\n                } else {\n                    var err = new Error(\"Tag \\\"\" + tag + \"\\\" cannot be encoded as string\");\n                    err.data = {tag: tag, rep: rep, obj: obj};\n                    throw err;\n                }\n            } else {\n                return writer.emitTaggedMap(em, tag, rep, asMapKey, cache);\n            }\n        } else {\n            return writer.emitTaggedMap(em, tag, rep, asMapKey, cache);\n        }\n    };\n\n    writer.marshal = function (em, obj, asMapKey, cache) {\n        if(em.transform !== null) {\n            obj = em.transform(obj);\n        }\n\n        var h = em.handler(obj) || (em.handlerForForeign ? em.handlerForForeign(obj, em.handlers) : null),\n            tag = h ? h.tag(obj) : null,\n            rep = h ? h.rep(obj) : null;\n\n        if (h != null && tag != null) {\n            switch (tag) {\n                case \"_\":\n                    return em.emitNil(asMapKey, cache);\n                    break;\n                case \"s\":\n                    return em.emitString(\"\", \"\", writer.escape(rep), asMapKey, cache);\n                    break;\n                case \"?\":\n                    return em.emitBoolean(rep, asMapKey, cache);\n                    break;\n                case \"i\":\n                    return em.emitInteger(rep, asMapKey, cache);\n                    break;\n                case \"d\":\n                    return em.emitDouble(rep, asMapKey, cache);\n                    break;\n                case \"b\":\n                    return em.emitBinary(rep, asMapKey, cache);\n                    break;\n                case \"'\":\n                    return em.emitQuoted(em, rep, cache);\n                    break;\n                case \"array\":\n                    return writer.emitArray(em, rep, asMapKey, cache);\n                    break;\n                case \"map\":\n                    return writer.emitMap(em, rep, asMapKey, cache);\n                    break;\n                default:\n                    return writer.emitEncoded(em, h, tag, rep, obj, asMapKey, cache);\n                    break;\n            }\n        } else {\n            var name = handlers.constructor(obj).name,\n                err = new Error(\"Cannot write \" + name);\n            err.data = {obj: obj, type: name};\n            throw err;\n        }\n    };\n\n    writer.maybeQuoted = function (em, obj) {\n        var h = em.handler(obj) || (em.handlerForForeign ? em.handlerForForeign(obj, em.handlers) : null);\n\n        if (h != null) {\n            if (h.tag(obj).length === 1) {\n                return types.quoted(obj);\n            } else {\n                return obj;\n            }\n        } else {\n            var name = handlers.constructor(obj).name,\n                err = new Error(\"Cannot write \" + name);\n            err.data = {obj: obj, type: name};\n            throw err;\n        }\n    };\n\n    writer.marshalTop = function (em, obj, asMapKey, cache) {\n        return JSON.stringify(writer.marshal(em, writer.maybeQuoted(em, obj), asMapKey, cache));\n    };\n\n    /**\n     * @constructor\n     */\n    writer.Writer = function Transit$Writer(marshaller, options) {\n        this._marshaller = marshaller;\n        this.options = options || {};\n        if (this.options[\"cache\"] === false) {\n            this.cache = null;\n        } else {\n            this.cache = this.options[\"cache\"] ? this.options[\"cache\"] : new caching.WriteCache();\n        }\n    };\n\n    writer.Writer.prototype.marshaller = function () {\n        return this._marshaller;\n    };\n    writer.Writer.prototype[\"marshaller\"] = writer.Writer.prototype.marshaller;\n\n    writer.Writer.prototype.write = function (obj, opts) {\n        var ret = null,\n            ropts = opts || {},\n            asMapKey = ropts[\"asMapKey\"] || false,\n            cache = this._marshaller.verbose ? false : this.cache;\n\n        if (ropts[\"marshalTop\"] === false) {\n            ret = writer.marshal(this._marshaller, obj, asMapKey, cache)\n        } else {\n            ret = writer.marshalTop(this._marshaller, obj, asMapKey, cache)\n        }\n        if (this.cache != null) {\n            this.cache.clear();\n        }\n        return ret;\n    };\n    writer.Writer.prototype[\"write\"] = writer.Writer.prototype.write;\n\n    writer.Writer.prototype.register = function (type, handler) {\n        this._marshaller.registerHandler(type, handler);\n    };\n    writer.Writer.prototype[\"register\"] = writer.Writer.prototype.register;\n\n});\n","~:compiled-at",1684858198124,"~:source-map-json","{\n\"version\":3,\n\"file\":\"com.cognitect.transit.impl.writer.js\",\n\"lineCount\":416,\n\"mappings\":\"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\",\n\"sources\":[\"com/cognitect/transit/impl/writer.js\"],\n\"sourcesContent\":[\"// Copyright 2014 Cognitect. All Rights Reserved.\\n//\\n// Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n// you may not use this file except in compliance with the License.\\n// You may obtain a copy of the License at\\n//\\n//      http://www.apache.org/licenses/LICENSE-2.0\\n//\\n// Unless required by applicable law or agreed to in writing, software\\n// distributed under the License is distributed on an \\\"AS-IS\\\" BASIS,\\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n// See the License for the specific language governing permissions and\\n// limitations under the License.\\n\\ngoog.provide(\\\"com.cognitect.transit.impl.writer\\\");\\ngoog.require(\\\"com.cognitect.transit.util\\\");\\ngoog.require(\\\"com.cognitect.transit.caching\\\");\\ngoog.require(\\\"com.cognitect.transit.handlers\\\");\\ngoog.require(\\\"com.cognitect.transit.types\\\");\\ngoog.require(\\\"com.cognitect.transit.delimiters\\\");\\ngoog.require(\\\"goog.math.Long\\\");\\n\\ngoog.scope(function () {\\n\\n    var writer   = com.cognitect.transit.impl.writer,\\n        util     = com.cognitect.transit.util,\\n        caching  = com.cognitect.transit.caching,\\n        handlers = com.cognitect.transit.handlers,\\n        types    = com.cognitect.transit.types,\\n        d        = com.cognitect.transit.delimiters,\\n        Long     = goog.math.Long;\\n\\n    writer.escape = function (string) {\\n        if (string.length > 0) {\\n            var c = string.charAt(0);\\n            if (c === d.ESC || c === d.SUB || c === d.RES) {\\n                return d.ESC + string;\\n            } else {\\n                return string;\\n            }\\n        } else {\\n            return string;\\n        }\\n    };\\n\\n    /**\\n     * @constructor\\n     */\\n    writer.JSONMarshaller = function Transit$JSONMarshaller(opts) {\\n        this.opts = opts || {};\\n        this.preferStrings = this.opts[\\\"preferStrings\\\"] != null ? this.opts[\\\"preferStrings\\\"] : true;\\n\\n        this.objectBuilder = this.opts[\\\"objectBuilder\\\"] || null;\\n        this.transform = this.opts[\\\"transform\\\"] || null;\\n\\n        this.handlers = new handlers.Handlers();\\n\\n        var optsHandlers = this.opts[\\\"handlers\\\"];\\n        if (optsHandlers) {\\n            if (util.isArray(optsHandlers) || !optsHandlers.forEach) {\\n                throw new Error(\\\"transit writer \\\\\\\"handlers\\\\\\\" option must be a map\\\");\\n            }\\n            var self = this;\\n            optsHandlers.forEach(function (v, k) {\\n                if (k !== undefined) {\\n                    self.handlers.set(k, v);\\n                } else {\\n                    throw new Error(\\\"Cannot create handler for JavaScript undefined\\\");\\n                }\\n            });\\n        }\\n\\n        // Multiple JS context helper\\n        this.handlerForForeign = this.opts[\\\"handlerForForeign\\\"];\\n\\n        this.unpack = this.opts[\\\"unpack\\\"] || function (x) {\\n                if (types.isArrayMap(x) && x.backingMap === null) {\\n                    return x._entries;\\n                } else {\\n                    return false;\\n                }\\n            };\\n\\n        this.verbose = (this.opts && this.opts[\\\"verbose\\\"]) || false;\\n    };\\n\\n    writer.JSONMarshaller.prototype.handler = function (obj) {\\n        var h = this.handlers.get(handlers.constructor(obj));\\n\\n        if (h != null) {\\n            return h;\\n        } else {\\n            var tag = obj && obj[\\\"transitTag\\\"];\\n            if (tag) {\\n                return this.handlers.get(tag)\\n            } else {\\n                return null;\\n            }\\n        }\\n    };\\n\\n    writer.JSONMarshaller.prototype.registerHandler = function (ctor, handler) {\\n        this.handlers.set(ctor, handler);\\n    };\\n\\n    writer.JSONMarshaller.prototype.emitNil = function (asMapKey, cache) {\\n        if (asMapKey) {\\n            return this.emitString(d.ESC, \\\"_\\\", \\\"\\\", asMapKey, cache);\\n        } else {\\n            return null;\\n        }\\n    };\\n\\n    writer.JSONMarshaller.prototype.emitString = function (prefix, tag, s, asMapKey, cache) {\\n        var string = prefix + tag + s;\\n        if (cache) {\\n            return cache.write(string, asMapKey);\\n        } else {\\n            return string;\\n        }\\n    };\\n\\n    writer.JSONMarshaller.prototype.emitBoolean = function (b, asMapKey, cache) {\\n        if (asMapKey) {\\n            var s = b.toString();\\n            return this.emitString(d.ESC, \\\"?\\\", s[0], asMapKey, cache);\\n        } else {\\n            return b;\\n        }\\n    };\\n\\n    writer.JSONMarshaller.prototype.emitInteger = function (i, asMapKey, cache) {\\n        if (i === Infinity) {\\n            return this.emitString(d.ESC, \\\"z\\\", \\\"INF\\\", asMapKey, cache);\\n        } else if (i === -Infinity) {\\n            return this.emitString(d.ESC, \\\"z\\\", \\\"-INF\\\", asMapKey, cache);\\n        } else if (isNaN(i)) {\\n            return this.emitString(d.ESC, \\\"z\\\", \\\"NaN\\\", asMapKey, cache);\\n        } else if (asMapKey || (typeof i === \\\"string\\\") || (i instanceof Long)) {\\n            return this.emitString(d.ESC, \\\"i\\\", i.toString(), asMapKey, cache);\\n        } else {\\n            return i;\\n        }\\n    };\\n\\n    writer.JSONMarshaller.prototype.emitDouble = function (d, asMapKey, cache) {\\n        if (asMapKey) {\\n            return this.emitString(d.ESC, \\\"d\\\", d, asMapKey, cache);\\n        } else {\\n            return d;\\n        }\\n    };\\n\\n    writer.JSONMarshaller.prototype.emitBinary = function (b, asMapKey, cache) {\\n        return this.emitString(d.ESC, \\\"b\\\", b, asMapKey, cache);\\n    };\\n\\n    writer.JSONMarshaller.prototype.emitQuoted = function (em, obj, cache) {\\n        if (em.verbose) {\\n            var ret = {},\\n                k = this.emitString(d.ESC_TAG, \\\"'\\\", \\\"\\\", true, cache);\\n            ret[k] = writer.marshal(this, obj, false, cache);\\n            return ret;\\n        } else {\\n            return [this.emitString(d.ESC_TAG, \\\"'\\\", \\\"\\\", true, cache), writer.marshal(this, obj, false, cache)];\\n        }\\n    };\\n\\n    writer.emitObjects = function (em, iterable, cache) {\\n        var ret = [];\\n        if (util.isArray(iterable)) {\\n            for (var i = 0; i < iterable.length; i++) {\\n                ret.push(writer.marshal(em, iterable[i], false, cache));\\n            }\\n        } else {\\n            iterable.forEach(function (v, i) {\\n                ret.push(writer.marshal(em, v, false, cache));\\n            });\\n        }\\n        return ret;\\n    };\\n\\n    writer.emitArray = function (em, iterable, skip, cache) {\\n        return writer.emitObjects(em, iterable, cache);\\n    };\\n\\n    writer.isStringableKey = function (em, k) {\\n        if (typeof k !== \\\"string\\\") {\\n            var h = em.handler(k);\\n            return h && h.tag(k).length === 1;\\n        } else {\\n            return true;\\n        }\\n    };\\n\\n    /**\\n     * Returns true if map-like obj parameter has only stringable keys -\\n     * strings, symbols or keywords. If false, obj is a cmap value.\\n     * @param em\\n     * @param obj\\n     * @returns {boolean}\\n     */\\n    writer.stringableKeys = function (em, obj) {\\n        var arr = em.unpack(obj),\\n            stringableKeys = true;\\n\\n        if (arr) {\\n            for (var i = 0; i < arr.length; i += 2) {\\n                stringableKeys = writer.isStringableKey(em, arr[i]);\\n                if (!stringableKeys) {\\n                    break;\\n                }\\n            }\\n            return stringableKeys;\\n        } else if (obj.keys) {\\n            var iter = obj.keys(),\\n                step = null;\\n\\n            if (iter.next) {\\n                step = iter.next();\\n                while (!step.done) {\\n                    stringableKeys = writer.isStringableKey(em, step.value);\\n                    if (!stringableKeys) {\\n                        break;\\n                    }\\n                    step = iter.next();\\n                }\\n                return stringableKeys;\\n            }\\n        }\\n\\n        if (obj.forEach) {\\n            obj.forEach(function (v, k) {\\n                stringableKeys = stringableKeys && writer.isStringableKey(em, k);\\n            });\\n            return stringableKeys;\\n        } else {\\n            throw new Error(\\\"Cannot walk keys of object type \\\" + handlers.constructor(obj).name);\\n        }\\n    };\\n\\n    /**\\n     * Returns true if x is an Object instance from a different JavaScript\\n     * context.\\n     * @param x\\n     * @returns {boolean}\\n     */\\n    writer.isForeignObject = function (x) {\\n        if (x.constructor[\\\"transit$isObject\\\"]) {\\n            return true;\\n        }\\n\\n        var ret = x.constructor.toString();\\n\\n        ret = ret.substr('function '.length);\\n        ret = ret.substr(0, ret.indexOf('('));\\n        var isObject = ret == \\\"Object\\\";\\n\\n        if (typeof Object.defineProperty != \\\"undefined\\\") {\\n            Object.defineProperty(x.constructor, \\\"transit$isObject\\\", {\\n                value: isObject,\\n                enumerable: false\\n            });\\n        } else {\\n            x.constructor[\\\"transit$isObject\\\"] = isObject;\\n        }\\n\\n        return isObject;\\n    };\\n\\n    writer.emitMap = function (em, obj, skip, cache) {\\n        var arr = null, rep = null, tag = null, ks = null, i = 0;\\n\\n        if ((obj.constructor === Object) ||\\n            (obj.forEach != null) ||\\n            (em.handlerForForeign && writer.isForeignObject(obj))) {\\n            if (em.verbose) {\\n                if (obj.forEach != null) {\\n                    if (writer.stringableKeys(em, obj)) {\\n                        var ret = {};\\n                        obj.forEach(function (v, k) {\\n                            ret[writer.marshal(em, k, true, false)] = writer.marshal(em, v, false, cache);\\n                        });\\n                        return ret;\\n                    } else {\\n                        arr = em.unpack(obj);\\n                        rep = [];\\n                        tag = em.emitString(d.ESC_TAG, \\\"cmap\\\", \\\"\\\", true, cache);\\n                        if (arr) {\\n                            for (; i < arr.length; i += 2) {\\n                                rep.push(writer.marshal(em, arr[i], false, false));\\n                                rep.push(writer.marshal(em, arr[i + 1], false, cache));\\n                            }\\n                        } else {\\n                            obj.forEach(function (v, k) {\\n                                rep.push(writer.marshal(em, k, false, false));\\n                                rep.push(writer.marshal(em, v, false, cache));\\n                            });\\n                        }\\n                        ret = {};\\n                        ret[tag] = rep;\\n                        return ret;\\n                    }\\n                } else {\\n                    ks = util.objectKeys(obj);\\n                    ret = {};\\n                    for (; i < ks.length; i++) {\\n                        ret[writer.marshal(em, ks[i], true, false)] = writer.marshal(em, obj[ks[i]], false, cache);\\n                    }\\n                    return ret;\\n                }\\n            } else {\\n                if (obj.forEach != null) {\\n                    if (writer.stringableKeys(em, obj)) {\\n                        arr = em.unpack(obj);\\n                        ret = [\\\"^ \\\"];\\n                        if (arr) {\\n                            for (; i < arr.length; i += 2) {\\n                                ret.push(writer.marshal(em, arr[i], true, cache));\\n                                ret.push(writer.marshal(em, arr[i + 1], false, cache));\\n                            }\\n                        } else {\\n                            obj.forEach(function (v, k) {\\n                                ret.push(writer.marshal(em, k, true, cache));\\n                                ret.push(writer.marshal(em, v, false, cache));\\n                            });\\n                        }\\n                        return ret;\\n                    } else {\\n                        arr = em.unpack(obj);\\n                        rep = [];\\n                        tag = em.emitString(d.ESC_TAG, \\\"cmap\\\", \\\"\\\", true, cache);\\n                        if (arr) {\\n                            for (; i < arr.length; i += 2) {\\n                                rep.push(writer.marshal(em, arr[i], false, cache));\\n                                rep.push(writer.marshal(em, arr[i + 1], false, cache));\\n                            }\\n                        } else {\\n                            obj.forEach(function (v, k) {\\n                                rep.push(writer.marshal(em, k, false, cache));\\n                                rep.push(writer.marshal(em, v, false, cache));\\n                            });\\n                        }\\n                        return [tag, rep];\\n                    }\\n                } else {\\n                    ret = [\\\"^ \\\"];\\n                    ks = util.objectKeys(obj);\\n                    for (; i < ks.length; i++) {\\n                        ret.push(writer.marshal(em, ks[i], true, cache));\\n                        ret.push(writer.marshal(em, obj[ks[i]], false, cache));\\n                    }\\n                    return ret;\\n                }\\n            }\\n        } else if (em.objectBuilder != null) {\\n            return em.objectBuilder(obj, function (k) {\\n                    return writer.marshal(em, k, true, cache);\\n                },\\n                function (v) {\\n                    return writer.marshal(em, v, false, cache);\\n                });\\n        } else {\\n            var name = handlers.constructor(obj).name,\\n                err = new Error(\\\"Cannot write \\\" + name);\\n            err.data = {obj: obj, type: name};\\n            throw err;\\n        }\\n    };\\n\\n    writer.emitTaggedMap = function (em, tag, rep, skip, cache) {\\n        if (em.verbose) {\\n            var ret = {};\\n            ret[em.emitString(d.ESC_TAG, tag, \\\"\\\", true, cache)] = writer.marshal(em, rep, false, cache);\\n            return ret;\\n        } else {\\n            return [em.emitString(d.ESC_TAG, tag, \\\"\\\", true, cache), writer.marshal(em, rep, false, cache)];\\n        }\\n    };\\n\\n    writer.emitEncoded = function (em, h, tag, rep, obj, asMapKey, cache) {\\n        if (tag.length === 1) {\\n            if (typeof rep === \\\"string\\\") {\\n                return em.emitString(d.ESC, tag, rep, asMapKey, cache);\\n            } else if (asMapKey || em.preferStrings) {\\n                var vh = em.verbose && h.getVerboseHandler();\\n                if (vh) {\\n                    tag = vh.tag(obj);\\n                    rep = vh.stringRep(obj, vh);\\n                } else {\\n                    rep = h.stringRep(obj, h);\\n                }\\n                if (rep !== null) {\\n                    return em.emitString(d.ESC, tag, rep, asMapKey, cache);\\n                } else {\\n                    var err = new Error(\\\"Tag \\\\\\\"\\\" + tag + \\\"\\\\\\\" cannot be encoded as string\\\");\\n                    err.data = {tag: tag, rep: rep, obj: obj};\\n                    throw err;\\n                }\\n            } else {\\n                return writer.emitTaggedMap(em, tag, rep, asMapKey, cache);\\n            }\\n        } else {\\n            return writer.emitTaggedMap(em, tag, rep, asMapKey, cache);\\n        }\\n    };\\n\\n    writer.marshal = function (em, obj, asMapKey, cache) {\\n        if(em.transform !== null) {\\n            obj = em.transform(obj);\\n        }\\n\\n        var h = em.handler(obj) || (em.handlerForForeign ? em.handlerForForeign(obj, em.handlers) : null),\\n            tag = h ? h.tag(obj) : null,\\n            rep = h ? h.rep(obj) : null;\\n\\n        if (h != null && tag != null) {\\n            switch (tag) {\\n                case \\\"_\\\":\\n                    return em.emitNil(asMapKey, cache);\\n                    break;\\n                case \\\"s\\\":\\n                    return em.emitString(\\\"\\\", \\\"\\\", writer.escape(rep), asMapKey, cache);\\n                    break;\\n                case \\\"?\\\":\\n                    return em.emitBoolean(rep, asMapKey, cache);\\n                    break;\\n                case \\\"i\\\":\\n                    return em.emitInteger(rep, asMapKey, cache);\\n                    break;\\n                case \\\"d\\\":\\n                    return em.emitDouble(rep, asMapKey, cache);\\n                    break;\\n                case \\\"b\\\":\\n                    return em.emitBinary(rep, asMapKey, cache);\\n                    break;\\n                case \\\"'\\\":\\n                    return em.emitQuoted(em, rep, cache);\\n                    break;\\n                case \\\"array\\\":\\n                    return writer.emitArray(em, rep, asMapKey, cache);\\n                    break;\\n                case \\\"map\\\":\\n                    return writer.emitMap(em, rep, asMapKey, cache);\\n                    break;\\n                default:\\n                    return writer.emitEncoded(em, h, tag, rep, obj, asMapKey, cache);\\n                    break;\\n            }\\n        } else {\\n            var name = handlers.constructor(obj).name,\\n                err = new Error(\\\"Cannot write \\\" + name);\\n            err.data = {obj: obj, type: name};\\n            throw err;\\n        }\\n    };\\n\\n    writer.maybeQuoted = function (em, obj) {\\n        var h = em.handler(obj) || (em.handlerForForeign ? em.handlerForForeign(obj, em.handlers) : null);\\n\\n        if (h != null) {\\n            if (h.tag(obj).length === 1) {\\n                return types.quoted(obj);\\n            } else {\\n                return obj;\\n            }\\n        } else {\\n            var name = handlers.constructor(obj).name,\\n                err = new Error(\\\"Cannot write \\\" + name);\\n            err.data = {obj: obj, type: name};\\n            throw err;\\n        }\\n    };\\n\\n    writer.marshalTop = function (em, obj, asMapKey, cache) {\\n        return JSON.stringify(writer.marshal(em, writer.maybeQuoted(em, obj), asMapKey, cache));\\n    };\\n\\n    /**\\n     * @constructor\\n     */\\n    writer.Writer = function Transit$Writer(marshaller, options) {\\n        this._marshaller = marshaller;\\n        this.options = options || {};\\n        if (this.options[\\\"cache\\\"] === false) {\\n            this.cache = null;\\n        } else {\\n            this.cache = this.options[\\\"cache\\\"] ? this.options[\\\"cache\\\"] : new caching.WriteCache();\\n        }\\n    };\\n\\n    writer.Writer.prototype.marshaller = function () {\\n        return this._marshaller;\\n    };\\n    writer.Writer.prototype[\\\"marshaller\\\"] = writer.Writer.prototype.marshaller;\\n\\n    writer.Writer.prototype.write = function (obj, opts) {\\n        var ret = null,\\n            ropts = opts || {},\\n            asMapKey = ropts[\\\"asMapKey\\\"] || false,\\n            cache = this._marshaller.verbose ? false : this.cache;\\n\\n        if (ropts[\\\"marshalTop\\\"] === false) {\\n            ret = writer.marshal(this._marshaller, obj, asMapKey, cache)\\n        } else {\\n            ret = writer.marshalTop(this._marshaller, obj, asMapKey, cache)\\n        }\\n        if (this.cache != null) {\\n            this.cache.clear();\\n        }\\n        return ret;\\n    };\\n    writer.Writer.prototype[\\\"write\\\"] = writer.Writer.prototype.write;\\n\\n    writer.Writer.prototype.register = function (type, handler) {\\n        this._marshaller.registerHandler(type, handler);\\n    };\\n    writer.Writer.prototype[\\\"register\\\"] = writer.Writer.prototype.register;\\n\\n});\\n\"],\n\"names\":[\"goog\",\"provide\",\"require\",\"scope\",\"writer\",\"com\",\"cognitect\",\"transit\",\"impl\",\"util\",\"caching\",\"handlers\",\"types\",\"d\",\"delimiters\",\"Long\",\"math\",\"escape\",\"writer.escape\",\"string\",\"length\",\"c\",\"charAt\",\"ESC\",\"SUB\",\"RES\",\"JSONMarshaller\",\"writer.JSONMarshaller\",\"Transit$JSONMarshaller\",\"opts\",\"preferStrings\",\"objectBuilder\",\"transform\",\"Handlers\",\"optsHandlers\",\"isArray\",\"forEach\",\"Error\",\"self\",\"v\",\"k\",\"undefined\",\"set\",\"handlerForForeign\",\"unpack\",\"x\",\"isArrayMap\",\"backingMap\",\"_entries\",\"verbose\",\"prototype\",\"handler\",\"writer.JSONMarshaller.prototype.handler\",\"obj\",\"h\",\"get\",\"constructor\",\"tag\",\"registerHandler\",\"writer.JSONMarshaller.prototype.registerHandler\",\"ctor\",\"emitNil\",\"writer.JSONMarshaller.prototype.emitNil\",\"asMapKey\",\"cache\",\"emitString\",\"writer.JSONMarshaller.prototype.emitString\",\"prefix\",\"s\",\"write\",\"emitBoolean\",\"writer.JSONMarshaller.prototype.emitBoolean\",\"b\",\"toString\",\"emitInteger\",\"writer.JSONMarshaller.prototype.emitInteger\",\"i\",\"Infinity\",\"isNaN\",\"emitDouble\",\"writer.JSONMarshaller.prototype.emitDouble\",\"emitBinary\",\"writer.JSONMarshaller.prototype.emitBinary\",\"emitQuoted\",\"writer.JSONMarshaller.prototype.emitQuoted\",\"em\",\"ret\",\"ESC_TAG\",\"marshal\",\"emitObjects\",\"writer.emitObjects\",\"iterable\",\"push\",\"emitArray\",\"writer.emitArray\",\"skip\",\"isStringableKey\",\"writer.isStringableKey\",\"stringableKeys\",\"writer.stringableKeys\",\"arr\",\"keys\",\"iter\",\"step\",\"next\",\"done\",\"value\",\"name\",\"isForeignObject\",\"writer.isForeignObject\",\"substr\",\"indexOf\",\"isObject\",\"Object\",\"defineProperty\",\"enumerable\",\"emitMap\",\"writer.emitMap\",\"rep\",\"ks\",\"objectKeys\",\"err\",\"data\",\"type\",\"emitTaggedMap\",\"writer.emitTaggedMap\",\"emitEncoded\",\"writer.emitEncoded\",\"vh\",\"getVerboseHandler\",\"stringRep\",\"writer.marshal\",\"maybeQuoted\",\"writer.maybeQuoted\",\"quoted\",\"marshalTop\",\"writer.marshalTop\",\"JSON\",\"stringify\",\"Writer\",\"writer.Writer\",\"Transit$Writer\",\"marshaller\",\"options\",\"_marshaller\",\"WriteCache\",\"writer.Writer.prototype.marshaller\",\"writer.Writer.prototype.write\",\"ropts\",\"clear\",\"register\",\"writer.Writer.prototype.register\"]\n}\n"]