var e;
(e =
  "function" == typeof Symbol && "symbol" == typeof Symbol.iterator
    ? function (e) {
        return typeof e;
      }
    : function (e) {
        return e &&
          "function" == typeof Symbol &&
          e.constructor === Symbol &&
          e !== Symbol.prototype
          ? "symbol"
          : typeof e;
      }),
  (function (t) {
    "object" == ("undefined" == typeof exports ? "undefined" : e(exports)) &&
    "undefined" != typeof module
      ? (module.exports = t())
      : "function" == typeof define && define.amd
      ? define([], t)
      : (("undefined" != typeof window
          ? window
          : "undefined" != typeof global
          ? global
          : "undefined" != typeof self
          ? self
          : this
        ).html2json = t());
  })(function () {
    function e(e) {
      for (var t = {}, n = e.split(","), r = 0; r < n.length; r++) t[n[r]] = !0;
      return t;
    }
    var t =
        /^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/,
      n = /^<\/([-A-Za-z0-9_]+)[^>]*>/,
      r =
        /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g,
      o = e(
        "area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr"
      ),
      a = e(
        "a,address,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video"
      ),
      i = e(
        "abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var"
      ),
      s = e("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr"),
      l = e(
        "checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"
      ),
      d = e("script,style"),
      c = function (e, c) {
        function f(e, t) {
          if (t) for (n = m.length - 1; n >= 0 && m[n] != t; n--);
          else var n = 0;
          if (n >= 0) {
            for (var r = m.length - 1; r >= n; r--) c.end && c.end(m[r]);
            m.length = n;
          }
        }
        var u,
          h,
          p,
          m = [],
          b = e;
        for (
          m.last = function () {
            return this[this.length - 1];
          };
          e;

        ) {
          if (((h = !0), m.last() && d[m.last()]))
            (e = e.replace(
              new RegExp("([\\s\\S]*?)</" + m.last() + "[^>]*>"),
              function (e, t) {
                return (
                  (t = t.replace(
                    /<!--([\s\S]*?)-->|<!\[CDATA\[([\s\S]*?)]]>/g,
                    "$1$2"
                  )),
                  c.chars && c.chars(t),
                  ""
                );
              }
            )),
              f(0, m.last());
          else if (
            (0 == e.indexOf("\x3c!--")
              ? (u = e.indexOf("--\x3e")) >= 0 &&
                (c.comment && c.comment(e.substring(4, u)),
                (e = e.substring(u + 3)),
                (h = !1))
              : 0 == e.indexOf("</")
              ? (p = e.match(n)) &&
                ((e = e.substring(p[0].length)), p[0].replace(n, f), (h = !1))
              : 0 == e.indexOf("<") &&
                (p = e.match(t)) &&
                ((e = e.substring(p[0].length)),
                p[0].replace(t, function (e, t, n, d) {
                  if (((t = t.toLowerCase()), a[t]))
                    for (; m.last() && i[m.last()]; ) f(0, m.last());
                  if (
                    (s[t] && m.last() == t && f(0, t),
                    (d = o[t] || !!d) || m.push(t),
                    c.start)
                  ) {
                    var u = [];
                    n.replace(r, function (e, t) {
                      var n = arguments[2]
                        ? arguments[2]
                        : arguments[3]
                        ? arguments[3]
                        : arguments[4]
                        ? arguments[4]
                        : l[t]
                        ? t
                        : "";
                      u.push({
                        name: t,
                        value: n,
                        escaped: n.replace(/(^|[^\\])"/g, '$1\\"'),
                      });
                    }),
                      c.start && c.start(t, u, d);
                  }
                }),
                (h = !1)),
            h)
          ) {
            var g = (u = e.indexOf("<")) < 0 ? e : e.substring(0, u);
            (e = u < 0 ? "" : e.substring(u)), c.chars && c.chars(g);
          }
          if (e == b) throw "Parse Error: " + e;
          b = e;
        }
        f();
      };
    return function (e) {
      e = (function (e) {
        return e
          .replace(/<\?xml.*\?>\n/, "")
          .replace(/<!doctype.*\>\n/, "")
          .replace(/<!DOCTYPE.*\>\n/, "");
      })(e);
      var t = [],
        n = { node: "root", child: [] };
      return (
        c(e, {
          start: function (e, r, o) {
            var a = { node: "element", tag: e };
            if (
              (0 !== r.length &&
                (a.attr = r.reduce(function (e, t) {
                  var n = t.name,
                    r = t.value;
                  return (
                    e[n]
                      ? Array.isArray(e[n])
                        ? e[n].push(r)
                        : (e[n] = [e[n], r])
                      : (e[n] = r),
                    e
                  );
                }, {})),
              o)
            ) {
              var i = t[0] || n;
              void 0 === i.child && (i.child = []), i.child.push(a);
            } else t.unshift(a);
          },
          end: function (e) {
            var r = t.shift();
            if (
              (r.tag !== e && console.error("invalid state: mismatch end tag"),
              0 === t.length)
            )
              n.child.push(r);
            else {
              var o = t[0];
              void 0 === o.child && (o.child = []), o.child.push(r);
            }
          },
          chars: function (e) {
            var r = { node: "text", text: e };
            if (0 === t.length) n.child.push(r);
            else {
              var o = t[0];
              void 0 === o.child && (o.child = []), o.child.push(r);
            }
          },
          comment: function (e) {
            var n = { node: "comment", text: e },
              r = t[0];
            void 0 === r.child && (r.child = []), r.child.push(n);
          },
        }),
        n
      );
    };
  });
