{"ast":null,"code":"// Generated by CoffeeScript 1.12.7\n(function () {\n  \"use strict\";\n\n  var bom,\n      defaults,\n      events,\n      isEmpty,\n      processItem,\n      processors,\n      sax,\n      setImmediate,\n      bind = function (fn, me) {\n    return function () {\n      return fn.apply(me, arguments);\n    };\n  },\n      extend = function (child, parent) {\n    for (var key in parent) {\n      if (hasProp.call(parent, key)) child[key] = parent[key];\n    }\n\n    function ctor() {\n      this.constructor = child;\n    }\n\n    ctor.prototype = parent.prototype;\n    child.prototype = new ctor();\n    child.__super__ = parent.prototype;\n    return child;\n  },\n      hasProp = {}.hasOwnProperty;\n\n  sax = require('sax');\n  events = require('events');\n  bom = require('./bom');\n  processors = require('./processors');\n  setImmediate = require('timers').setImmediate;\n  defaults = require('./defaults').defaults;\n\n  isEmpty = function (thing) {\n    return typeof thing === \"object\" && thing != null && Object.keys(thing).length === 0;\n  };\n\n  processItem = function (processors, item, key) {\n    var i, len, process;\n\n    for (i = 0, len = processors.length; i < len; i++) {\n      process = processors[i];\n      item = process(item, key);\n    }\n\n    return item;\n  };\n\n  exports.Parser = function (superClass) {\n    extend(Parser, superClass);\n\n    function Parser(opts) {\n      this.parseStringPromise = bind(this.parseStringPromise, this);\n      this.parseString = bind(this.parseString, this);\n      this.reset = bind(this.reset, this);\n      this.assignOrPush = bind(this.assignOrPush, this);\n      this.processAsync = bind(this.processAsync, this);\n      var key, ref, value;\n\n      if (!(this instanceof exports.Parser)) {\n        return new exports.Parser(opts);\n      }\n\n      this.options = {};\n      ref = defaults[\"0.2\"];\n\n      for (key in ref) {\n        if (!hasProp.call(ref, key)) continue;\n        value = ref[key];\n        this.options[key] = value;\n      }\n\n      for (key in opts) {\n        if (!hasProp.call(opts, key)) continue;\n        value = opts[key];\n        this.options[key] = value;\n      }\n\n      if (this.options.xmlns) {\n        this.options.xmlnskey = this.options.attrkey + \"ns\";\n      }\n\n      if (this.options.normalizeTags) {\n        if (!this.options.tagNameProcessors) {\n          this.options.tagNameProcessors = [];\n        }\n\n        this.options.tagNameProcessors.unshift(processors.normalize);\n      }\n\n      this.reset();\n    }\n\n    Parser.prototype.processAsync = function () {\n      var chunk, err;\n\n      try {\n        if (this.remaining.length <= this.options.chunkSize) {\n          chunk = this.remaining;\n          this.remaining = '';\n          this.saxParser = this.saxParser.write(chunk);\n          return this.saxParser.close();\n        } else {\n          chunk = this.remaining.substr(0, this.options.chunkSize);\n          this.remaining = this.remaining.substr(this.options.chunkSize, this.remaining.length);\n          this.saxParser = this.saxParser.write(chunk);\n          return setImmediate(this.processAsync);\n        }\n      } catch (error1) {\n        err = error1;\n\n        if (!this.saxParser.errThrown) {\n          this.saxParser.errThrown = true;\n          return this.emit(err);\n        }\n      }\n    };\n\n    Parser.prototype.assignOrPush = function (obj, key, newValue) {\n      if (!(key in obj)) {\n        if (!this.options.explicitArray) {\n          return obj[key] = newValue;\n        } else {\n          return obj[key] = [newValue];\n        }\n      } else {\n        if (!(obj[key] instanceof Array)) {\n          obj[key] = [obj[key]];\n        }\n\n        return obj[key].push(newValue);\n      }\n    };\n\n    Parser.prototype.reset = function () {\n      var attrkey, charkey, ontext, stack;\n      this.removeAllListeners();\n      this.saxParser = sax.parser(this.options.strict, {\n        trim: false,\n        normalize: false,\n        xmlns: this.options.xmlns\n      });\n      this.saxParser.errThrown = false;\n\n      this.saxParser.onerror = function (_this) {\n        return function (error) {\n          _this.saxParser.resume();\n\n          if (!_this.saxParser.errThrown) {\n            _this.saxParser.errThrown = true;\n            return _this.emit(\"error\", error);\n          }\n        };\n      }(this);\n\n      this.saxParser.onend = function (_this) {\n        return function () {\n          if (!_this.saxParser.ended) {\n            _this.saxParser.ended = true;\n            return _this.emit(\"end\", _this.resultObject);\n          }\n        };\n      }(this);\n\n      this.saxParser.ended = false;\n      this.EXPLICIT_CHARKEY = this.options.explicitCharkey;\n      this.resultObject = null;\n      stack = [];\n      attrkey = this.options.attrkey;\n      charkey = this.options.charkey;\n\n      this.saxParser.onopentag = function (_this) {\n        return function (node) {\n          var key, newValue, obj, processedKey, ref;\n          obj = {};\n          obj[charkey] = \"\";\n\n          if (!_this.options.ignoreAttrs) {\n            ref = node.attributes;\n\n            for (key in ref) {\n              if (!hasProp.call(ref, key)) continue;\n\n              if (!(attrkey in obj) && !_this.options.mergeAttrs) {\n                obj[attrkey] = {};\n              }\n\n              newValue = _this.options.attrValueProcessors ? processItem(_this.options.attrValueProcessors, node.attributes[key], key) : node.attributes[key];\n              processedKey = _this.options.attrNameProcessors ? processItem(_this.options.attrNameProcessors, key) : key;\n\n              if (_this.options.mergeAttrs) {\n                _this.assignOrPush(obj, processedKey, newValue);\n              } else {\n                obj[attrkey][processedKey] = newValue;\n              }\n            }\n          }\n\n          obj[\"#name\"] = _this.options.tagNameProcessors ? processItem(_this.options.tagNameProcessors, node.name) : node.name;\n\n          if (_this.options.xmlns) {\n            obj[_this.options.xmlnskey] = {\n              uri: node.uri,\n              local: node.local\n            };\n          }\n\n          return stack.push(obj);\n        };\n      }(this);\n\n      this.saxParser.onclosetag = function (_this) {\n        return function () {\n          var cdata, emptyStr, key, node, nodeName, obj, objClone, old, s, xpath;\n          obj = stack.pop();\n          nodeName = obj[\"#name\"];\n\n          if (!_this.options.explicitChildren || !_this.options.preserveChildrenOrder) {\n            delete obj[\"#name\"];\n          }\n\n          if (obj.cdata === true) {\n            cdata = obj.cdata;\n            delete obj.cdata;\n          }\n\n          s = stack[stack.length - 1];\n\n          if (obj[charkey].match(/^\\s*$/) && !cdata) {\n            emptyStr = obj[charkey];\n            delete obj[charkey];\n          } else {\n            if (_this.options.trim) {\n              obj[charkey] = obj[charkey].trim();\n            }\n\n            if (_this.options.normalize) {\n              obj[charkey] = obj[charkey].replace(/\\s{2,}/g, \" \").trim();\n            }\n\n            obj[charkey] = _this.options.valueProcessors ? processItem(_this.options.valueProcessors, obj[charkey], nodeName) : obj[charkey];\n\n            if (Object.keys(obj).length === 1 && charkey in obj && !_this.EXPLICIT_CHARKEY) {\n              obj = obj[charkey];\n            }\n          }\n\n          if (isEmpty(obj)) {\n            obj = _this.options.emptyTag !== '' ? _this.options.emptyTag : emptyStr;\n          }\n\n          if (_this.options.validator != null) {\n            xpath = \"/\" + function () {\n              var i, len, results;\n              results = [];\n\n              for (i = 0, len = stack.length; i < len; i++) {\n                node = stack[i];\n                results.push(node[\"#name\"]);\n              }\n\n              return results;\n            }().concat(nodeName).join(\"/\");\n\n            (function () {\n              var err;\n\n              try {\n                return obj = _this.options.validator(xpath, s && s[nodeName], obj);\n              } catch (error1) {\n                err = error1;\n                return _this.emit(\"error\", err);\n              }\n            })();\n          }\n\n          if (_this.options.explicitChildren && !_this.options.mergeAttrs && typeof obj === 'object') {\n            if (!_this.options.preserveChildrenOrder) {\n              node = {};\n\n              if (_this.options.attrkey in obj) {\n                node[_this.options.attrkey] = obj[_this.options.attrkey];\n                delete obj[_this.options.attrkey];\n              }\n\n              if (!_this.options.charsAsChildren && _this.options.charkey in obj) {\n                node[_this.options.charkey] = obj[_this.options.charkey];\n                delete obj[_this.options.charkey];\n              }\n\n              if (Object.getOwnPropertyNames(obj).length > 0) {\n                node[_this.options.childkey] = obj;\n              }\n\n              obj = node;\n            } else if (s) {\n              s[_this.options.childkey] = s[_this.options.childkey] || [];\n              objClone = {};\n\n              for (key in obj) {\n                if (!hasProp.call(obj, key)) continue;\n                objClone[key] = obj[key];\n              }\n\n              s[_this.options.childkey].push(objClone);\n\n              delete obj[\"#name\"];\n\n              if (Object.keys(obj).length === 1 && charkey in obj && !_this.EXPLICIT_CHARKEY) {\n                obj = obj[charkey];\n              }\n            }\n          }\n\n          if (stack.length > 0) {\n            return _this.assignOrPush(s, nodeName, obj);\n          } else {\n            if (_this.options.explicitRoot) {\n              old = obj;\n              obj = {};\n              obj[nodeName] = old;\n            }\n\n            _this.resultObject = obj;\n            _this.saxParser.ended = true;\n            return _this.emit(\"end\", _this.resultObject);\n          }\n        };\n      }(this);\n\n      ontext = function (_this) {\n        return function (text) {\n          var charChild, s;\n          s = stack[stack.length - 1];\n\n          if (s) {\n            s[charkey] += text;\n\n            if (_this.options.explicitChildren && _this.options.preserveChildrenOrder && _this.options.charsAsChildren && (_this.options.includeWhiteChars || text.replace(/\\\\n/g, '').trim() !== '')) {\n              s[_this.options.childkey] = s[_this.options.childkey] || [];\n              charChild = {\n                '#name': '__text__'\n              };\n              charChild[charkey] = text;\n\n              if (_this.options.normalize) {\n                charChild[charkey] = charChild[charkey].replace(/\\s{2,}/g, \" \").trim();\n              }\n\n              s[_this.options.childkey].push(charChild);\n            }\n\n            return s;\n          }\n        };\n      }(this);\n\n      this.saxParser.ontext = ontext;\n      return this.saxParser.oncdata = function (_this) {\n        return function (text) {\n          var s;\n          s = ontext(text);\n\n          if (s) {\n            return s.cdata = true;\n          }\n        };\n      }(this);\n    };\n\n    Parser.prototype.parseString = function (str, cb) {\n      var err;\n\n      if (cb != null && typeof cb === \"function\") {\n        this.on(\"end\", function (result) {\n          this.reset();\n          return cb(null, result);\n        });\n        this.on(\"error\", function (err) {\n          this.reset();\n          return cb(err);\n        });\n      }\n\n      try {\n        str = str.toString();\n\n        if (str.trim() === '') {\n          this.emit(\"end\", null);\n          return true;\n        }\n\n        str = bom.stripBOM(str);\n\n        if (this.options.async) {\n          this.remaining = str;\n          setImmediate(this.processAsync);\n          return this.saxParser;\n        }\n\n        return this.saxParser.write(str).close();\n      } catch (error1) {\n        err = error1;\n\n        if (!(this.saxParser.errThrown || this.saxParser.ended)) {\n          this.emit('error', err);\n          return this.saxParser.errThrown = true;\n        } else if (this.saxParser.ended) {\n          throw err;\n        }\n      }\n    };\n\n    Parser.prototype.parseStringPromise = function (str) {\n      return new Promise(function (_this) {\n        return function (resolve, reject) {\n          return _this.parseString(str, function (err, value) {\n            if (err) {\n              return reject(err);\n            } else {\n              return resolve(value);\n            }\n          });\n        };\n      }(this));\n    };\n\n    return Parser;\n  }(events);\n\n  exports.parseString = function (str, a, b) {\n    var cb, options, parser;\n\n    if (b != null) {\n      if (typeof b === 'function') {\n        cb = b;\n      }\n\n      if (typeof a === 'object') {\n        options = a;\n      }\n    } else {\n      if (typeof a === 'function') {\n        cb = a;\n      }\n\n      options = {};\n    }\n\n    parser = new exports.Parser(options);\n    return parser.parseString(str, cb);\n  };\n\n  exports.parseStringPromise = function (str, a) {\n    var options, parser;\n\n    if (typeof a === 'object') {\n      options = a;\n    }\n\n    parser = new exports.Parser(options);\n    return parser.parseStringPromise(str);\n  };\n}).call(this);","map":{"version":3,"sources":["D:/Development/Work/CENOS/cenos-ui/node_modules/xml2js/lib/parser.js"],"names":["bom","defaults","events","isEmpty","processItem","processors","sax","setImmediate","bind","fn","me","apply","arguments","extend","child","parent","key","hasProp","call","ctor","constructor","prototype","__super__","hasOwnProperty","require","thing","Object","keys","length","item","i","len","process","exports","Parser","superClass","opts","parseStringPromise","parseString","reset","assignOrPush","processAsync","ref","value","options","xmlns","xmlnskey","attrkey","normalizeTags","tagNameProcessors","unshift","normalize","chunk","err","remaining","chunkSize","saxParser","write","close","substr","error1","errThrown","emit","obj","newValue","explicitArray","Array","push","charkey","ontext","stack","removeAllListeners","parser","strict","trim","onerror","_this","error","resume","onend","ended","resultObject","EXPLICIT_CHARKEY","explicitCharkey","onopentag","node","processedKey","ignoreAttrs","attributes","mergeAttrs","attrValueProcessors","attrNameProcessors","name","uri","local","onclosetag","cdata","emptyStr","nodeName","objClone","old","s","xpath","pop","explicitChildren","preserveChildrenOrder","match","replace","valueProcessors","emptyTag","validator","results","concat","join","charsAsChildren","getOwnPropertyNames","childkey","explicitRoot","text","charChild","includeWhiteChars","oncdata","str","cb","on","result","toString","stripBOM","async","Promise","resolve","reject","a","b"],"mappings":"AAAA;AACA,CAAC,YAAW;AACV;;AACA,MAAIA,GAAJ;AAAA,MAASC,QAAT;AAAA,MAAmBC,MAAnB;AAAA,MAA2BC,OAA3B;AAAA,MAAoCC,WAApC;AAAA,MAAiDC,UAAjD;AAAA,MAA6DC,GAA7D;AAAA,MAAkEC,YAAlE;AAAA,MACEC,IAAI,GAAG,UAASC,EAAT,EAAaC,EAAb,EAAgB;AAAE,WAAO,YAAU;AAAE,aAAOD,EAAE,CAACE,KAAH,CAASD,EAAT,EAAaE,SAAb,CAAP;AAAiC,KAApD;AAAuD,GADlF;AAAA,MAEEC,MAAM,GAAG,UAASC,KAAT,EAAgBC,MAAhB,EAAwB;AAAE,SAAK,IAAIC,GAAT,IAAgBD,MAAhB,EAAwB;AAAE,UAAIE,OAAO,CAACC,IAAR,CAAaH,MAAb,EAAqBC,GAArB,CAAJ,EAA+BF,KAAK,CAACE,GAAD,CAAL,GAAaD,MAAM,CAACC,GAAD,CAAnB;AAA2B;;AAAC,aAASG,IAAT,GAAgB;AAAE,WAAKC,WAAL,GAAmBN,KAAnB;AAA2B;;AAACK,IAAAA,IAAI,CAACE,SAAL,GAAiBN,MAAM,CAACM,SAAxB;AAAmCP,IAAAA,KAAK,CAACO,SAAN,GAAkB,IAAIF,IAAJ,EAAlB;AAA8BL,IAAAA,KAAK,CAACQ,SAAN,GAAkBP,MAAM,CAACM,SAAzB;AAAoC,WAAOP,KAAP;AAAe,GAF5R;AAAA,MAGEG,OAAO,GAAG,GAAGM,cAHf;;AAKAjB,EAAAA,GAAG,GAAGkB,OAAO,CAAC,KAAD,CAAb;AAEAtB,EAAAA,MAAM,GAAGsB,OAAO,CAAC,QAAD,CAAhB;AAEAxB,EAAAA,GAAG,GAAGwB,OAAO,CAAC,OAAD,CAAb;AAEAnB,EAAAA,UAAU,GAAGmB,OAAO,CAAC,cAAD,CAApB;AAEAjB,EAAAA,YAAY,GAAGiB,OAAO,CAAC,QAAD,CAAP,CAAkBjB,YAAjC;AAEAN,EAAAA,QAAQ,GAAGuB,OAAO,CAAC,YAAD,CAAP,CAAsBvB,QAAjC;;AAEAE,EAAAA,OAAO,GAAG,UAASsB,KAAT,EAAgB;AACxB,WAAO,OAAOA,KAAP,KAAiB,QAAjB,IAA8BA,KAAK,IAAI,IAAvC,IAAgDC,MAAM,CAACC,IAAP,CAAYF,KAAZ,EAAmBG,MAAnB,KAA8B,CAArF;AACD,GAFD;;AAIAxB,EAAAA,WAAW,GAAG,UAASC,UAAT,EAAqBwB,IAArB,EAA2Bb,GAA3B,EAAgC;AAC5C,QAAIc,CAAJ,EAAOC,GAAP,EAAYC,OAAZ;;AACA,SAAKF,CAAC,GAAG,CAAJ,EAAOC,GAAG,GAAG1B,UAAU,CAACuB,MAA7B,EAAqCE,CAAC,GAAGC,GAAzC,EAA8CD,CAAC,EAA/C,EAAmD;AACjDE,MAAAA,OAAO,GAAG3B,UAAU,CAACyB,CAAD,CAApB;AACAD,MAAAA,IAAI,GAAGG,OAAO,CAACH,IAAD,EAAOb,GAAP,CAAd;AACD;;AACD,WAAOa,IAAP;AACD,GAPD;;AASAI,EAAAA,OAAO,CAACC,MAAR,GAAkB,UAASC,UAAT,EAAqB;AACrCtB,IAAAA,MAAM,CAACqB,MAAD,EAASC,UAAT,CAAN;;AAEA,aAASD,MAAT,CAAgBE,IAAhB,EAAsB;AACpB,WAAKC,kBAAL,GAA0B7B,IAAI,CAAC,KAAK6B,kBAAN,EAA0B,IAA1B,CAA9B;AACA,WAAKC,WAAL,GAAmB9B,IAAI,CAAC,KAAK8B,WAAN,EAAmB,IAAnB,CAAvB;AACA,WAAKC,KAAL,GAAa/B,IAAI,CAAC,KAAK+B,KAAN,EAAa,IAAb,CAAjB;AACA,WAAKC,YAAL,GAAoBhC,IAAI,CAAC,KAAKgC,YAAN,EAAoB,IAApB,CAAxB;AACA,WAAKC,YAAL,GAAoBjC,IAAI,CAAC,KAAKiC,YAAN,EAAoB,IAApB,CAAxB;AACA,UAAIzB,GAAJ,EAAS0B,GAAT,EAAcC,KAAd;;AACA,UAAI,EAAE,gBAAgBV,OAAO,CAACC,MAA1B,CAAJ,EAAuC;AACrC,eAAO,IAAID,OAAO,CAACC,MAAZ,CAAmBE,IAAnB,CAAP;AACD;;AACD,WAAKQ,OAAL,GAAe,EAAf;AACAF,MAAAA,GAAG,GAAGzC,QAAQ,CAAC,KAAD,CAAd;;AACA,WAAKe,GAAL,IAAY0B,GAAZ,EAAiB;AACf,YAAI,CAACzB,OAAO,CAACC,IAAR,CAAawB,GAAb,EAAkB1B,GAAlB,CAAL,EAA6B;AAC7B2B,QAAAA,KAAK,GAAGD,GAAG,CAAC1B,GAAD,CAAX;AACA,aAAK4B,OAAL,CAAa5B,GAAb,IAAoB2B,KAApB;AACD;;AACD,WAAK3B,GAAL,IAAYoB,IAAZ,EAAkB;AAChB,YAAI,CAACnB,OAAO,CAACC,IAAR,CAAakB,IAAb,EAAmBpB,GAAnB,CAAL,EAA8B;AAC9B2B,QAAAA,KAAK,GAAGP,IAAI,CAACpB,GAAD,CAAZ;AACA,aAAK4B,OAAL,CAAa5B,GAAb,IAAoB2B,KAApB;AACD;;AACD,UAAI,KAAKC,OAAL,CAAaC,KAAjB,EAAwB;AACtB,aAAKD,OAAL,CAAaE,QAAb,GAAwB,KAAKF,OAAL,CAAaG,OAAb,GAAuB,IAA/C;AACD;;AACD,UAAI,KAAKH,OAAL,CAAaI,aAAjB,EAAgC;AAC9B,YAAI,CAAC,KAAKJ,OAAL,CAAaK,iBAAlB,EAAqC;AACnC,eAAKL,OAAL,CAAaK,iBAAb,GAAiC,EAAjC;AACD;;AACD,aAAKL,OAAL,CAAaK,iBAAb,CAA+BC,OAA/B,CAAuC7C,UAAU,CAAC8C,SAAlD;AACD;;AACD,WAAKZ,KAAL;AACD;;AAEDL,IAAAA,MAAM,CAACb,SAAP,CAAiBoB,YAAjB,GAAgC,YAAW;AACzC,UAAIW,KAAJ,EAAWC,GAAX;;AACA,UAAI;AACF,YAAI,KAAKC,SAAL,CAAe1B,MAAf,IAAyB,KAAKgB,OAAL,CAAaW,SAA1C,EAAqD;AACnDH,UAAAA,KAAK,GAAG,KAAKE,SAAb;AACA,eAAKA,SAAL,GAAiB,EAAjB;AACA,eAAKE,SAAL,GAAiB,KAAKA,SAAL,CAAeC,KAAf,CAAqBL,KAArB,CAAjB;AACA,iBAAO,KAAKI,SAAL,CAAeE,KAAf,EAAP;AACD,SALD,MAKO;AACLN,UAAAA,KAAK,GAAG,KAAKE,SAAL,CAAeK,MAAf,CAAsB,CAAtB,EAAyB,KAAKf,OAAL,CAAaW,SAAtC,CAAR;AACA,eAAKD,SAAL,GAAiB,KAAKA,SAAL,CAAeK,MAAf,CAAsB,KAAKf,OAAL,CAAaW,SAAnC,EAA8C,KAAKD,SAAL,CAAe1B,MAA7D,CAAjB;AACA,eAAK4B,SAAL,GAAiB,KAAKA,SAAL,CAAeC,KAAf,CAAqBL,KAArB,CAAjB;AACA,iBAAO7C,YAAY,CAAC,KAAKkC,YAAN,CAAnB;AACD;AACF,OAZD,CAYE,OAAOmB,MAAP,EAAe;AACfP,QAAAA,GAAG,GAAGO,MAAN;;AACA,YAAI,CAAC,KAAKJ,SAAL,CAAeK,SAApB,EAA+B;AAC7B,eAAKL,SAAL,CAAeK,SAAf,GAA2B,IAA3B;AACA,iBAAO,KAAKC,IAAL,CAAUT,GAAV,CAAP;AACD;AACF;AACF,KArBD;;AAuBAnB,IAAAA,MAAM,CAACb,SAAP,CAAiBmB,YAAjB,GAAgC,UAASuB,GAAT,EAAc/C,GAAd,EAAmBgD,QAAnB,EAA6B;AAC3D,UAAI,EAAEhD,GAAG,IAAI+C,GAAT,CAAJ,EAAmB;AACjB,YAAI,CAAC,KAAKnB,OAAL,CAAaqB,aAAlB,EAAiC;AAC/B,iBAAOF,GAAG,CAAC/C,GAAD,CAAH,GAAWgD,QAAlB;AACD,SAFD,MAEO;AACL,iBAAOD,GAAG,CAAC/C,GAAD,CAAH,GAAW,CAACgD,QAAD,CAAlB;AACD;AACF,OAND,MAMO;AACL,YAAI,EAAED,GAAG,CAAC/C,GAAD,CAAH,YAAoBkD,KAAtB,CAAJ,EAAkC;AAChCH,UAAAA,GAAG,CAAC/C,GAAD,CAAH,GAAW,CAAC+C,GAAG,CAAC/C,GAAD,CAAJ,CAAX;AACD;;AACD,eAAO+C,GAAG,CAAC/C,GAAD,CAAH,CAASmD,IAAT,CAAcH,QAAd,CAAP;AACD;AACF,KAbD;;AAeA9B,IAAAA,MAAM,CAACb,SAAP,CAAiBkB,KAAjB,GAAyB,YAAW;AAClC,UAAIQ,OAAJ,EAAaqB,OAAb,EAAsBC,MAAtB,EAA8BC,KAA9B;AACA,WAAKC,kBAAL;AACA,WAAKf,SAAL,GAAiBlD,GAAG,CAACkE,MAAJ,CAAW,KAAK5B,OAAL,CAAa6B,MAAxB,EAAgC;AAC/CC,QAAAA,IAAI,EAAE,KADyC;AAE/CvB,QAAAA,SAAS,EAAE,KAFoC;AAG/CN,QAAAA,KAAK,EAAE,KAAKD,OAAL,CAAaC;AAH2B,OAAhC,CAAjB;AAKA,WAAKW,SAAL,CAAeK,SAAf,GAA2B,KAA3B;;AACA,WAAKL,SAAL,CAAemB,OAAf,GAA0B,UAASC,KAAT,EAAgB;AACxC,eAAO,UAASC,KAAT,EAAgB;AACrBD,UAAAA,KAAK,CAACpB,SAAN,CAAgBsB,MAAhB;;AACA,cAAI,CAACF,KAAK,CAACpB,SAAN,CAAgBK,SAArB,EAAgC;AAC9Be,YAAAA,KAAK,CAACpB,SAAN,CAAgBK,SAAhB,GAA4B,IAA5B;AACA,mBAAOe,KAAK,CAACd,IAAN,CAAW,OAAX,EAAoBe,KAApB,CAAP;AACD;AACF,SAND;AAOD,OARwB,CAQtB,IARsB,CAAzB;;AASA,WAAKrB,SAAL,CAAeuB,KAAf,GAAwB,UAASH,KAAT,EAAgB;AACtC,eAAO,YAAW;AAChB,cAAI,CAACA,KAAK,CAACpB,SAAN,CAAgBwB,KAArB,EAA4B;AAC1BJ,YAAAA,KAAK,CAACpB,SAAN,CAAgBwB,KAAhB,GAAwB,IAAxB;AACA,mBAAOJ,KAAK,CAACd,IAAN,CAAW,KAAX,EAAkBc,KAAK,CAACK,YAAxB,CAAP;AACD;AACF,SALD;AAMD,OAPsB,CAOpB,IAPoB,CAAvB;;AAQA,WAAKzB,SAAL,CAAewB,KAAf,GAAuB,KAAvB;AACA,WAAKE,gBAAL,GAAwB,KAAKtC,OAAL,CAAauC,eAArC;AACA,WAAKF,YAAL,GAAoB,IAApB;AACAX,MAAAA,KAAK,GAAG,EAAR;AACAvB,MAAAA,OAAO,GAAG,KAAKH,OAAL,CAAaG,OAAvB;AACAqB,MAAAA,OAAO,GAAG,KAAKxB,OAAL,CAAawB,OAAvB;;AACA,WAAKZ,SAAL,CAAe4B,SAAf,GAA4B,UAASR,KAAT,EAAgB;AAC1C,eAAO,UAASS,IAAT,EAAe;AACpB,cAAIrE,GAAJ,EAASgD,QAAT,EAAmBD,GAAnB,EAAwBuB,YAAxB,EAAsC5C,GAAtC;AACAqB,UAAAA,GAAG,GAAG,EAAN;AACAA,UAAAA,GAAG,CAACK,OAAD,CAAH,GAAe,EAAf;;AACA,cAAI,CAACQ,KAAK,CAAChC,OAAN,CAAc2C,WAAnB,EAAgC;AAC9B7C,YAAAA,GAAG,GAAG2C,IAAI,CAACG,UAAX;;AACA,iBAAKxE,GAAL,IAAY0B,GAAZ,EAAiB;AACf,kBAAI,CAACzB,OAAO,CAACC,IAAR,CAAawB,GAAb,EAAkB1B,GAAlB,CAAL,EAA6B;;AAC7B,kBAAI,EAAE+B,OAAO,IAAIgB,GAAb,KAAqB,CAACa,KAAK,CAAChC,OAAN,CAAc6C,UAAxC,EAAoD;AAClD1B,gBAAAA,GAAG,CAAChB,OAAD,CAAH,GAAe,EAAf;AACD;;AACDiB,cAAAA,QAAQ,GAAGY,KAAK,CAAChC,OAAN,CAAc8C,mBAAd,GAAoCtF,WAAW,CAACwE,KAAK,CAAChC,OAAN,CAAc8C,mBAAf,EAAoCL,IAAI,CAACG,UAAL,CAAgBxE,GAAhB,CAApC,EAA0DA,GAA1D,CAA/C,GAAgHqE,IAAI,CAACG,UAAL,CAAgBxE,GAAhB,CAA3H;AACAsE,cAAAA,YAAY,GAAGV,KAAK,CAAChC,OAAN,CAAc+C,kBAAd,GAAmCvF,WAAW,CAACwE,KAAK,CAAChC,OAAN,CAAc+C,kBAAf,EAAmC3E,GAAnC,CAA9C,GAAwFA,GAAvG;;AACA,kBAAI4D,KAAK,CAAChC,OAAN,CAAc6C,UAAlB,EAA8B;AAC5Bb,gBAAAA,KAAK,CAACpC,YAAN,CAAmBuB,GAAnB,EAAwBuB,YAAxB,EAAsCtB,QAAtC;AACD,eAFD,MAEO;AACLD,gBAAAA,GAAG,CAAChB,OAAD,CAAH,CAAauC,YAAb,IAA6BtB,QAA7B;AACD;AACF;AACF;;AACDD,UAAAA,GAAG,CAAC,OAAD,CAAH,GAAea,KAAK,CAAChC,OAAN,CAAcK,iBAAd,GAAkC7C,WAAW,CAACwE,KAAK,CAAChC,OAAN,CAAcK,iBAAf,EAAkCoC,IAAI,CAACO,IAAvC,CAA7C,GAA4FP,IAAI,CAACO,IAAhH;;AACA,cAAIhB,KAAK,CAAChC,OAAN,CAAcC,KAAlB,EAAyB;AACvBkB,YAAAA,GAAG,CAACa,KAAK,CAAChC,OAAN,CAAcE,QAAf,CAAH,GAA8B;AAC5B+C,cAAAA,GAAG,EAAER,IAAI,CAACQ,GADkB;AAE5BC,cAAAA,KAAK,EAAET,IAAI,CAACS;AAFgB,aAA9B;AAID;;AACD,iBAAOxB,KAAK,CAACH,IAAN,CAAWJ,GAAX,CAAP;AACD,SA5BD;AA6BD,OA9B0B,CA8BxB,IA9BwB,CAA3B;;AA+BA,WAAKP,SAAL,CAAeuC,UAAf,GAA6B,UAASnB,KAAT,EAAgB;AAC3C,eAAO,YAAW;AAChB,cAAIoB,KAAJ,EAAWC,QAAX,EAAqBjF,GAArB,EAA0BqE,IAA1B,EAAgCa,QAAhC,EAA0CnC,GAA1C,EAA+CoC,QAA/C,EAAyDC,GAAzD,EAA8DC,CAA9D,EAAiEC,KAAjE;AACAvC,UAAAA,GAAG,GAAGO,KAAK,CAACiC,GAAN,EAAN;AACAL,UAAAA,QAAQ,GAAGnC,GAAG,CAAC,OAAD,CAAd;;AACA,cAAI,CAACa,KAAK,CAAChC,OAAN,CAAc4D,gBAAf,IAAmC,CAAC5B,KAAK,CAAChC,OAAN,CAAc6D,qBAAtD,EAA6E;AAC3E,mBAAO1C,GAAG,CAAC,OAAD,CAAV;AACD;;AACD,cAAIA,GAAG,CAACiC,KAAJ,KAAc,IAAlB,EAAwB;AACtBA,YAAAA,KAAK,GAAGjC,GAAG,CAACiC,KAAZ;AACA,mBAAOjC,GAAG,CAACiC,KAAX;AACD;;AACDK,UAAAA,CAAC,GAAG/B,KAAK,CAACA,KAAK,CAAC1C,MAAN,GAAe,CAAhB,CAAT;;AACA,cAAImC,GAAG,CAACK,OAAD,CAAH,CAAasC,KAAb,CAAmB,OAAnB,KAA+B,CAACV,KAApC,EAA2C;AACzCC,YAAAA,QAAQ,GAAGlC,GAAG,CAACK,OAAD,CAAd;AACA,mBAAOL,GAAG,CAACK,OAAD,CAAV;AACD,WAHD,MAGO;AACL,gBAAIQ,KAAK,CAAChC,OAAN,CAAc8B,IAAlB,EAAwB;AACtBX,cAAAA,GAAG,CAACK,OAAD,CAAH,GAAeL,GAAG,CAACK,OAAD,CAAH,CAAaM,IAAb,EAAf;AACD;;AACD,gBAAIE,KAAK,CAAChC,OAAN,CAAcO,SAAlB,EAA6B;AAC3BY,cAAAA,GAAG,CAACK,OAAD,CAAH,GAAeL,GAAG,CAACK,OAAD,CAAH,CAAauC,OAAb,CAAqB,SAArB,EAAgC,GAAhC,EAAqCjC,IAArC,EAAf;AACD;;AACDX,YAAAA,GAAG,CAACK,OAAD,CAAH,GAAeQ,KAAK,CAAChC,OAAN,CAAcgE,eAAd,GAAgCxG,WAAW,CAACwE,KAAK,CAAChC,OAAN,CAAcgE,eAAf,EAAgC7C,GAAG,CAACK,OAAD,CAAnC,EAA8C8B,QAA9C,CAA3C,GAAqGnC,GAAG,CAACK,OAAD,CAAvH;;AACA,gBAAI1C,MAAM,CAACC,IAAP,CAAYoC,GAAZ,EAAiBnC,MAAjB,KAA4B,CAA5B,IAAiCwC,OAAO,IAAIL,GAA5C,IAAmD,CAACa,KAAK,CAACM,gBAA9D,EAAgF;AAC9EnB,cAAAA,GAAG,GAAGA,GAAG,CAACK,OAAD,CAAT;AACD;AACF;;AACD,cAAIjE,OAAO,CAAC4D,GAAD,CAAX,EAAkB;AAChBA,YAAAA,GAAG,GAAGa,KAAK,CAAChC,OAAN,CAAciE,QAAd,KAA2B,EAA3B,GAAgCjC,KAAK,CAAChC,OAAN,CAAciE,QAA9C,GAAyDZ,QAA/D;AACD;;AACD,cAAIrB,KAAK,CAAChC,OAAN,CAAckE,SAAd,IAA2B,IAA/B,EAAqC;AACnCR,YAAAA,KAAK,GAAG,MAAQ,YAAW;AACzB,kBAAIxE,CAAJ,EAAOC,GAAP,EAAYgF,OAAZ;AACAA,cAAAA,OAAO,GAAG,EAAV;;AACA,mBAAKjF,CAAC,GAAG,CAAJ,EAAOC,GAAG,GAAGuC,KAAK,CAAC1C,MAAxB,EAAgCE,CAAC,GAAGC,GAApC,EAAyCD,CAAC,EAA1C,EAA8C;AAC5CuD,gBAAAA,IAAI,GAAGf,KAAK,CAACxC,CAAD,CAAZ;AACAiF,gBAAAA,OAAO,CAAC5C,IAAR,CAAakB,IAAI,CAAC,OAAD,CAAjB;AACD;;AACD,qBAAO0B,OAAP;AACD,aARc,EAAD,CAQRC,MARQ,CAQDd,QARC,EAQSe,IART,CAQc,GARd,CAAd;;AASA,aAAC,YAAW;AACV,kBAAI5D,GAAJ;;AACA,kBAAI;AACF,uBAAOU,GAAG,GAAGa,KAAK,CAAChC,OAAN,CAAckE,SAAd,CAAwBR,KAAxB,EAA+BD,CAAC,IAAIA,CAAC,CAACH,QAAD,CAArC,EAAiDnC,GAAjD,CAAb;AACD,eAFD,CAEE,OAAOH,MAAP,EAAe;AACfP,gBAAAA,GAAG,GAAGO,MAAN;AACA,uBAAOgB,KAAK,CAACd,IAAN,CAAW,OAAX,EAAoBT,GAApB,CAAP;AACD;AACF,aARD;AASD;;AACD,cAAIuB,KAAK,CAAChC,OAAN,CAAc4D,gBAAd,IAAkC,CAAC5B,KAAK,CAAChC,OAAN,CAAc6C,UAAjD,IAA+D,OAAO1B,GAAP,KAAe,QAAlF,EAA4F;AAC1F,gBAAI,CAACa,KAAK,CAAChC,OAAN,CAAc6D,qBAAnB,EAA0C;AACxCpB,cAAAA,IAAI,GAAG,EAAP;;AACA,kBAAIT,KAAK,CAAChC,OAAN,CAAcG,OAAd,IAAyBgB,GAA7B,EAAkC;AAChCsB,gBAAAA,IAAI,CAACT,KAAK,CAAChC,OAAN,CAAcG,OAAf,CAAJ,GAA8BgB,GAAG,CAACa,KAAK,CAAChC,OAAN,CAAcG,OAAf,CAAjC;AACA,uBAAOgB,GAAG,CAACa,KAAK,CAAChC,OAAN,CAAcG,OAAf,CAAV;AACD;;AACD,kBAAI,CAAC6B,KAAK,CAAChC,OAAN,CAAcsE,eAAf,IAAkCtC,KAAK,CAAChC,OAAN,CAAcwB,OAAd,IAAyBL,GAA/D,EAAoE;AAClEsB,gBAAAA,IAAI,CAACT,KAAK,CAAChC,OAAN,CAAcwB,OAAf,CAAJ,GAA8BL,GAAG,CAACa,KAAK,CAAChC,OAAN,CAAcwB,OAAf,CAAjC;AACA,uBAAOL,GAAG,CAACa,KAAK,CAAChC,OAAN,CAAcwB,OAAf,CAAV;AACD;;AACD,kBAAI1C,MAAM,CAACyF,mBAAP,CAA2BpD,GAA3B,EAAgCnC,MAAhC,GAAyC,CAA7C,EAAgD;AAC9CyD,gBAAAA,IAAI,CAACT,KAAK,CAAChC,OAAN,CAAcwE,QAAf,CAAJ,GAA+BrD,GAA/B;AACD;;AACDA,cAAAA,GAAG,GAAGsB,IAAN;AACD,aAdD,MAcO,IAAIgB,CAAJ,EAAO;AACZA,cAAAA,CAAC,CAACzB,KAAK,CAAChC,OAAN,CAAcwE,QAAf,CAAD,GAA4Bf,CAAC,CAACzB,KAAK,CAAChC,OAAN,CAAcwE,QAAf,CAAD,IAA6B,EAAzD;AACAjB,cAAAA,QAAQ,GAAG,EAAX;;AACA,mBAAKnF,GAAL,IAAY+C,GAAZ,EAAiB;AACf,oBAAI,CAAC9C,OAAO,CAACC,IAAR,CAAa6C,GAAb,EAAkB/C,GAAlB,CAAL,EAA6B;AAC7BmF,gBAAAA,QAAQ,CAACnF,GAAD,CAAR,GAAgB+C,GAAG,CAAC/C,GAAD,CAAnB;AACD;;AACDqF,cAAAA,CAAC,CAACzB,KAAK,CAAChC,OAAN,CAAcwE,QAAf,CAAD,CAA0BjD,IAA1B,CAA+BgC,QAA/B;;AACA,qBAAOpC,GAAG,CAAC,OAAD,CAAV;;AACA,kBAAIrC,MAAM,CAACC,IAAP,CAAYoC,GAAZ,EAAiBnC,MAAjB,KAA4B,CAA5B,IAAiCwC,OAAO,IAAIL,GAA5C,IAAmD,CAACa,KAAK,CAACM,gBAA9D,EAAgF;AAC9EnB,gBAAAA,GAAG,GAAGA,GAAG,CAACK,OAAD,CAAT;AACD;AACF;AACF;;AACD,cAAIE,KAAK,CAAC1C,MAAN,GAAe,CAAnB,EAAsB;AACpB,mBAAOgD,KAAK,CAACpC,YAAN,CAAmB6D,CAAnB,EAAsBH,QAAtB,EAAgCnC,GAAhC,CAAP;AACD,WAFD,MAEO;AACL,gBAAIa,KAAK,CAAChC,OAAN,CAAcyE,YAAlB,EAAgC;AAC9BjB,cAAAA,GAAG,GAAGrC,GAAN;AACAA,cAAAA,GAAG,GAAG,EAAN;AACAA,cAAAA,GAAG,CAACmC,QAAD,CAAH,GAAgBE,GAAhB;AACD;;AACDxB,YAAAA,KAAK,CAACK,YAAN,GAAqBlB,GAArB;AACAa,YAAAA,KAAK,CAACpB,SAAN,CAAgBwB,KAAhB,GAAwB,IAAxB;AACA,mBAAOJ,KAAK,CAACd,IAAN,CAAW,KAAX,EAAkBc,KAAK,CAACK,YAAxB,CAAP;AACD;AACF,SA3FD;AA4FD,OA7F2B,CA6FzB,IA7FyB,CAA5B;;AA8FAZ,MAAAA,MAAM,GAAI,UAASO,KAAT,EAAgB;AACxB,eAAO,UAAS0C,IAAT,EAAe;AACpB,cAAIC,SAAJ,EAAelB,CAAf;AACAA,UAAAA,CAAC,GAAG/B,KAAK,CAACA,KAAK,CAAC1C,MAAN,GAAe,CAAhB,CAAT;;AACA,cAAIyE,CAAJ,EAAO;AACLA,YAAAA,CAAC,CAACjC,OAAD,CAAD,IAAckD,IAAd;;AACA,gBAAI1C,KAAK,CAAChC,OAAN,CAAc4D,gBAAd,IAAkC5B,KAAK,CAAChC,OAAN,CAAc6D,qBAAhD,IAAyE7B,KAAK,CAAChC,OAAN,CAAcsE,eAAvF,KAA2GtC,KAAK,CAAChC,OAAN,CAAc4E,iBAAd,IAAmCF,IAAI,CAACX,OAAL,CAAa,MAAb,EAAqB,EAArB,EAAyBjC,IAAzB,OAAoC,EAAlL,CAAJ,EAA2L;AACzL2B,cAAAA,CAAC,CAACzB,KAAK,CAAChC,OAAN,CAAcwE,QAAf,CAAD,GAA4Bf,CAAC,CAACzB,KAAK,CAAChC,OAAN,CAAcwE,QAAf,CAAD,IAA6B,EAAzD;AACAG,cAAAA,SAAS,GAAG;AACV,yBAAS;AADC,eAAZ;AAGAA,cAAAA,SAAS,CAACnD,OAAD,CAAT,GAAqBkD,IAArB;;AACA,kBAAI1C,KAAK,CAAChC,OAAN,CAAcO,SAAlB,EAA6B;AAC3BoE,gBAAAA,SAAS,CAACnD,OAAD,CAAT,GAAqBmD,SAAS,CAACnD,OAAD,CAAT,CAAmBuC,OAAnB,CAA2B,SAA3B,EAAsC,GAAtC,EAA2CjC,IAA3C,EAArB;AACD;;AACD2B,cAAAA,CAAC,CAACzB,KAAK,CAAChC,OAAN,CAAcwE,QAAf,CAAD,CAA0BjD,IAA1B,CAA+BoD,SAA/B;AACD;;AACD,mBAAOlB,CAAP;AACD;AACF,SAlBD;AAmBD,OApBQ,CAoBN,IApBM,CAAT;;AAqBA,WAAK7C,SAAL,CAAea,MAAf,GAAwBA,MAAxB;AACA,aAAO,KAAKb,SAAL,CAAeiE,OAAf,GAA0B,UAAS7C,KAAT,EAAgB;AAC/C,eAAO,UAAS0C,IAAT,EAAe;AACpB,cAAIjB,CAAJ;AACAA,UAAAA,CAAC,GAAGhC,MAAM,CAACiD,IAAD,CAAV;;AACA,cAAIjB,CAAJ,EAAO;AACL,mBAAOA,CAAC,CAACL,KAAF,GAAU,IAAjB;AACD;AACF,SAND;AAOD,OAR+B,CAQ7B,IAR6B,CAAhC;AASD,KA5LD;;AA8LA9D,IAAAA,MAAM,CAACb,SAAP,CAAiBiB,WAAjB,GAA+B,UAASoF,GAAT,EAAcC,EAAd,EAAkB;AAC/C,UAAItE,GAAJ;;AACA,UAAKsE,EAAE,IAAI,IAAP,IAAgB,OAAOA,EAAP,KAAc,UAAlC,EAA8C;AAC5C,aAAKC,EAAL,CAAQ,KAAR,EAAe,UAASC,MAAT,EAAiB;AAC9B,eAAKtF,KAAL;AACA,iBAAOoF,EAAE,CAAC,IAAD,EAAOE,MAAP,CAAT;AACD,SAHD;AAIA,aAAKD,EAAL,CAAQ,OAAR,EAAiB,UAASvE,GAAT,EAAc;AAC7B,eAAKd,KAAL;AACA,iBAAOoF,EAAE,CAACtE,GAAD,CAAT;AACD,SAHD;AAID;;AACD,UAAI;AACFqE,QAAAA,GAAG,GAAGA,GAAG,CAACI,QAAJ,EAAN;;AACA,YAAIJ,GAAG,CAAChD,IAAJ,OAAe,EAAnB,EAAuB;AACrB,eAAKZ,IAAL,CAAU,KAAV,EAAiB,IAAjB;AACA,iBAAO,IAAP;AACD;;AACD4D,QAAAA,GAAG,GAAG1H,GAAG,CAAC+H,QAAJ,CAAaL,GAAb,CAAN;;AACA,YAAI,KAAK9E,OAAL,CAAaoF,KAAjB,EAAwB;AACtB,eAAK1E,SAAL,GAAiBoE,GAAjB;AACAnH,UAAAA,YAAY,CAAC,KAAKkC,YAAN,CAAZ;AACA,iBAAO,KAAKe,SAAZ;AACD;;AACD,eAAO,KAAKA,SAAL,CAAeC,KAAf,CAAqBiE,GAArB,EAA0BhE,KAA1B,EAAP;AACD,OAbD,CAaE,OAAOE,MAAP,EAAe;AACfP,QAAAA,GAAG,GAAGO,MAAN;;AACA,YAAI,EAAE,KAAKJ,SAAL,CAAeK,SAAf,IAA4B,KAAKL,SAAL,CAAewB,KAA7C,CAAJ,EAAyD;AACvD,eAAKlB,IAAL,CAAU,OAAV,EAAmBT,GAAnB;AACA,iBAAO,KAAKG,SAAL,CAAeK,SAAf,GAA2B,IAAlC;AACD,SAHD,MAGO,IAAI,KAAKL,SAAL,CAAewB,KAAnB,EAA0B;AAC/B,gBAAM3B,GAAN;AACD;AACF;AACF,KAlCD;;AAoCAnB,IAAAA,MAAM,CAACb,SAAP,CAAiBgB,kBAAjB,GAAsC,UAASqF,GAAT,EAAc;AAClD,aAAO,IAAIO,OAAJ,CAAa,UAASrD,KAAT,EAAgB;AAClC,eAAO,UAASsD,OAAT,EAAkBC,MAAlB,EAA0B;AAC/B,iBAAOvD,KAAK,CAACtC,WAAN,CAAkBoF,GAAlB,EAAuB,UAASrE,GAAT,EAAcV,KAAd,EAAqB;AACjD,gBAAIU,GAAJ,EAAS;AACP,qBAAO8E,MAAM,CAAC9E,GAAD,CAAb;AACD,aAFD,MAEO;AACL,qBAAO6E,OAAO,CAACvF,KAAD,CAAd;AACD;AACF,WANM,CAAP;AAOD,SARD;AASD,OAVkB,CAUhB,IAVgB,CAAZ,CAAP;AAWD,KAZD;;AAcA,WAAOT,MAAP;AAED,GA7TgB,CA6TdhC,MA7Tc,CAAjB;;AA+TA+B,EAAAA,OAAO,CAACK,WAAR,GAAsB,UAASoF,GAAT,EAAcU,CAAd,EAAiBC,CAAjB,EAAoB;AACxC,QAAIV,EAAJ,EAAQ/E,OAAR,EAAiB4B,MAAjB;;AACA,QAAI6D,CAAC,IAAI,IAAT,EAAe;AACb,UAAI,OAAOA,CAAP,KAAa,UAAjB,EAA6B;AAC3BV,QAAAA,EAAE,GAAGU,CAAL;AACD;;AACD,UAAI,OAAOD,CAAP,KAAa,QAAjB,EAA2B;AACzBxF,QAAAA,OAAO,GAAGwF,CAAV;AACD;AACF,KAPD,MAOO;AACL,UAAI,OAAOA,CAAP,KAAa,UAAjB,EAA6B;AAC3BT,QAAAA,EAAE,GAAGS,CAAL;AACD;;AACDxF,MAAAA,OAAO,GAAG,EAAV;AACD;;AACD4B,IAAAA,MAAM,GAAG,IAAIvC,OAAO,CAACC,MAAZ,CAAmBU,OAAnB,CAAT;AACA,WAAO4B,MAAM,CAAClC,WAAP,CAAmBoF,GAAnB,EAAwBC,EAAxB,CAAP;AACD,GAjBD;;AAmBA1F,EAAAA,OAAO,CAACI,kBAAR,GAA6B,UAASqF,GAAT,EAAcU,CAAd,EAAiB;AAC5C,QAAIxF,OAAJ,EAAa4B,MAAb;;AACA,QAAI,OAAO4D,CAAP,KAAa,QAAjB,EAA2B;AACzBxF,MAAAA,OAAO,GAAGwF,CAAV;AACD;;AACD5D,IAAAA,MAAM,GAAG,IAAIvC,OAAO,CAACC,MAAZ,CAAmBU,OAAnB,CAAT;AACA,WAAO4B,MAAM,CAACnC,kBAAP,CAA0BqF,GAA1B,CAAP;AACD,GAPD;AASD,CA3XD,EA2XGxG,IA3XH,CA2XQ,IA3XR","sourcesContent":["// Generated by CoffeeScript 1.12.7\n(function() {\n  \"use strict\";\n  var bom, defaults, events, isEmpty, processItem, processors, sax, setImmediate,\n    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n    hasProp = {}.hasOwnProperty;\n\n  sax = require('sax');\n\n  events = require('events');\n\n  bom = require('./bom');\n\n  processors = require('./processors');\n\n  setImmediate = require('timers').setImmediate;\n\n  defaults = require('./defaults').defaults;\n\n  isEmpty = function(thing) {\n    return typeof thing === \"object\" && (thing != null) && Object.keys(thing).length === 0;\n  };\n\n  processItem = function(processors, item, key) {\n    var i, len, process;\n    for (i = 0, len = processors.length; i < len; i++) {\n      process = processors[i];\n      item = process(item, key);\n    }\n    return item;\n  };\n\n  exports.Parser = (function(superClass) {\n    extend(Parser, superClass);\n\n    function Parser(opts) {\n      this.parseStringPromise = bind(this.parseStringPromise, this);\n      this.parseString = bind(this.parseString, this);\n      this.reset = bind(this.reset, this);\n      this.assignOrPush = bind(this.assignOrPush, this);\n      this.processAsync = bind(this.processAsync, this);\n      var key, ref, value;\n      if (!(this instanceof exports.Parser)) {\n        return new exports.Parser(opts);\n      }\n      this.options = {};\n      ref = defaults[\"0.2\"];\n      for (key in ref) {\n        if (!hasProp.call(ref, key)) continue;\n        value = ref[key];\n        this.options[key] = value;\n      }\n      for (key in opts) {\n        if (!hasProp.call(opts, key)) continue;\n        value = opts[key];\n        this.options[key] = value;\n      }\n      if (this.options.xmlns) {\n        this.options.xmlnskey = this.options.attrkey + \"ns\";\n      }\n      if (this.options.normalizeTags) {\n        if (!this.options.tagNameProcessors) {\n          this.options.tagNameProcessors = [];\n        }\n        this.options.tagNameProcessors.unshift(processors.normalize);\n      }\n      this.reset();\n    }\n\n    Parser.prototype.processAsync = function() {\n      var chunk, err;\n      try {\n        if (this.remaining.length <= this.options.chunkSize) {\n          chunk = this.remaining;\n          this.remaining = '';\n          this.saxParser = this.saxParser.write(chunk);\n          return this.saxParser.close();\n        } else {\n          chunk = this.remaining.substr(0, this.options.chunkSize);\n          this.remaining = this.remaining.substr(this.options.chunkSize, this.remaining.length);\n          this.saxParser = this.saxParser.write(chunk);\n          return setImmediate(this.processAsync);\n        }\n      } catch (error1) {\n        err = error1;\n        if (!this.saxParser.errThrown) {\n          this.saxParser.errThrown = true;\n          return this.emit(err);\n        }\n      }\n    };\n\n    Parser.prototype.assignOrPush = function(obj, key, newValue) {\n      if (!(key in obj)) {\n        if (!this.options.explicitArray) {\n          return obj[key] = newValue;\n        } else {\n          return obj[key] = [newValue];\n        }\n      } else {\n        if (!(obj[key] instanceof Array)) {\n          obj[key] = [obj[key]];\n        }\n        return obj[key].push(newValue);\n      }\n    };\n\n    Parser.prototype.reset = function() {\n      var attrkey, charkey, ontext, stack;\n      this.removeAllListeners();\n      this.saxParser = sax.parser(this.options.strict, {\n        trim: false,\n        normalize: false,\n        xmlns: this.options.xmlns\n      });\n      this.saxParser.errThrown = false;\n      this.saxParser.onerror = (function(_this) {\n        return function(error) {\n          _this.saxParser.resume();\n          if (!_this.saxParser.errThrown) {\n            _this.saxParser.errThrown = true;\n            return _this.emit(\"error\", error);\n          }\n        };\n      })(this);\n      this.saxParser.onend = (function(_this) {\n        return function() {\n          if (!_this.saxParser.ended) {\n            _this.saxParser.ended = true;\n            return _this.emit(\"end\", _this.resultObject);\n          }\n        };\n      })(this);\n      this.saxParser.ended = false;\n      this.EXPLICIT_CHARKEY = this.options.explicitCharkey;\n      this.resultObject = null;\n      stack = [];\n      attrkey = this.options.attrkey;\n      charkey = this.options.charkey;\n      this.saxParser.onopentag = (function(_this) {\n        return function(node) {\n          var key, newValue, obj, processedKey, ref;\n          obj = {};\n          obj[charkey] = \"\";\n          if (!_this.options.ignoreAttrs) {\n            ref = node.attributes;\n            for (key in ref) {\n              if (!hasProp.call(ref, key)) continue;\n              if (!(attrkey in obj) && !_this.options.mergeAttrs) {\n                obj[attrkey] = {};\n              }\n              newValue = _this.options.attrValueProcessors ? processItem(_this.options.attrValueProcessors, node.attributes[key], key) : node.attributes[key];\n              processedKey = _this.options.attrNameProcessors ? processItem(_this.options.attrNameProcessors, key) : key;\n              if (_this.options.mergeAttrs) {\n                _this.assignOrPush(obj, processedKey, newValue);\n              } else {\n                obj[attrkey][processedKey] = newValue;\n              }\n            }\n          }\n          obj[\"#name\"] = _this.options.tagNameProcessors ? processItem(_this.options.tagNameProcessors, node.name) : node.name;\n          if (_this.options.xmlns) {\n            obj[_this.options.xmlnskey] = {\n              uri: node.uri,\n              local: node.local\n            };\n          }\n          return stack.push(obj);\n        };\n      })(this);\n      this.saxParser.onclosetag = (function(_this) {\n        return function() {\n          var cdata, emptyStr, key, node, nodeName, obj, objClone, old, s, xpath;\n          obj = stack.pop();\n          nodeName = obj[\"#name\"];\n          if (!_this.options.explicitChildren || !_this.options.preserveChildrenOrder) {\n            delete obj[\"#name\"];\n          }\n          if (obj.cdata === true) {\n            cdata = obj.cdata;\n            delete obj.cdata;\n          }\n          s = stack[stack.length - 1];\n          if (obj[charkey].match(/^\\s*$/) && !cdata) {\n            emptyStr = obj[charkey];\n            delete obj[charkey];\n          } else {\n            if (_this.options.trim) {\n              obj[charkey] = obj[charkey].trim();\n            }\n            if (_this.options.normalize) {\n              obj[charkey] = obj[charkey].replace(/\\s{2,}/g, \" \").trim();\n            }\n            obj[charkey] = _this.options.valueProcessors ? processItem(_this.options.valueProcessors, obj[charkey], nodeName) : obj[charkey];\n            if (Object.keys(obj).length === 1 && charkey in obj && !_this.EXPLICIT_CHARKEY) {\n              obj = obj[charkey];\n            }\n          }\n          if (isEmpty(obj)) {\n            obj = _this.options.emptyTag !== '' ? _this.options.emptyTag : emptyStr;\n          }\n          if (_this.options.validator != null) {\n            xpath = \"/\" + ((function() {\n              var i, len, results;\n              results = [];\n              for (i = 0, len = stack.length; i < len; i++) {\n                node = stack[i];\n                results.push(node[\"#name\"]);\n              }\n              return results;\n            })()).concat(nodeName).join(\"/\");\n            (function() {\n              var err;\n              try {\n                return obj = _this.options.validator(xpath, s && s[nodeName], obj);\n              } catch (error1) {\n                err = error1;\n                return _this.emit(\"error\", err);\n              }\n            })();\n          }\n          if (_this.options.explicitChildren && !_this.options.mergeAttrs && typeof obj === 'object') {\n            if (!_this.options.preserveChildrenOrder) {\n              node = {};\n              if (_this.options.attrkey in obj) {\n                node[_this.options.attrkey] = obj[_this.options.attrkey];\n                delete obj[_this.options.attrkey];\n              }\n              if (!_this.options.charsAsChildren && _this.options.charkey in obj) {\n                node[_this.options.charkey] = obj[_this.options.charkey];\n                delete obj[_this.options.charkey];\n              }\n              if (Object.getOwnPropertyNames(obj).length > 0) {\n                node[_this.options.childkey] = obj;\n              }\n              obj = node;\n            } else if (s) {\n              s[_this.options.childkey] = s[_this.options.childkey] || [];\n              objClone = {};\n              for (key in obj) {\n                if (!hasProp.call(obj, key)) continue;\n                objClone[key] = obj[key];\n              }\n              s[_this.options.childkey].push(objClone);\n              delete obj[\"#name\"];\n              if (Object.keys(obj).length === 1 && charkey in obj && !_this.EXPLICIT_CHARKEY) {\n                obj = obj[charkey];\n              }\n            }\n          }\n          if (stack.length > 0) {\n            return _this.assignOrPush(s, nodeName, obj);\n          } else {\n            if (_this.options.explicitRoot) {\n              old = obj;\n              obj = {};\n              obj[nodeName] = old;\n            }\n            _this.resultObject = obj;\n            _this.saxParser.ended = true;\n            return _this.emit(\"end\", _this.resultObject);\n          }\n        };\n      })(this);\n      ontext = (function(_this) {\n        return function(text) {\n          var charChild, s;\n          s = stack[stack.length - 1];\n          if (s) {\n            s[charkey] += text;\n            if (_this.options.explicitChildren && _this.options.preserveChildrenOrder && _this.options.charsAsChildren && (_this.options.includeWhiteChars || text.replace(/\\\\n/g, '').trim() !== '')) {\n              s[_this.options.childkey] = s[_this.options.childkey] || [];\n              charChild = {\n                '#name': '__text__'\n              };\n              charChild[charkey] = text;\n              if (_this.options.normalize) {\n                charChild[charkey] = charChild[charkey].replace(/\\s{2,}/g, \" \").trim();\n              }\n              s[_this.options.childkey].push(charChild);\n            }\n            return s;\n          }\n        };\n      })(this);\n      this.saxParser.ontext = ontext;\n      return this.saxParser.oncdata = (function(_this) {\n        return function(text) {\n          var s;\n          s = ontext(text);\n          if (s) {\n            return s.cdata = true;\n          }\n        };\n      })(this);\n    };\n\n    Parser.prototype.parseString = function(str, cb) {\n      var err;\n      if ((cb != null) && typeof cb === \"function\") {\n        this.on(\"end\", function(result) {\n          this.reset();\n          return cb(null, result);\n        });\n        this.on(\"error\", function(err) {\n          this.reset();\n          return cb(err);\n        });\n      }\n      try {\n        str = str.toString();\n        if (str.trim() === '') {\n          this.emit(\"end\", null);\n          return true;\n        }\n        str = bom.stripBOM(str);\n        if (this.options.async) {\n          this.remaining = str;\n          setImmediate(this.processAsync);\n          return this.saxParser;\n        }\n        return this.saxParser.write(str).close();\n      } catch (error1) {\n        err = error1;\n        if (!(this.saxParser.errThrown || this.saxParser.ended)) {\n          this.emit('error', err);\n          return this.saxParser.errThrown = true;\n        } else if (this.saxParser.ended) {\n          throw err;\n        }\n      }\n    };\n\n    Parser.prototype.parseStringPromise = function(str) {\n      return new Promise((function(_this) {\n        return function(resolve, reject) {\n          return _this.parseString(str, function(err, value) {\n            if (err) {\n              return reject(err);\n            } else {\n              return resolve(value);\n            }\n          });\n        };\n      })(this));\n    };\n\n    return Parser;\n\n  })(events);\n\n  exports.parseString = function(str, a, b) {\n    var cb, options, parser;\n    if (b != null) {\n      if (typeof b === 'function') {\n        cb = b;\n      }\n      if (typeof a === 'object') {\n        options = a;\n      }\n    } else {\n      if (typeof a === 'function') {\n        cb = a;\n      }\n      options = {};\n    }\n    parser = new exports.Parser(options);\n    return parser.parseString(str, cb);\n  };\n\n  exports.parseStringPromise = function(str, a) {\n    var options, parser;\n    if (typeof a === 'object') {\n      options = a;\n    }\n    parser = new exports.Parser(options);\n    return parser.parseStringPromise(str);\n  };\n\n}).call(this);\n"]},"metadata":{},"sourceType":"script"}