text: 
  
  ! function(a) { "function" == typeof define && define.amd ? define(["jquery"], a) : "object" == typeof module && module.exports ? module.exports = function(b, c) {
          return void 0 === c && (c = "undefined" != typeof window ? require("jquery") : require("jquery")(b)), a(c), c } : a(jQuery) }(function(a) {
      "use strict";
      var b = function(c, d) { this.id = ++a.FE.ID, this.opts = a.extend(!0, {}, a.extend({}, b.DEFAULTS, "object" == typeof d && d));
          var e = JSON.stringify(this.opts);
          a.FE.OPTS_MAPPING[e] = a.FE.OPTS_MAPPING[e] || this.id, this.sid = a.FE.OPTS_MAPPING[e], a.FE.SHARED[this.sid] = a.FE.SHARED[this.sid] || {}, this.shared = a.FE.SHARED[this.sid], this.shared.count = (this.shared.count || 0) + 1, this.$oel = a(c), this.$oel.data("froala.editor", this), this.o_doc = c.ownerDocument, this.o_win = "defaultView" in this.o_doc ? this.o_doc.defaultView : this.o_doc.parentWindow;
          var f = a(this.o_win).scrollTop();
          this.$oel.on("froala.doInit", a.proxy(function() { this.$oel.off("froala.doInit"), this.doc = this.$el.get(0).ownerDocument, this.win = "defaultView" in this.doc ? this.doc.defaultView : this.doc.parentWindow, this.$doc = a(this.doc), this.$win = a(this.win), this.opts.pluginsEnabled || (this.opts.pluginsEnabled = Object.keys(a.FE.PLUGINS)), this.opts.initOnClick ? (this.load(a.FE.MODULES), this.$el.on("mousedown.init touchstart.init dragenter.init focus.init", a.proxy(function(b) {
                  if (1 === b.which || 0 === b.which) { this.$el.off("mousedown.init dragenter.init focus.init touchstart.init"), this.load(a.FE.MODULES), this.load(a.FE.PLUGINS);
                      var c = b.originalEvent && b.originalEvent.originalTarget;
                      c && "IMG" == c.tagName && a(c).trigger("mousedown"), "undefined" == typeof this.ul && this.destroy(), this.events.trigger("initialized") } }, this))) : (this.load(a.FE.MODULES), this.load(a.FE.PLUGINS), a(this.o_win).scrollTop(f), "undefined" == typeof this.ul && this.destroy(), this.events.trigger("initialized")) }, this)), this._init() };
      if (b.DEFAULTS = { initOnClick: !1, pluginsEnabled: null }, b.MODULES = {}, b.PLUGINS = {}, b.VERSION = "2.2.3", b.INSTANCES = [], b.OPTS_MAPPING = {}, b.SHARED = {}, b.ID = 0, b.prototype._init = function() {
              var b = this.$oel.prop("tagName"),
                  c = a.proxy(function() { this._original_html = this._original_html || this.$oel.html(), this.$box = this.$box || this.$oel, this.opts.fullPage && (this.opts.iframe = !0), this.opts.iframe ? (this.$iframe = a('<iframe src="about:blank" frameBorder="0">'), this.$wp = a("<div></div>"), this.$box.html(this.$wp), this.$wp.append(this.$iframe), this.$iframe.get(0).contentWindow.document.open(), this.$iframe.get(0).contentWindow.document.write("<!DOCTYPE html>"), this.$iframe.get(0).contentWindow.document.write("<html><head></head><body></body></html>"), this.$iframe.get(0).contentWindow.document.close(), this.$el = this.$iframe.contents().find("body"), this.$head = this.$iframe.contents().find("head"), this.$html = this.$iframe.contents().find("html"), this.iframe_document = this.$iframe.get(0).contentWindow.document, this.$oel.trigger("froala.doInit")) : (this.$el = a("<div></div>"), this.$wp = a("<div></div>").append(this.$el), this.$box.html(this.$wp), this.$oel.trigger("froala.doInit")) }, this),
                  d = a.proxy(function() { this.$box = a("<div>"), this.$oel.before(this.$box).hide(), this._original_html = this.$oel.val(), this.$oel.parents("form").on("submit." + this.id, a.proxy(function() { this.events.trigger("form.submit") }, this)), this.$oel.parents("form").on("reset." + this.id, a.proxy(function() { this.events.trigger("form.reset") }, this)), c() }, this),
                  e = a.proxy(function() { this.$el = this.$oel, this.$el.attr("contenteditable", !0).css("outline", "none").css("display", "inline-block"), this.opts.multiLine = !1, this.opts.toolbarInline = !1, this.$oel.trigger("froala.doInit") }, this),
                  f = a.proxy(function() { this.$el = this.$oel, this.opts.toolbarInline = !1, this.$oel.trigger("froala.doInit") }, this),
                  g = a.proxy(function() { this.$el = this.$oel, this.opts.toolbarInline = !1, this.$oel.on("click.popup", function(a) { a.preventDefault() }), this.$oel.trigger("froala.doInit") }, this);
              this.opts.editInPopup ? g() : "TEXTAREA" == b ? d() : "A" == b ? e() : "IMG" == b ? f() : "BUTTON" == b || "INPUT" == b ? (this.opts.editInPopup = !0, this.opts.toolbarInline = !1, g()) : c() }, b.prototype.load = function(b) {
              for (var c in b)
                  if (b.hasOwnProperty(c)) {
                      if (this[c]) continue;
                      if (a.FE.PLUGINS[c] && this.opts.pluginsEnabled.indexOf(c) < 0) continue;
                      if (this[c] = new b[c](this), this[c]._init && (this[c]._init(), this.opts.initOnClick && "core" == c)) return !1 } }, b.prototype.destroy = function() {
              if (this.edit.isDisabled()) return !1;
              if (this.shared.count--, this.events.$off(), this.events.trigger("destroy"), this.events.trigger("shared.destroy"), 0 === this.shared.count)
                  for (var b in this.shared) this.shared.hasOwnProperty(b) && delete this.shared[b];
              this.$oel.parents("form").off("." + this.id), this.$oel.off("click.popup"), this.$oel.removeData("froala.editor"), a.FE.INSTANCES.splice(a.FE.INSTANCES.indexOf(this), 1) }, a.fn.froalaEditor = function(c) {
              for (var d = [], e = 0; e < arguments.length; e++) d.push(arguments[e]);
              if ("string" == typeof c) {
                  var f = [];
                  return this.each(function() {
                      var b = a(this),
                          e = b.data("froala.editor");
                      if (e) {
                          var g, h;
                          if (c.indexOf(".") > 0 && e[c.split(".")[0]] ? (e[c.split(".")[0]] && (g = e[c.split(".")[0]]), h = c.split(".")[1]) : (g = e, h = c.split(".")[0]), !g[h]) return a.error("Method " + c + " does not exist in Froala Editor.");
                          var i = g[h].apply(e, d.slice(1));
                          void 0 === i ? f.push(this) : 0 === f.length && f.push(i) } }), 1 == f.length ? f[0] : f }
              return "object" != typeof c && c ? void 0 : this.each(function() {
                  var d = a(this).data("froala.editor");
                  if (!d) {
                      var e = this;
                      new b(e, c) } }) }, a.fn.froalaEditor.Constructor = b, a.FroalaEditor = b, a.FE = b, a.FE.MODULES.node = function(b) {
              function c(b) {
                  return b && "IFRAME" != b.tagName ? a(b).contents() : [] }
  
              function d(b) {
                  return b ? b.nodeType != Node.ELEMENT_NODE ? !1 : a.FE.BLOCK_TAGS.indexOf(b.tagName.toLowerCase()) >= 0 : !1 }
  
              function e(e, f) {
                  if (a(e).find("table").length > 0) return !1;
                  if (e.querySelectorAll(a.FE.VOID_ELEMENTS.join(",")).length - e.querySelectorAll("br").length) return !1;
                  if (e.querySelectorAll(b.opts.htmlAllowedEmptyTags.join(",")).length) return !1;
                  if (e.querySelectorAll(a.FE.BLOCK_TAGS.join(",")).length > 1) return !1;
                  if (e.querySelectorAll(b.opts.htmlDoNotWrapTags.join(",")).length) return !1;
                  var g = c(e);
                  1 == g.length && d(g[0]) && (g = c(g[0]));
                  for (var h = !1, i = 0; i < g.length; i++) {
                      var j = g[i];
                      if (!(f && a(j).hasClass("fr-marker") || j.nodeType == Node.TEXT_NODE && 0 == j.textContent.length)) {
                          if ("BR" != j.tagName && (j.textContent || "").replace(/\u200B/gi, "").replace(/\n/g, "").length > 0) return !1;
                          if (h) return !1; "BR" == j.tagName && (h = !0) } }
                  return !0 }
  
              function f(c) {
                  for (; c && c.parentNode !== b.$el.get(0) && (!c.parentNode || !a(c.parentNode).hasClass("fr-inner"));)
                      if (c = c.parentNode, d(c)) return c;
                  return null }
  
              function g(c, e, f) {
                  if ("undefined" == typeof e && (e = []), "undefined" == typeof f && (f = !0), e.push(b.$el.get(0)), e.indexOf(c.parentNode) >= 0 || c.parentNode && a(c.parentNode).hasClass("fr-inner") || c.parentNode && a.FE.SIMPLE_ENTER_TAGS.indexOf(c.parentNode.tagName) >= 0 && f) return null;
                  for (; e.indexOf(c.parentNode) < 0 && c.parentNode && !a(c.parentNode).hasClass("fr-inner") && (a.FE.SIMPLE_ENTER_TAGS.indexOf(c.parentNode.tagName) < 0 || !f) && (!d(c) || !d(c.parentNode) || !f);) c = c.parentNode;
                  return c }
  
              function h(a) {
                  var b = {},
                      c = a.attributes;
                  if (c)
                      for (var d = 0; d < c.length; d++) {
                          var e = c[d];
                          b[e.nodeName] = e.value }
                  return b }
  
              function i(a) {
                  for (var b = "", c = h(a), d = Object.keys(c).sort(), e = 0; e < d.length; e++) {
                      var f = d[e],
                          g = c[f];
                      b += g.indexOf('"') < 0 ? " " + f + '="' + g + '"' : " " + f + "='" + g + "'" }
                  return b }
  
              function j(a) {
                  for (var b = a.attributes, c = 0; c < b.length; c++) {
                      var d = b[c];
                      a.removeAttribute(d.nodeName) } }
  
              function k(a) {
                  return "<" + a.tagName.toLowerCase() + i(a) + ">" }
  
              function l(a) {
                  return "</" + a.tagName.toLowerCase() + ">" }
  
              function m(b, c) { "undefined" == typeof c && (c = !0);
                  for (var d = b.previousSibling; d && c && a(d).hasClass("fr-marker");) d = d.previousSibling;
                  return d ? d.nodeType == Node.TEXT_NODE && "" === d.textContent ? m(d) : !1 : !0 }
  
              function n(b) {
                  return b && b.nodeType == Node.ELEMENT_NODE && a.FE.VOID_ELEMENTS.indexOf((b.tagName || "").toLowerCase()) >= 0 }
  
              function o(a) {
                  return a ? ["UL", "OL"].indexOf(a.tagName) >= 0 : !1 }
  
              function p(a) {
                  return a === b.$el.get(0) }
  
              function q(a) {
                  return a === b.doc.activeElement && (!b.doc.hasFocus || b.doc.hasFocus()) && !!(p(a) || a.type || a.href || ~a.tabIndex) }
  
              function r(a) {
                  return (!a.getAttribute || "false" != a.getAttribute("contenteditable")) && ["STYLE", "SCRIPT"].indexOf(a.tagName) < 0 }
              return { isBlock: d, isEmpty: e, blockParent: f, deepestParent: g, rawAttributes: h, attributes: i, clearAttributes: j, openTagString: k, closeTagString: l, isFirstSibling: m, isList: o, isElement: p, contents: c, isVoid: n, hasFocus: q, isEditable: r } }, a.extend(a.FE.DEFAULTS, { htmlAllowedTags: ["a", "abbr", "address", "area", "article", "aside", "audio", "b", "base", "bdi", "bdo", "blockquote", "br", "button", "canvas", "caption", "cite", "code", "col", "colgroup", "datalist", "dd", "del", "details", "dfn", "dialog", "div", "dl", "dt", "em", "embed", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "header", "hgroup", "hr", "i", "iframe", "img", "input", "ins", "kbd", "keygen", "label", "legend", "li", "link", "main", "map", "mark", "menu", "menuitem", "meter", "nav", "noscript", "object", "ol", "optgroup", "option", "output", "p", "param", "pre", "progress", "queue", "rp", "rt", "ruby", "s", "samp", "script", "style", "section", "select", "small", "source", "span", "strike", "strong", "sub", "summary", "sup", "table", "tbody", "td", "textarea", "tfoot", "th", "thead", "time", "tr", "track", "u", "ul", "var", "video", "wbr"], htmlRemoveTags: ["script", "style"], htmlAllowedAttrs: ["accept", "accept-charset", "accesskey", "action", "align", "allowfullscreen", "allowtransparency", "alt", "async", "autocomplete", "autofocus", "autoplay", "autosave", "background", "bgcolor", "border", "charset", "cellpadding", "cellspacing", "checked", "cite", "class", "color", "cols", "colspan", "content", "contenteditable", "contextmenu", "controls", "coords", "data", "data-.*", "datetime", "default", "defer", "dir", "dirname", "disabled", "download", "draggable", "dropzone", "enctype", "for", "form", "formaction", "frameborder", "headers", "height", "hidden", "high", "href", "hreflang", "http-equiv", "icon", "id", "ismap", "itemprop", "keytype", "kind", "label", "lang", "language", "list", "loop", "low", "max", "maxlength", "media", "method", "min", "mozallowfullscreen", "multiple", "name", "novalidate", "open", "optimum", "pattern", "ping", "placeholder", "poster", "preload", "pubdate", "radiogroup", "readonly", "rel", "required", "reversed", "rows", "rowspan", "sandbox", "scope", "scoped", "scrolling", "seamless", "selected", "shape", "size", "sizes", "span", "src", "srcdoc", "srclang", "srcset", "start", "step", "summary", "spellcheck", "style", "tabindex", "target", "title", "type", "translate", "usemap", "value", "valign", "webkitallowfullscreen", "width", "wrap"], htmlAllowComments: !0, fullPage: !1 }), a.FE.HTML5Map = { B: "STRONG", I: "EM", STRIKE: "S" }, a.FE.MODULES.clean = function(b) {
              function c(a) {
                  if (a.className && a.className.indexOf("fr-marker") >= 0) return !1;
                  var d, e = b.node.contents(a),
                      f = [];
                  for (d = 0; d < e.length; d++) e[d].nodeType == Node.ELEMENT_NODE ? e[d].textContent.replace(/\u200b/g, "").length != e[d].textContent.length && c(e[d]) : e[d].nodeType == Node.TEXT_NODE && (e[d].textContent = e[d].textContent.replace(/\u200b/g, ""));
                  for (e = b.node.contents(a), d = 0; d < e.length; d++) e[d].className && e[d].className.indexOf("fr-marker") >= 0 && f.push(e[d]);
                  if (e.length - f.length == 1 && 0 === a.textContent.replace(/\u200b/g, "").length) {
                      var g = !0;
                      for (d = 0; d < e.length; d++)
                          if (e[d].nodeType != Node.TEXT_NODE && f.indexOf(e[d]) < 0) { g = !1;
                              break }
                      if (g) {
                          for (d = 0; d < f.length; d++) a.parentNode.insertBefore(f[d].cloneNode(!0), a);
                          return a.parentNode.removeChild(a), !1 } }
                  if (e.length - f.length == 0) {
                      for (d = 0; d < f.length; d++) a.parentNode.insertBefore(f[d].cloneNode(!0), a);
                      return a.parentNode.removeChild(a), !1 } }
  
              function d(a) {
                  if (a.nodeType == Node.COMMENT_NODE) return "<!--" + a.nodeValue + "-->";
                  if (a.nodeType == Node.TEXT_NODE) return a.textContent.replace(/\</g, "&lt;").replace(/\>/g, "&gt;").replace(/\u00A0/g, "&nbsp;");
                  if (a.nodeType != Node.ELEMENT_NODE) return a.outerHTML;
                  if (a.nodeType == Node.ELEMENT_NODE && ["STYLE", "SCRIPT"].indexOf(a.tagName) >= 0) return a.outerHTML;
                  if ("IFRAME" == a.tagName) return a.outerHTML;
                  var c = a.childNodes;
                  if (0 === c.length) return a.outerHTML;
                  for (var e = "", f = 0; f < c.length; f++) e += d(c[f]);
                  return b.node.openTagString(a) + e + b.node.closeTagString(a) }
  
              function e(a) {
                  return H = [], a = a.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, function(a) {
                      return H.push(a), "[FROALA.EDITOR.SCRIPT " + (H.length - 1) + "]" }), a = a.replace(/<img((?:[\w\W]*?)) src="/g, '<img$1 data-fr-src="') }
  
              function f(a) {
                  return a = a.replace(/\[FROALA\.EDITOR\.SCRIPT ([\d]*)\]/gi, function(a, c) {
                      return b.opts.htmlRemoveTags.indexOf("script") >= 0 ? "" : H[parseInt(c, 10)] }), a = a.replace(/<img((?:[\w\W]*?)) data-fr-src="/g, '<img$1 src="') }
  
              function g(a) {
                  var b;
                  for (b in a) a.hasOwnProperty(b) && (b.match(G) || delete a[b]);
                  for (var c = "", d = Object.keys(a).sort(), e = 0; e < d.length; e++) b = d[e], c += a[b].indexOf('"') < 0 ? " " + b + '="' + a[b] + '"' : " " + b + "='" + a[b] + "'";
                  return c }
  
              function h(a, c, d) {
                  if (b.opts.fullPage) {
                      var e = b.html.extractDoctype(d),
                          f = g(b.html.extractNodeAttrs(d, "html"));
                      c = null == c ? b.html.extractNode(d, "head") || "<title></title>" : c;
                      var h = g(b.html.extractNodeAttrs(d, "head")),
                          i = g(b.html.extractNodeAttrs(d, "body"));
                      return e + "<html" + f + "><head" + h + ">" + c + "</head><body" + i + ">" + a + "</body></html>" }
                  return a }
  
              function i(c, e) {
                  var f = a("<div>" + c + "</div>"),
                      g = "";
                  if (f) {
                      for (var h = b.node.contents(f.get(0)), i = 0; i < h.length; i++) e(h[i]);
                      h = b.node.contents(f.get(0));
                      for (var i = 0; i < h.length; i++) g += d(h[i]) }
                  return g }
  
              function j(a, c, d) { a = e(a);
                  var g = a,
                      j = null;
                  if (b.opts.fullPage) {
                      var g = b.html.extractNode(a, "body") || (a.indexOf("<body") >= 0 ? "" : a);
                      d && (j = b.html.extractNode(a, "head") || "") }
                  g = i(g, c), j && (j = i(j, c)), g = g.replace(/<br>[\r|\n]*/g, "<br>"), g = g.replace(/<br> */g, "<br>"), g = g.replace(/ *(\r|\n) */g, " ");
                  var k = h(g, j, a);
                  return f(k) }
  
              function k(a) {
                  return a.replace(/\u200b/g, "").length == a.length ? a : b.clean.exec(a, c) }
  
              function l() {
                  var c = b.$el.get(0).querySelectorAll(Object.keys(a.FE.HTML5Map).join(","));
                  if (c.length) { b.selection.save();
                      for (var d = 0; d < c.length; d++) "" === b.node.attributes(c[d]) && a(c[d]).replaceWith("<" + a.FE.HTML5Map[c[d].tagName] + ">" + c[d].innerHTML + "</" + a.FE.HTML5Map[c[d].tagName] + ">");
                      b.selection.restore() } }
  
              function m(c) {
                  if ("PRE" == c.tagName && o(c), c.nodeType == Node.ELEMENT_NODE && (c.getAttribute("data-fr-src") && c.setAttribute("data-fr-src", b.helpers.sanitizeURL(c.getAttribute("data-fr-src"))), c.getAttribute("href") && c.setAttribute("href", b.helpers.sanitizeURL(c.getAttribute("href"))), ["TABLE", "TBODY", "TFOOT", "TR"].indexOf(c.tagName) >= 0 && (c.innerHTML = c.innerHTML.trim())), !b.opts.pasteAllowLocalImages && c.nodeType == Node.ELEMENT_NODE && "IMG" == c.tagName && c.getAttribute("data-fr-src") && 0 == c.getAttribute("data-fr-src").indexOf("file://")) return c.parentNode.removeChild(c), !1;
                  if (c.nodeType == Node.ELEMENT_NODE && a.FE.HTML5Map[c.tagName] && "" === b.node.attributes(c)) {
                      var d = a.FE.HTML5Map[c.tagName],
                          e = "<" + d + ">" + c.innerHTML + "</" + d + ">";
                      c.insertAdjacentHTML("beforebegin", e), c = c.previousSibling, c.parentNode.removeChild(c.nextSibling) }
                  if (b.opts.htmlAllowComments || c.nodeType != Node.COMMENT_NODE)
                      if (c.tagName && c.tagName.match(F)) c.parentNode.removeChild(c);
                      else if (c.tagName && !c.tagName.match(E)) c.outerHTML = c.innerHTML;
                  else {
                      var f = c.attributes;
                      if (f)
                          for (var g = f.length - 1; g >= 0; g--) {
                              var h = f[g];
                              h.nodeName.match(G) || c.removeAttribute(h.nodeName) } } else 0 !== c.data.indexOf("[FROALA.EDITOR") && c.parentNode.removeChild(c) }
  
              function n(a) {
                  for (var c = b.node.contents(a), d = 0; d < c.length; d++) c[d].nodeType != Node.TEXT_NODE && n(c[d]);
                  m(a) }
  
              function o(a) {
                  var b = a.innerHTML;
                  b.indexOf("\n") >= 0 && (a.innerHTML = b.replace(/\n/g, "<br>")) }
  
              function p(c, d, e, f) { "undefined" == typeof d && (d = []), "undefined" == typeof e && (e = []), "undefined" == typeof f && (f = !1), c = c.replace(/\u0009/g, "");
                  var g, h = a.merge([], b.opts.htmlAllowedTags);
                  for (g = 0; g < d.length; g++) h.indexOf(d[g]) >= 0 && h.splice(h.indexOf(d[g]), 1);
                  var i = a.merge([], b.opts.htmlAllowedAttrs);
                  for (g = 0; g < e.length; g++) i.indexOf(e[g]) >= 0 && i.splice(i.indexOf(e[g]), 1);
                  return i.push("data-fr-.*"), i.push("fr-.*"), E = new RegExp("^" + h.join("$|^") + "$", "gi"), G = new RegExp("^" + i.join("$|^") + "$", "gi"), F = new RegExp("^" + b.opts.htmlRemoveTags.join("$|^") + "$", "gi"), c = j(c, n, !0) }
  
              function q() {
                  for (var c = b.$el.get(0).querySelectorAll("blockquote + blockquote"), d = 0; d < c.length; d++) {
                      var e = c[d];
                      b.node.attributes(e) == b.node.attributes(e.previousSibling) && (a(e).prev().append(a(e).html()), a(e).remove()) } }
  
              function r() {
                  for (var a = b.$el.get(0).querySelectorAll("tr"), c = 0; c < a.length; c++)
                      if (a[c].querySelectorAll("th").length) {
                          for (var d = a[c]; d && "TABLE" != d.tagName && "THEAD" != d.tagName;) d = d.parentNode;
                          var e = d; "THEAD" != e.tagName && (e = b.doc.createElement("THEAD"), d.insertBefore(e, d.firstChild)), e.appendChild(a[c]) } }
  
              function s() {
                  for (var c = b.$el.get(0).querySelectorAll("table"), d = 0; d < c.length; d++) {
                      for (var e = c[d].previousSibling; e && e.nodeType == Node.TEXT_NODE && 0 == e.textContent.length;) e = e.previousSibling;!e || b.node.isBlock(e) || "BR" == e.tagName || e.nodeType != Node.TEXT_NODE && e.nodeType != Node.ELEMENT_NODE || a(e).is(b.opts.htmlDoNotWrapTags.join(",")) || c[d].parentNode.insertBefore(b.doc.createElement("br"), c[d]) } }
  
              function t() {
                  var c = b.html.defaultTag();
                  if (c)
                      for (var d = b.$el.get(0).querySelectorAll("td > " + c + ", th > " + c), e = 0; e < d.length; e++) "" === b.node.attributes(d[e]) && a(d[e]).replaceWith(d[e].innerHTML + "<br>") }
  
              function u() { r(), s(), t() }
  
              function v() {
                  var a = [],
                      c = function(a) {
                          return !b.node.isList(a.parentNode) };
                  do {
                      if (a.length) {
                          var d = a[0],
                              e = b.doc.createElement("ul");
                          d.parentNode.insertBefore(e, d);
                          do {
                              var f = d;
                              d = d.nextSibling, e.appendChild(f) } while (d && "LI" == d.tagName) }
                      a = [];
                      for (var g = b.$el.get(0).querySelectorAll("li"), h = 0; h < g.length; h++) c(g[h]) && a.push(g[h]) } while (a.length > 0) }
  
              function w() {
                  for (var a = b.$el.get(0).querySelectorAll("ol + ol, ul + ul"), c = 0; c < a.length; c++) {
                      var d = a[c];
                      if (b.node.attributes(d) == b.node.attributes(d.previousSibling)) {
                          for (var e = b.node.contents(d), f = 0; f < e.length; f++) d.previousSibling.appendChild(e[f]);
                          d.parentNode.removeChild(d) } } }
  
              function x() {
                  var a, c = function(b) { 0 === b.querySelectorAll("LI").length && (a = !0, b.parentNode.removeChild(b)) };
                  do { a = !1;
                      for (var d = b.$el.get(0).querySelectorAll("li:empty"), e = 0; e < d.length; e++) d[e].parentNode.removeChild(d[e]);
                      for (var f = b.$el.get(0).querySelectorAll("ul, ol"), e = 0; e < f.length; e++) c(f[e]) } while (a === !0) }
  
              function y() {
                  for (var c = b.$el.get(0).querySelectorAll("ul > ul, ol > ol, ul > ol, ol > ul"), d = 0; d < c.length; d++) {
                      var e = c[d],
                          f = e.previousSibling;
                      f && ("LI" == f.tagName ? f.appendChild(e) : a(e).wrap("<li></li>")) } }
  
              function z() {
                  for (var c = b.$el.get(0).querySelectorAll("li > ul, li > ol"), d = 0; d < c.length; d++) {
                      var e = c[d];
                      if (e.nextSibling) {
                          var f = e.nextSibling,
                              g = a("<li>");
                          a(e.parentNode).after(g);
                          do {
                              var h = f;
                              f = f.nextSibling, g.append(h) } while (f) } } }
  
              function A() {
                  for (var c = b.$el.get(0).querySelectorAll("li > ul, li > ol"), d = 0; d < c.length; d++) {
                      var e = c[d];
                      if (b.node.isFirstSibling(e)) a(e).before("<br/>");
                      else if (e.previousSibling && "BR" == e.previousSibling.tagName) {
                          for (var f = e.previousSibling.previousSibling; f && a(f).hasClass("fr-marker");) f = f.previousSibling;
                          f && "BR" != f.tagName && a(e.previousSibling).remove() } } }
  
              function B() {
                  for (var c = b.$el.get(0).querySelectorAll("li:empty"), d = 0; d < c.length; d++) a(c[d]).remove() }
  
              function C() { v(), w(), x(), y(), z(), A(), B() }
  
              function D() { b.opts.fullPage && a.merge(b.opts.htmlAllowedTags, ["head", "title", "style", "link", "base", "body", "html"]) }
              var E, F, G, H = [],
                  H = [];
              return { _init: D, html: p, toHTML5: l, tables: u, lists: C, quotes: q, invisibleSpaces: k, exec: j } }, a.FE.XS = 0, a.FE.SM = 1, a.FE.MD = 2, a.FE.LG = 3, a.FE.MODULES.helpers = function(b) {
              function c() {
                  var a, b, c = -1;
                  return "Microsoft Internet Explorer" == navigator.appName ? (a = navigator.userAgent, b = new RegExp("MSIE ([0-9]{1,}[\\.0-9]{0,})"), null !== b.exec(a) && (c = parseFloat(RegExp.$1))) : "Netscape" == navigator.appName && (a = navigator.userAgent, b = new RegExp("Trident/.*rv:([0-9]{1,}[\\.0-9]{0,})"), null !== b.exec(a) && (c = parseFloat(RegExp.$1))), c }
  
              function d() {
                  var a = {},
                      b = c();
                  if (b > 0) a.msie = !0;
                  else {
                      var d = navigator.userAgent.toLowerCase(),
                          e = /(edge)[ \/]([\w.]+)/.exec(d) || /(chrome)[ \/]([\w.]+)/.exec(d) || /(webkit)[ \/]([\w.]+)/.exec(d) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(d) || /(msie) ([\w.]+)/.exec(d) || d.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(d) || [],
                          f = { browser: e[1] || "", version: e[2] || "0" };
                      e[1] && (a[f.browser] = !0), a.chrome ? a.webkit = !0 : a.webkit && (a.safari = !0) }
                  return a.msie && (a.version = b), a }
  
              function e() {
                  return /(iPad|iPhone|iPod)/g.test(navigator.userAgent) && !h() }
  
              function f() {
                  return /(Android)/g.test(navigator.userAgent) && !h() }
  
              function g() {
                  return /(Blackberry)/g.test(navigator.userAgent) }
  
              function h() {
                  return /(Windows Phone)/gi.test(navigator.userAgent) }
  
              function i() {
                  return f() || e() || g() }
  
              function j() {
                  return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(a) { window.setTimeout(a, 1e3 / 60) } }
  
              function k(a) {
                  return parseInt(a, 10) || 0 }
  
              function l() {
                  var b = a('<div class="fr-visibility-helper"></div>').appendTo("body"),
                      c = k(b.css("margin-left"));
                  return b.remove(), c }
  
              function m() {
                  return "ontouchstart" in window || window.DocumentTouch && document instanceof DocumentTouch }
  
              function n(a) {
                  if (!/^(https?:|ftps?:|)\/\//.test(a)) return !1;
                  a = String(a).replace(/</g, "%3C").replace(/>/g, "%3E").replace(/"/g, "%22").replace(/ /g, "%20");
                  var b = /(http|ftp|https):\/\/[\w-]+(\.[\w-]*)*([\w.,@?^=%&amp;:\/~+#-]*[\w@?^=%&amp;\/~+#-])?/gi;
                  return b.test(a) }
  
              function o(a) {
                  if (/^(https?:|ftps?:|)\/\//.test(a)) {
                      if (!n(a) && !n("http:" + a)) return "" } else a = encodeURIComponent(a).replace(/%23/g, "#").replace(/%2F/g, "/").replace(/%25/g, "%").replace(/mailto%3A/g, "mailto:").replace(/file%3A/g, "file:").replace(/sms%3A/g, "sms:").replace(/tel%3A/g, "tel:").replace(/notes%3A/g, "notes:").replace(/data%3Aimage/g, "data:image").replace(/webkit-fake-url%3A/g, "webkit-fake-url:").replace(/%3F/g, "?").replace(/%3D/g, "=").replace(/%26/g, "&").replace(/&amp;/g, "&").replace(/%2C/g, ",").replace(/%3B/g, ";").replace(/%2B/g, "+").replace(/%40/g, "@");
                  return a }
  
              function p(a) {
                  return a && !a.propertyIsEnumerable("length") && "object" == typeof a && "number" == typeof a.length }
  
              function q(a) {
                  function b(a) {
                      return ("0" + parseInt(a, 10).toString(16)).slice(-2) }
                  try {
                      return a && "transparent" !== a ? /^#[0-9A-F]{6}$/i.test(a) ? a : (a = a.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/), ("#" + b(a[1]) + b(a[2]) + b(a[3])).toUpperCase()) : "" } catch (c) {
                      return null } }
  
              function r(a) {
                  var b = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
                  a = a.replace(b, function(a, b, c, d) {
                      return b + b + c + c + d + d });
                  var c = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(a);
                  return c ? "rgb(" + parseInt(c[1], 16) + ", " + parseInt(c[2], 16) + ", " + parseInt(c[3], 16) + ")" : "" }
  
              function s(b) {
                  var c = (b.css("text-align") || "").replace(/-(.*)-/g, "");
                  if (["left", "right", "justify", "center"].indexOf(c) < 0) {
                      if (!u) {
                          var d = a('<div dir="auto" style="text-align: initial; position: fixed; left: -3000px;"><span id="s1">.</span><span id="s2">.</span></div>');
                          a("body").append(d);
                          var e = d.find("#s1").get(0).getBoundingClientRect().left,
                              f = d.find("#s2").get(0).getBoundingClientRect().left;
                          d.remove(), u = f > e ? "left" : "right" }
                      c = u }
                  return c }
  
              function t() { b.browser = d() }
              var u;
              return { _init: t, isIOS: e, isAndroid: f, isBlackberry: g, isWindowsPhone: h, isMobile: i, requestAnimationFrame: j, getPX: k, screenSize: l, isTouch: m, sanitizeURL: o, isArray: p, RGBToHex: q, HEXtoRGB: r, isURL: n, getAlignment: s } }, a.FE.MODULES.events = function(b) {
              function c(a, b, c) { s(a, b, c) }
  
              function d() { c(b.$el, "cut copy paste beforepaste", function(a) { v(a.type, [a]) }) }
  
              function e() { c(b.$el, "click mouseup mousedown touchstart touchend dragenter dragover dragleave dragend drop dragstart", function(a) { v(a.type, [a]) }), r("mousedown", function() {
                      for (var c = 0; c < a.FE.INSTANCES.length; c++) a.FE.INSTANCES[c] != b && a.FE.INSTANCES[c].popups && a.FE.INSTANCES[c].popups.areVisible() && a.FE.INSTANCES[c].$el.find(".fr-marker").remove() }) }
  
              function f() { c(b.$el, "keydown keypress keyup input", function(a) { v(a.type, [a]) }) }
  
              function g() { c(b.$win, b._mousedown, function(a) { v("window.mousedown", [a]), n() }), c(b.$win, b._mouseup, function(a) { v("window.mouseup", [a]) }), c(b.$win, "keydown keyup touchmove touchend", function(a) { v("window." + a.type, [a]) }) }
  
              function h() { c(b.$doc, "dragend drop", function(a) { v("document." + a.type, [a]) }) }
  
              function i(c) {
                  if ("undefined" == typeof c && (c = !0), !b.$wp) return !1;
                  if (!b.core.hasFocus() && c) return b.$el.focus(), !1;
                  if (!b.core.hasFocus() || b.$el.find(".fr-marker").length > 0) return !1;
                  var d = b.selection.info(b.$el.get(0));
                  if (d.atStart && b.selection.isCollapsed() && null != b.html.defaultTag()) {
                      var e = b.markers.insert();
                      if (e && !b.node.blockParent(e)) { a(e).remove();
                          var f = b.$el.find(b.html.blockTagsQuery()).get(0);
                          f && (a(f).prepend(a.FE.MARKERS), b.selection.restore()) } else e && a(e).remove() } }
  
              function j() { c(b.$el, "focus", function(a) { p() && (i(!1), C === !1 && v(a.type, [a])) }), c(b.$el, "blur", function(a) { p() && C === !0 && v(a.type, [a]) }), r("focus", function() { C = !0 }), r("blur", function() { C = !1 }) }
  
              function k() { b.helpers.isMobile() ? (b._mousedown = "touchstart", b._mouseup = "touchend", b._move = "touchmove", b._mousemove = "touchmove") : (b._mousedown = "mousedown", b._mouseup = "mouseup", b._move = "", b._mousemove = "mousemove") }
  
              function l(c) {
                  var d = a(c.currentTarget);
                  return b.edit.isDisabled() || d.hasClass("fr-disabled") ? (c.preventDefault(), !1) : "mousedown" === c.type && 1 !== c.which ? !0 : (b.helpers.isMobile() || c.preventDefault(), (b.helpers.isAndroid() || b.helpers.isWindowsPhone()) && 0 === d.parents(".fr-dropdown-menu").length && (c.preventDefault(), c.stopPropagation()), d.addClass("fr-selected"), void b.events.trigger("commands.mousedown", [d])) }
  
              function m(c, d) {
                  var e = a(c.currentTarget);
                  if (b.edit.isDisabled() || e.hasClass("fr-disabled")) return c.preventDefault(), !1;
                  if ("mouseup" === c.type && 1 !== c.which) return !0;
                  if (!e.hasClass("fr-selected")) return !0;
                  if ("touchmove" != c.type) {
                      if (c.stopPropagation(), c.stopImmediatePropagation(), c.preventDefault(), !e.hasClass("fr-selected")) return a(".fr-selected").removeClass("fr-selected"), !1;
                      if (a(".fr-selected").removeClass("fr-selected"), e.data("dragging") || e.attr("disabled")) return e.removeData("dragging"), !1;
                      var f = e.data("timeout");
                      f && (clearTimeout(f), e.removeData("timeout")), d.apply(b, [c]) } else e.data("timeout") || e.data("timeout", setTimeout(function() { e.data("dragging", !0) }, 100)) }
  
              function n() { A = !0 }
  
              function o() { A = !1 }
  
              function p() {
                  return A }
  
              function q(a, c, d) { s(a, b._mousedown, c, function(a) { l(a) }, !0), s(a, b._mouseup + " " + b._move, c, function(a) { m(a, d) }, !0), s(a, "mousedown click mouseup", c, function(a) { a.stopPropagation() }, !0), r("window.mouseup", function() { a.find(c).removeClass("fr-selected"), n() }) }
  
              function r(a, c, d) {
                  var e = a.split(" ");
                  if (e.length > 1) {
                      for (var f = 0; f < e.length; f++) r(e[f], c, d);
                      return !0 } "undefined" == typeof d && (d = !1);
                  var g;
                  g = 0 != a.indexOf("shared.") ? B[a] = B[a] || [] : b.shared._events[a] = b.shared._events[a] || [], d ? g.unshift(c) : g.push(c) }
  
              function s(a, c, d, e, f) { "function" == typeof d && (f = e, e = d, d = !1);
                  var g = f ? b.shared.$_events : D,
                      h = f ? b.sid : b.id;
                  d ? a.on(c.split(" ").join(".ed" + h + " ") + ".ed" + h, d, e) : a.on(c.split(" ").join(".ed" + h + " ") + ".ed" + h, e), g.indexOf(a.get(0)) < 0 && g.push(a.get(0)) }
  
              function t(b, c) {
                  for (var d = 0; d < b.length; d++) a(b[d]).off(".ed" + c) }
  
              function u() { t(D, b.id), 0 == b.shared.count && t(b.shared.$_events, b.sid) }
  
              function v(c, d, e) {
                  if (!b.edit.isDisabled() || e) {
                      var f;
                      if (0 != c.indexOf("shared.")) f = B[c];
                      else {
                          if (b.shared.count > 0) return !1;
                          f = b.shared._events[c] }
                      var g;
                      if (f)
                          for (var h = 0; h < f.length; h++)
                              if (g = f[h].apply(b, d), g === !1) return !1;
                      return g = b.$oel.triggerHandler("froalaEditor." + c, a.merge([b], d || [])), g === !1 ? !1 : g } }
  
              function w(c, d, e) {
                  if (!b.edit.isDisabled() || e) {
                      var f;
                      if (0 != c.indexOf("shared.")) f = B[c];
                      else {
                          if (b.shared.count > 0) return !1;
                          f = b.shared._events[c] }
                      var g;
                      if (f)
                          for (var h = 0; h < f.length; h++) g = f[h].apply(b, [d]), "undefined" != typeof g && (d = g);
                      return g = b.$oel.triggerHandler("froalaEditor." + c, a.merge([b], [d])), "undefined" != typeof g && (d = g), d } }
  
              function x() {
                  for (var a in B) B.hasOwnProperty(a) && delete B[a] }
  
              function y() {
                  for (var a in b.shared._events) b.shared._events.hasOwnProperty(a) && delete b.shared._events[a] }
  
              function z() { b.shared.$_events = b.shared.$_events || [], b.shared._events = {}, k(), e(), g(), h(), f(), j(), n(), d(), r("destroy", x), r("shared.destroy", y) }
              var A, B = {},
                  C = !1,
                  D = [];
              return { _init: z, on: r, trigger: v, bindClick: q, disableBlur: o, enableBlur: n, blurActive: p, focus: i, chainTrigger: w, $on: s, $off: u } }, a.FE.INVISIBLE_SPACE = "&#8203;", a.FE.START_MARKER = '<span class="fr-marker" data-id="0" data-type="true" style="display: none; line-height: 0;">' + a.FE.INVISIBLE_SPACE + "</span>", a.FE.END_MARKER = '<span class="fr-marker" data-id="0" data-type="false" style="display: none; line-height: 0;">' + a.FE.INVISIBLE_SPACE + "</span>", a.FE.MARKERS = a.FE.START_MARKER + a.FE.END_MARKER, a.FE.MODULES.markers = function(b) {
              function c(c, d) {
                  return a('<span class="fr-marker" data-id="' + d + '" data-type="' + c + '" style="display: ' + (b.browser.safari ? "none" : "inline-block") + '; line-height: 0;">' + a.FE.INVISIBLE_SPACE + "</span>", b.doc)[0] }
  
              function d(d, e, f) {
                  try {
                      var g = d.cloneRange();
                      if (g.collapse(e), g.insertNode(c(e, f)), e === !0 && d.collapsed)
                          for (var h = b.$el.find('span.fr-marker[data-type="true"][data-id="' + f + '"]'), i = h.get(0).nextSibling; i && i.nodeType === Node.TEXT_NODE && 0 === i.textContent.length;) a(i).remove(), i = h.nextSibling;
                      if (e === !0 && !d.collapsed) {
                          var h = b.$el.find('span.fr-marker[data-type="true"][data-id="' + f + '"]').get(0),
                              i = h.nextSibling;
                          if (i && i.nodeType === Node.ELEMENT_NODE && b.node.isBlock(i)) {
                              var j = [i];
                              do i = j[0], j = b.node.contents(i); while (j[0] && b.node.isBlock(j[0]));
                              a(i).prepend(a(h)) } }
                      if (e === !1 && !d.collapsed) {
                          var h = b.$el.find('span.fr-marker[data-type="false"][data-id="' + f + '"]').get(0),
                              i = h.previousSibling;
                          if (i && i.nodeType === Node.ELEMENT_NODE && b.node.isBlock(i)) {
                              var j = [i];
                              do i = j[j.length - 1], j = b.node.contents(i); while (j[j.length - 1] && b.node.isBlock(j[j.length - 1]));
                              a(i).append(a(h)) }
                          h.parentNode && ["TD", "TH"].indexOf(h.parentNode.tagName) >= 0 && h.parentNode.previousSibling && !h.previousSibling && a(h.parentNode.previousSibling).append(h) }
                      var k = b.$el.find('span.fr-marker[data-type="' + e + '"][data-id="' + f + '"]').get(0);
                      return k && (k.style.display = "none"), k } catch (l) {
                      return null } }
  
              function e() {
                  if (!b.$wp) return null;
                  try {
                      var c = b.selection.ranges(0),
                          d = c.commonAncestorContainer;
                      if (d != b.$el.get(0) && 0 == b.$el.find(d).length) return null;
                      var e = c.cloneRange(),
                          f = c.cloneRange();
                      e.collapse(!0);
                      var g = a('<span class="fr-marker" style="display: none; line-height: 0;">' + a.FE.INVISIBLE_SPACE + "</span>", b.doc)[0];
                      if (e.insertNode(g), g = b.$el.find("span.fr-marker").get(0)) {
                          for (var h = g.nextSibling; h && h.nodeType === Node.TEXT_NODE && 0 === h.textContent.length;) a(h).remove(), h = b.$el.find("span.fr-marker").get(0).nextSibling;
                          return b.selection.clear(), b.selection.get().addRange(f), g }
                      return null } catch (i) {} }
  
              function f() { b.selection.isCollapsed() || b.selection.remove();
                  var c = b.$el.find(".fr-marker").get(0);
                  if (null == c && (c = e()), null == c) return null;
                  var d;
                  if (d = b.node.deepestParent(c))
                      if (b.node.isBlock(d) && b.node.isEmpty(d)) a(d).replaceWith('<span class="fr-marker"></span>');
                      else {
                          var f = c,
                              g = "",
                              h = "";
                          do f = f.parentNode, g += b.node.closeTagString(f), h = b.node.openTagString(f) + h; while (f != d);
                          a(c).replaceWith('<span id="fr-break"></span>');
                          var i = b.node.openTagString(d) + a(d).html() + b.node.closeTagString(d);
                          i = i.replace(/<span id="fr-break"><\/span>/g, g + '<span class="fr-marker"></span>' + h), a(d).replaceWith(i) }
                  return b.$el.find(".fr-marker").get(0) }
  
              function g(a) {
                  var c = a.clientX,
                      d = a.clientY;
                  h();
                  var f, g = null;
                  if ("undefined" != typeof b.doc.caretPositionFromPoint ? (f = b.doc.caretPositionFromPoint(c, d), g = b.doc.createRange(), g.setStart(f.offsetNode, f.offset), g.setEnd(f.offsetNode, f.offset)) : "undefined" != typeof b.doc.caretRangeFromPoint && (f = b.doc.caretRangeFromPoint(c, d), g = b.doc.createRange(), g.setStart(f.startContainer, f.startOffset), g.setEnd(f.startContainer, f.startOffset)), null !== g && "undefined" != typeof b.win.getSelection) {
                      var i = b.win.getSelection();
                      i.removeAllRanges(), i.addRange(g) } else if ("undefined" != typeof b.doc.body.createTextRange) try { g = b.doc.body.createTextRange(), g.moveToPoint(c, d);
                      var j = g.duplicate();
                      j.moveToPoint(c, d), g.setEndPoint("EndToEnd", j), g.select() } catch (k) {
                      return !1 }
                  e() }
  
              function h() { b.$el.find(".fr-marker").remove() }
              return { place: d, insert: e, split: f, insertAtPoint: g, remove: h } }, a.FE.MODULES.selection = function(b) {
              function c() {
                  var a = "";
                  return b.win.getSelection ? a = b.win.getSelection() : b.doc.getSelection ? a = b.doc.getSelection() : b.doc.selection && (a = b.doc.selection.createRange().text), a.toString() }
  
              function d() {
                  var a = "";
                  return a = b.win.getSelection ? b.win.getSelection() : b.doc.getSelection ? b.doc.getSelection() : b.doc.selection.createRange() }
  
              function e(a) {
                  var c = d(),
                      e = [];
                  if (c && c.getRangeAt && c.rangeCount)
                      for (var e = [], f = 0; f < c.rangeCount; f++) e.push(c.getRangeAt(f));
                  else e = b.doc.createRange ? [b.doc.createRange()] : [];
                  return "undefined" != typeof a ? e[a] : e }
  
              function f() {
                  var a = d();
                  try { a.removeAllRanges ? a.removeAllRanges() : a.empty ? a.empty() : a.clear && a.clear() } catch (b) {} }
  
              function g() {
                  var f = d();
                  try {
                      if (f.rangeCount) {
                          var g = e(0),
                              h = g.startContainer;
                          if (h.nodeType == Node.ELEMENT_NODE) {
                              var i = !1;
                              if (h.childNodes.length > 0 && h.childNodes[g.startOffset]) {
                                  for (var j = h.childNodes[g.startOffset]; j && j.nodeType == Node.TEXT_NODE && 0 == j.textContent.length;) j = j.nextSibling;
                                  j && j.textContent.replace(/\u200B/g, "") === c().replace(/\u200B/g, "") && (h = j, i = !0) } else if (!g.collapsed && h.nextSibling && h.nextSibling.nodeType == Node.ELEMENT_NODE) {
                                  var j = h.nextSibling;
                                  j && j.textContent.replace(/\u200B/g, "") === c().replace(/\u200B/g, "") && (h = j, i = !0) }!i && h.childNodes.length > 0 && a(h.childNodes[0]).text().replace(/\u200B/g, "") === c().replace(/\u200B/g, "") && ["BR", "IMG", "HR"].indexOf(h.childNodes[0].tagName) < 0 && (h = h.childNodes[0]) }
                          for (; h.nodeType != Node.ELEMENT_NODE && h.parentNode;) h = h.parentNode;
                          for (var k = h; k && "HTML" != k.tagName;) {
                              if (k == b.$el.get(0)) return h;
                              k = a(k).parent()[0] }
                      }
                  } catch (l) {}
                  return b.$el.get(0)
              }
  
              function h() {
                  var f = d();
                  try {
                      if (f.rangeCount) {
                          var g = e(0),
                              h = g.endContainer;
                          if (h.nodeType == Node.ELEMENT_NODE) {
                              var i = !1;
                              if (h.childNodes.length > 0 && h.childNodes[g.endOffset] && a(h.childNodes[g.endOffset]).text() === c()) h = h.childNodes[g.endOffset], i = !0;
                              else if (!g.collapsed && h.previousSibling && h.previousSibling.nodeType == Node.ELEMENT_NODE) {
                                  var j = h.previousSibling;
                                  j && j.textContent.replace(/\u200B/g, "") === c().replace(/\u200B/g, "") && (h = j, i = !0) } else if (!g.collapsed && h.childNodes.length > 0 && h.childNodes[g.endOffset]) {
                                  var j = h.childNodes[g.endOffset].previousSibling;
                                  j.nodeType == Node.ELEMENT_NODE && j && j.textContent.replace(/\u200B/g, "") === c().replace(/\u200B/g, "") && (h = j, i = !0) }!i && h.childNodes.length > 0 && a(h.childNodes[h.childNodes.length - 1]).text() === c() && ["BR", "IMG", "HR"].indexOf(h.childNodes[h.childNodes.length - 1].tagName) < 0 && (h = h.childNodes[h.childNodes.length - 1]) }
                          for (h.nodeType == Node.TEXT_NODE && 0 == g.endOffset && h.previousSibling && h.previousSibling.nodeType == Node.ELEMENT_NODE && (h = h.previousSibling); h.nodeType != Node.ELEMENT_NODE && h.parentNode;) h = h.parentNode;
                          for (var k = h; k && "HTML" != k.tagName;) {
                              if (k == b.$el.get(0)) return h;
                              k = a(k).parent()[0] } } } catch (l) {}
                  return b.$el.get(0) }
  
              function i(a, b) {
                  var c = a;
                  return c.nodeType == Node.ELEMENT_NODE && c.childNodes.length > 0 && c.childNodes[b] && (c = c.childNodes[b]), c.nodeType == Node.TEXT_NODE && (c = c.parentNode), c }
  
              function j() {
                  var c = [],
                      f = d();
                  if (t() && f.rangeCount)
                      for (var g = e(), h = 0; h < g.length; h++) {
                          var j = g[h],
                              k = i(j.startContainer, j.startOffset),
                              l = i(j.endContainer, j.endOffset);
                          b.node.isBlock(k) && c.indexOf(k) < 0 && c.push(k);
                          var m = b.node.blockParent(k);
                          m && c.indexOf(m) < 0 && c.push(m);
                          for (var n = [], o = k; o !== l && o !== b.$el.get(0);) n.indexOf(o) < 0 && o.children && o.children.length ? (n.push(o), o = o.children[0]) : o.nextSibling ? o = o.nextSibling : o.parentNode && (o = o.parentNode, n.push(o)), b.node.isBlock(o) && n.indexOf(o) < 0 && c.indexOf(o) < 0 && c.push(o);
                          b.node.isBlock(l) && c.indexOf(l) < 0 && c.push(l);
                          var m = b.node.blockParent(l);
                          m && c.indexOf(m) < 0 && c.push(m) }
                  for (var h = c.length - 1; h > 0; h--) a(c[h]).find(c).length && "LI" != c[h].tagName && c.splice(h, 1);
                  return c }
  
              function k() {
                  if (b.$wp) { b.markers.remove();
                      for (var a = e(), c = [], d = 0; d < a.length; d++)
                          if (a[d].startContainer !== b.doc) {
                              var f = a[d],
                                  g = f.collapsed,
                                  h = b.markers.place(f, !0, d),
                                  i = b.markers.place(f, !1, d);
                              if (b.browser.safari && !g) {
                                  var f = b.doc.createRange();
                                  f.setStartAfter(h), f.setEndBefore(i), c.push(f) } }
                      if (b.browser.safari && c.length) { b.selection.clear();
                          for (var d = 0; d < c.length; d++) b.selection.get().addRange(c[d]) } } }
  
              function l() {
                  var c = b.$el.get(0).querySelectorAll('.fr-marker[data-type="true"]');
                  if (!b.$wp) return b.markers.remove(), !1;
                  if (0 === c.length) return !1;
                  if (b.browser.msie || b.browser.edge)
                      for (var e = 0; e < c.length; e++) c[e].style.display = "inline-block";
                  b.core.hasFocus() || b.browser.msie || b.browser.webkit || b.$el.focus(), f();
                  for (var g = d(), e = 0; e < c.length; e++) {
                      var h = a(c[e]).data("id"),
                          i = c[e],
                          j = b.doc.createRange(),
                          k = b.$el.find('.fr-marker[data-type="false"][data-id="' + h + '"]');
                      (b.browser.msie || b.browser.edge) && k.css("display", "inline-block");
                      var l = null;
                      if (k.length > 0) { k = k[0];
                          try {
                              for (var n = !1, o = i.nextSibling; o && o.nodeType == Node.TEXT_NODE && 0 == o.textContent.length;) {
                                  var p = o;
                                  o = o.nextSibling, a(p).remove() }
                              for (var q = k.nextSibling; q && q.nodeType == Node.TEXT_NODE && 0 == q.textContent.length;) {
                                  var p = q;
                                  q = q.nextSibling, a(p).remove() }
                              if (i.nextSibling == k || k.nextSibling == i) {
                                  for (var r = i.nextSibling == k ? i : k, s = r == i ? k : i, t = r.previousSibling; t && t.nodeType == Node.TEXT_NODE && 0 == t.length;) {
                                      var p = t;
                                      t = t.previousSibling, a(p).remove() }
                                  if (t && t.nodeType == Node.TEXT_NODE)
                                      for (; t && t.previousSibling && t.previousSibling.nodeType == Node.TEXT_NODE;) t.previousSibling.textContent = t.previousSibling.textContent + t.textContent, t = t.previousSibling, a(t.nextSibling).remove();
                                  for (var u = s.nextSibling; u && u.nodeType == Node.TEXT_NODE && 0 == u.length;) {
                                      var p = u;
                                      u = u.nextSibling, a(p).remove() }
                                  if (u && u.nodeType == Node.TEXT_NODE)
                                      for (; u && u.nextSibling && u.nextSibling.nodeType == Node.TEXT_NODE;) u.nextSibling.textContent = u.textContent + u.nextSibling.textContent, u = u.nextSibling, a(u.previousSibling).remove();
                                  if (t && b.node.isVoid(t) && (t = null), u && b.node.isVoid(u) && (u = null), t && u && t.nodeType == Node.TEXT_NODE && u.nodeType == Node.TEXT_NODE) { a(i).remove(), a(k).remove();
                                      var v = t.textContent.length;
                                      t.textContent = t.textContent + u.textContent, a(u).remove(), b.html.normalizeSpaces(t), j.setStart(t, v), j.setEnd(t, v), n = !0 } else !t && u && u.nodeType == Node.TEXT_NODE ? (a(i).remove(), a(k).remove(), b.html.normalizeSpaces(u), l = a(b.doc.createTextNode("\u200b")), a(u).before(l), j.setStart(u, 0), j.setEnd(u, 0), n = !0) : !u && t && t.nodeType == Node.TEXT_NODE && (a(i).remove(), a(k).remove(), b.html.normalizeSpaces(t), l = a(b.doc.createTextNode("\u200b")), a(t).after(l), j.setStart(t, t.textContent.length), j.setEnd(t, t.textContent.length), n = !0) }
                              if (!n) {
                                  var w, x;
                                  if (b.browser.chrome && i.nextSibling == k) w = m(k, j, !0) || j.setStartAfter(k), x = m(i, j, !1) || j.setEndBefore(i);
                                  else { i.previousSibling == k && (i = k, k = i.nextSibling), k.nextSibling && "BR" === k.nextSibling.tagName || !k.nextSibling && b.node.isBlock(i.previousSibling) || i.previousSibling && "BR" == i.previousSibling.tagName || (i.style.display = "inline", k.style.display = "inline", l = a(b.doc.createTextNode("\u200b")));
                                      var y = i.previousSibling;
                                      y && y.style && "block" == b.win.getComputedStyle(y).display ? (j.setEndAfter(y), j.setStartAfter(y)) : (w = m(i, j, !0) || a(i).before(l) && j.setStartBefore(i), x = m(k, j, !1) || a(k).after(l) && j.setEndAfter(k)) } "function" == typeof w && w(), "function" == typeof x && x() } } catch (z) {} }
                      l && l.remove(), g.addRange(j) }
                  b.markers.remove() }
  
              function m(c, d, e) {
                  var f = c.previousSibling,
                      g = c.nextSibling;
                  if (f && g && f.nodeType == Node.TEXT_NODE && g.nodeType == Node.TEXT_NODE) {
                      var h = f.textContent.length;
                      return e ? (g.textContent = f.textContent + g.textContent, a(f).remove(), a(c).remove(), b.html.normalizeSpaces(g), function() { d.setStart(g, h) }) : (f.textContent = f.textContent + g.textContent, a(g).remove(), a(c).remove(), b.html.normalizeSpaces(f), function() { d.setEnd(f, h) }) }
                  if (f && !g && f.nodeType == Node.TEXT_NODE) {
                      var h = f.textContent.length;
                      return e ? (b.html.normalizeSpaces(f), function() { d.setStart(f, h) }) : (b.html.normalizeSpaces(f), function() { d.setEnd(f, h) }) }
                  return g && !f && g.nodeType == Node.TEXT_NODE ? e ? (b.html.normalizeSpaces(g), function() { d.setStart(g, 0) }) : (b.html.normalizeSpaces(g), function() { d.setEnd(g, 0) }) : !1 }
  
              function n() {
                  return !0 }
  
              function o() {
                  for (var a = e(), b = 0; b < a.length; b++)
                      if (!a[b].collapsed) return !1;
                  return !0 }
  
              function p(a) {
                  var c, d, e = !1,
                      f = !1;
                  if (b.win.getSelection) {
                      var g = b.win.getSelection();
                      g.rangeCount && (c = g.getRangeAt(0), d = c.cloneRange(), d.selectNodeContents(a), d.setEnd(c.startContainer, c.startOffset), e = "" === d.toString(), d.selectNodeContents(a), d.setStart(c.endContainer, c.endOffset), f = "" === d.toString()) } else b.doc.selection && "Control" != b.doc.selection.type && (c = b.doc.selection.createRange(), d = c.duplicate(), d.moveToElementText(a), d.setEndPoint("EndToStart", c), e = "" === d.text, d.moveToElementText(a), d.setEndPoint("StartToEnd", c), f = "" === d.text);
                  return { atStart: e, atEnd: f } }
  
              function q() {
                  if (o()) return !1;
                  b.$el.find("td").prepend('<span class="fr-mk">' + a.FE.INVISIBLE_SPACE + "</span>"), b.$el.find("img").append('<span class="fr-mk">' + a.FE.INVISIBLE_SPACE + "</span>");
                  var c = !1,
                      d = p(b.$el.get(0));
                  return d.atStart && d.atEnd && (c = !0), b.$el.find(".fr-mk").remove(), c }
  
              function r(c, d) { "undefined" == typeof d && (d = !0);
                  var e = a(c).html();
                  e && e.replace(/\u200b/g, "").length != e.length && a(c).html(e.replace(/\u200b/g, ""));
                  for (var f = b.node.contents(c), g = 0; g < f.length; g++) f[g].nodeType != Node.ELEMENT_NODE ? a(f[g]).remove() : (r(f[g], 0 == g), 0 == g && (d = !1));
                  c.nodeType == Node.TEXT_NODE ? a(c).replaceWith('<span data-first="true" data-text="true"></span>') : d && a(c).attr("data-first", !0) }
  
              function s(c, d) {
                  var e = b.node.contents(c.get(0));
                  ["TD", "TH"].indexOf(c.get(0).tagName) >= 0 && 1 == c.find(".fr-marker").length && a(e[0]).hasClass("fr-marker") && c.attr("data-del-cell", !0);
                  for (var f = 0; f < e.length; f++) {
                      var g = e[f];
                      a(g).hasClass("fr-marker") ? d = (d + 1) % 2 : d ? a(g).find(".fr-marker").length > 0 ? d = s(a(g), d) : ["TD", "TH"].indexOf(g.tagName) < 0 && !a(g).hasClass("fr-inner") ? !b.opts.keepFormatOnDelete || d > 1 || b.$el.find("[data-first]").length > 0 ? a(g).remove() : r(g) : a(g).hasClass("fr-inner") ? 0 == a(g).find(".fr-inner").length ? a(g).html("<br>") : a(g).find(".fr-inner").filter(function() {
                          return 0 == a(this).find("fr-inner").length }).html("<br>") : (a(g).empty(), a(g).attr("data-del-cell", !0)) : a(g).find(".fr-marker").length > 0 && (d = s(a(g), d)) }
                  return d }
  
              function t() {
                  try {
                      if (!b.$wp) return !1;
                      for (var a = e(0), c = a.commonAncestorContainer; c && !b.node.isElement(c);) c = c.parentNode;
                      return b.node.isElement(c) ? !0 : !1 } catch (d) {
                      return !1 } }
  
              function u() {
                  if (o()) return !0;
                  k();
                  for (var c = function(b) {
                          for (var c = b.previousSibling; c && c.nodeType == Node.TEXT_NODE && 0 == c.textContent.length;) {
                              var d = c,
                                  c = c.previousSibling;
                              a(d).remove() }
                          return c }, d = function(b) {
                          for (var c = b.nextSibling; c && c.nodeType == Node.TEXT_NODE && 0 == c.textContent.length;) {
                              var d = c,
                                  c = c.nextSibling;
                              a(d).remove() }
                          return c }, e = b.$el.find('.fr-marker[data-type="true"]'), f = 0; f < e.length; f++)
                      for (var g = e[f]; !c(g) && !b.node.isBlock(g.parentNode) && !b.$el.is(i.parentNode);) a(g.parentNode).before(g);
                  for (var h = b.$el.find('.fr-marker[data-type="false"]'), f = 0; f < h.length; f++) {
                      for (var i = h[f]; !d(i) && !b.node.isBlock(i.parentNode) && !b.$el.is(i.parentNode);) a(i.parentNode).after(i);
                      i.parentNode && b.node.isBlock(i.parentNode) && b.node.isEmpty(i.parentNode) && !b.$el.is(i.parentNode) && a(i.parentNode).after(i) }
                  if (n()) { s(b.$el, 0);
                      var j = b.$el.find('[data-first="true"]');
                      if (j.length) b.$el.find(".fr-marker").remove(), j.append(a.FE.INVISIBLE_SPACE + a.FE.MARKERS).removeAttr("data-first"), j.attr("data-text") && j.replaceWith(j.html());
                      else { b.$el.find("table").filter(function() {
                              var b = a(this).find("[data-del-cell]").length > 0 && a(this).find("[data-del-cell]").length == a(this).find("td, th").length;
                              return b }).remove(), b.$el.find("[data-del-cell]").removeAttr("data-del-cell");
                          for (var e = b.$el.find('.fr-marker[data-type="true"]'), f = 0; f < e.length; f++) {
                              var m = e[f],
                                  p = m.nextSibling,
                                  q = b.$el.find('.fr-marker[data-type="false"][data-id="' + a(m).data("id") + '"]').get(0);
                              if (q) {
                                  if (p && p == q);
                                  else if (m) {
                                      var r = b.node.blockParent(m),
                                          t = b.node.blockParent(q);
                                      if (a(m).after(q), r == t);
                                      else if (null == r) {
                                          var u = b.node.deepestParent(m);
                                          u ? (a(u).after(a(t).html()), a(t).remove()) : 0 == a(t).parentsUntil(b.$el, "table").length && (a(m).next().after(a(t).html()), a(t).remove()) } else if (null == t && 0 == a(r).parentsUntil(b.$el, "table").length) {
                                          for (var p = r; !p.nextSibling && p.parentNode != b.$el.get(0);) p = p.parentNode;
                                          for (p = p.nextSibling; p && "BR" != p.tagName;) {
                                              var v = p.nextSibling;
                                              a(r).append(p), p = v } } else 0 == a(r).parentsUntil(b.$el, "table").length && 0 == a(t).parentsUntil(b.$el, "table").length && (a(r).append(a(t).html()), a(t).remove()) } } else q = a(m).clone().attr("data-type", !1), a(m).after(q) } } }
                  b.opts.keepFormatOnDelete || b.html.fillEmptyBlocks(), b.html.cleanEmptyTags(!0), b.clean.lists(), b.html.normalizeSpaces(), l() }
  
              function v(c) {
                  if (a(c).find(".fr-marker").length > 0) return !1;
                  for (var d = b.node.contents(c); d.length && b.node.isBlock(d[0]);) c = d[0], d = b.node.contents(c);
                  a(c).prepend(a.FE.MARKERS) }
  
              function w(c) {
                  if (a(c).find(".fr-marker").length > 0) return !1;
                  for (var d = b.node.contents(c); d.length && b.node.isBlock(d[d.length - 1]);) c = d[d.length - 1], d = b.node.contents(c);
                  a(c).append(a.FE.MARKERS) }
  
              function x(c) {
                  for (var d = c.previousSibling; d && d.nodeType == Node.TEXT_NODE && 0 == d.textContent.length;) d = d.previousSibling;
                  return d ? (b.node.isBlock(d) ? w(d) : "BR" == d.tagName ? a(d).before(a.FE.MARKERS) : a(d).after(a.FE.MARKERS), !0) : !1 }
  
              function y(c) {
                  for (var d = c.nextSibling; d && d.nodeType == Node.TEXT_NODE && 0 == d.textContent.length;) d = d.nextSibling;
                  return d ? (b.node.isBlock(d) ? v(d) : a(d).before(a.FE.MARKERS), !0) : !1 }
              return { text: c, get: d, ranges: e, clear: f, element: g, endElement: h, save: k, restore: l, isCollapsed: o, isFull: q, inEditor: t, remove: u, blocks: j, info: p, setAtEnd: w, setAtStart: v, setBefore: x, setAfter: y, rangeElement: i }
          }, a.FE.UNICODE_NBSP = String.fromCharCode(160), a.FE.VOID_ELEMENTS = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "menuitem", "meta", "param", "source", "track", "wbr"], a.FE.BLOCK_TAGS = ["p", "div", "h1", "h2", "h3", "h4", "h5", "h6", "pre", "blockquote", "ul", "ol", "li", "table", "td", "th", "thead", "tfoot", "tbody", "tr", "hr", "dl", "dt", "dd", "form"], a.extend(a.FE.DEFAULTS, { htmlAllowedEmptyTags: ["textarea", "a", "iframe", "object", "video", "style", "script", ".fa", ".fr-emoticon"], htmlDoNotWrapTags: ["script", "style"], htmlSimpleAmpersand: !1 }), a.FE.MODULES.html = function(b) {
              function c() {
                  return b.opts.enter == a.FE.ENTER_P ? "p" : b.opts.enter == a.FE.ENTER_DIV ? "div" : b.opts.enter == a.FE.ENTER_BR ? null : void 0 }
  
              function d() {
                  for (var c = [], d = b.$el.get(0).querySelectorAll(f()), e = 0; e < d.length; e++)
                      if (!(d[e].querySelectorAll(a.FE.VOID_ELEMENTS.join(",")).length > 0 || d[e].querySelectorAll(b.opts.htmlAllowedEmptyTags.join(",")).length > 0 || d[e].querySelectorAll(f()).length > 0)) {
                          for (var g = b.node.contents(d[e]), h = !1, i = 0; i < g.length; i++)
                              if (g[i].nodeType != Node.COMMENT_NODE && g[i].textContent && g[i].textContent.replace(/\u200B/g, "").replace(/\n/g, "").length > 0) { h = !0;
                                  break }
                          h || c.push(d[e]) }
                  return c }
  
              function e() {
                  return a.FE.BLOCK_TAGS.join(":empty, ") + ":empty" }
  
              function f() {
                  return a.FE.BLOCK_TAGS.join(", ") }
  
              function g(c) {
                  var d = a.merge([], a.FE.VOID_ELEMENTS);
                  d = a.merge(d, b.opts.htmlAllowedEmptyTags), "undefined" == typeof c && (d = a.merge(d, a.FE.BLOCK_TAGS));
                  var e, f;
                  do { f = !1, e = b.$el.get(0).querySelectorAll("*:empty:not(" + d.join("):not(") + "):not(.fr-marker)");
                      for (var g = 0; g < e.length; g++)(0 === e[g].attributes.length || "undefined" != typeof e[g].getAttribute("href")) && (a(e[g]).remove(), f = !0);
                      e = b.$el.get(0).querySelectorAll("*:empty:not(" + d.join("):not(") + "):not(.fr-marker)") } while (e.length && f) }
  
              function h(d, e) {
                  var f = c();
                  if (e && (f = 'div class="fr-temp-div"'), f)
                      for (var g = b.node.contents(d.get(0)), h = null, i = 0; i < g.length; i++) {
                          var j = g[i];
                          if (j.nodeType == Node.ELEMENT_NODE && (b.node.isBlock(j) || a(j).is(b.opts.htmlDoNotWrapTags.join(",")) && !a(j).hasClass("fr-marker"))) h = null;
                          else if (j.nodeType != Node.ELEMENT_NODE && j.nodeType != Node.TEXT_NODE) h = null;
                          else if (j.nodeType == Node.ELEMENT_NODE && "BR" == j.tagName)
                              if (null == h) e ? a(j).replaceWith("<" + f + ' data-empty="true"><br></div>') : a(j).replaceWith("<" + f + "><br></" + f + ">");
                              else { a(j).remove();
                                  for (var k = b.node.contents(h), l = !1, m = 0; m < k.length; m++)
                                      if (!a(k[m]).hasClass("fr-marker") && (k[m].nodeType != Node.TEXT_NODE || 0 !== k[m].textContent.replace(/ /g, "").length)) { l = !0;
                                          break }
                                  l === !1 && (h.append("<br>"), h.data("empty", !0)), h = null }
                          else j.nodeType == Node.TEXT_NODE && 0 == a(j).text().trim().length ? a(j).remove() : (null == h && (h = a("<" + f + ">"), a(j).before(h)), j.nodeType == Node.TEXT_NODE && a(j).text().trim().length > 0 ? (h.append(a(j).clone()), a(j).remove()) : h.append(a(j))) } }
  
              function i(c, d, e, f) {
                  return b.$wp ? ("undefined" == typeof c && (c = !1), "undefined" == typeof d && (d = !1), "undefined" == typeof e && (e = !1), "undefined" == typeof f && (f = !1), h(b.$el, c), f && b.$el.find(".fr-inner").each(function() { h(a(this), c) }), d && b.$el.find("td, th").each(function() { h(a(this), c) }), void(e && b.$el.find("blockquote").each(function() { h(a(this), c) }))) : !1 }
  
              function j() { b.$el.find("div.fr-temp-div").each(function() { a(this).data("empty") || "LI" == this.parentNode.tagName ? a(this).replaceWith(a(this).html()) : a(this).replaceWith(a(this).html() + "<br>") }), b.$el.find(".fr-temp-div").removeClass("fr-temp-div").filter(function() {
                      return "" == a(this).attr("class") }).removeAttr("class") }
  
              function k() {
                  for (var a = d(), c = 0; c < a.length; c++) {
                      var e = a[c]; "false" == e.getAttribute("contenteditable") || 0 != e.querySelectorAll(b.opts.htmlAllowedEmptyTags.join(",")).length || b.node.isVoid(e) || "TABLE" != e.tagName && e.appendChild(b.doc.createElement("br")) } }
  
              function l() {
                  return b.$el.find(f()) }
  
              function m(a) {
                  if ("undefined" == typeof a && (a = b.$el.get(0)), a && ["SCRIPT", "STYLE", "PRE"].indexOf(a.tagName) >= 0) return !1;
                  for (var c = b.node.contents(a), d = c.length - 1; d >= 0; d--)
                      if (c[d].nodeType == Node.TEXT_NODE) { c[d].textContent = c[d].textContent.replace(/(?!^)( ){2,}(?!$)/g, " "), c[d].textContent = c[d].textContent.replace(/\n/g, " "), c[d].textContent = c[d].textContent.replace(/^[ ]{2,}/g, " "), c[d].textContent = c[d].textContent.replace(/[ ]{2,}$/g, " "), (b.node.isBlock(a) || b.node.isElement(a)) && (c[d].previousSibling || (c[d].textContent = c[d].textContent.replace(/^ */, "")), c[d].nextSibling || (c[d].textContent = c[d].textContent.replace(/ *$/, "")), c[d].previousSibling && c[d].nextSibling && " " == c[d].textContent && (c[d].previousSibling && c[d].nextSibling && b.node.isBlock(c[d].previousSibling) && b.node.isBlock(c[d].nextSibling) ? c[d].textContent = "" : c[d].textContent = "\n")) } else m(c[d]) }
  
              function n(a) {
                  return a && (b.node.isBlock(a) || ["STYLE", "SCRIPT", "HEAD", "BR", "HR"].indexOf(a.tagName) >= 0 || a.nodeType == Node.COMMENT_NODE) }
  
              function o(c) {
                  if ("undefined" == typeof c && (c = b.$el.get(0)), !c.getAttribute || "false" != c.getAttribute("contenteditable"))
                      if (c.nodeType == Node.ELEMENT_NODE && ["STYLE", "SCRIPT", "HEAD"].indexOf(c.tagName) < 0)
                          for (var d = b.node.contents(c), e = d.length - 1; e >= 0; e--)(d[e].tagName != Node.ELEMENT_NODE || (d[e].className || "").indexOf("fr-marker") < 0) && o(d[e]);
                      else if (c.nodeType == Node.TEXT_NODE && c.textContent.length > 0) {
                      var f = c.previousSibling,
                          g = c.nextSibling;
                      if (n(f) && n(g) && 0 === c.textContent.trim().length && b.opts.enter != a.FE.ENTER_BR) a(c).remove();
                      else {
                          var h = c.textContent;
                          h = h.replace(new RegExp(a.FE.UNICODE_NBSP, "g"), " ");
                          for (var i = "", j = 0; j < h.length; j++) i += 32 != h.charCodeAt(j) || 0 !== j && 32 != i.charCodeAt(j - 1) ? h[j] : a.FE.UNICODE_NBSP;
                          c.nextSibling || (i = i.replace(/ $/, a.FE.UNICODE_NBSP)), !c.previousSibling || b.node.isVoid(c.previousSibling) || b.node.isBlock(c.previousSibling) || (i = i.replace(/^\u00A0([^ $])/, " $1")), i = i.replace(/([^ \u00A0])\u00A0([^ \u00A0])/g, "$1 $2"), c.textContent != i && (c.textContent = i) } } }
  
              function p(c) {
                  if ("undefined" == typeof c && (c = b.$el.get(0)), c.nodeType == Node.ELEMENT_NODE && ["STYLE", "SCRIPT", "HEAD"].indexOf(c.tagName) < 0) {
                      for (var d = b.node.contents(c), e = d.length - 1; e >= 0; e--)
                          if (!a(d[e]).hasClass("fr-marker")) {
                              var f = p(d[e]);
                              if (1 == f) return !0 } } else if (c.nodeType == Node.TEXT_NODE && c.textContent.length > 0) {
                      var g = c.previousSibling,
                          h = c.nextSibling;
                      if (n(g) && n(h) && 0 === c.textContent.trim().length) return !0;
                      var i = c.textContent;
                      i = i.replace(new RegExp(a.FE.UNICODE_NBSP, "g"), " ");
                      for (var j = "", k = 0; k < i.length; k++) j += 32 != i.charCodeAt(k) || 0 !== k && 32 != j.charCodeAt(k - 1) ? i[k] : a.FE.UNICODE_NBSP;
                      if (c.nextSibling || (j = j.replace(/ $/, a.FE.UNICODE_NBSP)), c.previousSibling && !b.node.isVoid(c.previousSibling) && (j = j.replace(/^\u00A0([^ $])/, " $1")), j = j.replace(/([^ \u00A0])\u00A0([^ \u00A0])/g, "$1 $2"), c.textContent != j) return !0 }
                  return !1 }
  
              function q(a, b, c) {
                  var d = new RegExp(b, "gi"),
                      e = d.exec(a);
                  return e ? e[c] : null }
  
              function r(a, b) {
                  var c = a.match(/<!DOCTYPE ?([^ ]*) ?([^ ]*) ?"?([^"]*)"? ?"?([^"]*)"?>/i);
                  return c ? b.implementation.createDocumentType(c[1], c[3], c[4]) : b.implementation.createDocumentType("html") }
  
              function s(a) {
                  var b = a.doctype,
                      c = "<!DOCTYPE html>";
                  return b && (c = "<!DOCTYPE " + b.name + (b.publicId ? ' PUBLIC "' + b.publicId + '"' : "") + (!b.publicId && b.systemId ? " SYSTEM" : "") + (b.systemId ? ' "' + b.systemId + '"' : "") + ">"), c }
  
              function t() { i(), m(), g(), o(), k(), b.clean.quotes(), b.clean.lists(), b.clean.tables(), b.clean.toHTML5(), b.selection.restore(), u(), b.placeholder.refresh() }
  
              function u() { b.core.isEmpty() && (null != c() ? 0 === b.$el.get(0).querySelectorAll(f()).length && 0 === b.$el.get(0).querySelectorAll(b.opts.htmlDoNotWrapTags.join(",")).length && (b.core.hasFocus() ? (b.$el.html("<" + c() + ">" + a.FE.MARKERS + "<br/></" + c() + ">"), b.selection.restore()) : b.$el.html("<" + c() + "><br/></" + c() + ">")) : 0 === b.$el.get(0).querySelectorAll("*:not(.fr-marker):not(br)").length && (b.core.hasFocus() ? (b.$el.html(a.FE.MARKERS + "<br/>"), b.selection.restore()) : b.$el.html("<br/>"))) }
  
              function v(a, b) {
                  return q(a, "<" + b + "[^>]*?>([\\w\\W]*)</" + b + ">", 1) }
  
              function w(c, d) {
                  var e = a("<div " + (q(c, "<" + d + "([^>]*?)>", 1) || "") + ">");
                  return b.node.rawAttributes(e.get(0)) }
  
              function x(a) {
                  return q(a, "<!DOCTYPE([^>]*?)>", 0) || "<!DOCTYPE html>" }
  
              function y(a) {
                  var c = b.clean.html(a, [], [], b.opts.fullPage);
                  if (b.opts.fullPage) {
                      var d = v(c, "body") || (c.indexOf("<body") >= 0 ? "" : c),
                          e = w(c, "body"),
                          f = v(c, "head") || "<title></title>",
                          g = w(c, "head"),
                          h = x(c),
                          i = w(c, "html");
                      b.$el.html(d), b.node.clearAttributes(b.$el.get(0)), b.$el.attr(e), b.$head.html(f), b.node.clearAttributes(b.$head.get(0)), b.$head.attr(g), b.node.clearAttributes(b.$html.get(0)), b.$html.attr(i), b.iframe_document.doctype.parentNode.replaceChild(r(h, b.iframe_document), b.iframe_document.doctype) } else b.$el.html(c);
                  var j = b.edit.isDisabled();
                  b.edit.on(), b.core.injectStyle(b.opts.iframeStyle), t(), b.opts.useClasses || (b.$el.find("[fr-original-class]").each(function() { this.setAttribute("class", this.getAttribute("fr-original-class")), this.removeAttribute("fr-original-class") }), b.$el.find("[fr-original-style]").each(function() { this.setAttribute("style", this.getAttribute("fr-original-style")), this.removeAttribute("fr-original-style") })), j && b.edit.off(), b.events.trigger("html.set") }
  
              function z(a, c) {
                  if (!b.$wp) return b.$oel.clone().removeClass("fr-view").removeAttr("contenteditable").get(0).outerHTML;
                  var d = "";
                  b.events.trigger("html.beforeGet");
                  var e, f = function(a) {
                          var b = /(#[^\s\+>~\.\[:]+)/g,
                              c = /(\[[^\]]+\])/g,
                              d = /(\.[^\s\+>~\.\[:]+)/g,
                              e = /(::[^\s\+>~\.\[:]+|:first-line|:first-letter|:before|:after)/gi,
                              f = /(:[\w-]+\([^\)]*\))/gi,
                              g = /(:[^\s\+>~\.\[:]+)/g,
                              h = /([^\s\+>~\.\[:]+)/g;! function() {
                              var b = /:not\(([^\)]*)\)/g;
                              b.test(a) && (a = a.replace(b, "     $1 ")) }();
                          var i = 100 * (a.match(b) || []).length + 10 * (a.match(c) || []).length + 10 * (a.match(d) || []).length + 10 * (a.match(f) || []).length + 10 * (a.match(g) || []).length + (a.match(e) || []).length;
                          return a = a.replace(/[\*\s\+>~]/g, " "), a = a.replace(/[#\.]/g, " "), i += (a.match(h) || []).length },
                      g = [],
                      h = {};
                  if (!b.opts.useClasses && !c) {
                      for (e = 0; e < b.doc.styleSheets.length; e++) {
                          var i, j = 0;
                          try { i = b.doc.styleSheets[e].cssRules, b.doc.styleSheets[e].ownerNode && "STYLE" == b.doc.styleSheets[e].ownerNode.nodeType && (j = 1) } catch (k) {}
                          if (i)
                              for (var l = 0, m = i.length; m > l; l++) {
                                  var n = b.opts.iframe ? "body " : ".fr-view ";
                                  if (i[l].selectorText && 0 === i[l].selectorText.indexOf(n) && i[l].style.cssText.length > 0)
                                      for (var o = i[l].selectorText.replace(n, "").replace(/::/g, ":"), p = b.$el.get(0).querySelectorAll(o), q = 0; q < p.length; q++) {!p[q].getAttribute("fr-original-style") && p[q].getAttribute("style") ? (p[q].setAttribute("fr-original-style", p[q].getAttribute("style")), g.push(p[q])) : p[q].getAttribute("fr-original-style") || g.push(p[q]), h[p[q]] || (h[p[q]] = {});
                                          for (var r = 1e3 * j + f(i[l].selectorText), t = i[l].style.cssText.split(";"), u = 0; u < t.length; u++) {
                                              var v = t[u].trim().split(":")[0];
                                              h[p[q]][v] || (h[p[q]][v] = 0, (p[q].getAttribute("fr-original-style") || "").indexOf(v + ":") >= 0 && (h[p[q]][v] = 1e4)), r >= h[p[q]][v] && (h[p[q]][v] = r, t[u].trim().length && (p[q].style[v.trim()] = t[u].trim().split(":")[1])) } } } }
                      for (e = 0; e < g.length; e++) g[e].getAttribute("class") && (g[e].setAttribute("fr-original-class", g[e].getAttribute("class")), g[e].removeAttribute("class")) }
                  if (b.core.isEmpty() ? b.opts.fullPage && (d = s(b.iframe_document), d += "<html" + b.node.attributes(b.$html.get(0)) + ">" + b.$html.find("head").get(0).outerHTML + "<body></body></html>") : ("undefined" == typeof a && (a = !1), b.opts.fullPage ? (d = s(b.iframe_document), d += "<html" + b.node.attributes(b.$html.get(0)) + ">" + b.$html.html() + "</html>") : d = b.$el.html()), !b.opts.useClasses && !c)
                      for (e = 0; e < g.length; e++) g[e].getAttribute("fr-original-class") && (g[e].setAttribute("class", g[e].getAttribute("fr-original-class")), g[e].removeAttribute("fr-original-class")), g[e].getAttribute("fr-original-style") ? (g[e].setAttribute("style", g[e].getAttribute("fr-original-style")), g[e].removeAttribute("fr-original-style")) : g[e].removeAttribute("style");
                  b.opts.fullPage && (d = d.replace(/<style data-fr-style="true">(?:[\w\W]*?)<\/style>/g, ""), d = d.replace(/<style(?:[\w\W]*?)class="firebugResetStyles"(?:[\w\W]*?)>(?:[\w\W]*?)<\/style>/g, ""), d = d.replace(/<body((?:[\w\W]*?)) spellcheck="true"((?:[\w\W]*?))>((?:[\w\W]*?))<\/body>/g, "<body$1$2>$3</body>"), d = d.replace(/<body((?:[\w\W]*?)) contenteditable="(true|false)"((?:[\w\W]*?))>((?:[\w\W]*?))<\/body>/g, "<body$1$3>$4</body>"), d = d.replace(/<body((?:[\w\W]*?)) dir="([\w]*)"((?:[\w\W]*?))>((?:[\w\W]*?))<\/body>/g, "<body$1$3>$4</body>"), d = d.replace(/<body((?:[\w\W]*?))class="([\w\W]*?)(fr-rtl|fr-ltr)([\w\W]*?)"((?:[\w\W]*?))>((?:[\w\W]*?))<\/body>/g, '<body$1class="$2$4"$5>$6</body>'), d = d.replace(/<body((?:[\w\W]*?)) class=""((?:[\w\W]*?))>((?:[\w\W]*?))<\/body>/g, "<body$1$2>$3</body>")), b.opts.htmlSimpleAmpersand && (d = d.replace(/\&amp;/gi, "&")), b.events.trigger("html.afterGet"), a || (d = d.replace(/<span[^>]*? class\s*=\s*["']?fr-marker["']?[^>]+>\u200b<\/span>/gi, "")), d = b.clean.invisibleSpaces(d);
                  var w = b.events.chainTrigger("html.get", d);
                  return "string" == typeof w && (d = w), d = d.replace(/<pre(?:[\w\W]*?)>(?:[\w\W]*?)<\/pre>/g, function(a) {
                      return a.replace(/<br>/g, "\n") }) }
  
              function A() {
                  var c = function(c, d) {
                          for (; d && (d.nodeType == Node.TEXT_NODE || !b.node.isBlock(d));) d && d.nodeType != Node.TEXT_NODE && a(c).wrapInner(b.node.openTagString(d) + b.node.closeTagString(d)), d = d.parentNode;
                          d && c.innerHTML == d.innerHTML && (c.innerHTML = d.outerHTML) },
                      d = function() {
                          var c, d = null;
                          return b.win.getSelection ? (c = b.win.getSelection(), c && c.rangeCount && (d = c.getRangeAt(0).commonAncestorContainer, d.nodeType != Node.ELEMENT_NODE && (d = d.parentNode))) : (c = b.doc.selection) && "Control" != c.type && (d = c.createRange().parentElement()), null != d && (a.inArray(b.$el.get(0), a(d).parents()) >= 0 || d == b.$el.get(0)) ? d : null },
                      e = "";
                  if ("undefined" != typeof b.win.getSelection) { b.browser.mozilla && (b.selection.save(), b.$el.find('.fr-marker[data-type="false"]').length > 1 && (b.$el.find('.fr-marker[data-type="false"][data-id="0"]').remove(), b.$el.find('.fr-marker[data-type="false"]:last').attr("data-id", "0"), b.$el.find(".fr-marker").not('[data-id="0"]').remove()), b.selection.restore());
                      for (var f = b.selection.ranges(), g = 0; g < f.length; g++) {
                          var h = document.createElement("div");
                          h.appendChild(f[g].cloneContents()), c(h, d()), a(h).find(".fr-element").length > 0 && (h = b.$el.get(0)), e += h.innerHTML } } else "undefined" != typeof b.doc.selection && "Text" == b.doc.selection.type && (e = b.doc.selection.createRange().htmlText);
                  return e }
  
              function B(b) {
                  var c = a("<div>").html(b);
                  return c.find(f()).length > 0 }
  
              function C(a) {
                  var c = b.doc.createElement("div");
                  return c.innerHTML = a, b.selection.setAtEnd(c), c.innerHTML }
  
              function D(a) {
                  return a.replace(/</gi, "&lt;").replace(/>/gi, "&gt;").replace(/"/gi, "&quot;").replace(/'/gi, "&apos;") }
  
              function E(c, d, e) { b.selection.isCollapsed() || b.selection.remove();
                  var f;
                  if (f = d ? c : b.clean.html(c), f = f.replace(/\r|\n/g, " "), c.indexOf('class="fr-marker"') < 0 && (f = C(f)), b.core.isEmpty()) b.$el.html(f);
                  else {
                      var g = b.markers.insert();
                      if (!g) return !1;
                      var h;
                      if ((B(f) || e) && (h = b.node.deepestParent(g))) {
                          var g = b.markers.split();
                          if (!g) return !1;
                          a(g).replaceWith(f) } else a(g).replaceWith(f) }
                  t(), b.events.trigger("html.inserted") }
  
              function F(c) {
                  var d = null; "undefined" == typeof c && (d = b.selection.element());
                  var e, f;
                  do { f = !1, e = b.$el.get(0).querySelectorAll("*:not(.fr-marker)");
                      for (var g = 0; g < e.length; g++) {
                          var h = e[g];
                          if (d != h) {
                              var i = h.textContent;
                              0 === h.children.length && 1 === i.length && 8203 == i.charCodeAt(0) && (a(h).remove(), f = !0) } } } while (f) }
  
              function G() {
                  var a = function() { F(), b.placeholder && b.placeholder.refresh() };
                  b.events.on("mouseup", a), b.events.on("keydown", a), b.events.on("contentChanged", u) }
              return { defaultTag: c, emptyBlocks: d, emptyBlockTagsQuery: e, blockTagsQuery: f, fillEmptyBlocks: k, cleanEmptyTags: g, cleanWhiteTags: F, normalizeSpaces: o, doNormalize: p, cleanBlankSpaces: m, blocks: l, getDoctype: s, set: y, get: z, getSelected: A, insert: E, wrap: i, unwrap: j, escapeEntities: D, checkIfEmpty: u, extractNode: v, extractNodeAttrs: w, extractDoctype: x, _init: G } }, a.extend(a.FE.DEFAULTS, { height: null, heightMax: null, heightMin: null, width: null }), a.FE.MODULES.size = function(a) {
              function b() { a.opts.height && a.$el.css("minHeight", a.opts.height - a.helpers.getPX(a.$el.css("padding-top")) - a.helpers.getPX(a.$el.css("padding-bottom"))), a.$iframe.height(a.$el.outerHeight(!0)) }
  
              function c() { a.opts.heightMin ? a.$el.css("minHeight", a.opts.heightMin) : a.$el.css("minHeight", ""), a.opts.heightMax ? (a.$wp.css("maxHeight", a.opts.heightMax), a.$wp.css("overflow", "auto")) : (a.$wp.css("maxHeight", ""), a.$wp.css("overflow", "")), a.opts.height ? (a.$wp.height(a.opts.height), a.$el.css("minHeight", a.opts.height - a.helpers.getPX(a.$el.css("padding-top")) - a.helpers.getPX(a.$el.css("padding-bottom"))), a.$wp.css("overflow", "auto")) : (a.$wp.css("height", ""), a.opts.heightMin || a.$el.css("minHeight", ""), a.opts.heightMax || a.$wp.css("overflow", "")), a.opts.width && a.$box.width(a.opts.width) }
  
              function d() {
                  return a.$wp ? (c(), void(a.opts.iframe && (a.events.on("keyup", b), a.events.on("commands.after", b), a.events.on("html.set", b), a.events.on("init", b), a.events.on("initialized", b)))) : !1 }
              return { _init: d, syncIframe: b, refresh: c } }, a.extend(a.FE.DEFAULTS, { language: null }), a.FE.LANGUAGE = {}, a.FE.MODULES.language = function(b) {
              function c(a) {
                  return e && e.translation[a] ? e.translation[a] : a }
  
              function d() { a.FE.LANGUAGE && (e = a.FE.LANGUAGE[b.opts.language]), e && e.direction && (b.opts.direction = e.direction) }
              var e;
              return { _init: d, translate: c } }, a.extend(a.FE.DEFAULTS, { placeholderText: "Type something" }), a.FE.MODULES.placeholder = function(b) {
              function c() { b.$placeholder || g();
                  var c = 0,
                      d = b.node.contents(b.$el.get(0));
                  d.length && d[0].nodeType == Node.ELEMENT_NODE ? (b.opts.toolbarInline || (c = b.helpers.getPX(a(d[0]).css("margin-top"))), b.$placeholder.css("font-size", a(d[0]).css("font-size")), b.$placeholder.css("line-height", a(d[0]).css("line-height"))) : (b.$placeholder.css("font-size", b.$el.css("font-size")), b.$placeholder.css("line-height", b.$el.css("line-height"))), b.$wp.addClass("show-placeholder"), b.$placeholder.css("margin-top", Math.max(b.helpers.getPX(b.$el.css("margin-top")), c)).text(b.language.translate(b.opts.placeholderText || b.$oel.attr("placeholder") || "")) }
  
              function d() { b.$wp.removeClass("show-placeholder") }
  
              function e() {
                  return b.$wp ? b.$wp.hasClass("show-placeholder") : !0 }
  
              function f() {
                  return b.$wp ? void(b.core.isEmpty() ? c() : d()) : !1 }
  
              function g() { b.$placeholder = a('<span class="fr-placeholder"></span>'), b.$wp.append(b.$placeholder) }
  
              function h() {
                  return b.$wp ? void b.events.on("init input keydown keyup contentChanged", f) : !1 }
              return { _init: h, show: c, hide: d, refresh: f, isVisible: e } }, a.FE.MODULES.edit = function(a) {
              function b() {
                  if (a.browser.mozilla) try { a.doc.execCommand("enableObjectResizing", !1, "false"), a.doc.execCommand("enableInlineTableEditing", !1, "false") } catch (b) {} }
  
              function c() { a.$wp ? (a.$el.attr("contenteditable", !0), a.$el.removeClass("fr-disabled"), a.$tb && a.$tb.removeClass("fr-disabled"), b()) : a.$el.is("a") && a.$el.attr("contenteditable", !0), f = !1 }
  
              function d() { a.$wp ? (a.$el.attr("contenteditable", !1), a.$el.addClass("fr-disabled"), a.$tb && a.$tb.addClass("fr-disabled")) : a.$el.is("a") && a.$el.attr("contenteditable", !1), f = !0 }
  
              function e() {
                  return f }
              var f = !1;
              return { on: c, off: d, disableDesign: b, isDisabled: e } }, a.extend(a.FE.DEFAULTS, { editorClass: null, typingTimer: 500, iframe: !1, requestWithCORS: !0, requestHeaders: {}, useClasses: !0, spellcheck: !0, iframeStyle: "html{margin: 0px;}body{padding:10px;background:transparent;color:#000000;position:relative;z-index: 2;-webkit-user-select:auto;margin:0px;overflow:hidden;}", direction: "auto", zIndex: 1, disableRightClick: !1, scrollableContainer: "body", keepFormatOnDelete: !1, theme: null }), a.FE.MODULES.core = function(b) {
              function c(a) { b.opts.iframe && b.$head.append('<style data-fr-style="true">' + a + "</style>") }
  
              function d() { b.opts.iframe || b.$el.addClass("fr-element fr-view") }
  
              function e() {
                  if (b.$box.addClass("fr-box" + (b.opts.editorClass ? " " + b.opts.editorClass : "")), b.$wp.addClass("fr-wrapper"), d(), b.opts.iframe) {
                      b.$iframe.addClass("fr-iframe");
                      for (var a = 0; a < b.o_doc.styleSheets.length; a++) {
                          var c;
                          try { c = b.o_doc.styleSheets[a].cssRules } catch (e) {}
                          if (c)
                              for (var f = 0, g = c.length; g > f; f++) !c[f].selectorText || 0 !== c[f].selectorText.indexOf(".fr-view") && 0 !== c[f].selectorText.indexOf(".fr-element") || c[f].style.cssText.length > 0 && (0 === c[f].selectorText.indexOf(".fr-view") ? b.opts.iframeStyle += c[f].selectorText.replace(/\.fr-view/g, "body") + "{" + c[f].style.cssText + "}" : b.opts.iframeStyle += c[f].selectorText.replace(/\.fr-element/g, "body") + "{" + c[f].style.cssText + "}");
                      }
                  }
                  "auto" != b.opts.direction && b.$box.removeClass("fr-ltr fr-rtl").addClass("fr-" + b.opts.direction), b.$el.attr("dir", b.opts.direction), b.$wp.attr("dir", b.opts.direction), b.opts.zIndex > 1 && b.$box.css("z-index", b.opts.zIndex), b.opts.theme && b.$box.addClass(b.opts.theme + "-theme")
              }
  
              function f() {
                  return b.node.isEmpty(b.$el.get(0)) }
  
              function g() { b.drag_support = { filereader: "undefined" != typeof FileReader, formdata: !!b.win.FormData, progress: "upload" in new XMLHttpRequest } }
  
              function h(a, c) {
                  var d = new XMLHttpRequest;
                  d.open(c, a, !0), b.opts.requestWithCORS && (d.withCredentials = !0);
                  for (var e in b.opts.requestHeaders) b.opts.requestHeaders.hasOwnProperty(e) && d.setRequestHeader(e, b.opts.requestHeaders[e]);
                  return d }
  
              function i() { "TEXTAREA" == b.$oel.get(0).tagName && b.$oel.val(b.html.get()), b.$wp && ("TEXTAREA" == b.$oel.get(0).tagName ? (b.$box.replaceWith(b.$oel), b.$oel.show()) : (b.$wp.replaceWith(b.html.get()), b.$box.removeClass("fr-view fr-ltr fr-box " + (b.opts.editorClass || "")), b.opts.theme && b.$box.addClass(b.opts.theme + "-theme"))) }
  
              function j() {
                  return b.browser.mozilla && b.helpers.isMobile() ? b.selection.inEditor() : b.node.hasFocus(b.$el.get(0)) || b.$el.find("*:focus").length > 0 }
  
              function k(a) {
                  if (!a) return !1;
                  var c = a.data("instance");
                  return c ? c.id == b.id : !1 }
  
              function l() {
                  if (a.FE.INSTANCES.push(b), g(), b.$wp) { e(), b.html.set(b._original_html), b.$el.attr("spellcheck", b.opts.spellcheck), b.helpers.isMobile() && (b.$el.attr("autocomplete", b.opts.spellcheck ? "on" : "off"), b.$el.attr("autocorrect", b.opts.spellcheck ? "on" : "off"), b.$el.attr("autocapitalize", b.opts.spellcheck ? "on" : "off")), b.opts.disableRightClick && b.events.$on(b.$el, "contextmenu", function(a) {
                          return 2 == a.button ? !1 : void 0 });
                      try { b.doc.execCommand("styleWithCSS", !1, !1) } catch (c) {} }
                  b.events.on("drop", function(a) { a.preventDefault(), a.stopPropagation() }), b.events.on("destroy", i), "TEXTAREA" == b.$oel.get(0).tagName && (b.events.on("contentChanged", function() { b.$oel.val(b.html.get()) }), b.events.on("form.submit", function() { b.$oel.val(b.html.get()) }), b.events.on("form.reset", function() { b.html.set(b._original_html) }), b.$oel.val(b.html.get())), b.events.trigger("init") }
              return { _init: l, isEmpty: f, getXHR: h, injectStyle: c, hasFocus: j, sameInstance: k }
          }, a.FE.COMMANDS = { bold: { title: "Bold", refresh: function(a) { this.refresh["default"](a, "bold") } }, italic: { title: "Italic", refresh: function(a) { this.refresh["default"](a, "italic") } }, underline: { title: "Underline", refresh: function(a) { this.refresh["default"](a, "underline") } }, strikeThrough: { title: "Strikethrough", refresh: function(a) { this.refresh["default"](a, "strikethrough") } }, subscript: { title: "Subscript", refresh: function(a) { this.refresh["default"](a, "subscript") } }, superscript: { title: "Superscript", refresh: function(a) { this.refresh["default"](a, "superscript") } }, outdent: { title: "Decrease Indent" }, indent: { title: "Increase Indent" }, undo: { title: "Undo", undo: !1, forcedRefresh: !0, disabled: !0 }, redo: { title: "Redo", undo: !1, forcedRefresh: !0, disabled: !0 }, insertHR: { title: "Insert Horizontal Line" }, clearFormatting: { title: "Clear Formatting" }, selectAll: { title: "Select All", undo: !1 } }, a.FE.RegisterCommand = function(b, c) { a.FE.COMMANDS[b] = c }, a.FE.MODULES.commands = function(b) {
              function c(c, d) {
                  if (b.events.trigger("commands.before", a.merge([c], d || [])) !== !1) {
                      var e = a.FE.COMMANDS[c] && a.FE.COMMANDS[c].callback || k[c],
                          f = !0;
                      a.FE.COMMANDS[c] && "undefined" != typeof a.FE.COMMANDS[c].focus && (f = a.FE.COMMANDS[c].focus), b.core.hasFocus() || !f || b.popups.areVisible() || b.events.focus(!0), a.FE.COMMANDS[c] && a.FE.COMMANDS[c].undo !== !1 && b.undo.saveStep(), e && e.apply(b, a.merge([c], d || [])), b.events.trigger("commands.after", a.merge([c], d || [])), a.FE.COMMANDS[c] && a.FE.COMMANDS[c].undo !== !1 && b.undo.saveStep() } }
  
              function d(c, d) {
                  if (b.selection.isCollapsed() && b.doc.queryCommandState(c) === !1) { b.markers.insert();
                      var e = b.$el.find(".fr-marker");
                      e.replaceWith("<" + d + ">" + a.FE.INVISIBLE_SPACE + a.FE.MARKERS + "</" + d + ">"), b.selection.restore() } else {
                      var f = b.selection.element();
                      if (b.selection.isCollapsed() && b.doc.queryCommandState(c) === !0 && f.tagName == d.toUpperCase() && 0 === (f.textContent || "").replace(/\u200B/g, "").length) a(f).replaceWith(a.FE.MARKERS), b.selection.restore();
                      else {
                          var g = b.$el.find("span"),
                              h = !1;
                          b.doc.queryCommandState(c) !== !1 || b.browser.chrome || (b.selection.save(), h = !0), b.browser.mozilla && b.$el.find(".fr-marker").css("display", "inline-block"), b.doc.execCommand(c, !1, !1), h && b.selection.restore();
                          var i = b.$el.find("span[style]").not(g).filter(function() {
                              return a(this).attr("style").indexOf("font-weight: normal") >= 0 });
                          i.length && (b.selection.save(), i.each(function() { a(this).replaceWith(a(this).html()) }), b.selection.restore()), b.clean.toHTML5() } } }
  
              function e(c) { b.selection.save(), b.html.wrap(!0, !0, !0, !0), b.selection.restore();
                  for (var d = b.selection.blocks(), e = 0; e < d.length; e++)
                      if ("LI" != d[e].tagName && "LI" != d[e].parentNode.tagName) {
                          var f = a(d[e]),
                              g = "rtl" == b.opts.direction || "rtl" == f.css("direction") ? "margin-right" : "margin-left",
                              h = b.helpers.getPX(f.css(g));
                          f.css(g, Math.max(h + 20 * c, 0) || ""), f.removeClass("fr-temp-div") }
                  b.selection.save(), b.html.unwrap(), b.selection.restore() }
  
              function f() {
                  var c = function(a) {
                      return a.attr("style").indexOf("font-size") >= 0 };
                  b.$el.find("[style]").each(function() {
                      var b = a(this);
                      c(b) && (b.attr("data-font-size", b.css("font-size")), b.css("font-size", "")) }) }
  
              function g() { b.$el.find("[data-font-size]").each(function() {
                      var b = a(this);
                      b.css("font-size", b.attr("data-font-size")), b.removeAttr("data-font-size") }) }
  
              function h() { b.$el.find("span").each(function() { "" === b.node.attributes(this) && a(this).replaceWith(a(this).html()) }) }
  
              function i(c, d) {
                  if (b.selection.isCollapsed()) { b.markers.insert();
                      var e = b.$el.find(".fr-marker");
                      e.replaceWith('<span style="' + c + ": " + d + ';">' + a.FE.INVISIBLE_SPACE + a.FE.MARKERS + "</span>"), b.selection.restore() } else { f(), b.doc.execCommand("fontSize", !1, 4), b.selection.save(), g();
                      for (var i, j = function(b) {
                              var d = a(b);
                              d.css(c, ""), "" === d.attr("style") && d.replaceWith(d.html()) }, k = function() {
                              return 0 === a(this).attr("style").indexOf(c + ":") || a(this).attr("style").indexOf(";" + c + ":") >= 0 || a(this).attr("style").indexOf("; " + c + ":") >= 0 }; b.$el.find("font").length > 0;) {
                          var l = b.$el.find("font:first"),
                              m = a('<span class="fr-just" style="' + c + ": " + d + ';">' + l.html() + "</span>");
                          l.replaceWith(m);
                          var n = m.find("span");
                          for (i = n.length - 1; i >= 0; i--) j(n[i]);
                          var o = m.parentsUntil(b.$el, "span[style]").filter(k);
                          if (o.length) {
                              var p = "",
                                  q = "",
                                  r = "",
                                  s = "",
                                  t = m.get(0);
                              do t = t.parentNode, p += b.node.closeTagString(t), q = b.node.openTagString(t) + q, o.get(0) != t && (r += b.node.closeTagString(t), s = b.node.openTagString(t) + s); while (o.get(0) != t);
                              var u = p + '<span class="fr-just" style="' + c + ": " + d + ';">' + s + m.html() + r + "</span>" + q;
                              m.replaceWith('<span id="fr-break"></span>');
                              var v = o.get(0).outerHTML;
                              o.replaceWith(v.replace(/<span id="fr-break"><\/span>/g, u)) } }
                      b.html.cleanEmptyTags(), h();
                      var w = b.$el.find(".fr-just + .fr-just");
                      for (i = 0; i < w.length; i++) {
                          var x = a(w[i]);
                          x.prepend(x.prev().html()), x.prev().remove() }
                      b.$el.find(".fr-marker + .fr-just").each(function() { a(this).prepend(a(this).prev()) }), b.$el.find(".fr-just + .fr-marker").each(function() { a(this).append(a(this).next()) }), b.$el.find(".fr-just").removeAttr("class"), b.selection.restore() } }
  
              function j(a) {
                  return function() { c(a) } }
              var k = { bold: function() { d("bold", "strong") }, subscript: function() { d("subscript", "sub") }, superscript: function() { d("superscript", "sup") }, italic: function() { d("italic", "em") }, strikeThrough: function() { d("strikeThrough", "s") }, underline: function() { d("underline", "u") }, undo: function() { b.undo.run() }, redo: function() { b.undo.redo() }, indent: function() { e(1) }, outdent: function() { e(-1) }, show: function() { b.opts.toolbarInline && b.toolbar.showInline(null, !0) }, insertHR: function() { b.selection.remove(), b.html.insert('<hr id="fr-just">');
                          var a = b.$el.find("hr#fr-just");
                          a.removeAttr("id"), b.selection.setAfter(a.get(0)) || b.selection.setBefore(a.get(0)), b.selection.restore() }, clearFormatting: function() {
                          if (b.browser.msie || b.browser.edge) {
                              var c = function(c) { b.commands.applyProperty(c, "#123456"), b.selection.save(), b.$el.find("span:not(.fr-marker)").each(function(d, e) {
                                      var f = a(e),
                                          g = f.css(c);
                                      ("#123456" === g || "#123456" === b.helpers.RGBToHex(g)) && f.replaceWith(f.html()) }), b.selection.restore() };
                              c("color"), c("background-color") }
                          b.doc.execCommand("removeFormat", !1, !1), b.doc.execCommand("unlink", !1, !1) }, selectAll: function() { b.doc.execCommand("selectAll", !1, !1) } },
                  l = {};
              for (var m in k) k.hasOwnProperty(m) && (l[m] = j(m));
              return a.extend(l, { exec: c, applyProperty: i }) }, a.FE.MODULES.cursorLists = function(b) {
              function c(a) {
                  for (var b = a;
                      "LI" != b.tagName;) b = b.parentNode;
                  return b }
  
              function d(a) {
                  for (var c = a; !b.node.isList(c);) c = c.parentNode;
                  return c }
  
              function e(e) {
                  var f, g = c(e),
                      h = g.nextSibling,
                      i = g.previousSibling,
                      j = b.html.defaultTag();
                  if (b.node.isEmpty(g, !0) && h) {
                      for (var k = "", l = "", m = e.parentNode; !b.node.isList(m) && m.parentNode && "LI" !== m.parentNode.tagName;) k = b.node.openTagString(m) + k, l += b.node.closeTagString(m), m = m.parentNode;
                      k = b.node.openTagString(m) + k, l += b.node.closeTagString(m);
                      var n = "";
                      for (n = m.parentNode && "LI" == m.parentNode.tagName ? l + "<li>" + a.FE.MARKERS + "<br>" + k : j ? l + "<" + j + ">" + a.FE.MARKERS + "<br></" + j + ">" + k : l + a.FE.MARKERS + "<br>" + k, a(g).html('<span id="fr-break"></span>');
                          ["UL", "OL"].indexOf(m.tagName) < 0 || m.parentNode && "LI" === m.parentNode.tagName;) m = m.parentNode;
                      var o = b.node.openTagString(m) + a(m).html() + b.node.closeTagString(m);
                      o = o.replace(/<span id="fr-break"><\/span>/g, n), a(m).replaceWith(o), b.$el.find("li:empty").remove() } else i && h || !b.node.isEmpty(g, !0) ? (a(g).before("<li><br></li>"), a(e).remove()) : i ? (f = d(g), f.parentNode && "LI" == f.parentNode.tagName ? a(f.parentNode).after("<li>" + a.FE.MARKERS + "<br></li>") : j ? a(f).after("<" + j + ">" + a.FE.MARKERS + "<br></" + j + ">") : a(f).after(a.FE.MARKERS + "<br>"), a(g).remove()) : (f = d(g), f.parentNode && "LI" == f.parentNode.tagName ? a(f.parentNode).before("<li>" + a.FE.MARKERS + "<br></li>") : j ? a(f).before("<" + j + ">" + a.FE.MARKERS + "<br></" + j + ">") : a(f).before(a.FE.MARKERS + "<br>"), a(g).remove()) }
  
              function f(d) {
                  for (var e = c(d), f = "", g = d, h = "", i = ""; g != e;) { g = g.parentNode;
                      var j = "A" == g.tagName && b.cursor.isAtEnd(d, g) ? "fr-to-remove" : "";
                      h = b.node.openTagString(a(g).clone().addClass(j).get(0)) + h, i = b.node.closeTagString(g) + i }
                  f = i + f + h + a.FE.MARKERS, a(d).replaceWith('<span id="fr-break"></span>');
                  var k = b.node.openTagString(e) + a(e).html() + b.node.closeTagString(e);
                  k = k.replace(/<span id="fr-break"><\/span>/g, f), a(e).replaceWith(k) }
  
              function g(d) {
                  for (var e = c(d), f = a.FE.MARKERS, g = d; g != e;) { g = g.parentNode;
                      var h = "A" == g.tagName && b.cursor.isAtEnd(d, g) ? "fr-to-remove" : "";
                      f = b.node.openTagString(a(g).clone().addClass(h).get(0)) + f + b.node.closeTagString(g) }
                  a(d).remove(), a(e).after(f) }
  
              function h(e) {
                  var f = c(e),
                      g = f.previousSibling;
                  if (g) { g = a(g).find(b.html.blockTagsQuery()).get(-1) || g, a(e).replaceWith(a.FE.MARKERS);
                      var h = b.node.contents(g);
                      h.length && "BR" == h[h.length - 1].tagName && a(h[h.length - 1]).remove(), a(f).find(b.html.blockTagsQuery()).not("ol, ul, table").each(function() { this.parentNode == f && a(this).replaceWith(a(this).html() + (b.node.isEmpty(this) ? "" : "<br>")) });
                      for (var i, j = b.node.contents(f)[0]; j && !b.node.isList(j);) i = j.nextSibling, a(g).append(j), j = i;
                      for (g = f.previousSibling; j;) i = j.nextSibling, a(g).append(j), j = i;
                      a(f).remove() } else {
                      var k = d(f);
                      if (a(e).replaceWith(a.FE.MARKERS), k.parentNode && "LI" == k.parentNode.tagName) {
                          var l = k.previousSibling;
                          b.node.isBlock(l) ? (a(f).find(b.html.blockTagsQuery()).not("ol, ul, table").each(function() { this.parentNode == f && a(this).replaceWith(a(this).html() + (b.node.isEmpty(this) ? "" : "<br>")) }), a(l).append(a(f).html())) : a(k).before(a(f).html()) } else {
                          var m = b.html.defaultTag();
                          m && 0 === a(f).find(b.html.blockTagsQuery()).length ? a(k).before("<" + m + ">" + a(f).html() + "</" + m + ">") : a(k).before(a(f).html()) }
                      a(f).remove(), 0 === a(k).find("li").length && a(k).remove() } }
  
              function i(d) {
                  var e, f = c(d),
                      g = f.nextSibling;
                  if (g) { e = b.node.contents(g), e.length && "BR" == e[0].tagName && a(e[0]).remove(), a(g).find(b.html.blockTagsQuery()).not("ol, ul, table").each(function() { this.parentNode == g && a(this).replaceWith(a(this).html() + (b.node.isEmpty(this) ? "" : "<br>")) });
                      for (var h, i = d, j = b.node.contents(g)[0]; j && !b.node.isList(j);) h = j.nextSibling, a(i).after(j), i = j, j = h;
                      for (; j;) h = j.nextSibling, a(f).append(j), j = h;
                      a(d).replaceWith(a.FE.MARKERS), a(g).remove() } else {
                      for (var k = f; !k.nextSibling && k != b.$el.get(0);) k = k.parentNode;
                      if (k == b.$el.get(0)) return !1;
                      if (k = k.nextSibling, b.node.isBlock(k)) a.FE.NO_DELETE_TAGS.indexOf(k.tagName) < 0 && (a(d).replaceWith(a.FE.MARKERS), e = b.node.contents(f), e.length && "BR" == e[e.length - 1].tagName && a(e[e.length - 1]).remove(), a(f).append(a(k).html()), a(k).remove());
                      else
                          for (e = b.node.contents(f), e.length && "BR" == e[e.length - 1].tagName && a(e[e.length - 1]).remove(), a(d).replaceWith(a.FE.MARKERS); k && !b.node.isBlock(k) && "BR" != k.tagName;) a(f).append(a(k)), k = k.nextSibling } }
              return { _startEnter: e, _middleEnter: f, _endEnter: g, _backspace: h, _del: i } }, a.FE.NO_DELETE_TAGS = ["TH", "TD", "TABLE", "FORM"], a.FE.SIMPLE_ENTER_TAGS = ["TH", "TD", "LI", "DL", "DT", "FORM"], a.FE.MODULES.cursor = function(b) {
              function c(a) {
                  return a ? b.node.isBlock(a) ? !0 : a.nextSibling ? !1 : c(a.parentNode) : !1 }
  
              function d(a) {
                  return a ? b.node.isBlock(a) ? !0 : a.previousSibling ? !1 : d(a.parentNode) : !1 }
  
              function e(a, c) {
                  return a ? a == b.$wp.get(0) ? !1 : a.previousSibling ? !1 : a.parentNode == c ? !0 : e(a.parentNode, c) : !1 }
  
              function f(a, c) {
                  return a ? a == b.$wp.get(0) ? !1 : a.nextSibling ? !1 : a.parentNode == c ? !0 : f(a.parentNode, c) : !1 }
  
              function g(c) {
                  return a(c).parentsUntil(b.$el, "LI").length > 0 && 0 === a(c).parentsUntil("LI", "TABLE").length }
  
              function h(c) {
                  var d = a(c).parentsUntil(b.$el, "BLOCKQUOTE").length > 0,
                      e = b.node.deepestParent(c, [], !d);
                  if (e && "BLOCKQUOTE" == e.tagName) {
                      var f = b.node.deepestParent(c, [a(c).parentsUntil(b.$el, "BLOCKQUOTE").get(0)]);
                      f && f.previousSibling && (e = f) }
                  if (null !== e) {
                      var g, h = e.previousSibling;
                      if (b.node.isBlock(e) && b.node.isEditable(e) && h && a.FE.NO_DELETE_TAGS.indexOf(h.tagName) < 0 && b.node.isEditable(h))
                          if (b.node.isBlock(h))
                              if (b.node.isEmpty(h) && !b.node.isList(h)) a(h).remove();
                              else {
                                  if (b.node.isList(h) && (h = a(h).find("li:last").get(0)), g = b.node.contents(h), g.length && "BR" == g[g.length - 1].tagName && a(g[g.length - 1]).remove(), "BLOCKQUOTE" == h.tagName && "BLOCKQUOTE" != e.tagName)
                                      for (g = b.node.contents(h); g.length && b.node.isBlock(g[g.length - 1]);) h = g[g.length - 1], g = b.node.contents(h);
                                  else if ("BLOCKQUOTE" != h.tagName && "BLOCKQUOTE" == e.tagName)
                                      for (g = b.node.contents(e); g.length && b.node.isBlock(g[0]);) e = g[0], g = b.node.contents(e);
                                  a(c).replaceWith(a.FE.MARKERS), a(h).append(b.node.isEmpty(e) ? a.FE.MARKERS : e.innerHTML), a(e).remove() }
                      else a(c).replaceWith(a.FE.MARKERS), "BLOCKQUOTE" == e.tagName && h.nodeType == Node.ELEMENT_NODE ? a(h).remove() : (a(h).after(b.node.isEmpty(e) ? "" : a(e).html()), a(e).remove(), "BR" == h.tagName && a(h).remove()) } }
  
              function i(c) {
                  for (var d = c; !d.previousSibling;) d = d.parentNode;
                  d = d.previousSibling;
                  var e;
                  if (!b.node.isBlock(d) && b.node.isEditable(d)) {
                      for (e = b.node.contents(d); d.nodeType != Node.TEXT_NODE && e.length && b.node.isEditable(d);) d = e[e.length - 1], e = b.node.contents(d);
                      if (d.nodeType == Node.TEXT_NODE) {
                          if (b.helpers.isIOS()) return !0;
                          a(d).after(a.FE.MARKERS);
                          var f = d.textContent,
                              g = f.length - 1;
                          if (b.opts.tabSpaces && f.length >= b.opts.tabSpaces) {
                              var h = f.substr(f.length - b.opts.tabSpaces, f.length - 1);
                              0 == h.replace(/ /g, "").replace(new RegExp(a.FE.UNICODE_NBSP, "g"), "").length && (g = f.length - b.opts.tabSpaces) }
                          d.textContent = f.substring(0, g), d.textContent.length && 55357 == d.textContent.charCodeAt(d.textContent.length - 1) && (d.textContent = d.textContent.substr(0, d.textContent.length - 1)), 0 == d.textContent.length && d.parentNode.removeChild(d) } else b.events.trigger("node.remove", [a(d)]) !== !1 && (a(d).after(a.FE.MARKERS), a(d).remove()) } else if (a.FE.NO_DELETE_TAGS.indexOf(d.tagName) < 0 && b.node.isEditable(d))
                      if (b.node.isEmpty(d) && !b.node.isList(d)) a(d).remove(), a(c).replaceWith(a.FE.MARKERS);
                      else {
                          for (b.node.isList(d) && (d = a(d).find("li:last").get(0)), e = b.node.contents(d), e && "BR" == e[e.length - 1].tagName && a(e[e.length - 1]).remove(), e = b.node.contents(d); e && b.node.isBlock(e[e.length - 1]);) d = e[e.length - 1], e = b.node.contents(d);
                          a(d).append(a.FE.MARKERS);
                          for (var i = c; !i.previousSibling;) i = i.parentNode;
                          for (; i && "BR" !== i.tagName && !b.node.isBlock(i);) {
                              var j = i;
                              i = i.nextSibling, a(d).append(j) }
                          i && "BR" == i.tagName && a(i).remove(), a(c).remove() } }
  
              function j() {
                  var f = !1,
                      j = b.markers.insert();
                  if (!j) return !0;
                  b.$el.get(0).normalize();
                  var k = j.previousSibling;
                  if (k) {
                      var l = k.textContent;
                      l && l.length && 8203 == l.charCodeAt(l.length - 1) && (1 == l.length ? a(k).remove() : (k.textContent = k.textContent.substr(0, l.length - 1), k.textContent.length && 55357 == k.textContent.charCodeAt(k.textContent.length - 1) && (k.textContent = k.textContent.substr(0, k.textContent.length - 1)))) }
                  return c(j) ? f = i(j) : d(j) ? g(j) && e(j, a(j).parents("li:first").get(0)) ? b.cursorLists._backspace(j) : h(j) : f = i(j), a(j).remove(), b.$el.find("blockquote:empty").remove(), b.html.fillEmptyBlocks(), b.html.cleanEmptyTags(), b.clean.quotes(), b.clean.lists(), b.html.normalizeSpaces(), b.selection.restore(), f }
  
              function k(c) {
                  var d = a(c).parentsUntil(b.$el, "BLOCKQUOTE").length > 0,
                      e = b.node.deepestParent(c, [], !d);
                  if (e && "BLOCKQUOTE" == e.tagName) {
                      var f = b.node.deepestParent(c, [a(c).parentsUntil(b.$el, "BLOCKQUOTE").get(0)]);
                      f && f.nextSibling && (e = f) }
                  if (null !== e) {
                      var g, h = e.nextSibling;
                      if (b.node.isBlock(e) && b.node.isEditable(e) && h && a.FE.NO_DELETE_TAGS.indexOf(h.tagName) < 0)
                          if (b.node.isBlock(h) && b.node.isEditable(h))
                              if (b.node.isList(h))
                                  if (b.node.isEmpty(e, !0)) a(e).remove(), a(h).find("li:first").prepend(a.FE.MARKERS);
                                  else {
                                      var i = a(h).find("li:first"); "BLOCKQUOTE" == e.tagName && (g = b.node.contents(e), g.length && b.node.isBlock(g[g.length - 1]) && (e = g[g.length - 1])), 0 === i.find("ul, ol").length && (a(c).replaceWith(a.FE.MARKERS), i.find(b.html.blockTagsQuery()).not("ol, ul, table").each(function() { this.parentNode == i.get(0) && a(this).replaceWith(a(this).html() + (b.node.isEmpty(this) ? "" : "<br>")) }), a(e).append(b.node.contents(i.get(0))), i.remove(), 0 === a(h).find("li").length && a(h).remove()) }
                      else {
                          if (g = b.node.contents(h), g.length && "BR" == g[0].tagName && a(g[0]).remove(), "BLOCKQUOTE" != h.tagName && "BLOCKQUOTE" == e.tagName)
                              for (g = b.node.contents(e); g.length && b.node.isBlock(g[g.length - 1]);) e = g[g.length - 1], g = b.node.contents(e);
                          else if ("BLOCKQUOTE" == h.tagName && "BLOCKQUOTE" != e.tagName)
                              for (g = b.node.contents(h); g.length && b.node.isBlock(g[0]);) h = g[0], g = b.node.contents(h);
                          a(c).replaceWith(a.FE.MARKERS), a(e).append(h.innerHTML), a(h).remove() } else {
                          for (a(c).replaceWith(a.FE.MARKERS); h && "BR" !== h.tagName && !b.node.isBlock(h) && b.node.isEditable(h);) {
                              var j = h;
                              h = h.nextSibling, a(e).append(j) }
                          h && "BR" == h.tagName && b.node.isEditable(h) && a(h).remove() } } }
  
              function l(d) {
                  for (var e = d; !e.nextSibling;) e = e.parentNode;
                  if (e = e.nextSibling, "BR" == e.tagName && b.node.isEditable(e))
                      if (e.nextSibling) {
                          if (b.node.isBlock(e.nextSibling) && b.node.isEditable(e.nextSibling)) {
                              if (!(a.FE.NO_DELETE_TAGS.indexOf(e.nextSibling.tagName) < 0)) return;
                              e = e.nextSibling, a(e.previousSibling).remove() } } else if (c(e)) {
                      if (g(d)) b.cursorLists._del(d);
                      else {
                          var f = b.node.deepestParent(e);
                          f && (a(e).remove(), k(d)) }
                      return }
                  var h;
                  if (!b.node.isBlock(e) && b.node.isEditable(e)) {
                      for (h = b.node.contents(e); e.nodeType != Node.TEXT_NODE && h.length && b.node.isEditable(e);) e = h[0], h = b.node.contents(e);
                      e.nodeType == Node.TEXT_NODE ? (a(e).before(a.FE.MARKERS), e.textContent.length && 55357 == e.textContent.charCodeAt(0) ? e.textContent = e.textContent.substring(2, e.textContent.length) : e.textContent = e.textContent.substring(1, e.textContent.length)) : b.events.trigger("node.remove", [a(e)]) !== !1 && (a(e).before(a.FE.MARKERS), a(e).remove()), a(d).remove() } else if (a.FE.NO_DELETE_TAGS.indexOf(e.tagName) < 0)
                      if (b.node.isList(e)) d.previousSibling ? (a(e).find("li:first").prepend(d), b.cursorLists._backspace(d)) : (a(e).find("li:first").prepend(a.FE.MARKERS), a(d).remove());
                      else if (h = b.node.contents(e), h && "BR" == h[0].tagName && a(h[0]).remove(), h && "BLOCKQUOTE" == e.tagName) {
                      var i = h[0];
                      for (a(d).before(a.FE.MARKERS); i && "BR" != i.tagName;) {
                          var j = i;
                          i = i.nextSibling, a(d).before(j) }
                      i && "BR" == i.tagName && a(i).remove() } else a(d).after(a(e).html()).after(a.FE.MARKERS), a(e).remove() }
  
              function m() {
                  var e = b.markers.insert();
                  if (!e) return !1;
                  if (b.$el.get(0).normalize(), c(e))
                      if (g(e))
                          if (0 === a(e).parents("li:first").find("ul, ol").length) b.cursorLists._del(e);
                          else {
                              var f = a(e).parents("li:first").find("ul:first, ol:first").find("li:first");
                              f = f.find(b.html.blockTagsQuery()).get(-1) || f, f.prepend(e), b.cursorLists._backspace(e) }
                  else k(e);
                  else l(d(e) ? e : e);
                  a(e).remove(), b.$el.find("blockquote:empty").remove(), b.html.fillEmptyBlocks(), b.html.cleanEmptyTags(), b.clean.quotes(), b.clean.lists(), b.html.normalizeSpaces(), b.selection.restore() }
  
              function n() { b.$el.find(".fr-to-remove").each(function() {
                      for (var c = b.node.contents(this), d = 0; d < c.length; d++) c[d].nodeType == Node.TEXT_NODE && (c[d].textContent = c[d].textContent.replace(/\u200B/g, ""));
                      a(this).replaceWith(this.innerHTML) }) }
  
              function o(c, d, e) {
                  var g, h = b.node.deepestParent(c, [], !e);
                  if (h && "BLOCKQUOTE" == h.tagName) return f(c, h) ? (g = b.html.defaultTag(), g ? a(h).after("<" + g + ">" + a.FE.MARKERS + "<br></" + g + ">") : a(h).after(a.FE.MARKERS + "<br>"), a(c).remove(), !1) : (q(c, d, e), !1);
                  if (null == h) a(c).replaceWith("<br/>" + a.FE.MARKERS + "<br/>");
                  else {
                      var i = c,
                          j = "";
                      (!b.node.isBlock(h) || d) && (j = "<br/>");
                      var k = "",
                          l = "";
                      g = b.html.defaultTag();
                      var m = "",
                          n = "";
                      g && b.node.isBlock(h) && (m = "<" + g + ">", n = "</" + g + ">", h.tagName == g.toUpperCase() && (m = b.node.openTagString(a(h).clone().removeAttr("id").get(0))));
                      do
                          if (i = i.parentNode, !d || i != h || d && !b.node.isBlock(h))
                              if (k += b.node.closeTagString(i), i == h && b.node.isBlock(h)) l = m + l;
                              else {
                                  var o = "A" == i.tagName && f(c, i) ? "fr-to-remove" : "";
                                  l = b.node.openTagString(a(i).clone().addClass(o).get(0)) + l }
                      while (i != h);
                      j = k + j + l + (c.parentNode == h && b.node.isBlock(h) ? "" : a.FE.INVISIBLE_SPACE) + a.FE.MARKERS, b.node.isBlock(h) && !a(h).find("*:last").is("br") && a(h).append("<br/>"), a(c).after('<span id="fr-break"></span>'), a(c).remove(), h.nextSibling && !b.node.isBlock(h.nextSibling) || b.node.isBlock(h) || a(h).after("<br>");
                      var p;
                      p = !d && b.node.isBlock(h) ? b.node.openTagString(h) + a(h).html() + n : b.node.openTagString(h) + a(h).html() + b.node.closeTagString(h), p = p.replace(/<span id="fr-break"><\/span>/g, j), a(h).replaceWith(p) } }
  
              function p(c, d, g) {
                  var h = b.node.deepestParent(c, [], !g);
                  if (h && "BLOCKQUOTE" == h.tagName) {
                      if (e(c, h)) {
                          var i = b.html.defaultTag();
                          return i ? a(h).before("<" + i + ">" + a.FE.MARKERS + "<br></" + i + ">") : a(h).before(a.FE.MARKERS + "<br>"), a(c).remove(), !1 }
                      f(c, h) ? o(c, d, !0) : q(c, d, !0) }
                  if (null == h) a(c).replaceWith("<br>" + a.FE.MARKERS);
                  else {
                      if (b.node.isBlock(h))
                          if (d) a(c).remove(), a(h).prepend("<br>" + a.FE.MARKERS);
                          else {
                              if (b.node.isEmpty(h, !0)) return o(c, d, g);
                              a(h).before(b.node.openTagString(a(h).clone().removeAttr("id").get(0)) + "<br>" + b.node.closeTagString(h)) }
                      else a(h).before("<br>");
                      a(c).remove() } }
  
              function q(c, d, g) {
                  var h = b.node.deepestParent(c, [], !g);
                  if (null == h) b.html.defaultTag() && c.parentNode === b.$el.get(0) ? a(c).replaceWith("<" + b.html.defaultTag() + ">" + a.FE.MARKERS + "<br></" + b.html.defaultTag() + ">") : ((!c.nextSibling || b.node.isBlock(c.nextSibling)) && a(c).after("<br>"), a(c).replaceWith("<br>" + a.FE.MARKERS));
                  else {
                      var i = c,
                          j = ""; "PRE" == h.tagName && (d = !0), (!b.node.isBlock(h) || d) && (j = "<br>");
                      var k = "",
                          l = "";
                      do {
                          var m = i;
                          if (i = i.parentNode, "BLOCKQUOTE" == h.tagName && b.node.isEmpty(m) && !a(m).hasClass("fr-marker") && a(m).find(c).length > 0 && a(m).after(c), ("BLOCKQUOTE" != h.tagName || !f(c, i) && !e(c, i)) && (!d || i != h || d && !b.node.isBlock(h))) { k += b.node.closeTagString(i);
                              var n = "A" == i.tagName && f(c, i) ? "fr-to-remove" : "";
                              l = b.node.openTagString(a(i).clone().addClass(n).removeAttr("id").get(0)) + l } } while (i != h);
                      var o = h == c.parentNode && b.node.isBlock(h) || c.nextSibling;
                      if ("BLOCKQUOTE" == h.tagName) { c.previousSibling && b.node.isBlock(c.previousSibling) && c.nextSibling && "BR" == c.nextSibling.tagName && (a(c.nextSibling).after(c), c.nextSibling && "BR" == c.nextSibling.tagName && a(c.nextSibling).remove());
                          var p = b.html.defaultTag();
                          j = k + j + (p ? "<" + p + ">" : "") + a.FE.MARKERS + "<br>" + (p ? "</" + p + ">" : "") + l } else j = k + j + l + (o ? "" : a.FE.INVISIBLE_SPACE) + a.FE.MARKERS;
                      a(c).replaceWith('<span id="fr-break"></span>');
                      var q = b.node.openTagString(h) + a(h).html() + b.node.closeTagString(h);
                      q = q.replace(/<span id="fr-break"><\/span>/g, j), a(h).replaceWith(q) } }
  
              function r(e) {
                  var f = b.markers.insert();
                  if (!f) return !0;
                  b.$el.get(0).normalize();
                  var h = !1;
                  a(f).parentsUntil(b.$el, "BLOCKQUOTE").length > 0 && (e = !1, h = !0), a(f).parentsUntil(b.$el, "TD, TH").length && (h = !1), c(f) ? !g(f) || e || h ? o(f, e, h) : b.cursorLists._endEnter(f) : d(f) ? !g(f) || e || h ? p(f, e, h) : b.cursorLists._startEnter(f) : !g(f) || e || h ? q(f, e, h) : b.cursorLists._middleEnter(f), n(), b.html.fillEmptyBlocks(), b.html.cleanEmptyTags(), b.clean.lists(), b.html.normalizeSpaces(), b.selection.restore() }
              return { enter: r, backspace: j, del: m, isAtEnd: f } }, a.FE.MODULES.data = function(a) {
              function b(a) {
                  return a }
  
              function c(a) {
                  if (!a) return a;
                  for (var c = "", f = b("charCodeAt"), g = b("fromCharCode"), h = l.indexOf(a[0]), i = 1; i < a.length - 2; i++) {
                      for (var j = d(++h), k = a[f](i), m = "";
                          /[0-9-]/.test(a[i + 1]);) m += a[++i];
                      m = parseInt(m, 10) || 0, k = e(k, j, m), k ^= h - 1 & 31, c += String[g](k) }
                  return c }
  
              function d(a) {
                  for (var b = a.toString(), c = 0, d = 0; d < b.length; d++) c += parseInt(b.charAt(d), 10);
                  return c > 10 ? c % 9 + 1 : c }
  
              function e(a, b, c) {
                  for (var d = Math.abs(c); d-- > 0;) a -= b;
                  return 0 > c && (a += 123), a }
  
              function f(a) {
                  return a && "none" == a.css("display") ? (a.remove(), !0) : !1 }
  
              function g() {
                  return f(j) || f(k) }
  
              function h() {
                  return a.$box ? (a.$box.append(n(b(n("kTDD4spmKD1klaMB1C7A5RA1G3RA10YA5qhrjuvnmE1D3FD2bcG-7noHE6B2JB4C3xXA8WF6F-10RG2C3G3B-21zZE3C3H3xCA16NC4DC1f1hOF1MB3B-21whzQH5UA2WB10kc1C2F4D3XC2YD4D1C4F3GF2eJ2lfcD-13HF1IE1TC11TC7WE4TA4d1A2YA6XA4d1A3yCG2qmB-13GF4A1B1KH1HD2fzfbeQC3TD9VE4wd1H2A20A2B-22ujB3nBG2A13jBC10D3C2HD5D1H1KB11uD-16uWF2D4A3F-7C9D-17c1E4D4B3d1D2CA6B2B-13qlwzJF2NC2C-13E-11ND1A3xqUA8UE6bsrrF-7C-22ia1D2CF2H1E2akCD2OE1HH1dlKA6PA5jcyfzB-22cXB4f1C3qvdiC4gjGG2H2gklC3D-16wJC1UG4dgaWE2D5G4g1I2H3B7vkqrxH1H2EC9C3E4gdgzKF1OA1A5PF5C4WWC3VA6XA4e1E3YA2YA5HE4oGH4F2H2IB10D3D2NC5G1B1qWA9PD6PG5fQA13A10XA4C4A3e1H2BA17kC-22cmOB1lmoA2fyhcptwWA3RA8A-13xB-11nf1I3f1B7GB3aD3pavFC10D5gLF2OG1LSB2D9E7fQC1F4F3wpSB5XD3NkklhhaE-11naKA9BnIA6D1F5bQA3A10c1QC6Kjkvitc2B6BE3AF3E2DA6A4JD2IC1jgA-64MB11D6C4==")))), j = a.$box.find("> div:last"), k = j.find("> a"), void("rtl" == a.opts.direction && j.css("left", "auto").css("right", 0))) : !1 }
  
              function i() {
                  var c = a.opts.key || [""]; "string" == typeof c && (c = [c]), a.ul = !0;
                  for (var d = 0; d < c.length; d++) {
                      var e = n(c[d]) || "";
                      if (!(e !== n(b(n("mcVRDoB1BGILD7YFe1BTXBA7B6=="))) && e.indexOf(m, e.length - m.length) < 0 && [n("9qqG-7amjlwq=="), n("KA3B3C2A6D1D5H5H1A3==")].indexOf(m) < 0)) { a.ul = !1;
                          break } }
                  a.ul === !0 && h(), a.events.on("contentChanged", function() { a.ul === !0 && g() && h() }), a.events.on("destroy", function() { j && j.length && j.remove() }, !0) }
              var j, k, l = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
                  m = function() {
                      for (var a = 0, b = document.domain, c = b.split("."), d = "_gd" + (new Date).getTime(); a < c.length - 1 && -1 == document.cookie.indexOf(d + "=" + d);) b = c.slice(-1 - ++a).join("."), document.cookie = d + "=" + d + ";domain=" + b + ";";
                      return document.cookie = d + "=;expires=Thu, 01 Jan 1970 00:00:01 GMT;domain=" + b + ";", b }(),
                  n = b(c);
              return { _init: i } }, a.FE.ENTER_P = 0, a.FE.ENTER_DIV = 1, a.FE.ENTER_BR = 2, a.FE.KEYCODE = { BACKSPACE: 8, TAB: 9, ENTER: 13, SHIFT: 16, CTRL: 17, ALT: 18, ESC: 27, SPACE: 32, DELETE: 46, ZERO: 48, ONE: 49, TWO: 50, THREE: 51, FOUR: 52, FIVE: 53, SIX: 54, SEVEN: 55, EIGHT: 56, NINE: 57, FF_SEMICOLON: 59, FF_EQUALS: 61, QUESTION_MARK: 63, A: 65, B: 66, C: 67, D: 68, E: 69, F: 70, G: 71, H: 72, I: 73, J: 74, K: 75, L: 76, M: 77, N: 78, O: 79, P: 80, Q: 81, R: 82, S: 83, T: 84, U: 85, V: 86, W: 87, X: 88, Y: 89, Z: 90, META: 91, NUM_ZERO: 96, NUM_ONE: 97, NUM_TWO: 98, NUM_THREE: 99, NUM_FOUR: 100, NUM_FIVE: 101, NUM_SIX: 102, NUM_SEVEN: 103, NUM_EIGHT: 104, NUM_NINE: 105, NUM_MULTIPLY: 106, NUM_PLUS: 107, NUM_MINUS: 109, NUM_PERIOD: 110, NUM_DIVISION: 111, SEMICOLON: 186, DASH: 189, EQUALS: 187, COMMA: 188, PERIOD: 190, SLASH: 191, APOSTROPHE: 192, TILDE: 192, SINGLE_QUOTE: 222, OPEN_SQUARE_BRACKET: 219, BACKSLASH: 220, CLOSE_SQUARE_BRACKET: 221 }, a.extend(a.FE.DEFAULTS, { enter: a.FE.ENTER_P, multiLine: !0, tabSpaces: 0 }), a.FE.MODULES.keys = function(b) {
              function c() {
                  if (b.helpers.isIOS()) {
                      var c = navigator.userAgent.match("CriOS"),
                          d = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent);
                      if (!c && !d) {
                          var e = a(b.o_win).scrollTop();
                          b.events.disableBlur(), b.selection.save(), b.$el.blur(), b.selection.restore(), b.events.enableBlur(), a(b.o_win).scrollTop(e) } } }
  
              function d(a) { a.preventDefault(), a.stopPropagation(), b.opts.multiLine && (b.selection.isCollapsed() || b.selection.remove(), b.cursor.enter()), c() }
  
              function e(a) { a.preventDefault(), a.stopPropagation(), b.opts.multiLine && (b.selection.isCollapsed() || b.selection.remove(), b.cursor.enter(!0)) }
  
              function f(a) { b.selection.isCollapsed() ? b.cursor.backspace() || (a.preventDefault(), a.stopPropagation(), x = !1) : (a.preventDefault(), a.stopPropagation(), b.selection.remove(), b.html.fillEmptyBlocks(), x = !1), b.placeholder.refresh() }
  
              function g(a) { a.preventDefault(), a.stopPropagation(), "" === b.selection.text() ? b.cursor.del() : b.selection.remove(), b.placeholder.refresh() }
  
              function h(c) {
                  if (b.browser.mozilla) { c.preventDefault(), c.stopPropagation(), b.selection.isCollapsed() || b.selection.remove(), b.markers.insert();
                      var d = b.$el.find(".fr-marker").get(0),
                          e = d.previousSibling,
                          f = d.nextSibling;!f && d.parentNode && "A" == d.parentNode.tagName ? (a(d).parent().after("&nbsp;" + a.FE.MARKERS), a(d).remove()) : (e && e.nodeType == Node.TEXT_NODE && 1 == e.textContent.length && 160 == e.textContent.charCodeAt(0) ? a(e).after(" ") : a(d).before("&nbsp;"), a(d).replaceWith(a.FE.MARKERS)), b.selection.restore() } }
  
              function i() {
                  if (b.browser.mozilla && b.selection.isCollapsed() && !A) {
                      var a = b.selection.ranges(0),
                          c = a.startContainer,
                          d = a.startOffset;
                      c && c.nodeType == Node.TEXT_NODE && d <= c.textContent.length && d > 0 && 32 == c.textContent.charCodeAt(d - 1) && (b.selection.save(), b.html.normalizeSpaces(), b.selection.restore()) } }
  
              function j() { b.selection.isFull() && setTimeout(function() {
                      var c = b.html.defaultTag();
                      c ? b.$el.html("<" + c + ">" + a.FE.MARKERS + "<br/></" + c + ">") : b.$el.html(a.FE.MARKERS + "<br/>"), b.selection.restore(), b.placeholder.refresh(), b.button.bulkRefresh(), b.undo.saveStep() }, 0) }
  
              function k(a) {
                  if (b.opts.tabSpaces > 0)
                      if (b.selection.isCollapsed()) { a.preventDefault(), a.stopPropagation();
                          for (var c = "", d = 0; d < b.opts.tabSpaces; d++) c += "&nbsp;";
                          b.html.insert(c), b.placeholder.refresh() } else a.preventDefault(), a.stopPropagation(), a.shiftKey ? b.commands.outdent() : b.commands.indent() }
  
              function l(a) { A = !1 }
  
              function m() {
                  return A }
  
              function n(c) { b.events.disableBlur(), x = !0;
                  var i = c.which;
                  if (16 === i) return !0;
                  if (229 === i) return A = !0, !0;
                  A = !1;
                  var j = s(i) && !r(c),
                      l = i == a.FE.KEYCODE.BACKSPACE || i == a.FE.KEYCODE.DELETE;
                  if (b.selection.isFull() && !b.opts.keepFormatOnDelete || l && b.placeholder.isVisible() && b.opts.keepFormatOnDelete) {
                      if (j || l) {
                          var m = b.html.defaultTag();
                          m ? b.$el.html("<" + m + ">" + a.FE.MARKERS + "<br/></" + m + ">") : b.$el.html(a.FE.MARKERS + "<br/>") }
                      b.selection.restore() }
                  i == a.FE.KEYCODE.ENTER ? c.shiftKey ? e(c) : d(c) : i != a.FE.KEYCODE.BACKSPACE || r(c) || c.altKey ? i != a.FE.KEYCODE.DELETE || r(c) || c.altKey ? i == a.FE.KEYCODE.SPACE ? h(c) : i == a.FE.KEYCODE.TAB ? k(c) : r(c) || !s(c.which) || b.selection.isCollapsed() || b.selection.remove() : g(c) : f(c), b.events.enableBlur() }
  
              function o(c) {
                  for (var d = 0; d < c.length; d++) c[d].nodeType == Node.TEXT_NODE && /\u200B/gi.test(c[d].textContent) ? (c[d].textContent = c[d].textContent.replace(/\u200B/gi, ""), 0 === c[d].textContent.length && a(c[d]).remove()) : c[d].nodeType == Node.ELEMENT_NODE && "IFRAME" != c[d].nodeType && o(b.node.contents(c[d])) }
  
              function p() {
                  if (!b.$wp) return !0;
                  var c;
                  b.opts.height || b.opts.heightMax ? (c = b.position.getBoundingRect().top, b.helpers.isIOS() && (c -= a(b.o_win).scrollTop()), b.opts.iframe && (c += b.$iframe.offset().top), c > b.$wp.offset().top - a(b.o_win).scrollTop() + b.$wp.height() - 20 && b.$wp.scrollTop(c + b.$wp.scrollTop() - (b.$wp.height() + b.$wp.offset().top) + a(b.o_win).scrollTop() + 20)) : (c = b.position.getBoundingRect().top, b.helpers.isIOS() && (c -= a(b.o_win).scrollTop()), b.opts.iframe && (c += b.$iframe.offset().top), c > b.o_win.innerHeight - 20 && a(b.o_win).scrollTop(c + a(b.o_win).scrollTop() - b.o_win.innerHeight + 20), c = b.position.getBoundingRect().top, b.helpers.isIOS() && (c -= a(b.o_win).scrollTop()), b.opts.iframe && (c += b.$iframe.offset().top), c < b.$tb.height() + 20 && a(b.o_win).scrollTop(c + a(b.o_win).scrollTop() - b.$tb.height() - 20)) }
  
              function q(c) {
                  if (A) return !1;
                  if (!b.selection.isCollapsed()) return !0;
                  !c || c.which != a.FE.KEYCODE.ENTER && c.which != a.FE.KEYCODE.BACKSPACE || c.which == a.FE.KEYCODE.BACKSPACE && x || p();
                  var d = b.$el.find(b.html.blockTagsQuery());
                  d.push(b.$el.get(0));
                  for (var e = [], f = 0; f < d.length; f++)
                      if (["TD", "TH"].indexOf(d[f].tagName) < 0)
                          for (var g = d[f].children, h = 0; h < g.length; h++) "BR" == g[h].tagName && e.push(g[h]);
                  for (var f = 0; f < e.length; f++) {
                      var i = e[f],
                          j = i.previousSibling,
                          k = i.nextSibling,
                          l = b.node.blockParent(i) || b.$el.get(0);
                      j && l && "BR" != j.tagName && !b.node.isBlock(j) && !k && a(l).text().replace(/\u200B/g, "").length > 0 && a(j).text().length > 0 && (b.selection.save(),
                          a(i).remove(), b.selection.restore())
                  }
                  var m = function(b) {
                          if (!b) return !1;
                          var c = a(b).html();
                          return c = c.replace(/<span[^>]*? class\s*=\s*["']?fr-marker["']?[^>]+>\u200b<\/span>/gi, ""), c && /\u200B/.test(c) && c.replace(/\u200B/gi, "").length > 0 ? !0 : !1 },
                      n = function(a) {
                          var c = /[\u3041-\u3096\u30A0-\u30FF\u4E00-\u9FFF\u3130-\u318F\uAC00-\uD7AF]/gi;
                          return !b.helpers.isIOS() || 0 === ((a.textContent || "").match(c) || []).length },
                      q = b.selection.element();
                  m(q) && 0 === a(q).find("li").length && !a(q).hasClass("fr-marker") && "IFRAME" != q.tagName && n(q) && (b.selection.save(), o(b.node.contents(q)), b.selection.restore()), !b.browser.mozilla && b.html.doNormalize() && (b.selection.save(), b.html.normalizeSpaces(), b.selection.restore())
              }
  
              function r(a) {
                  if (-1 != navigator.userAgent.indexOf("Mac OS X")) {
                      if (a.metaKey && !a.altKey) return !0 } else if (a.ctrlKey && !a.altKey) return !0;
                  return !1 }
  
              function s(c) {
                  if (c >= a.FE.KEYCODE.ZERO && c <= a.FE.KEYCODE.NINE) return !0;
                  if (c >= a.FE.KEYCODE.NUM_ZERO && c <= a.FE.KEYCODE.NUM_MULTIPLY) return !0;
                  if (c >= a.FE.KEYCODE.A && c <= a.FE.KEYCODE.Z) return !0;
                  if (b.browser.webkit && 0 === c) return !0;
                  switch (c) {
                      case a.FE.KEYCODE.SPACE:
                      case a.FE.KEYCODE.QUESTION_MARK:
                      case a.FE.KEYCODE.NUM_PLUS:
                      case a.FE.KEYCODE.NUM_MINUS:
                      case a.FE.KEYCODE.NUM_PERIOD:
                      case a.FE.KEYCODE.NUM_DIVISION:
                      case a.FE.KEYCODE.SEMICOLON:
                      case a.FE.KEYCODE.FF_SEMICOLON:
                      case a.FE.KEYCODE.DASH:
                      case a.FE.KEYCODE.EQUALS:
                      case a.FE.KEYCODE.FF_EQUALS:
                      case a.FE.KEYCODE.COMMA:
                      case a.FE.KEYCODE.PERIOD:
                      case a.FE.KEYCODE.SLASH:
                      case a.FE.KEYCODE.APOSTROPHE:
                      case a.FE.KEYCODE.SINGLE_QUOTE:
                      case a.FE.KEYCODE.OPEN_SQUARE_BRACKET:
                      case a.FE.KEYCODE.BACKSLASH:
                      case a.FE.KEYCODE.CLOSE_SQUARE_BRACKET:
                          return !0;
                      default:
                          return !1 } }
  
              function t(a) {
                  var c = a.which;
                  return r(a) || c >= 37 && 40 >= c ? !0 : (y || (z = b.snapshot.get()), clearTimeout(y), void(y = setTimeout(function() { y = null, b.undo.saveStep() }, Math.max(250, b.opts.typingTimer)))) }
  
              function u(a) {
                  return r(a) ? !0 : void(z && y && (b.undo.saveStep(z), z = null)) }
  
              function v() { y && (clearTimeout(y), b.undo.saveStep(), z = null) }
  
              function w() {
                  if (b.events.on("keydown", t), b.events.on("input", i), b.events.on("keyup", u), b.events.on("keypress", l), b.events.on("keydown", n), b.events.on("keyup", q), b.events.on("html.inserted", q), b.events.on("cut", j), b.$el.get(0).msGetInputContext) try { b.$el.get(0).msGetInputContext().addEventListener("MSCandidateWindowShow", function() { A = !0 }), b.$el.get(0).msGetInputContext().addEventListener("MSCandidateWindowHide", function() { A = !1, q() }) } catch (a) {} }
              var x, y, z, A = !1;
              return { _init: w, ctrlKey: r, isCharacter: s, forceUndo: v, isIME: m }
          }, a.extend(a.FE.DEFAULTS, { pastePlain: !1, pasteDeniedTags: ["colgroup", "col"], pasteDeniedAttrs: ["class", "id", "style"], pasteAllowLocalImages: !1 }), a.FE.MODULES.paste = function(b) {
              function c(c) { a.FE.copied_html = b.html.getSelected(), a.FE.copied_text = a("<div>").html(a.FE.copied_html).text(), "cut" == c.type && (b.undo.saveStep(), setTimeout(function() { b.html.wrap(), b.events.focus(), b.undo.saveStep() }, 0)) }
  
              function d(a) {
                  if (o) return !1;
                  if (a.originalEvent && (a = a.originalEvent), b.events.trigger("paste.before", [a]) === !1) return !1;
                  if (l = b.$win.scrollTop(), a && a.clipboardData && a.clipboardData.getData) {
                      var c = "",
                          d = a.clipboardData.types;
                      if (b.helpers.isArray(d))
                          for (var f = 0; f < d.length; f++) c += d[f] + ";";
                      else c = d;
                      if (m = "", /text\/html/.test(c) ? m = a.clipboardData.getData("text/html") : /text\/rtf/.test(c) && b.browser.safari ? m = a.clipboardData.getData("text/rtf") : /text\/plain/.test(c) && !this.browser.mozilla && (m = b.html.escapeEntities(a.clipboardData.getData("text/plain")).replace(/\n/g, "<br>")), "" !== m) return h(), a.preventDefault && (a.stopPropagation(), a.preventDefault()), !1;
                      m = null }
                  e() }
  
              function e() { b.selection.save(), b.events.disableBlur(), m = null, n ? n.html("") : (n = a('<div contenteditable="true" style="position: fixed; top: 0; left: -9999px; height: 100%; width: 0; z-index: 9999; line-height: 140%;" tabindex="-1"></div>'), b.$box.after(n)), n.focus(), b.win.setTimeout(h, 1) }
  
              function f(c) { c = c.replace(/<p(.*?)class="?'?MsoListParagraph"?'? ([\s\S]*?)>([\s\S]*?)<\/p>/gi, "<ul><li>$3</li></ul>"), c = c.replace(/<p(.*?)class="?'?NumberedText"?'? ([\s\S]*?)>([\s\S]*?)<\/p>/gi, "<ol><li>$3</li></ol>"), c = c.replace(/<p(.*?)class="?'?MsoListParagraphCxSpFirst"?'?([\s\S]*?)(level\d)?([\s\S]*?)>([\s\S]*?)<\/p>/gi, "<ul><li$3>$5</li>"), c = c.replace(/<p(.*?)class="?'?NumberedTextCxSpFirst"?'?([\s\S]*?)(level\d)?([\s\S]*?)>([\s\S]*?)<\/p>/gi, "<ol><li$3>$5</li>"), c = c.replace(/<p(.*?)class="?'?MsoListParagraphCxSpMiddle"?'?([\s\S]*?)(level\d)?([\s\S]*?)>([\s\S]*?)<\/p>/gi, "<li$3>$5</li>"), c = c.replace(/<p(.*?)class="?'?NumberedTextCxSpMiddle"?'?([\s\S]*?)(level\d)?([\s\S]*?)>([\s\S]*?)<\/p>/gi, "<li$3>$5</li>"), c = c.replace(/<p(.*?)class="?'?MsoListBullet"?'?([\s\S]*?)(level\d)?([\s\S]*?)>([\s\S]*?)<\/p>/gi, "<li$3>$5</li>"), c = c.replace(/<p(.*?)class="?'?MsoListParagraphCxSpLast"?'?([\s\S]*?)(level\d)?([\s\S]*?)>([\s\S]*?)<\/p>/gi, "<li$3>$5</li></ul>"), c = c.replace(/<p(.*?)class="?'?NumberedTextCxSpLast"?'?([\s\S]*?)(level\d)?([\s\S]*?)>([\s\S]*?)<\/p>/gi, "<li$3>$5</li></ol>"), c = c.replace(/<span([^<]*?)style="?'?mso-list:Ignore"?'?([\s\S]*?)>([\s\S]*?)<span/gi, "<span><span"), c = c.replace(/<!--\[if \!supportLists\]-->([\s\S]*?)<!--\[endif\]-->/gi, ""), c = c.replace(/<!\[if \!supportLists\]>([\s\S]*?)<!\[endif\]>/gi, ""), c = c.replace(/(\n|\r| class=(")?Mso[a-zA-Z0-9]+(")?)/gi, " "), c = c.replace(/<!--[\s\S]*?-->/gi, ""), c = c.replace(/<(\/)*(meta|link|span|\\?xml:|st1:|o:|font)(.*?)>/gi, "");
                  for (var d = ["style", "script", "applet", "embed", "noframes", "noscript"], e = 0; e < d.length; e++) {
                      var f = new RegExp("<" + d[e] + ".*?" + d[e] + "(.*?)>", "gi");
                      c = c.replace(f, "") }
                  c = c.replace(/&nbsp;/gi, " "), c = c.replace(/<td([^>]*)><\/td>/g, "<td$1><br></td>"), c = c.replace(/<th([^>]*)><\/th>/g, "<th$1><br></th>");
                  var g;
                  do g = c, c = c.replace(/<[^\/>][^>]*><\/[^>]+>/gi, ""); while (c != g);
                  c = c.replace(/<lilevel([^1])([^>]*)>/gi, '<li data-indent="true"$2>'), c = c.replace(/<lilevel1([^>]*)>/gi, "<li$1>"), c = b.clean.html(c, b.opts.pasteDeniedTags, b.opts.pasteDeniedAttrs), c = c.replace(/<a>(.[^<]+)<\/a>/gi, "$1");
                  var h = a("<div>").html(c);
                  return h.find("li[data-indent]").each(function(b, c) {
                      var d = a(c);
                      if (d.prev("li").length > 0) {
                          var e = d.prev("li").find("> ul, > ol");
                          0 === e.length && (e = a("ul"), d.prev("li").append(e)), e.append(c) } else d.removeAttr("data-indent") }), b.html.cleanBlankSpaces(h.get(0)), c = h.html() }
  
              function g(c) {
                  var d = a("<div>").html(c);
                  d.find("p, div, h1, h2, h3, h4, h5, h6, pre, blockquote").each(function(c, d) { a(d).replaceWith("<" + (b.html.defaultTag() || "DIV") + ">" + a(d).html() + "</" + (b.html.defaultTag() || "DIV") + ">") }), a(d.find("*").not("p, div, h1, h2, h3, h4, h5, h6, pre, blockquote, ul, ol, li, table, tbody, thead, tr, td, br, img").get().reverse()).each(function() { a(this).replaceWith(a(this).html()) });
                  var e = function(c) {
                      for (var d = b.node.contents(c), f = 0; f < d.length; f++) 3 != d[f].nodeType && 1 != d[f].nodeType ? a(d[f]).remove() : e(d[f]) };
                  return e(d.get(0)), d.html() }
  
              function h() { b.keys.forceUndo();
                  var c = b.snapshot.get();
                  null === m && (m = n.html(), b.selection.restore(), b.events.enableBlur());
                  var d = b.events.chainTrigger("paste.beforeCleanup", m);
                  if ("string" == typeof d && (m = d), m.indexOf("<body") >= 0 && (m = m.replace(/[.\s\S\w\W<>]*<body[^>]*>([.\s\S\w\W<>]*)<\/body>[.\s\S\w\W<>]*/g, "$1")), m.indexOf('id="docs-internal-guid') >= 0 && (m = m.replace(/^.* id="docs-internal-guid[^>]*>(.*)<\/b>.*$/, "$1")), m.match(/(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/gi) ? (m = m.replace(/^\n*/g, "").replace(/^ /g, ""), 0 === m.indexOf("<colgroup>") && (m = "<table>" + m + "</table>"), m = f(m), m = j(m)) : (b.opts.htmlAllowComments = !1, m = b.clean.html(m, b.opts.pasteDeniedTags, b.opts.pasteDeniedAttrs), b.opts.htmlAllowComments = !0, m = j(m), m = m.replace(/\r|\n|\t/g, ""), a.FE.copied_text && a("<div>").html(m).text().replace(/(\u00A0)/gi, " ").replace(/\r|\n/gi, "") == a.FE.copied_text.replace(/(\u00A0)/gi, " ").replace(/\r|\n/gi, "") && (m = a.FE.copied_html), m = m.replace(/^ */g, "").replace(/ *$/g, "")), b.opts.pastePlain && (m = g(m)), d = b.events.chainTrigger("paste.afterCleanup", m), "string" == typeof d && (m = d), "" !== m) {
                      var e = a("<div>").html(m);
                      b.html.normalizeSpaces(e.get(0)), e.find("span").each(function() { 0 == this.attributes.length && a(this).replaceWith(this.innerHTML) }), e.find("br").each(function() { this.previousSibling && b.node.isBlock(this.previousSibling) && a(this).remove() }), m = e.html(), b.html.insert(m, !0) }
                  i(), b.undo.saveStep(c), b.undo.saveStep() }
  
              function i() { b.events.trigger("paste.after") }
  
              function j(b) {
                  for (var c, d = a("<div>").html(b), e = d.find("*:empty:not(br, img, td, th)"); e.length;) {
                      for (c = 0; c < e.length; c++) a(e[c]).remove();
                      e = d.find("*:empty:not(br, img, td, th)") }
                  for (var f = d.find("> div:not([style]), td > div, th > div, li > div"); f.length;) {
                      var g = a(f[f.length - 1]);
                      g.replaceWith(g.html() + "<br>"), f = d.find("> div:not([style]), td > div, th > div, li > div") }
                  for (f = d.find("div:not([style])"); f.length;) {
                      for (c = 0; c < f.length; c++) {
                          var h = a(f[c]),
                              i = h.html().replace(/\u0009/gi, "").trim();
                          h.replaceWith(i) }
                      f = d.find("div:not([style])") }
                  return d.html() }
  
              function k() { b.events.on("copy", c), b.events.on("cut", c), b.events.on("paste", d), b.browser.msie && b.browser.version < 11 && (b.events.on("mouseup", function(a) { 2 == a.button && (setTimeout(function() { o = !1 }, 50), o = !0) }, !0), b.events.on("beforepaste", d)) }
              var l, m, n, o = !1;
              return { _init: k } }, a.FE.MODULES.tooltip = function(b) {
              function c() { b.$tooltip && b.$tooltip.removeClass("fr-visible").css("left", "-3000px") }
  
              function d(c, d) {
                  if (c.data("title") || c.data("title", c.attr("title")), !c.data("title")) return !1;
                  b.$tooltip || f(), c.removeAttr("title"), b.$tooltip.text(c.data("title")), b.$tooltip.addClass("fr-visible");
                  var e = c.offset().left + (c.outerWidth() - b.$tooltip.outerWidth()) / 2;
                  0 > e && (e = 0), e + b.$tooltip.outerWidth() > a(b.o_win).width() && (e = a(b.o_win).width() - b.$tooltip.outerWidth()), "undefined" == typeof d && (d = b.opts.toolbarBottom);
                  var g = d ? c.offset().top - b.$tooltip.height() : c.offset().top + c.outerHeight();
                  b.$tooltip.css("left", e), b.$tooltip.css("top", g) }
  
              function e(e, f, g) { b.helpers.isMobile() || (b.events.$on(e, "mouseenter", f, function(b) { a(b.currentTarget).hasClass("fr-disabled") || d(a(b.currentTarget), g) }, !0), b.events.$on(e, "mouseleave " + b._mousedown + " " + b._mouseup, f, function(a) { c() }, !0)) }
  
              function f() { b.helpers.isMobile() || (b.shared.$tooltip ? b.$tooltip = b.shared.$tooltip : (b.shared.$tooltip = a('<div class="fr-tooltip"></div>'), b.$tooltip = b.shared.$tooltip, b.opts.theme && b.$tooltip.addClass(b.opts.theme + "-theme"), a(b.o_doc).find("body").append(b.$tooltip)), b.events.on("shared.destroy", function() { b.$tooltip.html("").removeData().remove() }, !0)) }
              return { hide: c, to: d, bind: e } }, a.FE.ICON_DEFAULT_TEMPLATE = "font_awesome", a.FE.ICON_TEMPLATES = { font_awesome: '<i class="fa fa-[NAME]"></i>', text: '<span style="text-align: center;">[NAME]</span>', image: "<img src=[SRC] alt=[ALT] />" }, a.FE.ICONS = { bold: { NAME: "bold" }, italic: { NAME: "italic" }, underline: { NAME: "underline" }, strikeThrough: { NAME: "strikethrough" }, subscript: { NAME: "subscript" }, superscript: { NAME: "superscript" }, color: { NAME: "tint" }, outdent: { NAME: "outdent" }, indent: { NAME: "indent" }, undo: { NAME: "rotate-left" }, redo: { NAME: "rotate-right" }, insertHR: { NAME: "minus" }, clearFormatting: { NAME: "eraser" }, selectAll: { NAME: "mouse-pointer" } }, a.FE.DefineIconTemplate = function(b, c) { a.FE.ICON_TEMPLATES[b] = c }, a.FE.DefineIcon = function(b, c) { a.FE.ICONS[b] = c }, a.FE.MODULES.icon = function(b) {
              function c(b) {
                  var c = null,
                      d = a.FE.ICONS[b];
                  if ("undefined" != typeof d) {
                      var e = d.template || a.FE.ICON_DEFAULT_TEMPLATE;
                      e && (e = a.FE.ICON_TEMPLATES[e]) && (c = e.replace(/\[([a-zA-Z]*)\]/g, function(a, c) {
                          return "NAME" == c ? d[c] || b : d[c] })) }
                  return c || b }
              return { create: c } }, a.FE.MODULES.button = function(b) {
              function c(c) {
                  var d = a(c.currentTarget),
                      e = d.next(),
                      f = d.hasClass("fr-active"),
                      g = (b.helpers.isMobile(), a(".fr-dropdown.fr-active").not(d)),
                      h = d.parents(".fr-toolbar, .fr-popup").data("instance") || b;
                  if (h.helpers.isIOS() && 0 == h.$el.get(0).querySelectorAll(".fr-marker").length && (h.selection.save(), h.selection.clear(), h.selection.restore()), !f) {
                      var i = d.data("cmd");
                      e.find(".fr-command").removeClass("fr-active"), a.FE.COMMANDS[i] && a.FE.COMMANDS[i].refreshOnShow && a.FE.COMMANDS[i].refreshOnShow.apply(h, [d, e]), e.css("left", d.offset().left - d.parent().offset().left - ("rtl" == b.opts.direction ? e.width() - d.outerWidth() : 0)), b.opts.toolbarBottom ? e.css("bottom", b.$tb.height() - d.position().top) : e.css("top", d.position().top + d.outerHeight()) }
                  d.addClass("fr-blink").toggleClass("fr-active"), setTimeout(function() { d.removeClass("fr-blink") }, 300), e.offset().left + e.outerWidth() > a(b.opts.scrollableContainer).offset().left + a(b.opts.scrollableContainer).outerWidth() && e.css("margin-left", -(e.offset().left + e.outerWidth() - a(b.opts.scrollableContainer).offset().left - a(b.opts.scrollableContainer).outerWidth())), g.removeClass("fr-active"), g.parent(".fr-toolbar:not(.fr-inline)").css("zIndex", ""), 0 != d.parents(".fr-popup").length || b.opts.toolbarInline || (d.hasClass("fr-active") ? b.$tb.css("zIndex", (b.opts.zIndex || 1) + 4) : b.$tb.css("zIndex", "")) }
  
              function d(b) { b.addClass("fr-blink"), setTimeout(function() { b.removeClass("fr-blink") }, 500);
                  for (var c = b.data("cmd"), d = [];
                      "undefined" != typeof b.data("param" + (d.length + 1));) d.push(b.data("param" + (d.length + 1)));
                  var e = a(".fr-dropdown.fr-active");
                  e.length && (e.removeClass("fr-active"), e.parent(".fr-toolbar:not(.fr-inline)").css("zIndex", "")), b.parents(".fr-popup, .fr-toolbar").data("instance").commands.exec(c, d) }
  
              function e(b) {
                  var c = a(b.currentTarget);
                  d(c) }
  
              function f(b) {
                  var d = a(b.currentTarget),
                      f = d.parents(".fr-popup, .fr-toolbar").data("instance");
                  if (0 != d.parents(".fr-popup").length || d.data("popup") || f.popups.hideAll(), f.popups.areVisible() && !f.popups.areVisible(f)) {
                      for (var g = 0; g < a.FE.INSTANCES.length; g++) a.FE.INSTANCES[g] != f && a.FE.INSTANCES[g].popups && a.FE.INSTANCES[g].popups.areVisible() && a.FE.INSTANCES[g].$el.find(".fr-marker").remove();
                      f.popups.hideAll() }
                  d.hasClass("fr-dropdown") ? c(b) : (e(b), a.FE.COMMANDS[d.data("cmd")] && 0 != a.FE.COMMANDS[d.data("cmd")].refreshAfterCallback && f.button.bulkRefresh()) }
  
              function g(a) {
                  var b = a.find(".fr-dropdown.fr-active");
                  b.length && (b.removeClass("fr-active"), b.parent(".fr-toolbar:not(.fr-inline)").css("zIndex", "")) }
  
              function h(a) { a.preventDefault(), a.stopPropagation() }
  
              function i(a) {
                  return a.stopPropagation(), b.opts.toolbarInline ? !1 : void 0 }
  
              function j(c, d) { b.events.bindClick(c, ".fr-command:not(.fr-disabled)", f), b.events.$on(c, b._mousedown + " " + b._mouseup + " " + b._move, ".fr-dropdown-menu", h, !0), b.events.$on(c, b._mousedown + " " + b._mouseup + " " + b._move, ".fr-dropdown-menu .fr-dropdown-wrapper", i, !0);
                  var e = c.get(0).ownerDocument,
                      j = "defaultView" in e ? e.defaultView : e.parentWindow,
                      k = function(d) {
                          (!d || d.type == b._mouseup && d.target != a("html").get(0) || "keydown" == d.type && (b.keys.isCharacter(d.which) && !b.keys.ctrlKey(d) || d.which == a.FE.KEYCODE.ESC)) && g(c) };
                  b.events.$on(a(j), b._mouseup + " resize keydown", k, !0), b.opts.iframe && b.events.$on(b.$win, b._mouseup, k, !0), a.merge(q, c.find(".fr-btn").toArray()), b.tooltip.bind(c, ".fr-btn, .fr-title", d) }
  
              function k(a, c) {
                  var d = "";
                  if (c.html) d += "function" == typeof c.html ? c.html.call(b) : c.html;
                  else {
                      var e = c.options; "function" == typeof e && (e = e()), d += '<ul class="fr-dropdown-list">';
                      for (var f in e) e.hasOwnProperty(f) && (d += '<li><a class="fr-command" data-cmd="' + a + '" data-param1="' + f + '" title="' + e[f] + '">' + b.language.translate(e[f]) + "</a></li>");
                      d += "</ul>" }
                  return d }
  
              function l(a, c, d) {
                  var e = c.displaySelection; "function" == typeof e && (e = e(b));
                  var f;
                  if (e) {
                      var g = "function" == typeof c.defaultSelection ? c.defaultSelection(b) : c.defaultSelection;
                      f = '<span style="width:' + (c.displaySelectionWidth || 100) + 'px">' + (g || b.language.translate(c.title)) + "</span>" } else f = b.icon.create(c.icon || a);
                  var h = c.popup ? ' data-popup="true"' : "",
                      i = '<button type="button" tabindex="-1" title="' + (b.language.translate(c.title) || "") + '" class="fr-command fr-btn' + ("dropdown" == c.type ? " fr-dropdown" : "") + (c.displaySelection ? " fr-selection" : "") + (c.back ? " fr-back" : "") + (c.disabled ? " fr-disabled" : "") + (d ? "" : " fr-hidden") + '" data-cmd="' + a + '"' + h + ">" + f + "</button>";
                  if ("dropdown" == c.type) {
                      var j = '<div class="fr-dropdown-menu"><div class="fr-dropdown-wrapper"><div class="fr-dropdown-content" tabindex="-1">';
                      j += k(a, c), j += "</div></div></div>", i += j }
                  return i }
  
              function m(c, d) {
                  for (var e = "", f = 0; f < c.length; f++) {
                      var g = c[f],
                          h = a.FE.COMMANDS[g];
                      if (!(h && "undefined" != typeof h.plugin && b.opts.pluginsEnabled.indexOf(h.plugin) < 0))
                          if (h) {
                              var i = "undefined" != typeof d ? d.indexOf(g) >= 0 : !0;
                              e += l(g, h, i) } else "|" == g ? e += '<div class="fr-separator fr-vs"></div>' : "-" == g && (e += '<div class="fr-separator fr-hs"></div>') }
                  return e }
  
              function n(c) {
                  var d, e = c.parents(".fr-popup, .fr-toolbar").data("instance") || b,
                      f = c.data("cmd");
                  c.hasClass("fr-dropdown") ? d = c.next() : c.removeClass("fr-active"), a.FE.COMMANDS[f] && a.FE.COMMANDS[f].refresh ? a.FE.COMMANDS[f].refresh.apply(e, [c, d]) : b.refresh[f] && e.refresh[f](c, d) }
  
              function o() {
                  var c = b.$tb ? b.$tb.data("instance") || b : b;
                  return 0 == b.events.trigger("buttons.refresh") ? !0 : void setTimeout(function() {
                      for (var b = c.selection.inEditor() && c.core.hasFocus(), d = 0; d < q.length; d++) {
                          var e = a(q[d]),
                              f = e.data("cmd");
                          0 == e.parents(".fr-popup").length ? b || a.FE.COMMANDS[f] && a.FE.COMMANDS[f].forcedRefresh ? c.button.refresh(e) : e.hasClass("fr-dropdown") || e.removeClass("fr-active") : e.parents(".fr-popup").is(":visible") && c.button.refresh(e) } }, 0) }
  
              function p() { b.opts.toolbarInline ? b.events.on("toolbar.show", o) : (b.events.on("mouseup", o), b.events.on("keyup", o), b.events.on("blur", o), b.events.on("focus", o), b.events.on("contentChanged", o)) }
              var q = [];
              return (b.opts.toolbarInline || b.opts.toolbarContainer) && (b.shared.buttons || (b.shared.buttons = []), q = b.shared.buttons), { _init: p, buildList: m, bindCommands: j, refresh: n, bulkRefresh: o, exec: d } }, a.FE.MODULES.position = function(b) {
              function c() {
                  var c, d = b.selection.ranges(0);
                  if (d && d.collapsed && b.selection.inEditor()) {
                      var e = !1;
                      0 == b.$el.find(".fr-marker").length && (b.selection.save(), e = !0);
                      var f = b.$el.find(".fr-marker:first");
                      f.css("display", "inline"), f.css("line-height", "");
                      var g = f.offset(),
                          h = f.outerHeight();
                      f.css("display", "none"), f.css("line-height", 0), c = {}, c.left = g.left, c.width = 0, c.height = h, c.top = g.top - (b.helpers.isIOS() ? 0 : a(b.o_win).scrollTop()), c.right = 1, c.bottom = 1, c.ok = !0, e && b.selection.restore() } else d && (c = d.getBoundingClientRect());
                  return c }
  
              function d(c, d, e) {
                  var f = c.outerHeight();
                  if (!b.helpers.isMobile() && b.$tb && c.parent().get(0) != b.$tb.get(0)) {
                      var g = (c.parent().height() - 20 - (b.opts.toolbarBottom ? b.$tb.outerHeight() : 0), c.parent().offset().top),
                          h = d - f - (e || 0);
                      c.parent().get(0) == a(b.opts.scrollableContainer).get(0) && (g -= c.parent().position().top), g + d + f > a(b.o_doc).outerHeight() && c.parent().offset().top + h > 0 ? (d = h, c.addClass("fr-above")) : c.removeClass("fr-above") }
                  return d }
  
              function e(c, d) {
                  var e = c.outerWidth();
                  return c.parent().offset().left + d + e > a(b.opts.scrollableContainer).width() - 10 && (d = a(b.opts.scrollableContainer).width() - e - 10 - c.parent().offset().left + a(b.opts.scrollableContainer).offset().left), c.parent().offset().left + d < a(b.opts.scrollableContainer).offset().left && (d = 10 - c.parent().offset().left + a(b.opts.scrollableContainer).offset().left), d }
  
              function f(d) {
                  var e = c();
                  d.css("top", 0).css("left", 0);
                  var f = e.top + e.height,
                      h = e.left + e.width / 2 - d.outerWidth() / 2 + a(b.o_win).scrollLeft();
                  b.opts.iframe || (f += a(b.o_win).scrollTop()), g(h, f, d, e.height) }
  
              function g(a, c, f, g) {
                  var h = f.data("container");
                  h && "BODY" != h.get(0).tagName && (a && (a -= h.offset().left), c && (c -= h.offset().top - h.scrollTop())), b.opts.iframe && h && b.$tb && h.get(0) != b.$tb.get(0) && (a && (a += b.$iframe.offset().left), c && (c += b.$iframe.offset().top));
                  var i = e(f, a);
                  if (a) { f.css("left", i);
                      var j = f.find(".fr-arrow");
                      j.data("margin-left") || j.data("margin-left", b.helpers.getPX(j.css("margin-left"))), j.css("margin-left", a - i + j.data("margin-left")) }
                  c && f.css("top", d(f, c, g)) }
  
              function h(c) {
                  var d = a(c),
                      e = d.is(".fr-sticky-on"),
                      f = d.data("sticky-top"),
                      g = d.data("sticky-scheduled");
                  if ("undefined" == typeof f) { d.data("sticky-top", 0);
                      var h = a('<div class="fr-sticky-dummy" style="height: ' + d.outerHeight() + 'px;"></div>');
                      b.$box.prepend(h) } else b.$box.find(".fr-sticky-dummy").css("height", d.outerHeight());
                  if (b.core.hasFocus() || b.$tb.find("input:visible:focus").length > 0) {
                      var i = a(window).scrollTop(),
                          j = Math.min(Math.max(i - b.$tb.parent().offset().top, 0), b.$tb.parent().outerHeight() - d.outerHeight());
                      j != f && j != g && (clearTimeout(d.data("sticky-timeout")), d.data("sticky-scheduled", j), d.outerHeight() < i - b.$tb.parent().offset().top && d.addClass("fr-opacity-0"), d.data("sticky-timeout", setTimeout(function() {
                          var c = a(window).scrollTop(),
                              e = Math.min(Math.max(c - b.$tb.parent().offset().top, 0), b.$tb.parent().outerHeight() - d.outerHeight());
                          e > 0 && "BODY" == b.$tb.parent().get(0).tagName && (e += b.$tb.parent().position().top), e != f && (d.css("top", Math.max(e, 0)), d.data("sticky-top", e), d.data("sticky-scheduled", e)), d.removeClass("fr-opacity-0") }, 100))), e || (d.css("top", "0"), d.width(b.$tb.parent().width()), d.addClass("fr-sticky-on"), b.$box.addClass("fr-sticky-box")) } else clearTimeout(a(c).css("sticky-timeout")), d.css("top", "0"), d.css("position", ""), d.width(""), d.data("sticky-top", 0), d.removeClass("fr-sticky-on"), b.$box.removeClass("fr-sticky-box") }
  
              function i(c) {
                  if (c.offsetWidth) {
                      var d, e, f = a(c),
                          g = f.outerHeight(),
                          h = f.data("sticky-position"),
                          i = a("body" == b.opts.scrollableContainer ? b.o_win : b.opts.scrollableContainer).outerHeight(),
                          j = 0,
                          k = 0; "body" !== b.opts.scrollableContainer && (j = a(b.opts.scrollableContainer).offset().top, k = a(b.o_win).outerHeight() - j - i);
                      var l = "body" == b.opts.scrollableContainer ? a(b.o_win).scrollTop() : j,
                          m = f.is(".fr-sticky-on");
                      f.data("sticky-parent") || f.data("sticky-parent", f.parent());
                      var n = f.data("sticky-parent"),
                          o = n.offset().top,
                          p = n.outerHeight();
                      if (f.data("sticky-offset") || (f.data("sticky-offset", !0), f.after('<div class="fr-sticky-dummy" style="height: ' + g + 'px;"></div>')), !h) {
                          var q = "auto" !== f.css("top") || "auto" !== f.css("bottom");
                          q || f.css("position", "fixed"), h = { top: "auto" !== f.css("top"), bottom: "auto" !== f.css("bottom") }, q || f.css("position", ""), f.data("sticky-position", h), f.data("top", f.css("top")), f.data("bottom", f.css("bottom")) }
                      var r = function() {
                              return l + d > o && o + p - g >= l + d },
                          s = function() {
                              return l + i - e > o + g && o + p > l + i - e };
                      d = b.helpers.getPX(f.data("top")), e = b.helpers.getPX(f.data("bottom"));
                      var t = h.top && r(),
                          u = h.bottom && s();
                      t || u ? (f.css("width", n.width() + "px"), m || (f.addClass("fr-sticky-on"), f.removeClass("fr-sticky-off"), f.css("top") && ("auto" != f.data("top") ? f.css("top", b.helpers.getPX(f.data("top")) + j) : f.data("top", "auto")), f.css("bottom") && ("auto" != f.data("bottom") ? f.css("bottom", b.helpers.getPX(f.data("bottom")) + k) : f.css("bottom", "auto")))) : f.hasClass("fr-sticky-off") || (f.width(""), f.removeClass("fr-sticky-on"), f.addClass("fr-sticky-off"), f.css("top") && "auto" != f.css("top") && f.css("top", 0), f.css("bottom") && f.css("bottom", 0)) } }
  
              function j() {
                  var a = document.createElement("test"),
                      c = a.style;
                  return c.cssText = "position:" + ["-webkit-", "-moz-", "-ms-", "-o-", ""].join("sticky; position:") + " sticky;", -1 !== c.position.indexOf("sticky") && !b.helpers.isIOS() && !b.helpers.isAndroid() }
  
              function k() {
                  if (!j())
                      if (b._stickyElements = [], b.helpers.isIOS()) {
                          var c = function() { b.helpers.requestAnimationFrame()(c);
                              for (var a = 0; a < b._stickyElements.length; a++) h(b._stickyElements[a]) };
                          c(), b.events.$on(a(b.o_win), "scroll", function() {
                              if (b.core.hasFocus())
                                  for (var c = 0; c < b._stickyElements.length; c++) {
                                      var d = a(b._stickyElements[c]),
                                          e = d.parent(),
                                          f = a(window).scrollTop();
                                      d.outerHeight() < f - e.offset().top && (d.addClass("fr-opacity-0"), d.data("sticky-top", -1), d.data("sticky-scheduled", -1)) } }, !0) } else b.events.$on(a("body" == b.opts.scrollableContainer ? b.o_win : b.opts.scrollableContainer), "scroll", l, !0), b.events.$on(a(b.o_win), "resize", l, !0), b.events.on("initialized", l), b.events.on("focus", l), b.events.$on(a(b.o_win), "resize", "textarea", l, !0) }
  
              function l() {
                  for (var a = 0; a < b._stickyElements.length; a++) i(b._stickyElements[a]) }
  
              function m(a) { a.addClass("fr-sticky"), b.helpers.isIOS() && a.addClass("fr-sticky-ios"), j() || b._stickyElements.push(a.get(0)) }
  
              function n() { k() }
              return { _init: n, forSelection: f, addSticky: m, refresh: l, at: g, getBoundingRect: c } }, a.extend(a.FE.DEFAULTS, { toolbarBottom: !1, toolbarButtons: ["fullscreen", "bold", "italic", "underline", "strikeThrough", "subscript", "superscript", "fontFamily", "fontSize", "|", "color", "emoticons", "inlineStyle", "paragraphStyle", "|", "paragraphFormat", "align", "formatOL", "formatUL", "outdent", "indent", "quote", "insertHR", "-", "insertLink", "insertImage", "insertVideo", "insertFile", "insertTable", "undo", "redo", "clearFormatting", "selectAll", "html"], toolbarButtonsXS: ["bold", "italic", "fontFamily", "fontSize", "|", "undo", "redo"], toolbarButtonsSM: ["bold", "italic", "underline", "|", "fontFamily", "fontSize", "insertLink", "insertImage", "table", "|", "undo", "redo"], toolbarButtonsMD: ["fullscreen", "bold", "italic", "underline", "fontFamily", "fontSize", "color", "paragraphStyle", "paragraphFormat", "align", "formatOL", "formatUL", "outdent", "indent", "quote", "insertHR", "-", "insertLink", "insertImage", "insertVideo", "insertFile", "insertTable", "undo", "redo", "clearFormatting"], toolbarContainer: null, toolbarInline: !1, toolbarSticky: !0, toolbarStickyOffset: 0, toolbarVisibleWithoutSelection: !1 }), a.FE.MODULES.toolbar = function(b) {
              function c(a, b) {
                  for (var c = 0; c < b.length; c++) "-" != b[c] && "|" != b[c] && a.indexOf(b[c]) < 0 && a.push(b[c]) }
  
              function d() {
                  var d = a.merge([], e());
                  c(d, b.opts.toolbarButtonsXS || []), c(d, b.opts.toolbarButtonsSM || []), c(d, b.opts.toolbarButtonsMD || []), c(d, b.opts.toolbarButtons);
                  for (var f = d.length - 1; f >= 0; f--) "-" != d[f] && "|" != d[f] && d.indexOf(d[f]) < f && d.splice(f, 1);
                  var g = b.button.buildList(d, e());
                  b.$tb.append(g), b.button.bindCommands(b.$tb) }
  
              function e() {
                  var a = b.helpers.screenSize();
                  return u[a] }
  
              function f() {
                  var a = e();
                  b.$tb.find(".fr-separator").remove(), b.$tb.find("> .fr-command").addClass("fr-hidden");
                  for (var c = 0; c < a.length; c++)
                      if ("|" == a[c] || "-" == a[c]) b.$tb.append(b.button.buildList([a[c]]));
                      else {
                          var d = b.$tb.find('> .fr-command[data-cmd="' + a[c] + '"]'),
                              f = null;
                          d.next().hasClass("fr-dropdown-menu") && (f = d.next()), d.removeClass("fr-hidden").appendTo(b.$tb), f && f.appendTo(b.$tb) } }
  
              function g() { b.events.$on(a(b.o_win), "resize", f, !0), b.events.$on(a(b.o_win), "orientationchange", f, !0) }
  
              function h(c, d) { setTimeout(function() {
                      if (c && c.which == a.FE.KEYCODE.ESC);
                      else if (b.selection.inEditor() && b.core.hasFocus() && !b.popups.areVisible() && (b.opts.toolbarVisibleWithoutSelection && c && "keyup" != c.type || !b.selection.isCollapsed() && !b.keys.isIME() || d)) {
                          if (b.$tb.data("instance", b), 0 == b.events.trigger("toolbar.show", [c])) return !1;
                          b.opts.toolbarContainer || b.position.forSelection(b.$tb), b.$tb.show() } }, 0) }
  
              function i(a) {
                  return 0 == b.events.trigger("toolbar.hide") ? !1 : void b.$tb.hide() }
  
              function j() {
                  return 0 == b.events.trigger("toolbar.show") ? !1 : void b.$tb.show() }
  
              function k() { b.events.on("window.mousedown", i), b.events.on("keydown", i), b.events.on("blur", i), b.events.on("window.mouseup", h), b.helpers.isMobile() ? b.helpers.isIOS() || (b.events.on("window.touchend", h), b.browser.mozilla && setInterval(h, 200)) : b.events.on("window.keyup", h), b.events.on("keydown", function(b) { b && b.which == a.FE.KEYCODE.ESC && i() }), b.events.$on(b.$wp, "scroll.toolbar", h), b.events.on("commands.after", h), b.helpers.isMobile() && (b.events.$on(b.$doc, "selectionchange", h), b.events.$on(b.$doc, "orientationchange", h)) }
  
              function l() { b.opts.toolbarInline ? (a(b.opts.scrollableContainer).append(b.$tb), b.$tb.data("container", a(b.opts.scrollableContainer)), b.$tb.addClass("fr-inline"), b.$tb.prepend('<span class="fr-arrow"></span>'), k(), b.opts.toolbarBottom = !1) : (b.opts.toolbarBottom && !b.helpers.isIOS() ? (b.$box.append(b.$tb), b.$tb.addClass("fr-bottom"), b.$box.addClass("fr-bottom")) : (b.opts.toolbarBottom = !1, b.$box.prepend(b.$tb), b.$tb.addClass("fr-top"), b.$box.addClass("fr-top")), b.$tb.addClass("fr-basic"), b.opts.toolbarSticky && (b.opts.toolbarStickyOffset && (b.opts.toolbarBottom ? b.$tb.css("bottom", b.opts.toolbarStickyOffset) : b.$tb.css("top", b.opts.toolbarStickyOffset)), b.position.addSticky(b.$tb))) }
  
              function m() { b.$tb.html("").removeData().remove() }
  
              function n() { b.$box.removeClass("fr-top fr-bottom fr-inline fr-basic"), b.$box.find(".fr-sticky-dummy").remove() }
  
              function o() { b.opts.theme && b.$tb.addClass(b.opts.theme + "-theme"), b.opts.zIndex > 1 && b.$tb.css("z-index", b.opts.zIndex + 1), "auto" != b.opts.direction && b.$tb.removeClass("fr-ltr fr-rtl").addClass("fr-" + b.opts.direction), b.helpers.isMobile() ? b.$tb.addClass("fr-mobile") : b.$tb.addClass("fr-desktop"), b.opts.toolbarContainer ? (b.opts.toolbarInline && (k(), i()), b.opts.toolbarBottom ? b.$tb.addClass("fr-bottom") : b.$tb.addClass("fr-top")) : l(), s = b.$tb.get(0).ownerDocument, t = "defaultView" in s ? s.defaultView : s.parentWindow, d(), g(), b.events.$on(b.$tb, b._mousedown + " " + b._mouseup, function(a) {
                      var b = a.originalEvent ? a.originalEvent.target || a.originalEvent.originalTarget : null;
                      return b && "INPUT" != b.tagName ? (a.stopPropagation(), a.preventDefault(), !1) : void 0 }, !0) }
  
              function p() {
                  return b.$wp ? (b.opts.toolbarContainer ? (b.shared.$tb ? (b.$tb = b.shared.$tb, b.opts.toolbarInline && k()) : (b.shared.$tb = a('<div class="fr-toolbar"></div>'), b.$tb = b.shared.$tb, a(b.opts.toolbarContainer).append(b.$tb), o(), b.$tb.data("instance", b)), b.events.on("focus", function() { b.$tb.data("instance", b) }, !0), b.opts.toolbarInline = !1) : b.opts.toolbarInline ? (b.$box.addClass("fr-inline"), b.shared.$tb ? (b.$tb = b.shared.$tb, k()) : (b.shared.$tb = a('<div class="fr-toolbar"></div>'), b.$tb = b.shared.$tb, o())) : (b.$box.addClass("fr-basic"), b.$tb = a('<div class="fr-toolbar"></div>'), o(), b.$tb.data("instance", b)), b.events.on("destroy", n, !0), void b.events.on(b.opts.toolbarInline ? "shared.destroy" : "destroy", m, !0)) : !1 }
  
              function q() {!v && b.$tb && (b.$tb.find("> .fr-command").addClass("fr-disabled fr-no-refresh"), v = !0) }
  
              function r() { v && b.$tb && (b.$tb.find("> .fr-command").removeClass("fr-disabled fr-no-refresh"), v = !1), b.button.bulkRefresh() }
              var s, t, u = [];
              u[a.FE.XS] = b.opts.toolbarButtonsXS || b.opts.toolbarButtons, u[a.FE.SM] = b.opts.toolbarButtonsSM || b.opts.toolbarButtons, u[a.FE.MD] = b.opts.toolbarButtonsMD || b.opts.toolbarButtons, u[a.FE.LG] = b.opts.toolbarButtons;
              var v = !1;
              return { _init: p, hide: i, show: j, showInline: h, disable: q, enable: r } }, a.FE.SHORTCUTS_MAP = { 69: { cmd: "show" }, 66: { cmd: "bold" }, 73: { cmd: "italic" }, 85: { cmd: "underline" }, 83: { cmd: "strikeThrough" }, 221: { cmd: "indent" }, 219: { cmd: "outdent" }, 90: { cmd: "undo" }, "-90": { cmd: "redo" } }, a.extend(a.FE.DEFAULTS, { shortcutsEnabled: ["show", "bold", "italic", "underline", "strikeThrough", "indent", "outdent", "undo", "redo"] }), a.FE.RegisterShortcut = function(b, c, d, e) { a.FE.SHORTCUTS_MAP[b * (e ? -1 : 1)] = { cmd: c, val: d }, a.FE.DEFAULTS.shortcutsEnabled.push(c) }, a.FE.MODULES.shortcuts = function(b) {
              function c(c) {
                  if (!b.core.hasFocus()) return !0;
                  var d = c.which;
                  if (b.keys.ctrlKey(c) && (c.shiftKey && a.FE.SHORTCUTS_MAP[-d] || !c.shiftKey && a.FE.SHORTCUTS_MAP[d])) {
                      var e = a.FE.SHORTCUTS_MAP[d * (c.shiftKey ? -1 : 1)].cmd;
                      if (e && b.opts.shortcutsEnabled.indexOf(e) >= 0) {
                          var f, g = a.FE.SHORTCUTS_MAP[d * (c.shiftKey ? -1 : 1)].val;
                          if (e && !g ? f = b.$tb.find('.fr-command[data-cmd="' + e + '"]') : e && g && (f = b.$tb.find('.fr-command[data-cmd="' + e + '"][data-param1="' + g + '"]')), f.length) return c.preventDefault(), c.stopPropagation(), f.parents(".fr-toolbar").data("instance", b), "keydown" == c.type && b.button.exec(f), !1;
                          if (e && b.commands[e]) return c.preventDefault(), c.stopPropagation(), "keydown" == c.type && b.commands[e](), !1 } } }
  
              function d() { b.events.on("keydown", c, !0), b.events.on("keyup", c, !0) }
              return { _init: d } }, a.FE.MODULES.snapshot = function(a) {
              function b(a) {
                  for (var b = a.parentNode.childNodes, c = 0, d = null, e = 0; e < b.length; e++) {
                      if (d) {
                          var f = b[e].nodeType === Node.TEXT_NODE && "" === b[e].textContent,
                              g = d.nodeType === Node.TEXT_NODE && b[e].nodeType === Node.TEXT_NODE;
                          f || g || c++ }
                      if (b[e] == a) return c;
                      d = b[e] } }
  
              function c(c) {
                  var d = [];
                  if (!c.parentNode) return [];
                  for (; !a.node.isElement(c);) d.push(b(c)), c = c.parentNode;
                  return d.reverse() }
  
              function d(a, b) {
                  for (; a && a.nodeType === Node.TEXT_NODE;) {
                      var c = a.previousSibling;
                      c && c.nodeType == Node.TEXT_NODE && (b += c.textContent.length), a = c }
                  return b }
  
              function e(a) {
                  return { scLoc: c(a.startContainer), scOffset: d(a.startContainer, a.startOffset), ecLoc: c(a.endContainer), ecOffset: d(a.endContainer, a.endOffset) } }
  
              function f() {
                  var b = {};
                  if (a.events.trigger("snapshot.before"), b.html = a.$wp ? a.$el.html() : a.$oel.get(0).outerHTML, b.ranges = [], a.$wp && a.selection.inEditor() && a.core.hasFocus())
                      for (var c = a.selection.ranges(), d = 0; d < c.length; d++) b.ranges.push(e(c[d]));
                  return a.events.trigger("snapshot.after"), b }
  
              function g(b) {
                  for (var c = a.$el.get(0), d = 0; d < b.length; d++) c = c.childNodes[b[d]];
                  return c }
  
              function h(b, c) {
                  try {
                      var d = g(c.scLoc),
                          e = c.scOffset,
                          f = g(c.ecLoc),
                          h = c.ecOffset,
                          i = a.doc.createRange();
                      i.setStart(d, e), i.setEnd(f, h), b.addRange(i) } catch (j) {} }
  
              function i(b) {
                  a.$el.html() != b.html && a.$el.html(b.html);
                  var c = a.selection.get();
                  a.selection.clear(), a.events.focus(!0);
                  for (var d = 0; d < b.ranges.length; d++) h(c, b.ranges[d])
              }
  
              function j(b, c) {
                  return b.html != c.html ? !1 : a.core.hasFocus() && JSON.stringify(b.ranges) != JSON.stringify(c.ranges) ? !1 : !0 }
              return { get: f, restore: i, equal: j }
          }, a.FE.MODULES.undo = function(a) {
              function b(b) {
                  var c = b.which,
                      d = a.keys.ctrlKey(b);
                  d && (90 == c && b.shiftKey && b.preventDefault(), 90 == c && b.preventDefault()) }
  
              function c() {
                  return 0 === a.undo_stack.length || a.undo_index <= 1 ? !1 : !0 }
  
              function d() {
                  return a.undo_index == a.undo_stack.length ? !1 : !0 }
  
              function e(b) {
                  return !a.undo_stack || a.undoing || a.$el.get(0).querySelectorAll(".fr-marker").length ? !1 : (f(), void("undefined" == typeof b ? (b = a.snapshot.get(), a.undo_stack[a.undo_index - 1] && a.snapshot.equal(a.undo_stack[a.undo_index - 1], b) || (a.undo_stack.push(b), a.undo_index++, b.html != k && (a.events.trigger("contentChanged"), k = b.html))) : a.undo_index > 0 ? a.undo_stack[a.undo_index - 1] = b : (a.undo_stack.push(b), a.undo_index++))) }
  
              function f() {
                  if (!a.undo_stack || a.undoing) return !1;
                  for (; a.undo_stack.length > a.undo_index;) a.undo_stack.pop() }
  
              function g() {
                  if (a.undo_index > 1) { a.undoing = !0;
                      var b = a.undo_stack[--a.undo_index - 1];
                      clearTimeout(a._content_changed_timer), a.snapshot.restore(b), a.popups.hideAll(), a.toolbar.enable(), a.events.trigger("contentChanged"), a.events.trigger("commands.undo"), a.undoing = !1 } }
  
              function h() {
                  if (a.undo_index < a.undo_stack.length) { a.undoing = !0;
                      var b = a.undo_stack[a.undo_index++];
                      clearTimeout(a._content_changed_timer), a.snapshot.restore(b), a.popups.hideAll(), a.toolbar.enable(), a.events.trigger("contentChanged"), a.events.trigger("commands.redo"), a.undoing = !1 } }
  
              function i() { a.undo_index = 0, a.undo_stack = [] }
  
              function j() { i(), a.events.on("initialized", function() { k = a.html.get(!1, !0) }), a.events.on("blur", function() { a.undo.saveStep() }), a.events.on("keydown", b) }
              var k = null;
              return { _init: j, run: g, redo: h, canDo: c, canRedo: d, dropRedo: f, reset: i, saveStep: e } }, a.FE.POPUP_TEMPLATES = { "text.edit": "[_EDIT_]" }, a.FE.RegisterTemplate = function(b, c) { a.FE.POPUP_TEMPLATES[b] = c }, a.FE.MODULES.popups = function(b) {
              function c(c, d) { d.is(":visible") || (d = a(b.opts.scrollableContainer)), d.is(x[c].data("container")) || (x[c].data("container", d), d.append(x[c])) }
  
              function d(d, e, h, i) {
                  if (g() && b.$el.find(".fr-marker").length > 0 && (b.events.disableBlur(), b.selection.restore()), m([d]), !x[d]) return !1;
                  a(".fr-dropdown.fr-active").removeClass("fr-active").parent(".fr-toolbar").css("zIndex", ""), x[d].data("instance", b), b.$tb && b.$tb.data("instance", b);
                  var j = x[d].outerWidth(),
                      k = (x[d].outerHeight(), f(d));
                  x[d].addClass("fr-active").find("input, textarea").removeAttr("disabled");
                  var l = x[d].data("container");
                  l.is(b.$tb) && b.$tb.css("zIndex", (b.opts.zIndex || 1) + 4), b.opts.toolbarInline && l && b.$tb && l.get(0) == b.$tb.get(0) && (c(d, b.opts.toolbarInline ? a(b.opts.scrollableContainer) : b.$box), h && (h = b.$tb.offset().top - b.helpers.getPX(b.$tb.css("margin-top"))), e && (e = b.$tb.offset().left + b.$tb.width() / 2), b.$tb.hasClass("fr-above") && h && (h += b.$tb.outerHeight()), i = 0), l = x[d].data("container"), !b.opts.iframe || i || k || (e && (e -= b.$iframe.offset().left), h && (h -= b.$iframe.offset().top)), e && (e -= j / 2), b.opts.toolbarBottom && l && b.$tb && l.get(0) == b.$tb.get(0) && (x[d].addClass("fr-above"), h && (h -= x[d].outerHeight())), x[d].removeClass("fr-active"), b.position.at(e, h, x[d], i || 0), x[d].addClass("fr-active");
                  var n = x[d].find("input:visible, textarea:visible").get(0);
                  n && (0 == b.$el.find(".fr-marker").length && b.core.hasFocus() && b.selection.save(), b.events.disableBlur(), a(n).select().focus()), b.opts.toolbarInline && b.toolbar.hide(), b.events.trigger("popups.show." + d) }
  
              function e(a, c) { b.events.on("popups.show." + a, c) }
  
              function f(a) {
                  return x[a] && x[a].hasClass("fr-active") && b.core.sameInstance(x[a]) || !1 }
  
              function g(a) {
                  for (var b in x)
                      if (x.hasOwnProperty(b) && f(b) && ("undefined" == typeof a || x[b].data("instance") == a)) return !0;
                  return !1 }
  
              function h(a) { x[a] && x[a].hasClass("fr-active") && (x[a].removeClass("fr-active fr-above"), b.events.trigger("popups.hide." + a), b.$tb && b.$tb.css("zIndex", ""), b.events.disableBlur(), x[a].find("input, textarea, button").filter(":focus").blur(), x[a].find("input, textarea").attr("disabled", "disabled")) }
  
              function i(a, c) { b.events.on("popups.hide." + a, c) }
  
              function j(a) {
                  var c = x[a];
                  if (c && !c.data("inst" + b.id)) {
                      var d = s(a);
                      t(d, a) }
                  return c }
  
              function k(a, c) { b.events.on("popups.refresh." + a, c) }
  
              function l(c) { b.events.trigger("popups.refresh." + c);
                  for (var d = x[c].find(".fr-command"), e = 0; e < d.length; e++) {
                      var f = a(d[e]);
                      0 == f.parents(".fr-dropdown-menu").length && b.button.refresh(f) } }
  
              function m(a) { "undefined" == typeof a && (a = []);
                  for (var b in x) x.hasOwnProperty(b) && a.indexOf(b) < 0 && h(b) }
  
              function n() { b.shared.exit_flag = !0 }
  
              function o() { b.shared.exit_flag = !1 }
  
              function p() {
                  return b.shared.exit_flag }
  
              function q(c, d) {
                  var e = a.FE.POPUP_TEMPLATES[c]; "function" == typeof e && (e = e.apply(b));
                  for (var f in d) d.hasOwnProperty(f) && (e = e.replace("[_" + f.toUpperCase() + "_]", d[f]));
                  return e }
  
              function r(c, d) {
                  var e = q(c, d),
                      f = a('<div class="fr-popup' + (b.helpers.isMobile() ? " fr-mobile" : " fr-desktop") + (b.opts.toolbarInline ? " fr-inline" : "") + '"><span class="fr-arrow"></span>' + e + "</div>");
                  b.opts.theme && f.addClass(b.opts.theme + "-theme"), b.opts.zIndex > 1 && b.$tb.css("z-index", b.opts.zIndex + 2), "auto" != b.opts.direction && f.removeClass("fr-ltr fr-rtl").addClass("fr-" + b.opts.direction), f.find("input, textarea").attr("dir", b.opts.direction).attr("disabled", "disabled");
                  var g = a("body");
                  return g.append(f), f.data("container", g), x[c] = f, b.button.bindCommands(f, !1), f }
  
              function s(c) {
                  var d = x[c];
                  return { _windowResize: function() {
                          var a = d.data("instance") || b;!a.helpers.isMobile() && d.is(":visible") && (a.events.disableBlur(), a.popups.hide(c), a.events.enableBlur()) }, _inputFocus: function(c) {
                          var e = d.data("instance") || b;
                          if (c.preventDefault(), c.stopPropagation(), setTimeout(function() { e.events.enableBlur() }, 0), e.helpers.isMobile()) {
                              var f = a(e.o_win).scrollTop();
                              setTimeout(function() { a(e.o_win).scrollTop(f) }, 0) } }, _inputBlur: function(c) {
                          var e = d.data("instance") || b;
                          document.activeElement != this && a(this).is(":visible") && (e.events.blurActive() && e.events.trigger("blur"), e.events.enableBlur()) }, _inputKeydown: function(e) {
                          var g = d.data("instance") || b,
                              h = e.which;
                          if (a.FE.KEYCODE.TAB == h) { e.preventDefault();
                              var i = d.find("input, textarea, button, select").filter(":visible").not(":disabled").toArray();
                              i.sort(function(b, c) {
                                  return e.shiftKey ? a(b).attr("tabIndex") < a(c).attr("tabIndex") : a(b).attr("tabIndex") > a(c).attr("tabIndex") }), g.events.disableBlur();
                              var j = i.indexOf(this) + 1;
                              j == i.length && (j = 0), a(i[j]).focus() } else if (a.FE.KEYCODE.ENTER == h) d.find(".fr-submit:visible").length > 0 && (e.preventDefault(), e.stopPropagation(), g.events.disableBlur(), g.button.exec(d.find(".fr-submit:visible:first")));
                          else {
                              if (a.FE.KEYCODE.ESC == h) return e.preventDefault(), e.stopPropagation(), g.$el.find(".fr-marker") && (g.events.disableBlur(), a(this).data("skip", !0), g.selection.restore(), g.events.enableBlur()), f(c) && d.find(".fr-back:visible").length ? g.button.exec(d.find(".fr-back:visible:first")) : g.popups.hide(c), g.opts.toolbarInline && g.toolbar.showInline(null, !0), !1;
                              e.stopPropagation() } }, _windowKeydown: function(e) {
                          if (!b.core.sameInstance(d)) return !0;
                          var g = d.data("instance") || b,
                              h = e.which;
                          if (a.FE.KEYCODE.ESC == h) {
                              if (f(c) && g.opts.toolbarInline) return e.stopPropagation(), f(c) && d.find(".fr-back:visible").length ? g.button.exec(d.find(".fr-back:visible:first")) : (g.popups.hide(c), g.toolbar.showInline(null, !0)), !1;
                              f(c) && d.find(".fr-back:visible").length ? g.button.exec(d.find(".fr-back:visible:first")) : g.popups.hide(c) } }, _editorKeydown: function(e) {
                          var g = d.data("instance") || b;
                          g.keys.ctrlKey(e) || e.which == a.FE.KEYCODE.ESC || (f(c) && d.find(".fr-back:visible").length ? g.button.exec(d.find(".fr-back:visible:first")) : g.popups.hide(c)) }, _preventFocus: function(c) {
                          var e = d.data("instance") || b;
                          e.events.disableBlur();
                          var f = c.originalEvent ? c.originalEvent.target || c.originalEvent.originalTarget : null,
                              g = "input, textarea, button, select, label, .fr-command";
                          return f && !a(f).is(g) && 0 === a(f).parents(g).length ? (c.stopPropagation(), !1) : void(f && a(f).is(g) && c.stopPropagation()) }, _editorMouseup: function(a) { d.is(":visible") && p() && d.find("input:focus, textarea:focus, button:focus, select:focus").filter(":visible").length > 0 && b.events.disableBlur() }, _windowMouseup: function(a) {
                          if (!b.core.sameInstance(d)) return !0;
                          var e = d.data("instance") || b;
                          d.is(":visible") && p() && (a.stopPropagation(), e.markers.remove(), e.popups.hide(c), o()) }, _doPlaceholder: function(b) {
                          var c = a(this).next();
                          0 == c.length && a(this).after("<span>" + a(this).attr("placeholder") + "</span>"), a(this).toggleClass("fr-not-empty", "" != a(this).val()) }, _repositionPopup: function(e) {
                          if (f(c) && d.parent().get(0) == a(b.opts.scrollableContainer).get(0)) {
                              var g = d.offset().top - b.$wp.offset().top,
                                  h = (b.$wp.scrollTop(), b.$wp.outerHeight());
                              g > h || 0 > g ? d.addClass("fr-hidden") : d.removeClass("fr-hidden") } } } }
  
              function t(a, c) { b.events.on("mouseup", a._editorMouseup, !0), b.$wp && b.events.on("keydown", a._editorKeydown), b.events.on("blur", function(a) { g() && b.markers.remove(), m() }), b.$wp && !b.helpers.isMobile() && b.events.$on(b.$wp, "scroll.popup" + c, a._repositionPopup), b.events.on("window.keydown", a._windowKeydown), b.events.on("window.mouseup", a._windowMouseup, !0), x[c].data("inst" + b.id, !0), b.events.on("destroy", function() { b.core.sameInstance(x[c]) && x[c].removeClass("fr-active").appendTo("body") }, !0) }
  
              function u(c, d) {
                  var e = r(c, d),
                      f = s(c);
                  return t(f, c), b.events.$on(e, "mousedown mouseup touchstart touchend touch", "*", f._preventFocus, !0), b.events.$on(e, "focus", "input, textarea, button, select", f._inputFocus, !0), b.events.$on(e, "blur", "input, textarea, button, select", f._inputBlur, !0), b.events.$on(e, "keydown", "input, textarea, button, select", f._inputKeydown, !0), b.events.$on(e, "keydown keyup change input", "input, textarea", f._doPlaceholder, !0), b.helpers.isIOS() && b.events.$on(e, "touchend", "label", function() { a("#" + a(this).attr("for")).prop("checked", function(a, b) {
                          return !b }) }, !0), b.events.$on(a(b.o_win), "resize", f._windowResize, !0), e }
  
              function v() {
                  for (var a in x)
                      if (x.hasOwnProperty(a)) {
                          var b = x[a];
                          b.html("").removeData().remove() } }
  
              function w() { b.events.on("shared.destroy", v, !0), b.events.on("window.mousedown", n), b.events.on("window.touchmove", o), b.events.on("mousedown", function(a) { g() && (a.stopPropagation(), b.$el.find(".fr-marker").remove(), n(), b.events.disableBlur()) }) }
              b.shared.popups || (b.shared.popups = {});
              var x = b.shared.popups;
              return b.shared.exit_flag = !1, { _init: w, create: u, get: j, show: d, hide: h, onHide: i, hideAll: m, setContainer: c, refresh: l, onRefresh: k, onShow: e, isVisible: f, areVisible: g } }, a.FE.MODULES.refresh = function(b) {
              function c(a, c) {
                  try { b.doc.queryCommandState(c) === !0 && a.addClass("fr-active") } catch (d) {} }
  
              function d(a) { a.toggleClass("fr-disabled", !b.undo.canDo()) }
  
              function e(a) { a.toggleClass("fr-disabled", !b.undo.canRedo()) }
  
              function f(a) {
                  if (a.hasClass("fr-no-refresh")) return !1;
                  for (var c = b.selection.blocks(), d = 0; d < c.length; d++) {
                      for (var e = c[d].previousSibling; e && e.nodeType == Node.TEXT_NODE && 0 === e.textContent.length;) e = e.previousSibling;
                      if ("LI" != c[d].tagName || e) return a.removeClass("fr-disabled"), !0;
                      a.addClass("fr-disabled") } }
  
              function g(c) {
                  if (c.hasClass("fr-no-refresh")) return !1;
                  for (var d = b.selection.blocks(), e = 0; e < d.length; e++) {
                      var f = "rtl" == b.opts.direction || "rtl" == a(d[e]).css("direction") ? "margin-right" : "margin-left";
                      if ("LI" == d[e].tagName || "LI" == d[e].parentNode.tagName) return c.removeClass("fr-disabled"), !0;
                      if (b.helpers.getPX(a(d[e]).css(f)) > 0) return c.removeClass("fr-disabled"), !0 }
                  c.addClass("fr-disabled") }
              return { "default": c, undo: d, redo: e, outdent: g, indent: f } }, a.extend(a.FE.DEFAULTS, { editInPopup: !1 }), a.FE.MODULES.textEdit = function(b) {
              function c() {
                  var a = '<div id="fr-text-edit-' + b.id + '" class="fr-layer fr-text-edit-layer"><div class="fr-input-line"><input type="text" placeholder="' + b.language.translate("Text") + '" tabIndex="1"></div><div class="fr-action-buttons"><button type="button" class="fr-command fr-submit" data-cmd="updateText" tabIndex="2">' + b.language.translate("Update") + "</button></div></div>",
                      c = { edit: a };
                  b.popups.create("text.edit", c) }
  
              function d() {
                  var c, d = b.popups.get("text.edit");
                  c = "INPUT" === b.$el.prop("tagName") ? b.$el.attr("placeholder") : b.$el.text(), d.find("input").val(c).trigger("change"), b.popups.setContainer("text.edit", a("body")), b.popups.show("text.edit", b.$el.offset().left + b.$el.outerWidth() / 2, b.$el.offset().top + b.$el.outerHeight(), b.$el.outerHeight()) }
  
              function e() { b.events.$on(b.$el, b._mouseup, function(a) { setTimeout(function() { d() }, 10) }) }
  
              function f() {
                  var a = b.popups.get("text.edit"),
                      c = a.find("input").val();
                  0 == c.length && (c = b.opts.placeholderText), "INPUT" === b.$el.prop("tagName") ? b.$el.attr("placeholder", c) : b.$el.text(c), b.events.trigger("contentChanged"), b.popups.hide("text.edit") }
  
              function g() { b.opts.editInPopup && (c(), e()) }
              return { _init: g, update: f } }, a.FE.RegisterCommand("updateText", { focus: !1, undo: !1, callback: function() { this.textEdit.update() } }), a.FE.PLUGINS.align = function(b) {
              function c(c) { b.selection.save(), b.html.wrap(!0, !0, !0, !0), b.selection.restore();
                  for (var d = b.selection.blocks(), e = 0; e < d.length; e++) a(d[e]).css("text-align", c).removeClass("fr-temp-div"), "" === a(d[e]).attr("class") && a(d[e]).removeAttr("class");
                  b.selection.save(), b.html.unwrap(), b.selection.restore() }
  
              function d(c) {
                  var d = b.selection.blocks();
                  if (d.length) {
                      var e = b.helpers.getAlignment(a(d[0]));
                      c.find("> *:first").replaceWith(b.icon.create("align-" + e)) } }
  
              function e(c, d) {
                  var e = b.selection.blocks();
                  if (e.length) {
                      var f = b.helpers.getAlignment(a(e[0]));
                      d.find('a.fr-command[data-param1="' + f + '"]').addClass("fr-active") } }
              return { apply: c, refresh: d, refreshOnShow: e } }, a.FE.DefineIcon("align", { NAME: "align-left" }), a.FE.DefineIcon("align-left", { NAME: "align-left" }), a.FE.DefineIcon("align-right", { NAME: "align-right" }), a.FE.DefineIcon("align-center", { NAME: "align-center" }), a.FE.DefineIcon("align-justify", { NAME: "align-justify" }), a.FE.RegisterCommand("align", { type: "dropdown", title: "Align", options: { left: "Align Left", center: "Align Center", right: "Align Right", justify: "Align Justify" }, html: function() {
                  var b = '<ul class="fr-dropdown-list">',
                      c = a.FE.COMMANDS.align.options;
                  for (var d in c) c.hasOwnProperty(d) && (b += '<li><a class="fr-command fr-title" data-cmd="align" data-param1="' + d + '" title="' + this.language.translate(c[d]) + '">' + this.icon.create("align-" + d) + "</a></li>");
                  return b += "</ul>" }, callback: function(a, b) { this.align.apply(b) }, refresh: function(a) { this.align.refresh(a) }, refreshOnShow: function(a, b) { this.align.refreshOnShow(a, b) }, plugin: "align" }), a.extend(a.FE.DEFAULTS, { charCounterMax: -1, charCounterCount: !0 }), a.FE.PLUGINS.charCounter = function(b) {
              function c() {
                  return b.$el.text().length }
  
              function d(a) {
                  if (b.opts.charCounterMax < 0) return !0;
                  if (c() < b.opts.charCounterMax) return !0;
                  var d = a.which;
                  return !b.keys.ctrlKey(a) && b.keys.isCharacter(d) ? (a.preventDefault(), a.stopPropagation(), b.events.trigger("charCounter.exceeded"), !1) : !0 }
  
              function e(d) {
                  if (b.opts.charCounterMax < 0) return d;
                  var e = a("<div>").html(d).text().length;
                  return e + c() <= b.opts.charCounterMax ? d : (b.events.trigger("charCounter.exceeded"), "") }
  
              function f() {
                  if (b.opts.charCounterCount) {
                      var a = c() + (b.opts.charCounterMax > 0 ? "/" + b.opts.charCounterMax : "");
                      h.text(a), b.opts.toolbarBottom && h.css("margin-bottom", b.$tb.outerHeight(!0));
                      var d = b.$wp.get(0).offsetWidth - b.$wp.get(0).clientWidth;
                      d >= 0 && ("rtl" == b.opts.direction ? h.css("margin-left", d) : h.css("margin-right", d)) } }
  
              function g() {
                  return b.$wp && b.opts.charCounterCount ? (h = a('<span class="fr-counter"></span>'), h.css("bottom", b.$wp.css("border-bottom-width")), b.$box.append(h), b.events.on("keydown", d, !0), b.events.on("paste.afterCleanup", e), b.events.on("keyup contentChanged", function() { b.events.trigger("charCounter.update") }), b.events.on("charCounter.update", f), b.events.trigger("charCounter.update"), void b.events.on("destroy", function() { a(b.o_win).off("resize.char" + b.id), h.removeData().remove() })) : !1 }
              var h;
              return { _init: g, count: c } }, a.FE.PLUGINS.codeBeautifier = function() {
              function a(a, c) {
                  function d(a) {
                      return a.replace(/^\s+/g, "") }
  
                  function e(a) {
                      return a.replace(/\s+$/g, "") }
  
                  function g() {
                      return this.pos = 0, this.token = "", this.current_mode = "CONTENT", this.tags = { parent: "parent1", parentcount: 1, parent1: "" }, this.tag_type = "", this.token_text = this.last_token = this.last_text = this.token_type = "", this.newlines = 0, this.indent_content = i, this.Utils = { whitespace: "\n\r	 ".split(""), single_token: "br,input,link,meta,source,!doctype,basefont,base,area,hr,wbr,param,img,isindex,embed".split(","), extra_liners: u, in_array: function(a, b) {
                              for (var c = 0; c < b.length; c++)
                                  if (a == b[c]) return !0;
                              return !1 } }, this.is_whitespace = function(a) {
                          for (var b = 0; b < a.length; a++)
                              if (!this.Utils.in_array(a.charAt(b), this.Utils.whitespace)) return !1;
                          return !0 }, this.traverse_whitespace = function() {
                          var a = "";
                          if (a = this.input.charAt(this.pos), this.Utils.in_array(a, this.Utils.whitespace)) {
                              for (this.newlines = 0; this.Utils.in_array(a, this.Utils.whitespace);) o && "\n" == a && this.newlines <= p && (this.newlines += 1), this.pos++, a = this.input.charAt(this.pos);
                              return !0 }
                          return !1 }, this.space_or_wrap = function(a) { this.line_char_count >= this.wrap_line_length ? (this.print_newline(!1, a), this.print_indentation(a)) : (this.line_char_count++, a.push(" ")) }, this.get_content = function() {
                          for (var a = "", b = [];
                              "<" != this.input.charAt(this.pos);) {
                              if (this.pos >= this.input.length) return b.length ? b.join("") : ["", "TK_EOF"];
                              if (this.traverse_whitespace()) this.space_or_wrap(b);
                              else {
                                  if (q) {
                                      var c = this.input.substr(this.pos, 3);
                                      if ("{{#" == c || "{{/" == c) break;
                                      if ("{{!" == c) return [this.get_tag(), "TK_TAG_HANDLEBARS_COMMENT"];
                                      if ("{{" == this.input.substr(this.pos, 2) && "{{else}}" == this.get_tag(!0)) break }
                                  a = this.input.charAt(this.pos), this.pos++, this.line_char_count++, b.push(a) } }
                          return b.length ? b.join("") : "" }, this.get_contents_to = function(a) {
                          if (this.pos == this.input.length) return ["", "TK_EOF"];
                          var b = "",
                              c = new RegExp("</" + a + "\\s*>", "igm");
                          c.lastIndex = this.pos;
                          var d = c.exec(this.input),
                              e = d ? d.index : this.input.length;
                          return this.pos < e && (b = this.input.substring(this.pos, e), this.pos = e), b }, this.record_tag = function(a) { this.tags[a + "count"] ? (this.tags[a + "count"]++, this.tags[a + this.tags[a + "count"]] = this.indent_level) : (this.tags[a + "count"] = 1, this.tags[a + this.tags[a + "count"]] = this.indent_level), this.tags[a + this.tags[a + "count"] + "parent"] = this.tags.parent, this.tags.parent = a + this.tags[a + "count"] }, this.retrieve_tag = function(a) {
                          if (this.tags[a + "count"]) {
                              for (var b = this.tags.parent; b && a + this.tags[a + "count"] != b;) b = this.tags[b + "parent"];
                              b && (this.indent_level = this.tags[a + this.tags[a + "count"]], this.tags.parent = this.tags[b + "parent"]), delete this.tags[a + this.tags[a + "count"] + "parent"], delete this.tags[a + this.tags[a + "count"]], 1 == this.tags[a + "count"] ? delete this.tags[a + "count"] : this.tags[a + "count"]-- } }, this.indent_to_tag = function(a) {
                          if (this.tags[a + "count"]) {
                              for (var b = this.tags.parent; b && a + this.tags[a + "count"] != b;) b = this.tags[b + "parent"];
                              b && (this.indent_level = this.tags[a + this.tags[a + "count"]]) } }, this.get_tag = function(a) {
                          var b, c, d, e = "",
                              f = [],
                              g = "",
                              h = !1,
                              i = !0,
                              j = this.pos,
                              l = this.line_char_count;
                          a = void 0 !== a ? a : !1;
                          do {
                              if (this.pos >= this.input.length) return a && (this.pos = j, this.line_char_count = l), f.length ? f.join("") : ["", "TK_EOF"];
                              if (e = this.input.charAt(this.pos), this.pos++, this.Utils.in_array(e, this.Utils.whitespace)) h = !0;
                              else {
                                  if (("'" == e || '"' == e) && (e += this.get_unformatted(e), h = !0), "=" == e && (h = !1), f.length && "=" != f[f.length - 1] && ">" != e && h) {
                                      if (this.space_or_wrap(f), h = !1, !i && "force" == r && "/" != e) { this.print_newline(!0, f), this.print_indentation(f);
                                          for (var m = 0; s > m; m++) f.push(k) }
                                      for (var o = 0; o < f.length; o++)
                                          if (" " == f[o]) { i = !1;
                                              break } }
                                  if (q && "<" == d && e + this.input.charAt(this.pos) == "{{" && (e += this.get_unformatted("}}"), f.length && " " != f[f.length - 1] && "<" != f[f.length - 1] && (e = " " + e), h = !0), "<" != e || d || (b = this.pos - 1, d = "<"), q && !d && f.length >= 2 && "{" == f[f.length - 1] && "{" == f[f.length - 2] && (b = "#" == e || "/" == e || "!" == e ? this.pos - 3 : this.pos - 2, d = "{"), this.line_char_count++, f.push(e), f[1] && ("!" == f[1] || "?" == f[1] || "%" == f[1])) { f = [this.get_comment(b)];
                                      break }
                                  if (q && f[1] && "{" == f[1] && f[2] && "!" == f[2]) { f = [this.get_comment(b)];
                                      break }
                                  if (q && "{" == d && f.length > 2 && "}" == f[f.length - 2] && "}" == f[f.length - 1]) break } } while (">" != e);
                          var p, t, u = f.join("");
                          p = -1 != u.indexOf(" ") ? u.indexOf(" ") : "{" == u[0] ? u.indexOf("}") : u.indexOf(">"), t = "<" != u[0] && q ? "#" == u[2] ? 3 : 2 : 1;
                          var v = u.substring(t, p).toLowerCase();
                          return "/" == u.charAt(u.length - 2) || this.Utils.in_array(v, this.Utils.single_token) ? a || (this.tag_type = "SINGLE") : q && "{" == u[0] && "else" == v ? a || (this.indent_to_tag("if"), this.tag_type = "HANDLEBARS_ELSE", this.indent_content = !0, this.traverse_whitespace()) : this.is_unformatted(v, n) ? (g = this.get_unformatted("</" + v + ">", u), f.push(g), c = this.pos - 1, this.tag_type = "SINGLE") : "script" == v && (-1 == u.search("type") || u.search("type") > -1 && u.search(/\b(text|application)\/(x-)?(javascript|ecmascript|jscript|livescript)/) > -1) ? a || (this.record_tag(v), this.tag_type = "SCRIPT") : "style" == v && (-1 == u.search("type") || u.search("type") > -1 && u.search("text/css") > -1) ? a || (this.record_tag(v), this.tag_type = "STYLE") : "!" == v.charAt(0) ? a || (this.tag_type = "SINGLE", this.traverse_whitespace()) : a || ("/" == v.charAt(0) ? (this.retrieve_tag(v.substring(1)), this.tag_type = "END") : (this.record_tag(v), "html" != v.toLowerCase() && (this.indent_content = !0), this.tag_type = "START"), this.traverse_whitespace() && this.space_or_wrap(f), this.Utils.in_array(v, this.Utils.extra_liners) && (this.print_newline(!1, this.output), this.output.length && "\n" != this.output[this.output.length - 2] && this.print_newline(!0, this.output))), a && (this.pos = j, this.line_char_count = l), f.join("") }, this.get_comment = function(a) {
                          var b = "",
                              c = ">",
                              d = !1;
                          this.pos = a;
                          var e = this.input.charAt(this.pos);
                          for (this.pos++; this.pos <= this.input.length && (b += e, b[b.length - 1] != c[c.length - 1] || -1 == b.indexOf(c));) !d && b.length < 10 && (0 === b.indexOf("<![if") ? (c = "<![endif]>", d = !0) : 0 === b.indexOf("<![cdata[") ? (c = "]]>", d = !0) : 0 === b.indexOf("<![") ? (c = "]>", d = !0) : 0 === b.indexOf("<!--") ? (c = "-->", d = !0) : 0 === b.indexOf("{{!") ? (c = "}}", d = !0) : 0 === b.indexOf("<?") ? (c = "?>", d = !0) : 0 === b.indexOf("<%") && (c = "%>", d = !0)), e = this.input.charAt(this.pos), this.pos++;
                          return b }, this.get_unformatted = function(a, b) {
                          if (b && -1 != b.toLowerCase().indexOf(a)) return "";
                          var c = "",
                              d = "",
                              e = 0,
                              f = !0;
                          do {
                              if (this.pos >= this.input.length) return d;
                              if (c = this.input.charAt(this.pos), this.pos++, this.Utils.in_array(c, this.Utils.whitespace)) {
                                  if (!f) { this.line_char_count--;
                                      continue }
                                  if ("\n" == c || "\r" == c) { d += "\n", this.line_char_count = 0;
                                      continue } }
                              d += c, this.line_char_count++, f = !0, q && "{" == c && d.length && "{" == d[d.length - 2] && (d += this.get_unformatted("}}"), e = d.length) } while (-1 == d.toLowerCase().indexOf(a, e));
                          return d }, this.get_token = function() {
                          var a;
                          if ("TK_TAG_SCRIPT" == this.last_token || "TK_TAG_STYLE" == this.last_token) {
                              var b = this.last_token.substr(7);
                              return a = this.get_contents_to(b), "string" != typeof a ? a : [a, "TK_" + b] }
                          if ("CONTENT" == this.current_mode) return a = this.get_content(), "string" != typeof a ? a : [a, "TK_CONTENT"];
                          if ("TAG" == this.current_mode) {
                              if (a = this.get_tag(), "string" != typeof a) return a;
                              var c = "TK_TAG_" + this.tag_type;
                              return [a, c] } }, this.get_full_indent = function(a) {
                          return a = this.indent_level + a || 0, 1 > a ? "" : new Array(a + 1).join(this.indent_string) }, this.is_unformatted = function(a, b) {
                          if (!this.Utils.in_array(a, b)) return !1;
                          if ("a" != a.toLowerCase() || !this.Utils.in_array("a", b)) return !0;
                          var c = this.get_tag(!0),
                              d = (c || "").match(/^\s*<\s*\/?([a-z]*)\s*[^>]*>\s*$/);
                          return !d || this.Utils.in_array(d, b) ? !0 : !1 }, this.printer = function(a, b, c, f, g) { this.input = a || "", this.output = [], this.indent_character = b, this.indent_string = "", this.indent_size = c, this.brace_style = g, this.indent_level = 0, this.wrap_line_length = f, this.line_char_count = 0;
                          for (var h = 0; h < this.indent_size; h++) this.indent_string += this.indent_character;
                          this.print_newline = function(a, b) { this.line_char_count = 0, b && b.length && (a || "\n" != b[b.length - 1]) && ("\n" != b[b.length - 1] && (b[b.length - 1] = e(b[b.length - 1])), b.push("\n")) }, this.print_indentation = function(a) {
                              for (var b = 0; b < this.indent_level; b++) a.push(this.indent_string), this.line_char_count += this.indent_string.length }, this.print_token = function(a) {
                              (!this.is_whitespace(a) || this.output.length) && ((a || "" !== a) && this.output.length && "\n" == this.output[this.output.length - 1] && (this.print_indentation(this.output), a = d(a)), this.print_token_raw(a)) }, this.print_token_raw = function(a) { this.newlines > 0 && (a = e(a)), a && "" !== a && (a.length > 1 && "\n" == a[a.length - 1] ? (this.output.push(a.slice(0, -1)), this.print_newline(!1, this.output)) : this.output.push(a));
                              for (var b = 0; b < this.newlines; b++) this.print_newline(b > 0, this.output);
                              this.newlines = 0 }, this.indent = function() { this.indent_level++ }, this.unindent = function() { this.indent_level > 0 && this.indent_level-- } }, this }
                  var h, i, j, k, l, m, n, o, p, q, r, s, t, u;
                  for (c = c || {}, void 0 !== c.wrap_line_length && 0 !== parseInt(c.wrap_line_length, 10) || void 0 === c.max_char || 0 === parseInt(c.max_char, 10) || (c.wrap_line_length = c.max_char), i = void 0 === c.indent_inner_html ? !1 : c.indent_inner_html, j = void 0 === c.indent_size ? 4 : parseInt(c.indent_size, 10), k = void 0 === c.indent_char ? " " : c.indent_char, m = void 0 === c.brace_style ? "collapse" : c.brace_style, l = 0 === parseInt(c.wrap_line_length, 10) ? 32786 : parseInt(c.wrap_line_length || 250, 10), n = c.unformatted || ["a", "span", "img", "bdo", "em", "strong", "dfn", "code", "samp", "kbd", "var", "cite", "abbr", "acronym", "q", "sub", "sup", "tt", "i", "b", "big", "small", "u", "s", "strike", "font", "ins", "del", "address", "pre"], o = void 0 === c.preserve_newlines ? !0 : c.preserve_newlines, p = o ? isNaN(parseInt(c.max_preserve_newlines, 10)) ? 32786 : parseInt(c.max_preserve_newlines, 10) : 0, q = void 0 === c.indent_handlebars ? !1 : c.indent_handlebars, r = void 0 === c.wrap_attributes ? "auto" : c.wrap_attributes, s = void 0 === c.wrap_attributes_indent_size ? j : parseInt(c.wrap_attributes_indent_size, 10) || j, t = void 0 === c.end_with_newline ? !1 : c.end_with_newline, u = Array.isArray(c.extra_liners) ? c.extra_liners.concat() : "string" == typeof c.extra_liners ? c.extra_liners.split(",") : "head,body,/html".split(","), c.indent_with_tabs && (k = "	", j = 1), h = new g, h.printer(a, k, j, l, m);;) {
                      var v = h.get_token();
                      if (h.token_text = v[0], h.token_type = v[1], "TK_EOF" == h.token_type) break;
                      switch (h.token_type) {
                          case "TK_TAG_START":
                              h.print_newline(!1, h.output), h.print_token(h.token_text), h.indent_content && (h.indent(), h.indent_content = !1), h.current_mode = "CONTENT";
                              break;
                          case "TK_TAG_STYLE":
                          case "TK_TAG_SCRIPT":
                              h.print_newline(!1, h.output), h.print_token(h.token_text), h.current_mode = "CONTENT";
                              break;
                          case "TK_TAG_END":
                              if ("TK_CONTENT" == h.last_token && "" === h.last_text) {
                                  var w = h.token_text.match(/\w+/)[0],
                                      x = null;
                                  h.output.length && (x = h.output[h.output.length - 1].match(/(?:<|{{#)\s*(\w+)/)), (null == x || x[1] != w && !h.Utils.in_array(x[1], n)) && h.print_newline(!1, h.output) }
                              h.print_token(h.token_text), h.current_mode = "CONTENT";
                              break;
                          case "TK_TAG_SINGLE":
                              var y = h.token_text.match(/^\s*<([a-z-]+)/i);
                              y && h.Utils.in_array(y[1], n) || h.print_newline(!1, h.output), h.print_token(h.token_text), h.current_mode = "CONTENT";
                              break;
                          case "TK_TAG_HANDLEBARS_ELSE":
                              h.print_token(h.token_text), h.indent_content && (h.indent(), h.indent_content = !1), h.current_mode = "CONTENT";
                              break;
                          case "TK_TAG_HANDLEBARS_COMMENT":
                              h.print_token(h.token_text), h.current_mode = "TAG";
                              break;
                          case "TK_CONTENT":
                              h.print_token(h.token_text), h.current_mode = "TAG";
                              break;
                          case "TK_STYLE":
                          case "TK_SCRIPT":
                              if ("" !== h.token_text) { h.print_newline(!1, h.output);
                                  var z, A = h.token_text,
                                      B = 1; "TK_SCRIPT" == h.token_type ? z = "function" == typeof f && f : "TK_STYLE" == h.token_type && (z = "function" == typeof b && b), "keep" == c.indent_scripts ? B = 0 : "separate" == c.indent_scripts && (B = -h.indent_level);
                                  var C = h.get_full_indent(B);
                                  if (z) A = z(A.replace(/^\s*/, C), c);
                                  else {
                                      var D = A.match(/^\s*/)[0],
                                          E = D.match(/[^\n\r]*$/)[0].split(h.indent_string).length - 1,
                                          F = h.get_full_indent(B - E);
                                      A = A.replace(/^\s*/, C).replace(/\r\n|\r|\n/g, "\n" + F).replace(/\s+$/, "") }
                                  A && (h.print_token_raw(A), h.print_newline(!0, h.output)) }
                              h.current_mode = "TAG";
                              break;
                          default:
                              "" !== h.token_text && h.print_token(h.token_text) }
                      h.last_token = h.token_type, h.last_text = h.token_text }
                  var G = h.output.join("").replace(/[\r\n\t ]+$/, "");
                  return t && (G += "\n"), G }
  
              function b(a, b) {
                  function c() {
                      return v = a.charAt(++x), v || "" }
  
                  function d(b) {
                      var d = "",
                          e = x;
                      return b && g(), d = a.charAt(x + 1) || "", x = e - 1, c(), d }
  
                  function e(b) {
                      for (var d = x; c();)
                          if ("\\" === v) c();
                          else {
                              if (-1 !== b.indexOf(v)) break;
                              if ("\n" === v) break }
                      return a.substring(d, x + 1) }
  
                  function f(a) {
                      var b = x,
                          d = e(a);
                      return x = b - 1, c(), d }
  
                  function g() {
                      for (var a = ""; w.test(d());) c(), a += v;
                      return a }
  
                  function h() {
                      var a = "";
                      for (v && w.test(v) && (a = v); w.test(c());) a += v;
                      return a }
  
                  function i(b) {
                      var e = x;
                      for (b = "/" === d(), c(); c();) {
                          if (!b && "*" === v && "/" === d()) { c();
                              break }
                          if (b && "\n" === v) return a.substring(e, x) }
                      return a.substring(e, x) + v }
  
                  function j(b) {
                      return a.substring(x - b.length, x).toLowerCase() === b }
  
                  function k() {
                      for (var b = 0, c = x + 1; c < a.length; c++) {
                          var d = a.charAt(c);
                          if ("{" === d) return !0;
                          if ("(" === d) b += 1;
                          else if (")" === d) {
                              if (0 == b) return !1;
                              b -= 1 } else if (";" === d || "}" === d) return !1 }
                      return !1 }
  
                  function l() { B++, z += A }
  
                  function m() { B--, z = z.slice(0, -p) }
                  var n = { "@page": !0, "@font-face": !0, "@keyframes": !0, "@media": !0, "@supports": !0, "@document": !0 },
                      o = { "@media": !0, "@supports": !0, "@document": !0 };
                  b = b || {}, a = a || "", a = a.replace(/\r\n|[\r\u2028\u2029]/g, "\n");
                  var p = b.indent_size || 4,
                      q = b.indent_char || " ",
                      r = void 0 === b.selector_separator_newline ? !0 : b.selector_separator_newline,
                      s = void 0 === b.end_with_newline ? !1 : b.end_with_newline,
                      t = void 0 === b.newline_between_rules ? !0 : b.newline_between_rules,
                      u = b.eol ? b.eol : "\n"; "string" == typeof p && (p = parseInt(p, 10)), b.indent_with_tabs && (q = "	", p = 1), u = u.replace(/\\r/, "\r").replace(/\\n/, "\n");
                  var v, w = /^\s+$/,
                      x = -1,
                      y = 0,
                      z = a.match(/^[\t ]*/)[0],
                      A = new Array(p + 1).join(q),
                      B = 0,
                      C = 0,
                      D = {};
                  D["{"] = function(a) { D.singleSpace(), E.push(a), D.newLine() }, D["}"] = function(a) { D.newLine(), E.push(a), D.newLine() }, D._lastCharWhitespace = function() {
                      return w.test(E[E.length - 1]) }, D.newLine = function(a) { E.length && (a || "\n" === E[E.length - 1] || D.trim(), E.push("\n"), z && E.push(z)) }, D.singleSpace = function() { E.length && !D._lastCharWhitespace() && E.push(" ") }, D.preserveSingleSpace = function() { L && D.singleSpace() }, D.trim = function() {
                      for (; D._lastCharWhitespace();) E.pop() };
                  for (var E = [], F = !1, G = !1, H = !1, I = "", J = "";;) {
                      var K = h(),
                          L = "" !== K,
                          M = -1 !== K.indexOf("\n");
                      if (J = I, I = v, !v) break;
                      if ("/" === v && "*" === d()) {
                          var N = 0 === B;
                          (M || N) && D.newLine(), E.push(i()), D.newLine(), N && D.newLine(!0) } else if ("/" === v && "/" === d()) M || "{" === J || D.trim(), D.singleSpace(), E.push(i()), D.newLine();
                      else if ("@" === v) { D.preserveSingleSpace(), E.push(v);
                          var O = f(": ,;{}()[]/='\"");
                          O.match(/[ :]$/) && (c(), O = e(": ").replace(/\s$/, ""), E.push(O), D.singleSpace()), O = O.replace(/\s$/, ""), O in n && (C += 1, O in o && (H = !0)) } else "#" === v && "{" === d() ? (D.preserveSingleSpace(), E.push(e("}"))) : "{" === v ? "}" === d(!0) ? (g(), c(), D.singleSpace(), E.push("{}"), D.newLine(), t && 0 === B && D.newLine(!0)) : (l(), D["{"](v), H ? (H = !1, F = B > C) : F = B >= C) : "}" === v ? (m(), D["}"](v), F = !1, G = !1, C && C--, t && 0 === B && D.newLine(!0)) : ":" === v ? (g(), !F && !H || j("&") || k() ? ":" === d() ? (c(), E.push("::")) : E.push(":") : (G = !0, E.push(":"), D.singleSpace())) : '"' === v || "'" === v ? (D.preserveSingleSpace(), E.push(e(v))) : ";" === v ? (G = !1, E.push(v), D.newLine()) : "(" === v ? j("url") ? (E.push(v), g(), c() && (")" !== v && '"' !== v && "'" !== v ? E.push(e(")")) : x--)) : (y++, D.preserveSingleSpace(), E.push(v), g()) : ")" === v ? (E.push(v), y--) : "," === v ? (E.push(v), g(), r && !G && 1 > y ? D.newLine() : D.singleSpace()) : "]" === v ? E.push(v) : "[" === v ? (D.preserveSingleSpace(), E.push(v)) : "=" === v ? (g(), v = "=", E.push(v)) : (D.preserveSingleSpace(), E.push(v)) }
                  var P = "";
                  return z && (P += z), P += E.join("").replace(/[\r\n\t ]+$/, ""), s && (P += "\n"), "\n" != u && (P = P.replace(/[\n]/g, u)), P }
  
              function c(a, b) {
                  for (var c = 0; c < b.length; c += 1)
                      if (b[c] === a) return !0;
                  return !1 }
  
              function d(a) {
                  return a.replace(/^\s+|\s+$/g, "") }
  
              function e(a) {
                  return a.replace(/^\s+/g, "") }
  
              function f(a, b) {
                  var c = new g(a, b);
                  return c.beautify() }
  
              function g(a, b) {
                  function f(a, b) {
                      var c = 0;
                      a && (c = a.indentation_level, !R.just_added_newline() && a.line_indent_level > c && (c = a.line_indent_level));
                      var d = { mode: b, parent: a, last_text: a ? a.last_text : "", last_word: a ? a.last_word : "", declaration_statement: !1, declaration_assignment: !1, multiline_frame: !1, if_block: !1, else_block: !1, do_block: !1, do_while: !1, in_case_statement: !1, in_case: !1, case_body: !1, indentation_level: c, line_indent_level: a ? a.line_indent_level : c, start_line_index: R.get_line_number(), ternary_depth: 0 };
                      return d }
  
                  function g(a) {
                      var b = a.newlines,
                          c = ba.keep_array_indentation && t(Y.mode);
                      if (c)
                          for (d = 0; b > d; d += 1) n(d > 0);
                      else if (ba.max_preserve_newlines && b > ba.max_preserve_newlines && (b = ba.max_preserve_newlines), ba.preserve_newlines && a.newlines > 1) { n();
                          for (var d = 1; b > d; d += 1) n(!0) }
                      U = a, aa[U.type]() }
  
                  function h(a) {
                      a = a.replace(/\x0d/g, "");
                      for (var b = [], c = a.indexOf("\n"); - 1 !== c;) b.push(a.substring(0, c)), a = a.substring(c + 1), c = a.indexOf("\n");
                      return a.length && b.push(a),
                          b
                  }
  
                  function m(a) {
                      if (a = void 0 === a ? !1 : a, !R.just_added_newline())
                          if (ba.preserve_newlines && U.wanted_newline || a) n(!1, !0);
                          else if (ba.wrap_line_length) {
                          var b = R.current_line.get_character_count() + U.text.length + (R.space_before_token ? 1 : 0);
                          b >= ba.wrap_line_length && n(!1, !0) } }
  
                  function n(a, b) {
                      if (!b && ";" !== Y.last_text && "," !== Y.last_text && "=" !== Y.last_text && "TK_OPERATOR" !== V)
                          for (; Y.mode === l.Statement && !Y.if_block && !Y.do_block;) v();
                      R.add_new_line(a) && (Y.multiline_frame = !0) }
  
                  function o() { R.just_added_newline() && (ba.keep_array_indentation && t(Y.mode) && U.wanted_newline ? (R.current_line.push(U.whitespace_before), R.space_before_token = !1) : R.set_indent(Y.indentation_level) && (Y.line_indent_level = Y.indentation_level)) }
  
                  function p(a) {
                      return R.raw ? void R.add_raw_token(U) : (ba.comma_first && "TK_COMMA" === V && R.just_added_newline() && "," === R.previous_line.last() && (R.previous_line.pop(), o(), R.add_token(","), R.space_before_token = !0), a = a || U.text, o(), void R.add_token(a)) }
  
                  function q() { Y.indentation_level += 1 }
  
                  function r() { Y.indentation_level > 0 && (!Y.parent || Y.indentation_level > Y.parent.indentation_level) && (Y.indentation_level -= 1) }
  
                  function s(a) { Y ? ($.push(Y), Z = Y) : Z = f(null, a), Y = f(Z, a) }
  
                  function t(a) {
                      return a === l.ArrayLiteral }
  
                  function u(a) {
                      return c(a, [l.Expression, l.ForInitializer, l.Conditional]) }
  
                  function v() { $.length > 0 && (Z = Y, Y = $.pop(), Z.mode === l.Statement && R.remove_redundant_indentation(Z)) }
  
                  function w() {
                      return Y.parent.mode === l.ObjectLiteral && Y.mode === l.Statement && (":" === Y.last_text && 0 === Y.ternary_depth || "TK_RESERVED" === V && c(Y.last_text, ["get", "set"])) }
  
                  function x() {
                      return "TK_RESERVED" === V && c(Y.last_text, ["var", "let", "const"]) && "TK_WORD" === U.type || "TK_RESERVED" === V && "do" === Y.last_text || "TK_RESERVED" === V && "return" === Y.last_text && !U.wanted_newline || "TK_RESERVED" === V && "else" === Y.last_text && ("TK_RESERVED" !== U.type || "if" !== U.text) || "TK_END_EXPR" === V && (Z.mode === l.ForInitializer || Z.mode === l.Conditional) || "TK_WORD" === V && Y.mode === l.BlockStatement && !Y.in_case && "--" !== U.text && "++" !== U.text && "function" !== W && "TK_WORD" !== U.type && "TK_RESERVED" !== U.type || Y.mode === l.ObjectLiteral && (":" === Y.last_text && 0 === Y.ternary_depth || "TK_RESERVED" === V && c(Y.last_text, ["get", "set"])) ? (s(l.Statement), q(), "TK_RESERVED" === V && c(Y.last_text, ["var", "let", "const"]) && "TK_WORD" === U.type && (Y.declaration_statement = !0), w() || m("TK_RESERVED" === U.type && c(U.text, ["do", "for", "if", "while"])), !0) : !1 }
  
                  function y(a, b) {
                      for (var c = 0; c < a.length; c++) {
                          var e = d(a[c]);
                          if (e.charAt(0) !== b) return !1 }
                      return !0 }
  
                  function z(a, b) {
                      for (var c, d = 0, e = a.length; e > d; d++)
                          if (c = a[d], c && 0 !== c.indexOf(b)) return !1;
                      return !0 }
  
                  function A(a) {
                      return c(a, ["case", "return", "do", "if", "throw", "else"]) }
  
                  function B(a) {
                      var b = S + (a || 0);
                      return 0 > b || b >= ca.length ? null : ca[b] }
  
                  function C() { x();
                      var a = l.Expression;
                      if ("[" === U.text) {
                          if ("TK_WORD" === V || ")" === Y.last_text) return "TK_RESERVED" === V && c(Y.last_text, T.line_starters) && (R.space_before_token = !0), s(a), p(), q(), void(ba.space_in_paren && (R.space_before_token = !0));
                          a = l.ArrayLiteral, t(Y.mode) && ("[" === Y.last_text || "," === Y.last_text && ("]" === W || "}" === W)) && (ba.keep_array_indentation || n()) } else "TK_RESERVED" === V && "for" === Y.last_text ? a = l.ForInitializer : "TK_RESERVED" === V && c(Y.last_text, ["if", "while"]) && (a = l.Conditional); ";" === Y.last_text || "TK_START_BLOCK" === V ? n() : "TK_END_EXPR" === V || "TK_START_EXPR" === V || "TK_END_BLOCK" === V || "." === Y.last_text ? m(U.wanted_newline) : "TK_RESERVED" === V && "(" === U.text || "TK_WORD" === V || "TK_OPERATOR" === V ? "TK_RESERVED" === V && ("function" === Y.last_word || "typeof" === Y.last_word) || "*" === Y.last_text && "function" === W ? ba.space_after_anon_function && (R.space_before_token = !0) : "TK_RESERVED" !== V || !c(Y.last_text, T.line_starters) && "catch" !== Y.last_text || ba.space_before_conditional && (R.space_before_token = !0) : R.space_before_token = !0, "(" === U.text && "TK_RESERVED" === V && "await" === Y.last_word && (R.space_before_token = !0), "(" === U.text && ("TK_EQUALS" === V || "TK_OPERATOR" === V) && (w() || m()), s(a), p(), ba.space_in_paren && (R.space_before_token = !0), q() }
  
                  function D() {
                      for (; Y.mode === l.Statement;) v();
                      Y.multiline_frame && m("]" === U.text && t(Y.mode) && !ba.keep_array_indentation), ba.space_in_paren && ("TK_START_EXPR" !== V || ba.space_in_empty_paren ? R.space_before_token = !0 : (R.trim(), R.space_before_token = !1)), "]" === U.text && ba.keep_array_indentation ? (p(), v()) : (v(), p()), R.remove_redundant_indentation(Z), Y.do_while && Z.mode === l.Conditional && (Z.mode = l.Expression, Y.do_block = !1, Y.do_while = !1) }
  
                  function E() {
                      var a = B(1),
                          b = B(2);
                      s(b && (":" === b.text && c(a.type, ["TK_STRING", "TK_WORD", "TK_RESERVED"]) || c(a.text, ["get", "set"]) && c(b.type, ["TK_WORD", "TK_RESERVED"])) ? c(W, ["class", "interface"]) ? l.BlockStatement : l.ObjectLiteral : l.BlockStatement);
                      var d = !a.comments_before.length && "}" === a.text,
                          e = d && "function" === Y.last_word && "TK_END_EXPR" === V; "expand" === ba.brace_style || "none" === ba.brace_style && U.wanted_newline ? "TK_OPERATOR" !== V && (e || "TK_EQUALS" === V || "TK_RESERVED" === V && A(Y.last_text) && "else" !== Y.last_text) ? R.space_before_token = !0 : n(!1, !0) : "TK_OPERATOR" !== V && "TK_START_EXPR" !== V ? "TK_START_BLOCK" === V ? n() : R.space_before_token = !0 : t(Z.mode) && "," === Y.last_text && ("}" === W ? R.space_before_token = !0 : n()), p(), q() }
  
                  function F() {
                      for (; Y.mode === l.Statement;) v();
                      var a = "TK_START_BLOCK" === V; "expand" === ba.brace_style ? a || n() : a || (t(Y.mode) && ba.keep_array_indentation ? (ba.keep_array_indentation = !1, n(), ba.keep_array_indentation = !0) : n()), v(), p() }
  
                  function G() {
                      if ("TK_RESERVED" === U.type && Y.mode !== l.ObjectLiteral && c(U.text, ["set", "get"]) && (U.type = "TK_WORD"), "TK_RESERVED" === U.type && Y.mode === l.ObjectLiteral) {
                          var a = B(1); ":" == a.text && (U.type = "TK_WORD") }
                      if (x() || !U.wanted_newline || u(Y.mode) || "TK_OPERATOR" === V && "--" !== Y.last_text && "++" !== Y.last_text || "TK_EQUALS" === V || !ba.preserve_newlines && "TK_RESERVED" === V && c(Y.last_text, ["var", "let", "const", "set", "get"]) || n(), Y.do_block && !Y.do_while) {
                          if ("TK_RESERVED" === U.type && "while" === U.text) return R.space_before_token = !0, p(), R.space_before_token = !0, void(Y.do_while = !0);
                          n(), Y.do_block = !1 }
                      if (Y.if_block)
                          if (Y.else_block || "TK_RESERVED" !== U.type || "else" !== U.text) {
                              for (; Y.mode === l.Statement;) v();
                              Y.if_block = !1, Y.else_block = !1 } else Y.else_block = !0;
                      if ("TK_RESERVED" === U.type && ("case" === U.text || "default" === U.text && Y.in_case_statement)) return n(), (Y.case_body || ba.jslint_happy) && (r(), Y.case_body = !1), p(), Y.in_case = !0, void(Y.in_case_statement = !0);
                      if ("TK_RESERVED" === U.type && "function" === U.text && ((c(Y.last_text, ["}", ";"]) || R.just_added_newline() && !c(Y.last_text, ["[", "{", ":", "=", ","])) && (R.just_added_blankline() || U.comments_before.length || (n(), n(!0))), "TK_RESERVED" === V || "TK_WORD" === V ? "TK_RESERVED" === V && c(Y.last_text, ["get", "set", "new", "return", "export", "async"]) ? R.space_before_token = !0 : "TK_RESERVED" === V && "default" === Y.last_text && "export" === W ? R.space_before_token = !0 : n() : "TK_OPERATOR" === V || "=" === Y.last_text ? R.space_before_token = !0 : (Y.multiline_frame || !u(Y.mode) && !t(Y.mode)) && n()), ("TK_COMMA" === V || "TK_START_EXPR" === V || "TK_EQUALS" === V || "TK_OPERATOR" === V) && (w() || m()), "TK_RESERVED" === U.type && c(U.text, ["function", "get", "set"])) return p(), void(Y.last_word = U.text);
                      if (_ = "NONE", "TK_END_BLOCK" === V ? "TK_RESERVED" === U.type && c(U.text, ["else", "catch", "finally"]) ? "expand" === ba.brace_style || "end-expand" === ba.brace_style || "none" === ba.brace_style && U.wanted_newline ? _ = "NEWLINE" : (_ = "SPACE", R.space_before_token = !0) : _ = "NEWLINE" : "TK_SEMICOLON" === V && Y.mode === l.BlockStatement ? _ = "NEWLINE" : "TK_SEMICOLON" === V && u(Y.mode) ? _ = "SPACE" : "TK_STRING" === V ? _ = "NEWLINE" : "TK_RESERVED" === V || "TK_WORD" === V || "*" === Y.last_text && "function" === W ? _ = "SPACE" : "TK_START_BLOCK" === V ? _ = "NEWLINE" : "TK_END_EXPR" === V && (R.space_before_token = !0, _ = "NEWLINE"), "TK_RESERVED" === U.type && c(U.text, T.line_starters) && ")" !== Y.last_text && (_ = "else" === Y.last_text || "export" === Y.last_text ? "SPACE" : "NEWLINE"), "TK_RESERVED" === U.type && c(U.text, ["else", "catch", "finally"]))
                          if ("TK_END_BLOCK" !== V || "expand" === ba.brace_style || "end-expand" === ba.brace_style || "none" === ba.brace_style && U.wanted_newline) n();
                          else { R.trim(!0);
                              var b = R.current_line; "}" !== b.last() && n(), R.space_before_token = !0 }
                      else "NEWLINE" === _ ? "TK_RESERVED" === V && A(Y.last_text) ? R.space_before_token = !0 : "TK_END_EXPR" !== V ? "TK_START_EXPR" === V && "TK_RESERVED" === U.type && c(U.text, ["var", "let", "const"]) || ":" === Y.last_text || ("TK_RESERVED" === U.type && "if" === U.text && "else" === Y.last_text ? R.space_before_token = !0 : n()) : "TK_RESERVED" === U.type && c(U.text, T.line_starters) && ")" !== Y.last_text && n() : Y.multiline_frame && t(Y.mode) && "," === Y.last_text && "}" === W ? n() : "SPACE" === _ && (R.space_before_token = !0);
                      p(), Y.last_word = U.text, "TK_RESERVED" === U.type && "do" === U.text && (Y.do_block = !0), "TK_RESERVED" === U.type && "if" === U.text && (Y.if_block = !0) }
  
                  function H() {
                      for (x() && (R.space_before_token = !1); Y.mode === l.Statement && !Y.if_block && !Y.do_block;) v();
                      p() }
  
                  function I() { x() ? R.space_before_token = !0 : "TK_RESERVED" === V || "TK_WORD" === V ? R.space_before_token = !0 : "TK_COMMA" === V || "TK_START_EXPR" === V || "TK_EQUALS" === V || "TK_OPERATOR" === V ? w() || m() : n(), p() }
  
                  function J() { x(), Y.declaration_statement && (Y.declaration_assignment = !0), R.space_before_token = !0, p(), R.space_before_token = !0 }
  
                  function K() {
                      return Y.declaration_statement ? (u(Y.parent.mode) && (Y.declaration_assignment = !1), p(), void(Y.declaration_assignment ? (Y.declaration_assignment = !1, n(!1, !0)) : (R.space_before_token = !0, ba.comma_first && m()))) : (p(), void(Y.mode === l.ObjectLiteral || Y.mode === l.Statement && Y.parent.mode === l.ObjectLiteral ? (Y.mode === l.Statement && v(), n()) : (R.space_before_token = !0, ba.comma_first && m()))) }
  
                  function L() {
                      if (x(), "TK_RESERVED" === V && A(Y.last_text)) return R.space_before_token = !0, void p();
                      if ("*" === U.text && "TK_DOT" === V) return void p();
                      if (":" === U.text && Y.in_case) return Y.case_body = !0, q(), p(), n(), void(Y.in_case = !1);
                      if ("::" === U.text) return void p(); "TK_OPERATOR" === V && m();
                      var a = !0,
                          b = !0;
                      c(U.text, ["--", "++", "!", "~"]) || c(U.text, ["-", "+"]) && (c(V, ["TK_START_BLOCK", "TK_START_EXPR", "TK_EQUALS", "TK_OPERATOR"]) || c(Y.last_text, T.line_starters) || "," === Y.last_text) ? (a = !1, b = !1, !U.wanted_newline || "--" !== U.text && "++" !== U.text || n(!1, !0), ";" === Y.last_text && u(Y.mode) && (a = !0), "TK_RESERVED" === V ? a = !0 : "TK_END_EXPR" === V ? a = !("]" === Y.last_text && ("--" === U.text || "++" === U.text)) : "TK_OPERATOR" === V && (a = c(U.text, ["--", "-", "++", "+"]) && c(Y.last_text, ["--", "-", "++", "+"]), c(U.text, ["+", "-"]) && c(Y.last_text, ["--", "++"]) && (b = !0)), Y.mode !== l.BlockStatement && Y.mode !== l.Statement || "{" !== Y.last_text && ";" !== Y.last_text || n()) : ":" === U.text ? 0 === Y.ternary_depth ? a = !1 : Y.ternary_depth -= 1 : "?" === U.text ? Y.ternary_depth += 1 : "*" === U.text && "TK_RESERVED" === V && "function" === Y.last_text && (a = !1, b = !1), R.space_before_token = R.space_before_token || a, p(), R.space_before_token = b }
  
                  function M() {
                      if (R.raw) return R.add_raw_token(U), void(U.directives && "end" === U.directives.preserve && (ba.test_output_raw || (R.raw = !1)));
                      if (U.directives) return n(!1, !0), p(), "start" === U.directives.preserve && (R.raw = !0), void n(!1, !0);
                      if (!k.newline.test(U.text) && !U.wanted_newline) return R.space_before_token = !0, p(), void(R.space_before_token = !0);
                      var a, b = h(U.text),
                          c = !1,
                          d = !1,
                          f = U.whitespace_before,
                          g = f.length;
                      for (n(!1, !0), b.length > 1 && (y(b.slice(1), "*") ? c = !0 : z(b.slice(1), f) && (d = !0)), p(b[0]), a = 1; a < b.length; a++) n(!1, !0), c ? p(" " + e(b[a])) : d && b[a].length > g ? p(b[a].substring(g)) : R.add_token(b[a]);
                      n(!1, !0) }
  
                  function N() { U.wanted_newline ? n(!1, !0) : R.trim(!0), R.space_before_token = !0, p(), n(!1, !0) }
  
                  function O() { x(), "TK_RESERVED" === V && A(Y.last_text) ? R.space_before_token = !0 : m(")" === Y.last_text && ba.break_chained_methods), p() }
  
                  function P() { p(), "\n" === U.text[U.text.length - 1] && n() }
  
                  function Q() {
                      for (; Y.mode === l.Statement;) v() }
                  var R, S, T, U, V, W, X, Y, Z, $, _, aa, ba, ca = [],
                      da = "";
                  for (aa = { TK_START_EXPR: C, TK_END_EXPR: D, TK_START_BLOCK: E, TK_END_BLOCK: F, TK_WORD: G, TK_RESERVED: G, TK_SEMICOLON: H, TK_STRING: I, TK_EQUALS: J, TK_OPERATOR: L, TK_COMMA: K, TK_BLOCK_COMMENT: M, TK_COMMENT: N, TK_DOT: O, TK_UNKNOWN: P, TK_EOF: Q }, b = b ? b : {}, ba = {}, void 0 !== b.braces_on_own_line && (ba.brace_style = b.braces_on_own_line ? "expand" : "collapse"), ba.brace_style = b.brace_style ? b.brace_style : ba.brace_style ? ba.brace_style : "collapse", "expand-strict" === ba.brace_style && (ba.brace_style = "expand"), ba.indent_size = b.indent_size ? parseInt(b.indent_size, 10) : 4, ba.indent_char = b.indent_char ? b.indent_char : " ", ba.eol = b.eol ? b.eol : "\n", ba.preserve_newlines = void 0 === b.preserve_newlines ? !0 : b.preserve_newlines, ba.break_chained_methods = void 0 === b.break_chained_methods ? !1 : b.break_chained_methods, ba.max_preserve_newlines = void 0 === b.max_preserve_newlines ? 0 : parseInt(b.max_preserve_newlines, 10), ba.space_in_paren = void 0 === b.space_in_paren ? !1 : b.space_in_paren, ba.space_in_empty_paren = void 0 === b.space_in_empty_paren ? !1 : b.space_in_empty_paren, ba.jslint_happy = void 0 === b.jslint_happy ? !1 : b.jslint_happy, ba.space_after_anon_function = void 0 === b.space_after_anon_function ? !1 : b.space_after_anon_function, ba.keep_array_indentation = void 0 === b.keep_array_indentation ? !1 : b.keep_array_indentation, ba.space_before_conditional = void 0 === b.space_before_conditional ? !0 : b.space_before_conditional, ba.unescape_strings = void 0 === b.unescape_strings ? !1 : b.unescape_strings, ba.wrap_line_length = void 0 === b.wrap_line_length ? 0 : parseInt(b.wrap_line_length, 10), ba.e4x = void 0 === b.e4x ? !1 : b.e4x, ba.end_with_newline = void 0 === b.end_with_newline ? !1 : b.end_with_newline, ba.comma_first = void 0 === b.comma_first ? !1 : b.comma_first, ba.test_output_raw = void 0 === b.test_output_raw ? !1 : b.test_output_raw, ba.jslint_happy && (ba.space_after_anon_function = !0), b.indent_with_tabs && (ba.indent_char = "	", ba.indent_size = 1), ba.eol = ba.eol.replace(/\\r/, "\r").replace(/\\n/, "\n"), X = ""; ba.indent_size > 0;) X += ba.indent_char, ba.indent_size -= 1;
                  var ea = 0;
                  if (a && a.length) {
                      for (;
                          " " === a.charAt(ea) || "	" === a.charAt(ea);) da += a.charAt(ea), ea += 1;
                      a = a.substring(ea) }
                  V = "TK_START_BLOCK", W = "", R = new i(X, da), R.raw = ba.test_output_raw, $ = [], s(l.BlockStatement), this.beautify = function() {
                      var b, c;
                      for (T = new j(a, ba, X), ca = T.tokenize(), S = 0; b = B();) {
                          for (var d = 0; d < b.comments_before.length; d++) g(b.comments_before[d]);
                          g(b), W = Y.last_text, V = b.type, Y.last_text = b.text, S += 1 }
                      return c = R.get_code(), ba.end_with_newline && (c += "\n"), "\n" != ba.eol && (c = c.replace(/[\n]/g, ba.eol)), c }
              }
  
              function h(a) {
                  var b = 0,
                      c = -1,
                      d = [],
                      e = !0;
                  this.set_indent = function(d) { b = a.baseIndentLength + d * a.indent_length, c = d }, this.get_character_count = function() {
                      return b }, this.is_empty = function() {
                      return e }, this.last = function() {
                      return this._empty ? null : d[d.length - 1] }, this.push = function(a) { d.push(a), b += a.length, e = !1 }, this.pop = function() {
                      var a = null;
                      return e || (a = d.pop(), b -= a.length, e = 0 === d.length), a }, this.remove_indent = function() { c > 0 && (c -= 1, b -= a.indent_length) }, this.trim = function() {
                      for (;
                          " " === this.last();) { d.pop();
                          b -= 1 }
                      e = 0 === d.length }, this.toString = function() {
                      var b = "";
                      return this._empty || (c >= 0 && (b = a.indent_cache[c]), b += d.join("")), b } }
  
              function i(a, b) { b = b || "", this.indent_cache = [b], this.baseIndentLength = b.length, this.indent_length = a.length, this.raw = !1;
                  var c = [];
                  this.baseIndentString = b, this.indent_string = a, this.previous_line = null, this.current_line = null, this.space_before_token = !1, this.add_outputline = function() { this.previous_line = this.current_line, this.current_line = new h(this), c.push(this.current_line) }, this.add_outputline(), this.get_line_number = function() {
                      return c.length }, this.add_new_line = function(a) {
                      return 1 === this.get_line_number() && this.just_added_newline() ? !1 : a || !this.just_added_newline() ? (this.raw || this.add_outputline(), !0) : !1 }, this.get_code = function() {
                      var a = c.join("\n").replace(/[\r\n\t ]+$/, "");
                      return a }, this.set_indent = function(a) {
                      if (c.length > 1) {
                          for (; a >= this.indent_cache.length;) this.indent_cache.push(this.indent_cache[this.indent_cache.length - 1] + this.indent_string);
                          return this.current_line.set_indent(a), !0 }
                      return this.current_line.set_indent(0), !1 }, this.add_raw_token = function(a) {
                      for (var b = 0; b < a.newlines; b++) this.add_outputline();
                      this.current_line.push(a.whitespace_before), this.current_line.push(a.text), this.space_before_token = !1 }, this.add_token = function(a) { this.add_space_before_token(), this.current_line.push(a) }, this.add_space_before_token = function() { this.space_before_token && !this.just_added_newline() && this.current_line.push(" "), this.space_before_token = !1 }, this.remove_redundant_indentation = function(a) {
                      if (!a.multiline_frame && a.mode !== l.ForInitializer && a.mode !== l.Conditional)
                          for (var b = a.start_line_index, d = c.length; d > b;) c[b].remove_indent(), b++ }, this.trim = function(d) {
                      for (d = void 0 === d ? !1 : d, this.current_line.trim(a, b); d && c.length > 1 && this.current_line.is_empty();) c.pop(), this.current_line = c[c.length - 1], this.current_line.trim();
                      this.previous_line = c.length > 1 ? c[c.length - 2] : null }, this.just_added_newline = function() {
                      return this.current_line.is_empty() }, this.just_added_blankline = function() {
                      if (this.just_added_newline()) {
                          if (1 === c.length) return !0;
                          var a = c[c.length - 2];
                          return a.is_empty() }
                      return !1 } }
  
              function j(a, b, e) {
                  function f(a) {
                      if (!a.match(y)) return null;
                      var b = {};
                      z.lastIndex = 0;
                      for (var c = z.exec(a); c;) b[c[1]] = c[2], c = z.exec(a);
                      return b }
  
                  function g() {
                      var e, g = [];
                      if (p = 0, q = "", t >= u) return ["", "TK_EOF"];
                      var y;
                      y = s.length ? s[s.length - 1] : new m("TK_START_BLOCK", "{");
                      var z = a.charAt(t);
                      for (t += 1; c(z, i);) {
                          if (k.newline.test(z) ? ("\n" !== z || "\r" !== a.charAt(t - 2)) && (p += 1, g = []) : g.push(z), t >= u) return ["", "TK_EOF"];
                          z = a.charAt(t), t += 1 }
                      if (g.length && (q = g.join("")), j.test(z)) {
                          var C = !0,
                              D = !0,
                              E = j;
                          for ("0" === z && u > t && /[Xxo]/.test(a.charAt(t)) ? (C = !1, D = !1, z += a.charAt(t), t += 1, E = /[o]/.test(a.charAt(t)) ? l : n) : (z = "", t -= 1); u > t && E.test(a.charAt(t));) z += a.charAt(t), t += 1, C && u > t && "." === a.charAt(t) && (z += a.charAt(t), t += 1, C = !1), D && u > t && /[Ee]/.test(a.charAt(t)) && (z += a.charAt(t), t += 1, u > t && /[+-]/.test(a.charAt(t)) && (z += a.charAt(t), t += 1), D = !1, C = !1);
                          return [z, "TK_WORD"] }
                      if (k.isIdentifierStart(a.charCodeAt(t - 1))) {
                          if (u > t)
                              for (; k.isIdentifierChar(a.charCodeAt(t)) && (z += a.charAt(t), t += 1, t !== u););
                          return "TK_DOT" === y.type || "TK_RESERVED" === y.type && c(y.text, ["set", "get"]) || !c(z, v) ? [z, "TK_WORD"] : "in" === z ? [z, "TK_OPERATOR"] : [z, "TK_RESERVED"] }
                      if ("(" === z || "[" === z) return [z, "TK_START_EXPR"];
                      if (")" === z || "]" === z) return [z, "TK_END_EXPR"];
                      if ("{" === z) return [z, "TK_START_BLOCK"];
                      if ("}" === z) return [z, "TK_END_BLOCK"];
                      if (";" === z) return [z, "TK_SEMICOLON"];
                      if ("/" === z) {
                          var F = "";
                          if ("*" === a.charAt(t)) { t += 1, w.lastIndex = t;
                              var G = w.exec(a);
                              F = "/*" + G[0], t += G[0].length;
                              var H = f(F);
                              return H && "start" === H.ignore && (A.lastIndex = t, G = A.exec(a), F += G[0], t += G[0].length), F = F.replace(k.lineBreak, "\n"), [F, "TK_BLOCK_COMMENT", H] }
                          if ("/" === a.charAt(t)) { t += 1, x.lastIndex = t;
                              var G = x.exec(a);
                              return F = "//" + G[0], t += G[0].length, [F, "TK_COMMENT"] } }
                      if ("`" === z || "'" === z || '"' === z || ("/" === z || b.e4x && "<" === z && a.slice(t - 1).match(/^<([-a-zA-Z:0-9_.]+|{[^{}]*}|!\[CDATA\[[\s\S]*?\]\])(\s+[-a-zA-Z:0-9_.]+\s*=\s*('[^']*'|"[^"]*"|{.*?}))*\s*(\/?)\s*>/)) && ("TK_RESERVED" === y.type && c(y.text, ["return", "case", "throw", "else", "do", "typeof", "yield"]) || "TK_END_EXPR" === y.type && ")" === y.text && y.parent && "TK_RESERVED" === y.parent.type && c(y.parent.text, ["if", "while", "for"]) || c(y.type, ["TK_COMMENT", "TK_START_EXPR", "TK_START_BLOCK", "TK_END_BLOCK", "TK_OPERATOR", "TK_EQUALS", "TK_EOF", "TK_SEMICOLON", "TK_COMMA"]))) {
                          var I = z,
                              J = !1,
                              K = !1;
                          if (e = z, "/" === I)
                              for (var L = !1; u > t && (J || L || a.charAt(t) !== I) && !k.newline.test(a.charAt(t));) e += a.charAt(t), J ? J = !1 : (J = "\\" === a.charAt(t), "[" === a.charAt(t) ? L = !0 : "]" === a.charAt(t) && (L = !1)), t += 1;
                          else if (b.e4x && "<" === I) {
                              var M = /<(\/?)([-a-zA-Z:0-9_.]+|{[^{}]*}|!\[CDATA\[[\s\S]*?\]\])(\s+[-a-zA-Z:0-9_.]+\s*=\s*('[^']*'|"[^"]*"|{.*?}))*\s*(\/?)\s*>/g,
                                  N = a.slice(t - 1),
                                  O = M.exec(N);
                              if (O && 0 === O.index) {
                                  for (var P = O[2], Q = 0; O;) {
                                      var R = !!O[1],
                                          S = O[2],
                                          T = !!O[O.length - 1] || "![CDATA[" === S.slice(0, 8);
                                      if (S !== P || T || (R ? --Q : ++Q), 0 >= Q) break;
                                      O = M.exec(N) }
                                  var U = O ? O.index + O[0].length : N.length;
                                  return N = N.slice(0, U), t += U - 1, N = N.replace(k.lineBreak, "\n"), [N, "TK_STRING"] } } else
                              for (; u > t && (J || a.charAt(t) !== I && ("`" === I || !k.newline.test(a.charAt(t))));)(J || "`" === I) && k.newline.test(a.charAt(t)) ? ("\r" === a.charAt(t) && "\n" === a.charAt(t + 1) && (t += 1), e += "\n") : e += a.charAt(t), J ? (("x" === a.charAt(t) || "u" === a.charAt(t)) && (K = !0), J = !1) : J = "\\" === a.charAt(t), t += 1;
                          if (K && b.unescape_strings && (e = h(e)), u > t && a.charAt(t) === I && (e += I, t += 1, "/" === I))
                              for (; u > t && k.isIdentifierStart(a.charCodeAt(t));) e += a.charAt(t), t += 1;
                          return [e, "TK_STRING"] }
                      if ("#" === z) {
                          if (0 === s.length && "!" === a.charAt(t)) {
                              for (e = z; u > t && "\n" !== z;) z = a.charAt(t), e += z, t += 1;
                              return [d(e) + "\n", "TK_UNKNOWN"] }
                          var V = "#";
                          if (u > t && j.test(a.charAt(t))) { do z = a.charAt(t), V += z, t += 1; while (u > t && "#" !== z && "=" !== z);
                              return "#" === z || ("[" === a.charAt(t) && "]" === a.charAt(t + 1) ? (V += "[]", t += 2) : "{" === a.charAt(t) && "}" === a.charAt(t + 1) && (V += "{}", t += 2)), [V, "TK_WORD"] } }
                      if ("<" === z && ("?" === a.charAt(t) || "%" === a.charAt(t))) { B.lastIndex = t - 1;
                          var W = B.exec(a);
                          if (W) return z = W[0], t += z.length - 1, z = z.replace(k.lineBreak, "\n"), [z, "TK_STRING"] }
                      if ("<" === z && "<!--" === a.substring(t - 1, t + 3)) {
                          for (t += 3, z = "<!--"; !k.newline.test(a.charAt(t)) && u > t;) z += a.charAt(t), t++;
                          return r = !0, [z, "TK_COMMENT"] }
                      if ("-" === z && r && "-->" === a.substring(t - 1, t + 2)) return r = !1, t += 2, ["-->", "TK_COMMENT"];
                      if ("." === z) return [z, "TK_DOT"];
                      if (c(z, o)) {
                          for (; u > t && c(z + a.charAt(t), o) && (z += a.charAt(t), t += 1, !(t >= u)););
                          return "," === z ? [z, "TK_COMMA"] : "=" === z ? [z, "TK_EQUALS"] : [z, "TK_OPERATOR"] }
                      return [z, "TK_UNKNOWN"] }
  
                  function h(a) {
                      for (var b, c = !1, d = "", e = 0, f = "", g = 0; c || e < a.length;)
                          if (b = a.charAt(e), e++, c) {
                              if (c = !1, "x" === b) f = a.substr(e, 2), e += 2;
                              else {
                                  if ("u" !== b) { d += "\\" + b;
                                      continue }
                                  f = a.substr(e, 4), e += 4 }
                              if (!f.match(/^[0123456789abcdefABCDEF]+$/)) return a;
                              if (g = parseInt(f, 16), g >= 0 && 32 > g) { d += "x" === b ? "\\x" + f : "\\u" + f;
                                  continue }
                              if (34 === g || 39 === g || 92 === g) d += "\\" + String.fromCharCode(g);
                              else {
                                  if ("x" === b && g > 126 && 255 >= g) return a;
                                  d += String.fromCharCode(g) } } else "\\" === b ? c = !0 : d += b;
                      return d }
                  var i = "\n\r	 ".split(""),
                      j = /[0-9]/,
                      l = /[01234567]/,
                      n = /[0123456789abcdefABCDEF]/,
                      o = "+ - * / % & ++ -- = += -= *= /= %= == === != !== > < >= <= >> << >>> >>>= >>= <<= && &= | || ! ~ , : ? ^ ^= |= :: =>".split(" ");
                  this.line_starters = "continue,try,throw,return,var,let,const,if,switch,case,default,for,while,break,function,import,export".split(",");
                  var p, q, r, s, t, u, v = this.line_starters.concat(["do", "in", "else", "get", "set", "new", "catch", "finally", "typeof", "yield", "async", "await"]),
                      w = /([\s\S]*?)((?:\*\/)|$)/g,
                      x = /([^\n\r\u2028\u2029]*)/g,
                      y = /\/\* beautify( \w+[:]\w+)+ \*\//g,
                      z = / (\w+)[:](\w+)/g,
                      A = /([\s\S]*?)((?:\/\*\sbeautify\signore:end\s\*\/)|$)/g,
                      B = /((<\?php|<\?=)[\s\S]*?\?>)|(<%[\s\S]*?%>)/g;
                  this.tokenize = function() { u = a.length, t = 0, r = !1, s = [];
                      for (var b, c, d, e = null, f = [], h = []; !c || "TK_EOF" !== c.type;) {
                          for (d = g(), b = new m(d[1], d[0], p, q);
                              "TK_COMMENT" === b.type || "TK_BLOCK_COMMENT" === b.type || "TK_UNKNOWN" === b.type;) "TK_BLOCK_COMMENT" === b.type && (b.directives = d[2]), h.push(b), d = g(), b = new m(d[1], d[0], p, q);
                          h.length && (b.comments_before = h, h = []), "TK_START_BLOCK" === b.type || "TK_START_EXPR" === b.type ? (b.parent = c, f.push(e), e = b) : ("TK_END_BLOCK" === b.type || "TK_END_EXPR" === b.type) && e && ("]" === b.text && "[" === e.text || ")" === b.text && "(" === e.text || "}" === b.text && "{" === e.text) && (b.parent = e.parent, e = f.pop()), s.push(b), c = b }
                      return s } }
              var k = {};
              ! function(a) {
                  var b = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc",
                      c = "\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u0620-\u0649\u0672-\u06d3\u06e7-\u06e8\u06fb-\u06fc\u0730-\u074a\u0800-\u0814\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0840-\u0857\u08e4-\u08fe\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962-\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09d7\u09df-\u09e0\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2-\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5f-\u0b60\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62-\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2-\u0ce3\u0ce6-\u0cef\u0d02\u0d03\u0d46-\u0d48\u0d57\u0d62-\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e34-\u0e3a\u0e40-\u0e45\u0e50-\u0e59\u0eb4-\u0eb9\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f41-\u0f47\u0f71-\u0f84\u0f86-\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u1000-\u1029\u1040-\u1049\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u170e-\u1710\u1720-\u1730\u1740-\u1750\u1772\u1773\u1780-\u17b2\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u1920-\u192b\u1930-\u193b\u1951-\u196d\u19b0-\u19c0\u19c8-\u19c9\u19d0-\u19d9\u1a00-\u1a15\u1a20-\u1a53\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1b46-\u1b4b\u1b50-\u1b59\u1b6b-\u1b73\u1bb0-\u1bb9\u1be6-\u1bf3\u1c00-\u1c22\u1c40-\u1c49\u1c5b-\u1c7d\u1cd0-\u1cd2\u1d00-\u1dbe\u1e01-\u1f15\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2d81-\u2d96\u2de0-\u2dff\u3021-\u3028\u3099\u309a\ua640-\ua66d\ua674-\ua67d\ua69f\ua6f0-\ua6f1\ua7f8-\ua800\ua806\ua80b\ua823-\ua827\ua880-\ua881\ua8b4-\ua8c4\ua8d0-\ua8d9\ua8f3-\ua8f7\ua900-\ua909\ua926-\ua92d\ua930-\ua945\ua980-\ua983\ua9b3-\ua9c0\uaa00-\uaa27\uaa40-\uaa41\uaa4c-\uaa4d\uaa50-\uaa59\uaa7b\uaae0-\uaae9\uaaf2-\uaaf3\uabc0-\uabe1\uabec\uabed\uabf0-\uabf9\ufb20-\ufb28\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f",
                      d = new RegExp("[" + b + "]"),
                      e = new RegExp("[" + b + c + "]");
                  a.newline = /[\n\r\u2028\u2029]/, a.lineBreak = new RegExp("\r\n|" + a.newline.source), a.allLineBreaks = new RegExp(a.lineBreak.source, "g"), a.isIdentifierStart = function(a) {
                      return 65 > a ? 36 === a || 64 === a : 91 > a ? !0 : 97 > a ? 95 === a : 123 > a ? !0 : a >= 170 && d.test(String.fromCharCode(a)) }, a.isIdentifierChar = function(a) {
                      return 48 > a ? 36 === a : 58 > a ? !0 : 65 > a ? !1 : 91 > a ? !0 : 97 > a ? 95 === a : 123 > a ? !0 : a >= 170 && e.test(String.fromCharCode(a)) } }(k);
              var l = { BlockStatement: "BlockStatement", Statement: "Statement", ObjectLiteral: "ObjectLiteral", ArrayLiteral: "ArrayLiteral", ForInitializer: "ForInitializer", Conditional: "Conditional", Expression: "Expression" },
                  m = function(a, b, c, d, e, f) { this.type = a, this.text = b, this.comments_before = [], this.newlines = c || 0, this.wanted_newline = c > 0, this.whitespace_before = d || "", this.parent = null, this.directives = null };
              return { run: a }
          }, a.extend(a.FE.DEFAULTS, { codeMirror: !0, codeMirrorOptions: { lineNumbers: !0, tabMode: "indent", indentWithTabs: !0, lineWrapping: !0, mode: "text/html", tabSize: 2 } }), a.FE.PLUGINS.codeView = function(b) {
              function c() {
                  return b.$box.hasClass("fr-code-view") }
  
              function d() {
                  return l ? l.getValue() : k.val() }
  
              function e(a) {
                  var c = d();
                  b.html.set(c), b.$el.blur(), b.$tb.find(" > .fr-command").not(a).removeClass("fr-disabled"), a.removeClass("fr-active"), b.events.focus(!0), b.placeholder.refresh(), b.undo.saveStep() }
  
              function f(a, c) { k || i(), !l && b.opts.codeMirror && "undefined" != typeof CodeMirror && (l = CodeMirror.fromTextArea(k.get(0), b.opts.codeMirrorOptions)), b.undo.saveStep(), b.html.cleanEmptyTags(), b.html.cleanWhiteTags(!0), b.core.hasFocus() && (b.core.isEmpty() || (b.selection.save(), b.$el.find('.fr-marker[data-type="true"]:first').replaceWith('<span class="fr-tmp fr-sm">F</span>'), b.$el.find('.fr-marker[data-type="false"]:last').replaceWith('<span class="fr-tmp fr-em">F</span>')), b.$el.blur());
                  var d = b.html.get(!1, !0);
                  b.$el.find("span.fr-tmp").remove(), d = d.replace(/<span class="fr-tmp fr-sm">F<\/span>/, "FROALA-SM"), d = d.replace(/<span class="fr-tmp fr-em">F<\/span>/, "FROALA-EM"), b.codeBeautifier && (d = b.codeBeautifier.run(d, { end_with_newline: !0, indent_inner_html: !0, extra_liners: ["p", "h1", "h2", "h3", "h4", "h5", "h6", "blockquote", "pre", "ul", "ol", "table", "dl"], brace_style: "expand", indent_char: "	", indent_size: 1, wrap_line_length: 0 }));
                  var e, f;
                  if (l) { e = d.indexOf("FROALA-SM"), f = d.indexOf("FROALA-EM"), e > f ? e = f : f -= 9, d = d.replace(/FROALA-SM/g, "").replace(/FROALA-EM/g, "");
                      var g = d.substring(0, e).length - d.substring(0, e).replace(/\n/g, "").length,
                          h = d.substring(0, f).length - d.substring(0, f).replace(/\n/g, "").length;
                      e = d.substring(0, e).length - d.substring(0, d.substring(0, e).lastIndexOf("\n") + 1).length, f = d.substring(0, f).length - d.substring(0, d.substring(0, f).lastIndexOf("\n") + 1).length, l.setSize(null, Math.max(c, 150)), l.setValue(d), l.focus(), l.setSelection({ line: g, ch: e }, { line: h, ch: f }), l.refresh(), l.clearHistory() } else e = d.indexOf("FROALA-SM"), f = d.indexOf("FROALA-EM") - 9, k.css("height", c), (b.opts.height || b.opts.heightMax) && k.css("max-height", b.opts.height || b.opts.heightMax), k.val(d.replace(/FROALA-SM/g, "").replace(/FROALA-EM/g, "")), k.focus(), k.get(0).setSelectionRange(e, f);
                  b.$tb.find(" > .fr-command").not(a).addClass("fr-disabled"), a.addClass("fr-active"), !b.helpers.isMobile() && b.opts.toolbarInline && b.toolbar.hide() }
  
              function g(a) {
                  "undefined" == typeof a && (a = !c());
                  var d = b.$tb.find('.fr-command[data-cmd="html"]');
                  if (a) { b.popups.hideAll();
                      var g = b.$wp.outerHeight();
                      b.$box.toggleClass("fr-code-view", !0), f(d, g) } else b.$box.toggleClass("fr-code-view", !1), e(d)
              }
  
              function h() { c() && (g(b.$tb.find('button[data-cmd="html"]')), k.val("").removeData().remove()), m && m.remove() }
  
              function i() { k = a('<textarea class="fr-code" tabindex="-1">'), b.$wp.append(k), k.attr("dir", b.opts.direction), b.opts.toolbarInline && (m = a('<a data-cmd="html" title="Code View" class="fr-command fr-btn html-switch' + (b.helpers.isMobile() ? "" : " fr-desktop") + '" role="button" tabindex="-1"><i class="fa fa-code"></i></button>'), b.$box.append(m), b.events.bindClick(b.$box, "a.html-switch", function() { g(!1) }));
                  var e = function() {
                      return !c() };
                  b.events.on("buttons.refresh", e), b.events.on("copy", e, !0), b.events.on("cut", e, !0), b.events.on("paste", e, !0), b.events.on("destroy", h, !0), b.events.on("html.set", function() { c() && g(!0) }), b.events.on("form.submit", function() { c() && (b.html.set(d()), b.events.trigger("contentChanged", [], !0)) }, !0) }
  
              function j() {
                  return b.$wp ? void 0 : !1 }
              var k, l, m;
              return { _init: j, toggle: g, isActive: c, get: d }
          }, a.FE.RegisterCommand("html", { title: "Code View", undo: !1, focus: !1, forcedRefresh: !0, callback: function() { this.codeView.toggle() }, plugin: "codeView" }), a.FE.DefineIcon("html", { NAME: "code" }), a.extend(a.FE.POPUP_TEMPLATES, { "colors.picker": "[_BUTTONS_][_TEXT_COLORS_][_BACKGROUND_COLORS_]" }), a.extend(a.FE.DEFAULTS, { colorsText: ["#61BD6D", "#1ABC9C", "#54ACD2", "#2C82C9", "#9365B8", "#475577", "#CCCCCC", "#41A85F", "#00A885", "#3D8EB9", "#2969B0", "#553982", "#28324E", "#000000", "#F7DA64", "#FBA026", "#EB6B56", "#E25041", "#A38F84", "#EFEFEF", "#FFFFFF", "#FAC51C", "#F37934", "#D14841", "#B8312F", "#7C706B", "#D1D5D8", "REMOVE"], colorsBackground: ["#61BD6D", "#1ABC9C", "#54ACD2", "#2C82C9", "#9365B8", "#475577", "#CCCCCC", "#41A85F", "#00A885", "#3D8EB9", "#2969B0", "#553982", "#28324E", "#000000", "#F7DA64", "#FBA026", "#EB6B56", "#E25041", "#A38F84", "#EFEFEF", "#FFFFFF", "#FAC51C", "#F37934", "#D14841", "#B8312F", "#7C706B", "#D1D5D8", "REMOVE"], colorsStep: 7, colorsDefaultTab: "text", colorsButtons: ["colorsBack", "|", "-"] }), a.FE.PLUGINS.colors = function(b) {
              function c() {
                  var a = b.$tb.find('.fr-command[data-cmd="color"]'),
                      c = b.popups.get("colors.picker");
                  if (c || (c = e()), !c.hasClass("fr-active")) { b.popups.setContainer("colors.picker", b.$tb), h(c.find(".fr-selected-tab").attr("data-param1"));
                      var d = a.offset().left + a.outerWidth() / 2,
                          f = a.offset().top + (b.opts.toolbarBottom ? 10 : a.outerHeight() - 10);
                      b.popups.show("colors.picker", d, f, a.outerHeight()) } }
  
              function d() { b.popups.hide("colors.picker") }
  
              function e() {
                  var a = '<div class="fr-buttons fr-colors-buttons">';
                  b.opts.toolbarInline && b.opts.colorsButtons.length > 0 && (a += b.button.buildList(b.opts.colorsButtons)), a += f() + "</div>";
                  var c = { buttons: a, text_colors: g("text"), background_colors: g("background") },
                      d = b.popups.create("colors.picker", c);
                  return d }
  
              function f() {
                  var a = '<div class="fr-colors-tabs">';
                  return a += '<span class="fr-colors-tab ' + ("background" == b.opts.colorsDefaultTab ? "" : "fr-selected-tab ") + 'fr-command" data-param1="text" data-cmd="colorChangeSet" title="' + b.language.translate("Text") + '">' + b.language.translate("Text") + "</span>", a += '<span class="fr-colors-tab ' + ("background" == b.opts.colorsDefaultTab ? "fr-selected-tab " : "") + 'fr-command" data-param1="background" data-cmd="colorChangeSet" title="' + b.language.translate("Background") + '">' + b.language.translate("Background") + "</span>", a + "</div>" }
  
              function g(a) {
                  for (var c = "text" == a ? b.opts.colorsText : b.opts.colorsBackground, d = '<div class="fr-color-set fr-' + a + "-color" + (b.opts.colorsDefaultTab == a || "text" != b.opts.colorsDefaultTab && "background" != b.opts.colorsDefaultTab && "text" == a ? " fr-selected-set" : "") + '">', e = 0; e < c.length; e++) 0 !== e && e % b.opts.colorsStep === 0 && (d += "<br>"), d += "REMOVE" != c[e] ? '<span class="fr-command fr-select-color" style="background: ' + c[e] + ';" data-cmd="' + a + 'Color" data-param1="' + c[e] + '"></span>' : '<span class="fr-command fr-select-color" data-cmd="' + a + 'Color" data-param1="REMOVE" title="' + b.language.translate("Clear Formatting") + '"><i class="fa fa-eraser"></i></span>';
                  return d + "</div>" }
  
              function h(c) {
                  var d, e = b.popups.get("colors.picker"),
                      f = a(b.selection.element());
                  for (d = "background" == c ? "background-color" : "color", e.find(".fr-" + c + "-color .fr-select-color").removeClass("fr-selected-color"); f.get(0) != b.$el.get(0);) {
                      if ("transparent" != f.css(d) && "rgba(0, 0, 0, 0)" != f.css(d)) { e.find(".fr-" + c + '-color .fr-select-color[data-param1="' + b.helpers.RGBToHex(f.css(d)) + '"]').addClass("fr-selected-color");
                          break }
                      f = f.parent() } }
  
              function i(a, b) { a.hasClass("fr-selected-tab") || (a.siblings().removeClass("fr-selected-tab"), a.addClass("fr-selected-tab"), a.parents(".fr-popup").find(".fr-color-set").removeClass("fr-selected-set"), a.parents(".fr-popup").find(".fr-color-set.fr-" + b + "-color").addClass("fr-selected-set"), h(b)) }
  
              function j(c) { "REMOVE" != c ? b.commands.applyProperty("background-color", b.helpers.HEXtoRGB(c)) : (b.commands.applyProperty("background-color", "#123456"), b.selection.save(), b.$el.find("span").each(function(c, d) {
                      var e = a(d),
                          f = e.css("background-color");
                      ("#123456" === f || "#123456" === b.helpers.RGBToHex(f)) && e.replaceWith(e.html()) }), b.selection.restore()), d() }
  
              function k(c) { "REMOVE" != c ? b.commands.applyProperty("color", b.helpers.HEXtoRGB(c)) : (b.commands.applyProperty("color", "#123456"), b.selection.save(), b.$el.find("span").each(function(c, d) {
                      var e = a(d),
                          f = e.css("color");
                      ("#123456" === f || "#123456" === b.helpers.RGBToHex(f)) && e.replaceWith(e.html()) }), b.selection.restore()), d() }
  
              function l() { b.popups.hide("colors.picker"), b.toolbar.showInline() }
              return { showColorsPopup: c, hideColorsPopup: d, changeSet: i, background: j, text: k, back: l } }, a.FE.DefineIcon("colors", { NAME: "tint" }), a.FE.RegisterCommand("color", { title: "Colors", undo: !1, focus: !0, refreshOnCallback: !1, popup: !0, callback: function() { this.popups.isVisible("colors.picker") ? (this.$el.find(".fr-marker") && (this.events.disableBlur(), this.selection.restore()), this.popups.hide("colors.picker")) : this.colors.showColorsPopup() }, plugin: "colors" }), a.FE.RegisterCommand("textColor", { undo: !0, callback: function(a, b) { this.colors.text(b) } }), a.FE.RegisterCommand("backgroundColor", { undo: !0, callback: function(a, b) { this.colors.background(b) } }), a.FE.RegisterCommand("colorChangeSet", { undo: !1, focus: !1, callback: function(a, b) {
                  var c = this.popups.get("colors.picker").find('.fr-command[data-cmd="' + a + '"][data-param1="' + b + '"]');
                  this.colors.changeSet(c, b) } }), a.FE.DefineIcon("colorsBack", { NAME: "arrow-left" }), a.FE.RegisterCommand("colorsBack", { title: "Back", undo: !1, focus: !1, back: !0, refreshAfterCallback: !1, callback: function() { this.colors.back() } }), a.extend(a.FE.DEFAULTS, { dragInline: !0 }), a.FE.PLUGINS.draggable = function(b) {
              function c(c) {
                  return a(c.target).hasClass("fr-draggable") ? (a(c.target).addClass("fr-dragging"), b.opts.dragInline ? b.$el.attr("contenteditable", !0) : b.$el.attr("contenteditable", !1), b.opts.toolbarInline && b.toolbar.hide(), b.undo.canDo() || b.undo.saveStep(), b.browser.msie || b.browser.edge || b.selection.clear(), void c.originalEvent.dataTransfer.setData("text", "Froala")) : (c.preventDefault(), !1) }
  
              function d(a) {
                  return !(a && ("HTML" == a.tagName || "BODY" == a.tagName || b.node.isElement(a))) }
  
              function e(a, c, d) { b.opts.iframe && (a += b.$iframe.offset().top, c += b.$iframe.offset().left), m.offset().top != a && m.css("top", a), m.offset().left != c && m.css("left", c), m.width() != d && m.css("width", d) }
  
              function f(c) {
                  var f = b.doc.elementFromPoint(c.originalEvent.pageX - b.win.pageXOffset, c.originalEvent.pageY - b.win.pageYOffset);
                  if (!d(f)) {
                      for (var g = 0, h = f; !d(h) && h == f && c.originalEvent.pageY - b.win.pageYOffset - g > 0;) g++, h = b.doc.elementFromPoint(c.originalEvent.pageX - b.win.pageXOffset, c.originalEvent.pageY - b.win.pageYOffset - g);
                      (!d(h) || m && 0 === b.$el.find(h).length && h != m.get(0)) && (h = null);
                      for (var i = 0, j = f; !d(j) && j == f && c.originalEvent.pageY - b.win.pageYOffset + i < a(b.doc).height();) i++, j = b.doc.elementFromPoint(c.originalEvent.pageX - b.win.pageXOffset, c.originalEvent.pageY - b.win.pageYOffset + i);
                      (!d(j) || m && 0 === b.$el.find(j).length && j != m.get(0)) && (j = null), f = null == j && h ? h : j && null == h ? j : j && h ? i > g ? h : j : null }
                  if (a(f).hasClass("fr-drag-helper")) return !1;
                  if (f && !b.node.isBlock(f) && (f = b.node.blockParent(f)), f && ["TD", "TH", "TR", "THEAD", "TBODY"].indexOf(f.tagName) >= 0 && (f = a(f).parents("table").get(0)), f && ["LI"].indexOf(f.tagName) >= 0 && (f = a(f).parents("UL, OL").get(0)), f && !a(f).hasClass("fr-drag-helper")) { m || (a.FE.$draggable_helper || (a.FE.$draggable_helper = a('<div class="fr-drag-helper"></div>')), m = a.FE.$draggable_helper, b.events.on("shared.destroy", function() { m.html("").removeData().remove() }, !0));
                      var k, l = c.originalEvent.pageY;
                      k = l < a(f).offset().top + a(f).outerHeight() / 2 ? !0 : !1;
                      var n = a(f),
                          o = 0;
                      k || 0 !== n.next().length ? (k || (n = n.next()), "before" == m.data("fr-position") && n.is(m.data("fr-tag")) || (n.prev().length > 0 && (o = parseFloat(n.prev().css("margin-bottom")) || 0), o = Math.max(o, parseFloat(n.css("margin-top")) || 0), e(n.offset().top - o / 2 - b.$box.offset().top, n.offset().left - b.win.pageXOffset - b.$box.offset().left, n.width()), m.data("fr-position", "before"))) : "after" == m.data("fr-position") && n.is(m.data("fr-tag")) || (o = parseFloat(n.css("margin-bottom")) || 0, e(n.offset().top + a(f).height() + o / 2 - b.$box.offset().top, n.offset().left - b.win.pageXOffset - b.$box.offset().left, n.width()), m.data("fr-position", "after")), m.data("fr-tag", n), m.addClass("fr-visible"), m.appendTo(b.$box) } else m && b.$box.find(m).length > 0 && m.removeClass("fr-visible") }
  
              function g(a) { a.originalEvent.dataTransfer.dropEffect = "move", b.opts.dragInline ? j() || !b.browser.msie && !b.browser.edge || a.preventDefault() : (a.preventDefault(), f(a)) }
  
              function h(a) { a.originalEvent.dataTransfer.dropEffect = "move", b.opts.dragInline || a.preventDefault() }
  
              function i(a) { b.$el.attr("contenteditable", !0);
                  var c = b.$el.find(".fr-dragging");
                  m && m.hasClass("fr-visible") && b.$box.find(m).length ? k(a) : c.length && (a.preventDefault(), a.stopPropagation(), m && !m.hasClass("fr-visible") && c.removeClass("fr-dragging")), m && b.$box.find(m).length && m.removeClass("fr-visible") }
  
              function j() {
                  for (var b = null, c = 0; c < a.FE.INSTANCES.length; c++)
                      if (b = a.FE.INSTANCES[c].$el.find(".fr-dragging"), b.length) return b.get(0) }
  
              function k(c) {
                  for (var d, e, f = 0; f < a.FE.INSTANCES.length; f++)
                      if (d = a.FE.INSTANCES[f].$el.find(".fr-dragging"), d.length) { e = a.FE.INSTANCES[f];
                          break }
                  if (d.length) {
                      if (c.preventDefault(), c.stopPropagation(), m && m.hasClass("fr-visible") && b.$box.find(m).length) m.data("fr-tag")[m.data("fr-position")]('<span class="fr-marker"></span>'), m.removeClass("fr-visible");
                      else {
                          var g = b.markers.insertAtPoint(c.originalEvent);
                          if (g === !1) return !1 }
                      if (b.popups.hideAll(), e == b || b.undo.canDo() || b.undo.saveStep(), b.core.isEmpty()) b.$el.html(d);
                      else {
                          var h = b.$el.find(".fr-marker");
                          h.replaceWith(d), d.after(a.FE.MARKERS), b.selection.restore() }
                      return d.removeClass("fr-dragging"), b.$el.find(b.html.emptyBlockTagsQuery()).remove(), b.html.wrap(), b.undo.saveStep(), e != b && (e.popups.hideAll(), e.$el.find(b.html.emptyBlockTagsQuery()).remove(), e.html.wrap(), e.undo.saveStep(), e.events.trigger("element.dropped")), b.opts.iframe && b.size.syncIframe(), b.events.trigger("element.dropped", [d]), !1 } }
  
              function l() { b.opts.enter == a.FE.ENTER_BR && (b.opts.dragInline = !0), b.events.on("dragstart", c, !0), b.events.on("dragover", g, !0), b.events.on("dragenter", h, !0), b.events.on("document.dragend", i, !0), b.events.on("document.drop", i, !0), b.events.on("drop", k, !0), b.events.on("html.get", function(a) {
                      return a = a.replace(/<(div)((?:[\w\W]*?))class="([\w\W]*?)fr-drag-helper([\w\W]*?)"((?:[\w\W]*?))>((?:[\w\W]*?))<\/(div)>/g, "") }) }
              var m;
              return { _init: l } }, a.extend(a.FE.POPUP_TEMPLATES, { emoticons: "[_BUTTONS_][_EMOTICONS_]" }), a.extend(a.FE.DEFAULTS, { emoticonsStep: 8, emoticonsSet: [{ code: "1f600", desc: "Grinning face" }, { code: "1f601", desc: "Grinning face with smiling eyes" }, { code: "1f602", desc: "Face with tears of joy" }, { code: "1f603", desc: "Smiling face with open mouth" }, { code: "1f604", desc: "Smiling face with open mouth and smiling eyes" }, { code: "1f605", desc: "Smiling face with open mouth and cold sweat" }, { code: "1f606", desc: "Smiling face with open mouth and tightly-closed eyes" }, { code: "1f607", desc: "Smiling face with halo" }, { code: "1f608", desc: "Smiling face with horns" }, { code: "1f609", desc: "Winking face" }, { code: "1f60a", desc: "Smiling face with smiling eyes" }, { code: "1f60b", desc: "Face savoring delicious food" }, { code: "1f60c", desc: "Relieved face" }, { code: "1f60d", desc: "Smiling face with heart-shaped eyes" }, { code: "1f60e", desc: "Smiling face with sunglasses" }, { code: "1f60f", desc: "Smirking face" }, { code: "1f610", desc: "Neutral face" }, { code: "1f611", desc: "Expressionless face" }, { code: "1f612", desc: "Unamused face" }, { code: "1f613", desc: "Face with cold sweat" }, { code: "1f614", desc: "Pensive face" }, { code: "1f615", desc: "Confused face" }, { code: "1f616", desc: "Confounded face" }, { code: "1f617", desc: "Kissing face" }, { code: "1f618", desc: "Face throwing a kiss" }, { code: "1f619", desc: "Kissing face with smiling eyes" }, { code: "1f61a", desc: "Kissing face with closed eyes" }, { code: "1f61b", desc: "Face with stuck out tongue" }, { code: "1f61c", desc: "Face with stuck out tongue and winking eye" }, { code: "1f61d", desc: "Face with stuck out tongue and tightly-closed eyes" }, { code: "1f61e", desc: "Disappointed face" }, { code: "1f61f", desc: "Worried face" }, { code: "1f620", desc: "Angry face" }, { code: "1f621", desc: "Pouting face" }, { code: "1f622", desc: "Crying face" }, { code: "1f623", desc: "Persevering face" }, { code: "1f624", desc: "Face with look of triumph" }, { code: "1f625", desc: "Disappointed but relieved face" }, { code: "1f626", desc: "Frowning face with open mouth" }, { code: "1f627", desc: "Anguished face" }, { code: "1f628", desc: "Fearful face" }, { code: "1f629", desc: "Weary face" }, { code: "1f62a", desc: "Sleepy face" }, { code: "1f62b", desc: "Tired face" }, { code: "1f62c", desc: "Grimacing face" }, { code: "1f62d", desc: "Loudly crying face" }, { code: "1f62e", desc: "Face with open mouth" }, { code: "1f62f", desc: "Hushed face" }, { code: "1f630", desc: "Face with open mouth and cold sweat" }, { code: "1f631", desc: "Face screaming in fear" }, { code: "1f632", desc: "Astonished face" }, { code: "1f633", desc: "Flushed face" }, { code: "1f634", desc: "Sleeping face" }, { code: "1f635", desc: "Dizzy face" }, { code: "1f636", desc: "Face without mouth" }, { code: "1f637", desc: "Face with medical mask" }], emoticonsButtons: ["emoticonsBack", "|"], emoticonsUseImage: !0 }), a.FE.PLUGINS.emoticons = function(b) {
              function c() {
                  var a = b.$tb.find('.fr-command[data-cmd="emoticons"]'),
                      c = b.popups.get("emoticons");
                  if (c || (c = e()), !c.hasClass("fr-active")) { b.popups.refresh("emoticons"), b.popups.setContainer("emoticons", b.$tb);
                      var d = a.offset().left + a.outerWidth() / 2,
                          f = a.offset().top + (b.opts.toolbarBottom ? 10 : a.outerHeight() - 10);
                      b.popups.show("emoticons", d, f, a.outerHeight()) } }
  
              function d() { b.popups.hide("emoticons") }
  
              function e() {
                  var a = "";
                  b.opts.toolbarInline && b.opts.emoticonsButtons.length > 0 && (a = '<div class="fr-buttons fr-emoticons-buttons">' + b.button.buildList(b.opts.emoticonsButtons) + "</div>");
                  var c = { buttons: a, emoticons: f() },
                      d = b.popups.create("emoticons", c);
                  return b.tooltip.bind(d, ".fr-emoticon"), d }
  
              function f() {
                  for (var a = '<div style="text-align: center">', c = 0; c < b.opts.emoticonsSet.length; c++) 0 !== c && c % b.opts.emoticonsStep === 0 && (a += "<br>"), a += '<span class="fr-command fr-emoticon" data-cmd="insertEmoticon" title="' + b.language.translate(b.opts.emoticonsSet[c].desc) + '" data-param1="' + b.opts.emoticonsSet[c].code + '">' + (b.opts.emoticonsUseImage ? '<img src="https://cdnjs.cloudflare.com/ajax/libs/emojione/2.0.1/assets/svg/' + b.opts.emoticonsSet[c].code + '.svg"/>' : "&#x" + b.opts.emoticonsSet[c].code + ";") + "</span>";
                  return b.opts.emoticonsUseImage && (a += '<p style="font-size: 12px; text-align: center; padding: 0 5px;">Emoji free by <a href="http://emojione.com/" target="_blank" rel="nofollow">Emoji One</a></p>'), a += "</div>" }
  
              function g(c, d) { b.html.insert('<span class="fr-emoticon' + (d ? " fr-emoticon-img" : "") + '"' + (d ? ' style="background: url(' + d + ')"' : "") + ">" + (d ? "&nbsp;" : c) + "</span>" + a.FE.MARKERS, !0) }
  
              function h() { b.popups.hide("emoticons"), b.toolbar.showInline() }
  
              function i() { b.events.on("html.get", function(c) {
                      for (var d = 0; d < b.opts.emoticonsSet.length; d++) {
                          var e = b.opts.emoticonsSet[d],
                              f = a("<div>").html(e.code).text();
                          c = c.split(f).join(e.code) }
                      return c });
                  var c = function() {
                      if (!b.selection.isCollapsed()) return !1;
                      var c = b.selection.element(),
                          d = b.selection.endElement();
                      if (a(c).hasClass("fr-emoticon")) return c;
                      if (a(d).hasClass("fr-emoticon")) return d;
                      var e = b.selection.ranges(0),
                          f = e.startContainer;
                      if (f.nodeType == Node.ELEMENT_NODE && f.childNodes.length > 0 && e.startOffset > 0) {
                          var g = f.childNodes[e.startOffset - 1];
                          if (a(g).hasClass("fr-emoticon")) return g }
                      return !1 };
                  b.events.on("keydown", function(d) {
                      if (b.keys.isCharacter(d.which) && b.selection.inEditor()) {
                          var e = b.selection.ranges(0),
                              f = c();
                          f && (0 === e.startOffset ? a(f).before(a.FE.MARKERS + a.FE.INVISIBLE_SPACE) : a(f).after(a.FE.INVISIBLE_SPACE + a.FE.MARKERS), b.selection.restore()) } }), b.events.on("keyup", function() {
                      for (var c = b.$el.get(0).querySelectorAll(".fr-emoticon"), d = 0; d < c.length; d++) "undefined" != typeof c[d].textContent && 0 === c[d].textContent.replace(/\u200B/gi, "").length && a(c[d]).remove() }) }
              return { _init: i, insert: g, showEmoticonsPopup: c, hideEmoticonsPopup: d, back: h } }, a.FE.DefineIcon("emoticons", { NAME: "smile-o" }), a.FE.RegisterCommand("emoticons", { title: "Emoticons", undo: !1, focus: !0, refreshOnCallback: !1, popup: !0, callback: function() { this.popups.isVisible("emoticons") ? (this.$el.find(".fr-marker") && (this.events.disableBlur(), this.selection.restore()), this.popups.hide("emoticons")) : this.emoticons.showEmoticonsPopup() }, plugin: "emoticons" }), a.FE.RegisterCommand("insertEmoticon", { callback: function(a, b) { this.emoticons.insert("&#x" + b + ";", this.opts.emoticonsUseImage ? "https://cdnjs.cloudflare.com/ajax/libs/emojione/2.0.1/assets/svg/" + b + ".svg" : null), this.emoticons.hideEmoticonsPopup() } }), a.FE.DefineIcon("emoticonsBack", { NAME: "arrow-left" }), a.FE.RegisterCommand("emoticonsBack", { title: "Back", undo: !1, focus: !1, back: !0, refreshAfterCallback: !1, callback: function() { this.emoticons.back() } }), a.extend(a.FE.DEFAULTS, { entities: "&amp;&lt;&gt;&quot;&apos;&iexcl;&cent;&pound;&curren;&yen;&brvbar;&sect;&uml;&copy;&ordf;&laquo;&not;&shy;&reg;&macr;&deg;&plusmn;&sup2;&sup3;&acute;&micro;&para;&middot;&cedil;&sup1;&ordm;&raquo;&frac14;&frac12;&frac34;&iquest;&Agrave;&Aacute;&Acirc;&Atilde;&Auml;&Aring;&AElig;&Ccedil;&Egrave;&Eacute;&Ecirc;&Euml;&Igrave;&Iacute;&Icirc;&Iuml;&ETH;&Ntilde;&Ograve;&Oacute;&Ocirc;&Otilde;&Ouml;&times;&Oslash;&Ugrave;&Uacute;&Ucirc;&Uuml;&Yacute;&THORN;&szlig;&agrave;&aacute;&acirc;&atilde;&auml;&aring;&aelig;&ccedil;&egrave;&eacute;&ecirc;&euml;&igrave;&iacute;&icirc;&iuml;&eth;&ntilde;&ograve;&oacute;&ocirc;&otilde;&ouml;&divide;&oslash;&ugrave;&uacute;&ucirc;&uuml;&yacute;&thorn;&yuml;&OElig;&oelig;&Scaron;&scaron;&Yuml;&fnof;&circ;&tilde;&Alpha;&Beta;&Gamma;&Delta;&Epsilon;&Zeta;&Eta;&Theta;&Iota;&Kappa;&Lambda;&Mu;&Nu;&Xi;&Omicron;&Pi;&Rho;&Sigma;&Tau;&Upsilon;&Phi;&Chi;&Psi;&Omega;&alpha;&beta;&gamma;&delta;&epsilon;&zeta;&eta;&theta;&iota;&kappa;&lambda;&mu;&nu;&xi;&omicron;&pi;&rho;&sigmaf;&sigma;&tau;&upsilon;&phi;&chi;&psi;&omega;&thetasym;&upsih;&piv;&ensp;&emsp;&thinsp;&zwnj;&zwj;&lrm;&rlm;&ndash;&mdash;&lsquo;&rsquo;&sbquo;&ldquo;&rdquo;&bdquo;&dagger;&Dagger;&bull;&hellip;&permil;&prime;&Prime;&lsaquo;&rsaquo;&oline;&frasl;&euro;&image;&weierp;&real;&trade;&alefsym;&larr;&uarr;&rarr;&darr;&harr;&crarr;&lArr;&uArr;&rArr;&dArr;&hArr;&forall;&part;&exist;&empty;&nabla;&isin;&notin;&ni;&prod;&sum;&minus;&lowast;&radic;&prop;&infin;&ang;&and;&or;&cap;&cup;&int;&there4;&sim;&cong;&asymp;&ne;&equiv;&le;&ge;&sub;&sup;&nsub;&sube;&supe;&oplus;&otimes;&perp;&sdot;&lceil;&rceil;&lfloor;&rfloor;&lang;&rang;&loz;&spades;&clubs;&hearts;&diams;" }), a.FE.PLUGINS.entities = function(b) {
              function c(a) {
                  if (a && ["STYLE", "SCRIPT"].indexOf(a.tagName) >= 0) return !0;
                  for (var d = b.node.contents(a), e = 0; e < d.length; e++)
                      if (d[e].nodeType == Node.TEXT_NODE) {
                          var h = d[e].textContent;
                          if (h.match(f)) {
                              for (var i = "", j = 0; j < h.length; j++) i += g[h[j]] ? g[h[j]] : h[j];
                              d[e].textContent = i } } else c(d[e]) }
  
              function d(a) {
                  return 0 === a.length ? "" : b.clean.exec(a, c) }
  
              function e() { b.opts.htmlSimpleAmpersand && (b.opts.entities = b.opts.entities.replace("&amp;", ""));
                  var c = a("<div>").html(b.opts.entities).text(),
                      e = b.opts.entities.split(";");
                  g = {}, f = "";
                  for (var h = 0; h < c.length; h++) {
                      var i = c.charAt(h);
                      g[i] = e[h] + ";", f += "\\" + i + (h < c.length - 1 ? "|" : "") }
                  f = new RegExp("(" + f + ")", "g"), b.events.on("html.get", d, !0) }
              var f, g;
              return { _init: e } }, a.extend(a.FE.POPUP_TEMPLATES, { "file.insert": "[_BUTTONS_][_UPLOAD_LAYER_][_PROGRESS_BAR_]" }), a.extend(a.FE.DEFAULTS, { fileUploadURL: "http://i.froala.com/upload", fileUploadParam: "file", fileUploadParams: {}, fileUploadToS3: !1, fileUploadMethod: "POST", fileMaxSize: 10485760, fileAllowedTypes: ["*"], fileInsertButtons: ["fileBack", "|"], fileUseSelectedText: !1 }), a.FE.PLUGINS.file = function(b) {
              function c() {
                  var a = b.$tb.find('.fr-command[data-cmd="insertFile"]'),
                      c = b.popups.get("file.insert");
                  if (c || (c = r()), e(), !c.hasClass("fr-active")) { b.popups.refresh("file.insert"), b.popups.setContainer("file.insert", b.$tb);
                      var d = a.offset().left + a.outerWidth() / 2,
                          f = a.offset().top + (b.opts.toolbarBottom ? 0 : a.outerHeight());
                      b.popups.show("file.insert", d, f, a.outerHeight()) } }
  
              function d() {
                  var a = b.popups.get("file.insert");
                  a && (a.find(".fr-layer.fr-active").removeClass("fr-active").addClass("fr-pactive"), a.find(".fr-file-progress-bar-layer").addClass("fr-active"), a.find(".fr-buttons").hide(), f("Uploading", 0)) }
  
              function e(a) {
                  var c = b.popups.get("file.insert");
                  c && (c.find(".fr-layer.fr-pactive").addClass("fr-active").removeClass("fr-pactive"), c.find(".fr-file-progress-bar-layer").removeClass("fr-active"), c.find(".fr-buttons").show(), a && b.popups.show("file.insert", null, null)) }
  
              function f(a, c) {
                  var d = b.popups.get("file.insert");
                  if (d) {
                      var e = d.find(".fr-file-progress-bar-layer");
                      e.find("h3").text(a + (c ? " " + c + "%" : "")), e.removeClass("fr-error"), c ? (e.find("div").removeClass("fr-indeterminate"), e.find("div > span").css("width", c + "%")) : e.find("div").addClass("fr-indeterminate") } }
  
              function g(a) {
                  var c = b.popups.get("file.insert"),
                      d = c.find(".fr-file-progress-bar-layer");
                  d.addClass("fr-error"), d.find("h3").text(a) }
  
              function h(a, c, d) { b.edit.on(), b.events.focus(!0), b.selection.restore(), b.html.insert('<a href="' + a + '" id="fr-inserted-file" class="fr-file">' + (c || b.selection.text()) + "</a>");
                  var e = b.$el.find("#fr-inserted-file");
                  e.removeAttr("id"), b.popups.hide("file.insert"), b.undo.saveStep(), b.events.trigger("file.inserted", [e, d]) }
  
              function i(c) {
                  try {
                      if (b.events.trigger("file.uploaded", [c], !0) === !1) return b.edit.on(), !1;
                      var d = a.parseJSON(c);
                      return d.link ? d : (n(y, c), !1) } catch (e) {
                      return n(A, c), !1 } }
  
              function j(c) {
                  try {
                      var d = a(c).find("Location").text(),
                          e = a(c).find("Key").text();
                      return b.events.trigger("file.uploadedToS3", [d, e, c], !0) === !1 ? (b.edit.on(), !1) : d } catch (f) {
                      return n(A, c), !1 } }
  
              function k(a) {
                  var c = this.status,
                      d = this.response,
                      e = this.responseXML,
                      f = this.responseText;
                  try {
                      if (b.opts.fileUploadToS3)
                          if (201 == c) {
                              var g = j(e);
                              g && h(g, a, d || e) } else n(A, d || e);
                      else if (c >= 200 && 300 > c) {
                          var k = i(f);
                          k && h(k.link, a, d || f) } else n(z, d || f) } catch (l) { n(A, d || f) } }
  
              function l() { n(A, this.response || this.responseText || this.responseXML) }
  
              function m(a) {
                  if (a.lengthComputable) {
                      var b = a.loaded / a.total * 100 | 0;
                      f("Uploading", b) } }
  
              function n(a, c) { b.edit.on(), g(b.language.translate("Something went wrong. Please try again.")), b.events.trigger("file.error", [{ code: a, message: E[a] }, c]) }
  
              function o(a) {
                  if (b.events.trigger("file.beforeUpload", [a]) === !1) return !1;
                  if ("undefined" != typeof a && a.length > 0) {
                      var c = a[0];
                      if (c.size > b.opts.fileMaxSize) return n(B), !1;
                      if (b.opts.fileAllowedTypes.indexOf("*") < 0 && b.opts.fileAllowedTypes.indexOf(c.type.replace(/file\//g, "")) < 0) return n(C), !1;
                      var e;
                      if (b.drag_support.formdata && (e = b.drag_support.formdata ? new FormData : null), e) {
                          var f;
                          if (b.opts.fileUploadToS3 !== !1) { e.append("key", b.opts.fileUploadToS3.keyStart + (new Date).getTime() + "-" + (c.name || "untitled")), e.append("success_action_status", "201"), e.append("X-Requested-With", "xhr"), e.append("Content-Type", c.type);
                              for (f in b.opts.fileUploadToS3.params) b.opts.fileUploadToS3.params.hasOwnProperty(f) && e.append(f, b.opts.fileUploadToS3.params[f]) }
                          for (f in b.opts.fileUploadParams) b.opts.fileUploadParams.hasOwnProperty(f) && e.append(f, b.opts.fileUploadParams[f]);
                          e.append(b.opts.fileUploadParam, c);
                          var g = b.opts.fileUploadURL;
                          b.opts.fileUploadToS3 && (g = "https://" + b.opts.fileUploadToS3.region + ".amazonaws.com/" + b.opts.fileUploadToS3.bucket);
                          var h = b.core.getXHR(g, b.opts.fileUploadMethod);
                          h.onload = function() { k.call(h, [b.opts.fileUseSelectedText ? null : c.name]) }, h.onerror = l, h.upload.onprogress = m, d(), b.edit.off(), h.send(e) } } }
  
              function p(c) { b.events.$on(c, "dragover dragenter", ".fr-file-upload-layer", function() {
                      return a(this).addClass("fr-drop"), !1 }, !0), b.events.$on(c, "dragleave dragend", ".fr-file-upload-layer", function() {
                      return a(this).removeClass("fr-drop"), !1 }, !0), b.events.$on(c, "drop", ".fr-file-upload-layer", function(b) { b.preventDefault(), b.stopPropagation(), a(this).removeClass("fr-drop");
                      var c = b.originalEvent.dataTransfer;
                      c && c.files && o(c.files) }, !0), b.events.$on(c, "change", '.fr-file-upload-layer input[type="file"]', function() { this.files && o(this.files), a(this).val("") }, !0) }
  
              function q() { e() }
  
              function r(a) {
                  if (a) return b.popups.onHide("file.insert", q), !0;
                  var c = "";
                  c = '<div class="fr-buttons">' + b.button.buildList(b.opts.fileInsertButtons) + "</div>";
                  var d = "";
                  d = '<div class="fr-file-upload-layer fr-layer fr-active" id="fr-file-upload-layer-' + b.id + '"><strong>' + b.language.translate("Drop file") + "</strong><br>(" + b.language.translate("or click") + ')<div class="fr-form"><input type="file" name="' + b.opts.fileUploadParam + '" accept="/*" tabIndex="-1"></div></div>';
                  var e = '<div class="fr-file-progress-bar-layer fr-layer"><h3 class="fr-message">Uploading</h3><div class="fr-loader"><span class="fr-progress"></span></div><div class="fr-action-buttons"><button type="button" class="fr-command" data-cmd="fileDismissError" tabIndex="2">OK</button></div></div>',
                      f = { buttons: c, upload_layer: d, progress_bar: e },
                      g = b.popups.create("file.insert", f);
                  return p(g), g }
  
              function s(c) {
                  return a(c).hasClass("fr-file") ? b.events.trigger("file.unlink", [c]) : void 0 }
  
              function t(c) {
                  var e = c.originalEvent.dataTransfer;
                  if (e && e.files && e.files.length) {
                      var f = e.files[0];
                      if (f && "undefined" != typeof f.type && f.type.indexOf("image") < 0 && (b.opts.fileAllowedTypes.indexOf(f.type) >= 0 || b.opts.fileAllowedTypes.indexOf("*") >= 0)) { b.markers.remove(), b.markers.insertAtPoint(c.originalEvent), b.$el.find(".fr-marker").replaceWith(a.FE.MARKERS), b.popups.hideAll();
                          var g = b.popups.get("file.insert");
                          return g || (g = r()), b.popups.setContainer("file.insert", a(b.opts.scrollableContainer)), b.popups.show("file.insert", c.originalEvent.pageX, c.originalEvent.pageY), d(), o(e.files), c.preventDefault(), c.stopPropagation(), !1 } } }
  
              function u() { b.events.on("drop", t) }
  
              function v() { b.events.disableBlur(), b.selection.restore(), b.events.enableBlur(), b.popups.hide("file.insert"), b.toolbar.showInline() }
  
              function w() { u(), b.events.on("link.beforeRemove", s), r(!0) }
              var x = 1,
                  y = 2,
                  z = 3,
                  A = 4,
                  B = 5,
                  C = 6,
                  D = 7,
                  E = {};
              return E[x] = "File cannot be loaded from the passed link.", E[y] = "No link in upload response.", E[z] = "Error during file upload.", E[A] = "Parsing response failed.", E[B] = "File is too large.", E[C] = "File file type is invalid.", E[D] = "Files can be uploaded only to same domain in IE 8 and IE 9.", { _init: w, showInsertPopup: c, upload: o, insert: h, back: v, hideProgressBar: e } }, a.FE.DefineIcon("insertFile", { NAME: "file-o" }), a.FE.RegisterCommand("insertFile", { title: "Upload File", undo: !1, focus: !0, refershAfterCallback: !1, popup: !0, callback: function() { this.popups.isVisible("file.insert") ? (this.$el.find(".fr-marker") && (this.events.disableBlur(), this.selection.restore()), this.popups.hide("file.insert")) : this.file.showInsertPopup() }, plugin: "file" }), a.FE.DefineIcon("fileBack", { NAME: "arrow-left" }), a.FE.RegisterCommand("fileBack", { title: "Back", undo: !1, focus: !1, back: !0, refreshAfterCallback: !1, callback: function() { this.file.back() }, refresh: function(a) { this.opts.toolbarInline ? (a.removeClass("fr-hidden"), a.next(".fr-separator").removeClass("fr-hidden")) : (a.addClass("fr-hidden"), a.next(".fr-separator").addClass("fr-hidden")) } }), a.FE.RegisterCommand("fileDismissError", { title: "OK", callback: function() { this.file.hideProgressBar(!0) } }), a.extend(a.FE.DEFAULTS, { fontFamily: { "Arial,Helvetica,sans-serif": "Arial", "Georgia,serif": "Georgia", "Impact,Charcoal,sans-serif": "Impact", "Tahoma,Geneva,sans-serif": "Tahoma", "Times New Roman,Times,serif": "Times New Roman", "Verdana,Geneva,sans-serif": "Verdana" }, fontFamilySelection: !1, fontFamilyDefaultSelection: "Font Family" }), a.FE.PLUGINS.fontFamily = function(b) {
              function c(a) { b.commands.applyProperty("font-family", a) }
  
              function d(a, b) { b.find(".fr-command.fr-active").removeClass("fr-active"), b.find('.fr-command[data-param1="' + g() + '"]').addClass("fr-active");
                  var c = b.find(".fr-dropdown-list"),
                      d = b.find(".fr-active").parent();
                  d.length ? c.parent().scrollTop(d.offset().top - c.offset().top - (c.parent().outerHeight() / 2 - d.outerHeight() / 2)) : c.parent().scrollTop(0) }
  
              function e(b) {
                  var c = b.replace(/(sans-serif|serif|monospace|cursive|fantasy)/gi, "").replace(/"|'| /g, "").split(",");
                  return a.grep(c, function(a) {
                      return a.length > 0 }) }
  
              function f(a, b) {
                  for (var c = 0; c < a.length; c++)
                      for (var d = 0; d < b.length; d++)
                          if (a[c] == b[d]) return [c, d];
                  return null }
  
              function g() {
                  var c = a(b.selection.element()).css("font-family"),
                      d = e(c),
                      g = [];
                  for (var h in b.opts.fontFamily)
                      if (b.opts.fontFamily.hasOwnProperty(h)) {
                          var i = e(h),
                              j = f(d, i);
                          j && g.push([h, j]) }
                  return 0 === g.length ? null : (g.sort(function(a, b) {
                      var c = a[1][0] - b[1][0];
                      return 0 === c ? a[1][1] - b[1][1] : c }), g[0][0]) }
  
              function h(c) {
                  if (b.opts.fontFamilySelection) {
                      var d = a(b.selection.element()).css("font-family").replace(/(sans-serif|serif|monospace|cursive|fantasy)/gi, "").replace(/"|'|/g, "").split(",");
                      c.find("> span").text(b.opts.fontFamily[g()] || d[0] || b.opts.fontFamilyDefaultSelection) } }
              return { apply: c, refreshOnShow: d, refresh: h } }, a.FE.RegisterCommand("fontFamily", { type: "dropdown", displaySelection: function(a) {
                  return a.opts.fontFamilySelection }, defaultSelection: function(a) {
                  return a.opts.fontFamilyDefaultSelection }, displaySelectionWidth: 120, html: function() {
                  var a = '<ul class="fr-dropdown-list">',
                      b = this.opts.fontFamily;
                  for (var c in b) b.hasOwnProperty(c) && (a += '<li><a class="fr-command" data-cmd="fontFamily" data-param1="' + c + '" style="font-family: ' + c + '" title="' + b[c] + '">' + b[c] + "</a></li>");
                  return a += "</ul>" }, title: "Font Family", callback: function(a, b) { this.fontFamily.apply(b) }, refresh: function(a) { this.fontFamily.refresh(a) }, refreshOnShow: function(a, b) { this.fontFamily.refreshOnShow(a, b) }, plugin: "fontFamily" }), a.FE.DefineIcon("fontFamily", { NAME: "font" }), a.extend(a.FE.DEFAULTS, { fontSize: ["8", "9", "10", "11", "12", "14", "18", "24", "30", "36", "48", "60", "72", "96"], fontSizeSelection: !1, fontSizeDefaultSelection: "12" }), a.FE.PLUGINS.fontSize = function(b) {
              function c(a) { b.commands.applyProperty("font-size", a + "px") }
  
              function d(c, d) {
                  var e = b.helpers.getPX(a(b.selection.element()).css("font-size"));
                  d.find(".fr-command.fr-active").removeClass("fr-active"), d.find('.fr-command[data-param1="' + e + '"]').addClass("fr-active");
                  var f = d.find(".fr-dropdown-list"),
                      g = d.find(".fr-active").parent();
                  g.length ? f.parent().scrollTop(g.offset().top - f.offset().top - (f.parent().outerHeight() / 2 - g.outerHeight() / 2)) : f.parent().scrollTop(0) }
  
              function e(c) {
                  if (b.opts.fontSizeSelection) {
                      var d = b.helpers.getPX(a(b.selection.element()).css("font-size"));
                      c.find("> span").text(d) } }
              return { apply: c, refreshOnShow: d, refresh: e } }, a.FE.RegisterCommand("fontSize", { type: "dropdown", title: "Font Size", displaySelection: function(a) {
                  return a.opts.fontSizeSelection }, displaySelectionWidth: 30, defaultSelection: function(a) {
                  return a.opts.fontSizeDefaultSelection }, html: function() {
                  for (var a = '<ul class="fr-dropdown-list">', b = this.opts.fontSize, c = 0; c < b.length; c++) {
                      var d = b[c];
                      a += '<li><a class="fr-command" data-cmd="fontSize" data-param1="' + d + '" title="' + d + '">' + d + "</a></li>" }
                  return a += "</ul>" }, callback: function(a, b) { this.fontSize.apply(b) }, refresh: function(a) { this.fontSize.refresh(a) }, refreshOnShow: function(a, b) { this.fontSize.refreshOnShow(a, b) }, plugin: "fontSize" }), a.FE.DefineIcon("fontSize", { NAME: "text-height" }), a.extend(a.FE.POPUP_TEMPLATES, { "forms.edit": "[_BUTTONS_]", "forms.update": "[_BUTTONS_][_TEXT_LAYER_]" }), a.extend(a.FE.DEFAULTS, { formEditButtons: ["inputStyle", "inputEdit"], formStyles: { "fr-rounded": "Rounded", "fr-large": "Large" }, formMultipleStyles: !0, formUpdateButtons: ["inputBack", "|"] }), a.FE.PLUGINS.forms = function(b) {
              function c(c) {
                  c.preventDefault(), b.selection.clear(), a(this).data("mousedown", !0)
              }
  
              function d(b) { a(this).data("mousedown") && (b.stopPropagation(), a(this).removeData("mousedown"), s = this, j(this)), b.preventDefault() }
  
              function e() { b.$el.find("input, textarea, button").removeData("mousedown") }
  
              function f() { a(this).removeData("mousedown") }
  
              function g() { b.events.$on(b.$el, b._mousedown, "input, textarea, button", c), b.events.$on(b.$el, b._mouseup, "input, textarea, button", d), b.events.$on(b.$el, "touchmove", "input, textarea, button", f), b.events.$on(b.$el, b._mouseup, e), b.events.$on(b.$win, b._mouseup, e), m(!0) }
  
              function h() {
                  return s ? s : null }
  
              function i() {
                  var a = "";
                  b.opts.formEditButtons.length > 0 && (a = '<div class="fr-buttons">' + b.button.buildList(b.opts.formEditButtons) + "</div>");
                  var c = { buttons: a },
                      d = b.popups.create("forms.edit", c);
                  return b.$wp && b.events.$on(b.$wp, "scroll.link-edit", function() { get() && b.popups.isVisible("forms.edit") && j(h()) }), d }
  
              function j(c) {
                  var d = b.popups.get("forms.edit");
                  d || (d = i()), s = c;
                  var e = a(c);
                  b.popups.refresh("forms.edit"), b.popups.setContainer("forms.edit", a(b.opts.scrollableContainer));
                  var f = e.offset().left + e.outerWidth() / 2,
                      g = e.offset().top + e.outerHeight();
                  b.popups.show("forms.edit", f, g, e.outerHeight()) }
  
              function k() {
                  var c = b.popups.get("forms.update"),
                      d = h();
                  if (d) {
                      var e = a(d);
                      e.is("button") ? c.find('input[type="text"][name="text"]').val(e.text()) : c.find('input[type="text"][name="text"]').val(e.attr("placeholder")) }
                  c.find('input[type="text"][name="text"]').trigger("change") }
  
              function l() { s = null }
  
              function m(a) {
                  if (a) return b.popups.onRefresh("forms.update", k), b.popups.onHide("forms.update", l), !0;
                  var c = "";
                  b.opts.formUpdateButtons.length >= 1 && (c = '<div class="fr-buttons">' + b.button.buildList(b.opts.formUpdateButtons) + "</div>");
                  var d = "",
                      e = 0;
                  d = '<div class="fr-forms-text-layer fr-layer fr-active">', d += '<div class="fr-input-line"><input name="text" type="text" placeholder="Text" tabIndex="' + ++e + '"></div>', d += '<div class="fr-action-buttons"><button class="fr-command fr-submit" data-cmd="updateInput" href="#" tabIndex="' + ++e + '" type="button">' + b.language.translate("Update") + "</button></div></div>";
                  var f = { buttons: c, text_layer: d },
                      g = b.popups.create("forms.update", f);
                  return g }
  
              function n() {
                  var c = h();
                  if (c) {
                      var d = a(c),
                          e = b.popups.get("forms.update");
                      e || (e = m()), b.popups.isVisible("forms.update") || b.popups.refresh("forms.update"), b.popups.setContainer("forms.update", a(b.opts.scrollableContainer));
                      var f = d.offset().left + d.outerWidth() / 2,
                          g = d.offset().top + d.outerHeight();
                      b.popups.show("forms.update", f, g, d.outerHeight()) } }
  
              function o(c, d, e) { "undefined" == typeof d && (d = b.opts.formStyles), "undefined" == typeof e && (e = b.opts.formMultipleStyles);
                  var f = h();
                  if (!f) return !1;
                  if (!e) {
                      var g = Object.keys(d);
                      g.splice(g.indexOf(c), 1), a(f).removeClass(g.join(" ")) }
                  a(f).toggleClass(c) }
  
              function p() { b.events.disableBlur(), b.selection.restore(), b.events.enableBlur();
                  var a = h();
                  a && b.$wp && ("BUTTON" == a.tagName && b.selection.restore(), j(a)) }
  
              function q() {
                  var c = b.popups.get("forms.update"),
                      d = h();
                  if (d) {
                      var e = a(d),
                          f = c.find('input[type="text"][name="text"]').val() || "";
                      f.length && (e.is("button") ? e.text(f) : e.attr("placeholder", f)), b.popups.hide("forms.update"), j(d) } }
  
              function r() { g(), b.events.$on(b.$el, "submit", "form", function(a) {
                      return a.preventDefault(), !1 }) }
              var s;
              return { _init: r, updateInput: q, getInput: h, applyStyle: o, showUpdatePopup: n, showEditPopup: j, back: p }
          }, a.FE.RegisterCommand("updateInput", { undo: !1, focus: !1, title: "Update", callback: function() { this.forms.updateInput() } }), a.FE.DefineIcon("inputStyle", { NAME: "magic" }), a.FE.RegisterCommand("inputStyle", { title: "Style", type: "dropdown", html: function() {
                  var a = '<ul class="fr-dropdown-list">',
                      b = this.opts.formStyles;
                  for (var c in b) b.hasOwnProperty(c) && (a += '<li><a class="fr-command" data-cmd="inputStyle" data-param1="' + c + '">' + this.language.translate(b[c]) + "</a></li>");
                  return a += "</ul>" }, callback: function(a, b) {
                  var c = this.forms.getInput();
                  c && (this.forms.applyStyle(b), this.forms.showEditPopup(c)) }, refreshOnShow: function(b, c) {
                  var d = this.forms.getInput();
                  if (d) {
                      var e = a(d);
                      c.find(".fr-command").each(function() {
                          var b = a(this).data("param1");
                          a(this).toggleClass("fr-active", e.hasClass(b)) }) } } }), a.FE.DefineIcon("inputEdit", { NAME: "edit" }), a.FE.RegisterCommand("inputEdit", { title: "Edit Button", undo: !1, refreshAfterCallback: !1, callback: function() { this.forms.showUpdatePopup() } }), a.FE.DefineIcon("inputBack", { NAME: "arrow-left" }), a.FE.RegisterCommand("inputBack", { title: "Back", undo: !1, focus: !1, back: !0, refreshAfterCallback: !1, callback: function() { this.forms.back() } }), a.FE.RegisterCommand("updateInput", { undo: !1, focus: !1, title: "Update", callback: function() { this.forms.updateInput() } }), a.FE.PLUGINS.fullscreen = function(b) {
              function c() {
                  return b.$box.hasClass("fr-fullscreen") }
  
              function d() { i = a(b.o_win).scrollTop(), b.$box.toggleClass("fr-fullscreen"), a("body").toggleClass("fr-fullscreen"), j = a('<div style="display: none;"></div>'), b.$box.after(j), b.helpers.isMobile() && (b.$tb.data("parent", b.$tb.parent()), b.$tb.prependTo(b.$box), b.$tb.data("sticky-dummy") && b.$tb.after(b.$tb.data("sticky-dummy"))), k = b.opts.height, l = b.opts.heightMax, b.opts.height = b.o_win.innerHeight - (b.opts.toolbarInline ? 0 : b.$tb.outerHeight()), b.size.refresh(), b.opts.toolbarInline && b.toolbar.showInline();
                  for (var c = b.$box.parent(); !c.is("body");) c.data("z-index", c.css("z-index")).css("z-index", "9990"), c = c.parent();
                  b.events.trigger("charCounter.update"), b.$win.trigger("scroll") }
  
              function e() { b.$box.toggleClass("fr-fullscreen"), a("body").toggleClass("fr-fullscreen"), b.$tb.prependTo(b.$tb.data("parent")), b.$tb.data("sticky-dummy") && b.$tb.after(b.$tb.data("sticky-dummy")), b.opts.height = k, b.opts.heightMax = l, b.size.refresh(), a(b.o_win).scrollTop(i), b.opts.toolbarInline && b.toolbar.showInline(), b.events.trigger("charCounter.update"), b.opts.toolbarSticky && b.opts.toolbarStickyOffset && (b.opts.toolbarBottom ? b.$tb.css("bottom", b.opts.toolbarStickyOffset).data("bottom", b.opts.toolbarStickyOffset) : b.$tb.css("top", b.opts.toolbarStickyOffset).data("top", b.opts.toolbarStickyOffset));
                  for (var c = b.$box.parent(); !c.is("body");) c.data("z-index") && (c.css("z-index", ""), c.css("z-index") != c.data("z-index") && c.css("z-index", c.data("z-index")), c.removeData("z-index")), c = c.parent();
                  b.$win.trigger("scroll") }
  
              function f() { c() ? e() : d(), g(b.$tb.find('.fr-command[data-cmd="fullscreen"]')) }
  
              function g(a) {
                  var b = c();
                  a.toggleClass("fr-active", b), a.find("i").toggleClass("fa-expand", !b).toggleClass("fa-compress", b) }
  
              function h() {
                  return b.$wp ? (b.events.$on(a(b.o_win), "resize", function() { c() && (e(), d()) }), void b.events.on("toolbar.hide", function() {
                      return c() && b.helpers.isMobile() ? !1 : void 0 })) : !1 }
              var i, j, k, l;
              return { _init: h, toggle: f, refresh: g, isActive: c } }, a.FE.RegisterCommand("fullscreen", { title: "Fullscreen", undo: !1, focus: !1, forcedRefresh: !0, callback: function() { this.fullscreen.toggle() }, refresh: function(a) { this.fullscreen.refresh(a) }, plugin: "fullscreen" }), a.FE.DefineIcon("fullscreen", { NAME: "expand" }), a.extend(a.FE.POPUP_TEMPLATES, { "image.insert": "[_BUTTONS_][_UPLOAD_LAYER_][_BY_URL_LAYER_][_PROGRESS_BAR_]", "image.edit": "[_BUTTONS_]", "image.alt": "[_BUTTONS_][_ALT_LAYER_]", "image.size": "[_BUTTONS_][_SIZE_LAYER_]" }), a.extend(a.FE.DEFAULTS, { imageInsertButtons: ["imageBack", "|", "imageUpload", "imageByURL"], imageEditButtons: ["imageReplace", "imageAlign", "imageRemove", "|", "imageLink", "linkOpen", "linkEdit", "linkRemove", "-", "imageDisplay", "imageStyle", "imageAlt", "imageSize"], imageAltButtons: ["imageBack", "|"], imageSizeButtons: ["imageBack", "|"], imageUploadURL: "http://i.froala.com/upload", imageUploadParam: "file", imageUploadParams: {}, imageUploadToS3: !1, imageUploadMethod: "POST", imageMaxSize: 10485760, imageAllowedTypes: ["jpeg", "jpg", "png", "gif", "svg+xml"], imageResize: !0, imageResizeWithPercent: !1, imageRoundPercent: !1, imageDefaultWidth: 300, imageDefaultAlign: "center", imageDefaultDisplay: "block", imageSplitHTML: !1, imageStyles: { "fr-rounded": "Rounded", "fr-bordered": "Bordered" }, imageMove: !0, imageMultipleStyles: !0, imageTextNear: !0, imagePaste: !0, imageMinWidth: 16, imageOutputSize: !1 }), a.FE.PLUGINS.image = function(b) {
              function c() {
                  var a = b.popups.get("image.insert"),
                      c = a.find(".fr-image-by-url-layer input");
                  c.val(""), oa && c.val(oa.attr("src")), c.trigger("change") }
  
              function d() {
                  var a = b.$tb.find('.fr-command[data-cmd="insertImage"]'),
                      c = b.popups.get("image.insert");
                  if (c || (c = J()), r(), !c.hasClass("fr-active"))
                      if (b.popups.refresh("image.insert"), b.popups.setContainer("image.insert", b.$tb), a.is(":visible")) {
                          var d = a.offset().left + a.outerWidth() / 2,
                              e = a.offset().top + (b.opts.toolbarBottom ? 10 : a.outerHeight() - 10);
                          b.popups.show("image.insert", d, e, a.outerHeight()) } else b.position.forSelection(c), b.popups.show("image.insert") }
  
              function e() {
                  var c = b.popups.get("image.edit");
                  c || (c = p()), b.popups.setContainer("image.edit", a(b.opts.scrollableContainer)), b.popups.refresh("image.edit");
                  var d = oa.offset().left + oa.outerWidth() / 2,
                      e = oa.offset().top + oa.outerHeight();
                  b.popups.show("image.edit", d, e, oa.outerHeight()) }
  
              function f() { r() }
  
              function g(a) {
                  if (!a.hasClass("fr-dii") && !a.hasClass("fr-dib")) {
                      var c = a.css("float");
                      a.css("float", "none"), "block" == a.css("display") ? (a.css("float", c), b.opts.imageEditButtons.indexOf("imageAlign") >= 0 && (0 === parseInt(a.css("margin-left"), 10) && (a.attr("style") || "").indexOf("margin-right: auto") >= 0 ? a.addClass("fr-fil") : 0 === parseInt(a.css("margin-right"), 10) && (a.attr("style") || "").indexOf("margin-left: auto") >= 0 && a.addClass("fr-fir")), a.addClass("fr-dib")) : (a.css("float", c), b.opts.imageEditButtons.indexOf("imageAlign") >= 0 && ("left" == a.css("float") ? a.addClass("fr-fil") : "right" == a.css("float") && a.addClass("fr-fir")), a.addClass("fr-dii")), a.css("margin", ""), a.css("float", ""), a.css("display", ""), a.css("z-index", ""), a.css("position", ""), a.css("overflow", ""), a.css("vertical-align", "") } }
  
              function h() {
                  for (var c = "IMG" == b.$el.get(0).tagName ? [b.$el.get(0)] : b.$el.get(0).querySelectorAll("img"), d = 0; d < c.length; d++) {
                      var e = a(c[d]);
                      (b.opts.imageEditButtons.indexOf("imageAlign") >= 0 || b.opts.imageEditButtons.indexOf("imageDisplay") >= 0) && g(e), e.attr("width") && (e.css("width", e.width()), e.removeAttr("width")), b.opts.imageTextNear || e.removeClass("fr-dii").addClass("fr-dib"), b.opts.iframe && e.on("load", b.size.syncIframe) } }
  
              function i() {
                  var c, d = Array.prototype.slice.call(b.$el.get(0).querySelectorAll("img")),
                      e = [];
                  for (c = 0; c < d.length; c++) e.push(d[c].getAttribute("src")), a(d[c]).toggleClass("fr-draggable", b.opts.imageMove);
                  if (Ba)
                      for (c = 0; c < Ba.length; c++) e.indexOf(Ba[c].getAttribute("src")) < 0 && b.events.trigger("image.removed", [a(Ba[c])]);
                  Ba = d }
  
              function j() { pa || V();
                  var c = b.$wp || a(b.opts.scrollableContainer);
                  c.append(pa), pa.data("instance", b);
                  var d = c.scrollTop() - ("static" != c.css("position") ? c.offset().top : 0),
                      e = c.scrollLeft() - ("static" != c.css("position") ? c.offset().left : 0);
                  e -= b.helpers.getPX(c.css("border-left-width")), d -= b.helpers.getPX(c.css("border-top-width")), pa.css("top", (b.opts.iframe ? oa.offset().top : oa.offset().top + d) - 1).css("left", (b.opts.iframe ? oa.offset().left : oa.offset().left + e) - 1).css("width", oa.get(0).getBoundingClientRect().width).css("height", oa.get(0).getBoundingClientRect().height).addClass("fr-active") }
  
              function k(a) {
                  return '<div class="fr-handler fr-h' + a + '"></div>' }
  
              function l(c) {
                  if (!b.core.sameInstance(pa)) return !0;
                  if (c.preventDefault(), c.stopPropagation(), b.$el.find("img.fr-error").left) return !1;
                  b.undo.canDo() || b.undo.saveStep(), qa = a(this), qa.data("start-x", c.pageX || c.originalEvent.touches[0].pageX), qa.data("start-width", oa.width());
                  var d = oa.width();
                  if (b.opts.imageResizeWithPercent) {
                      var e = oa.parentsUntil(b.$el, b.html.blockTagsQuery()).get(0) || b.$el.get(0);
                      oa.css("width", (d / a(e).outerWidth() * 100).toFixed(2) + "%") } else oa.css("width", d);
                  ra.show(), b.popups.hideAll(), ca() }
  
              function m(c) {
                  if (!b.core.sameInstance(pa)) return !0;
                  if (qa && oa) {
                      if (c.preventDefault(), b.$el.find("img.fr-error").left) return !1;
                      var d = c.pageX || (c.originalEvent.touches ? c.originalEvent.touches[0].pageX : null);
                      if (!d) return !1;
                      var e = qa.data("start-x"),
                          f = d - e,
                          g = qa.data("start-width");
                      if ((qa.hasClass("fr-hnw") || qa.hasClass("fr-hsw")) && (f = 0 - f), b.opts.imageResizeWithPercent) {
                          var h = oa.parentsUntil(b.$el, b.html.blockTagsQuery()).get(0) || b.$el.get(0);
                          g = ((g + f) / a(h).outerWidth() * 100).toFixed(2), b.opts.imageRoundPercent && (g = Math.round(g)), oa.css("width", g + "%") } else g + f >= b.opts.imageMinWidth && oa.css("width", g + f);
                      oa.css("height", "").removeAttr("height"), j(), b.events.trigger("image.resize", [ma()]) } }
  
              function n(a) {
                  if (!b.core.sameInstance(pa)) return !0;
                  if (qa && oa) {
                      if (a && a.stopPropagation(), b.$el.find("img.fr-error").left) return !1;
                      qa = null, ra.hide(), j(), e(), b.undo.saveStep(), b.events.trigger("image.resizeEnd", [ma()]) } }
  
              function o(a, c) { b.edit.on(), oa && oa.addClass("fr-error"), t(b.language.translate("Something went wrong. Please try again.")), b.events.trigger("image.error", [{ code: a, message: Aa[a] }, c]) }
  
              function p(a) {
                  if (a) return b.$wp && b.events.$on(b.$wp, "scroll", function() { oa && b.popups.isVisible("image.edit") && e() }), !0;
                  var c = "";
                  b.opts.imageEditButtons.length > 1 && (c += '<div class="fr-buttons">', c += b.button.buildList(b.opts.imageEditButtons), c += "</div>");
                  var d = { buttons: c },
                      f = b.popups.create("image.edit", d);
                  return f }
  
              function q(c) {
                  var d = b.popups.get("image.insert");
                  if (d || (d = J()), b.popups.setContainer("image.insert", a(b.opts.scrollableContainer)), d.find(".fr-layer.fr-active").removeClass("fr-active").addClass("fr-pactive"), d.find(".fr-image-progress-bar-layer").addClass("fr-active"), d.find(".fr-buttons").hide(), oa) {
                      var e = oa.offset().left + oa.width() / 2,
                          f = oa.offset().top + oa.height();
                      b.popups.show("image.insert", e, f, oa.outerHeight()) } "undefined" == typeof c && s("Uploading", 0) }
  
              function r(a) {
                  var c = b.popups.get("image.insert");
                  c && (c.find(".fr-layer.fr-pactive").addClass("fr-active").removeClass("fr-pactive"), c.find(".fr-image-progress-bar-layer").removeClass("fr-active"), c.find(".fr-buttons").show(), (a || b.$el.find("img.fr-error").length) && (b.events.focus(), b.$el.find("img.fr-error").remove(), b.undo.saveStep(), b.undo.run(), b.undo.dropRedo())) }
  
              function s(a, c) {
                  var d = b.popups.get("image.insert");
                  if (d) {
                      var e = d.find(".fr-image-progress-bar-layer");
                      e.find("h3").text(a + (c ? " " + c + "%" : "")), e.removeClass("fr-error"), c ? (e.find("div").removeClass("fr-indeterminate"), e.find("div > span").css("width", c + "%")) : e.find("div").addClass("fr-indeterminate") } }
  
              function t(a) {
                  var c = b.popups.get("image.insert"),
                      d = c.find(".fr-image-progress-bar-layer");
                  d.addClass("fr-error"), d.find("h3").text(a) }
  
              function u() {
                  var a = b.popups.get("image.insert"),
                      c = a.find(".fr-image-by-url-layer input");
                  c.val().length > 0 && (q(), s("Loading image"), x(b.helpers.sanitizeURL(c.val()), !0, [], oa), c.val(""), c.blur()) }
  
              function v(a) { _.call(a.get(0)) }
  
              function w() {
                  var c = a(this);
                  b.popups.hide("image.insert"), c.removeClass("fr-uploading"), c.next().is("br") && c.next().remove(), v(c), b.events.trigger("image.loaded", [c]) }
  
              function x(a, c, d, e, f) { b.edit.off(), s("Loading image");
                  var g = new Image;
                  g.onload = function() {
                      var c, g;
                      if (e) {
                          var h = e.data("fr-old-src");
                          b.$wp ? (c = e.clone().removeData("fr-old-src").removeClass("fr-uploading"), h && e.attr("src", h), e.replaceWith(c), c.off("load")) : c = e;
                          for (var j = c.get(0).attributes, k = 0; k < j.length; k++) {
                              var l = j[k];
                              0 === l.nodeName.indexOf("data-") && c.removeAttr(l.nodeName) }
                          if ("undefined" != typeof d)
                              for (g in d) d.hasOwnProperty(g) && "link" != g && c.attr("data-" + g, d[g]);
                          c.on("load", w), c.attr("src", a), b.edit.on(), i(), b.undo.saveStep(), b.events.trigger(h ? "image.replaced" : "image.inserted", [c, f]) } else c = D(a, d, w), i(), b.undo.saveStep(), b.events.trigger("image.inserted", [c, f]) }, g.onerror = function() { o(ta) }, g.src = a }
  
              function y(c) {
                  try {
                      if (b.events.trigger("image.uploaded", [c], !0) === !1) return b.edit.on(), !1;
                      var d = a.parseJSON(c);
                      return d.link ? d : (o(ua, c), !1) } catch (e) {
                      return o(wa, c), !1 } }
  
              function z(c) {
                  try {
                      var d = a(c).find("Location").text(),
                          e = a(c).find("Key").text();
                      return b.events.trigger("image.uploadedToS3", [d, e, c], !0) === !1 ? (b.edit.on(), !1) : d } catch (f) {
                      return o(wa, c), !1 } }
  
              function A(a) { s("Loading image");
                  var c = this.status,
                      d = this.response,
                      e = this.responseXML,
                      f = this.responseText;
                  try {
                      if (b.opts.imageUploadToS3)
                          if (201 == c) {
                              var g = z(e);
                              g && x(g, !1, [], a, d || e) } else o(wa, d || e);
                      else if (c >= 200 && 300 > c) {
                          var h = y(f);
                          h && x(h.link, !1, h, a, d || f) } else o(va, d || f) } catch (i) { o(wa, d || f) } }
  
              function B() { o(wa, this.response || this.responseText || this.responseXML) }
  
              function C(a) {
                  if (a.lengthComputable) {
                      var b = a.loaded / a.total * 100 | 0;
                      s("Uploading", b) } }
  
              function D(c, d, e) {
                  var f, g = "";
                  if (d && "undefined" != typeof d)
                      for (f in d) d.hasOwnProperty(f) && "link" != f && (g += " data-" + f + '="' + d[f] + '"');
                  var h = b.opts.imageDefaultWidth || "auto";
                  h && "auto" != h && ("" + h).indexOf("px") < 0 && ("" + h).indexOf("%") < 0 && (h += "px");
                  var i = a('<img class="fr-di' + b.opts.imageDefaultDisplay[0] + ("center" != b.opts.imageDefaultAlign ? " fr-fi" + b.opts.imageDefaultAlign[0] : "") + '" src="' + c + '"' + g + (h ? ' style="width: ' + h + ';"' : "") + ">");
                  i.on("load", e), b.edit.on(), b.events.focus(!0), b.selection.restore(), b.undo.saveStep(), b.opts.imageSplitHTML ? b.markers.split() : b.markers.insert();
                  var j = b.$el.find(".fr-marker");
                  return j.replaceWith(i), b.html.wrap(), b.selection.clear(), i }
  
              function E(c, d, e) {
                  function f() {
                      var e = a(this);
                      e.off("load"), e.addClass("fr-uploading"), e.next().is("br") && e.next().remove(), b.placeholder.refresh(), e.is(oa) || v(e), j(), q(), b.edit.off(), c.onload = function() { A.call(c, e) }, c.onerror = B, c.upload.onprogress = C, c.send(d) }
                  var g, h = new FileReader;
                  h.addEventListener("load", function() {
                      for (var a = atob(h.result.split(",")[1]), c = [], d = 0; d < a.length; d++) c.push(a.charCodeAt(d));
                      var e = window.URL.createObjectURL(new Blob([new Uint8Array(c)], { type: "image/jpeg" }));
                      oa ? (oa.on("load", f), b.edit.on(), b.undo.saveStep(), oa.data("fr-old-src", oa.attr("src")), oa.attr("src", e)) : g = D(e, null, f) }, !1), h.readAsDataURL(e) }
  
              function F(a) {
                  if (b.events.trigger("image.beforeUpload", [a]) === !1) return !1;
                  if ("undefined" != typeof a && a.length > 0) {
                      var c = a[0];
                      if (c.size > b.opts.imageMaxSize) return o(xa), !1;
                      if (b.opts.imageAllowedTypes.indexOf(c.type.replace(/image\//g, "")) < 0) return o(ya), !1;
                      var d;
                      if (b.drag_support.formdata && (d = b.drag_support.formdata ? new FormData : null), d) {
                          var e;
                          if (b.opts.imageUploadToS3 !== !1) { d.append("key", b.opts.imageUploadToS3.keyStart + (new Date).getTime() + "-" + (c.name || "untitled")), d.append("success_action_status", "201"), d.append("X-Requested-With", "xhr"), d.append("Content-Type", c.type);
                              for (e in b.opts.imageUploadToS3.params) b.opts.imageUploadToS3.params.hasOwnProperty(e) && d.append(e, b.opts.imageUploadToS3.params[e]) }
                          for (e in b.opts.imageUploadParams) b.opts.imageUploadParams.hasOwnProperty(e) && d.append(e, b.opts.imageUploadParams[e]);
                          d.append(b.opts.imageUploadParam, c);
                          var f = b.opts.imageUploadURL;
                          b.opts.imageUploadToS3 && (f = "https://" + b.opts.imageUploadToS3.region + ".amazonaws.com/" + b.opts.imageUploadToS3.bucket);
                          var g = b.core.getXHR(f, b.opts.imageUploadMethod);
                          E(g, d, c) } } }
  
              function G(c) { b.events.$on(c, "dragover dragenter", ".fr-image-upload-layer", function() {
                      return a(this).addClass("fr-drop"), !1 }), b.events.$on(c, "dragleave dragend", ".fr-image-upload-layer", function() {
                      return a(this).removeClass("fr-drop"), !1 }), b.events.$on(c, "drop", ".fr-image-upload-layer", function(d) { d.preventDefault(), d.stopPropagation(), a(this).removeClass("fr-drop");
                      var e = d.originalEvent.dataTransfer;
                      if (e && e.files) {
                          var f = c.data("instance") || b;
                          f.image.upload(e.files) } }), b.events.$on(c, "change", '.fr-image-upload-layer input[type="file"]', function() {
                      if (this.files) {
                          var d = c.data("instance") || b;
                          d.image.upload(this.files) }
                      a(this).val("") }) }
  
              function H(c) {
                  var d = c.originalEvent.dataTransfer;
                  if (d && d.files && d.files.length) {
                      var e = d.files[0];
                      if (e && e.type && b.opts.imageAllowedTypes.indexOf(e.type.replace(/image\//g, "")) >= 0) { b.markers.remove(), b.markers.insertAtPoint(c.originalEvent), b.$el.find(".fr-marker").replaceWith(a.FE.MARKERS), b.popups.hideAll();
                          var f = b.popups.get("image.insert");
                          return f || (f = J()), b.popups.setContainer("image.insert", a(b.opts.scrollableContainer)), b.popups.show("image.insert", c.originalEvent.pageX, c.originalEvent.pageY), q(), F(d.files), c.preventDefault(), c.stopPropagation(), !1 } } }
  
              function I() { b.events.$on(b.$el, b._mousedown, "IMG" == b.$el.get(0).tagName ? null : 'img:not([contenteditable="false"])', function(c) {
                      return a(this).parents('[contenteditable="false"]:not(.fr-element)').length ? !0 : (b.selection.clear(), sa = !0, b.browser.msie && (b.events.disableBlur(), b.$el.attr("contenteditable", !1)), b.draggable || c.preventDefault(), void c.stopPropagation()) }), b.events.$on(b.$el, b._mouseup, "IMG" == b.$el.get(0).tagName ? null : 'img:not([contenteditable="false"])', function(c) {
                      return a(this).parents('[contenteditable="false"]:not(.fr-element)').length ? !0 : void(sa && (sa = !1, c.stopPropagation(), b.browser.msie && (b.$el.attr("contenteditable", !0), b.events.enableBlur()))) }), b.events.on("drop", H), b.events.on("mousedown window.mousedown", ba), b.events.on("window.touchmove", ca), b.events.on("mouseup window.mouseup", aa), b.events.on("commands.mousedown", function(a) { a.parents(".fr-toolbar").length > 0 && aa() }), b.events.on("blur image.hideResizer commands.undo commands.redo element.dropped", function() { sa = !1, aa(!0) }) }
  
              function J(a) {
                  if (a) return b.popups.onRefresh("image.insert", c), b.popups.onHide("image.insert", f), !0;
                  var d, e = "";
                  b.opts.imageInsertButtons.length > 1 && (e = '<div class="fr-buttons">' + b.button.buildList(b.opts.imageInsertButtons) + "</div>");
                  var g = b.opts.imageInsertButtons.indexOf("imageUpload"),
                      h = b.opts.imageInsertButtons.indexOf("imageByURL"),
                      i = "";
                  g >= 0 && (d = " fr-active", h >= 0 && g > h && (d = ""), i = '<div class="fr-image-upload-layer' + d + ' fr-layer" id="fr-image-upload-layer-' + b.id + '"><strong>' + b.language.translate("Drop image") + "</strong><br>(" + b.language.translate("or click") + ')<div class="fr-form"><input type="file" accept="image/*" tabIndex="-1"></div></div>');
                  var j = "";
                  h >= 0 && (d = " fr-active", g >= 0 && h > g && (d = ""), j = '<div class="fr-image-by-url-layer' + d + ' fr-layer" id="fr-image-by-url-layer-' + b.id + '"><div class="fr-input-line"><input type="text" placeholder="http://" tabIndex="1"></div><div class="fr-action-buttons"><button type="button" class="fr-command fr-submit" data-cmd="imageInsertByURL" tabIndex="2">' + b.language.translate("Insert") + "</button></div></div>");
                  var k = '<div class="fr-image-progress-bar-layer fr-layer"><h3 class="fr-message">Uploading</h3><div class="fr-loader"><span class="fr-progress"></span></div><div class="fr-action-buttons"><button type="button" class="fr-command fr-back" data-cmd="imageDismissError" tabIndex="2">OK</button></div></div>',
                      l = { buttons: e, upload_layer: i, by_url_layer: j, progress_bar: k },
                      m = b.popups.create("image.insert", l);
                  return b.$wp && b.events.$on(b.$wp, "scroll", function() { oa && b.popups.isVisible("image.insert") && ja() }), G(m), m }
  
              function K() {
                  if (oa) {
                      var a = b.popups.get("image.alt");
                      a.find("input").val(oa.attr("alt") || "").trigger("change") } }
  
              function L() {
                  var c = b.popups.get("image.alt");
                  c || (c = M()), r(), b.popups.refresh("image.alt"), b.popups.setContainer("image.alt", a(b.opts.scrollableContainer));
                  var d = oa.offset().left + oa.width() / 2,
                      e = oa.offset().top + oa.height();
                  b.popups.show("image.alt", d, e, oa.outerHeight()) }
  
              function M(a) {
                  if (a) return b.popups.onRefresh("image.alt", K), !0;
                  var c = "";
                  c = '<div class="fr-buttons">' + b.button.buildList(b.opts.imageAltButtons) + "</div>";
                  var d = "";
                  d = '<div class="fr-image-alt-layer fr-layer fr-active" id="fr-image-alt-layer-' + b.id + '"><div class="fr-input-line"><input type="text" placeholder="' + b.language.translate("Alternate Text") + '" tabIndex="1"></div><div class="fr-action-buttons"><button type="button" class="fr-command fr-submit" data-cmd="imageSetAlt" tabIndex="2">' + b.language.translate("Update") + "</button></div></div>";
                  var e = { buttons: c, alt_layer: d },
                      f = b.popups.create("image.alt", e);
                  return b.$wp && b.events.$on(b.$wp, "scroll.image-alt", function() { oa && b.popups.isVisible("image.alt") && L() }), f }
  
              function N(a) {
                  if (oa) {
                      var c = b.popups.get("image.alt");
                      oa.attr("alt", a || c.find("input").val() || ""), c.find("input:focus").blur(), v(oa) } }
  
              function O() {
                  if (oa) {
                      var a = b.popups.get("image.size");
                      a.find('input[name="width"]').val(oa.get(0).style.width).trigger("change"), a.find('input[name="height"]').val(oa.get(0).style.height).trigger("change") } }
  
              function P() {
                  var c = b.popups.get("image.size");
                  c || (c = Q()), r(), b.popups.refresh("image.size"), b.popups.setContainer("image.size", a(b.opts.scrollableContainer));
                  var d = oa.offset().left + oa.width() / 2,
                      e = oa.offset().top + oa.height();
                  b.popups.show("image.size", d, e, oa.outerHeight()) }
  
              function Q(a) {
                  if (a) return b.popups.onRefresh("image.size", O), !0;
                  var c = "";
                  c = '<div class="fr-buttons">' + b.button.buildList(b.opts.imageSizeButtons) + "</div>";
                  var d = "";
                  d = '<div class="fr-image-size-layer fr-layer fr-active" id="fr-image-size-layer-' + b.id + '"><div class="fr-image-group"><div class="fr-input-line"><input type="text" name="width" placeholder="' + b.language.translate("Width") + '" tabIndex="1"></div><div class="fr-input-line"><input type="text" name="height" placeholder="' + b.language.translate("Height") + '" tabIndex="1"></div></div><div class="fr-action-buttons"><button type="button" class="fr-command fr-submit" data-cmd="imageSetSize" tabIndex="2">' + b.language.translate("Update") + "</button></div></div>";
                  var e = { buttons: c, size_layer: d },
                      f = b.popups.create("image.size", e);
                  return b.$wp && b.events.$on(b.$wp, "scroll.image-size", function() { oa && b.popups.isVisible("image.size") && P() }), f }
  
              function R(a, c) {
                  if (oa) {
                      var d = b.popups.get("image.size");
                      oa.css("width", a || d.find('input[name="width"]').val()), oa.css("height", c || d.find('input[name="height"]').val()), d.find("input:focus").blur(), v(oa) } }
  
              function S(a) {
                  var c, d, e = b.popups.get("image.insert");
                  if (oa || b.opts.toolbarInline) oa && (d = oa.offset().top + oa.outerHeight());
                  else {
                      var f = b.$tb.find('.fr-command[data-cmd="insertImage"]');
                      c = f.offset().left + f.outerWidth() / 2, d = f.offset().top + (b.opts.toolbarBottom ? 10 : f.outerHeight() - 10) }!oa && b.opts.toolbarInline && (d = e.offset().top - b.helpers.getPX(e.css("margin-top")), e.hasClass("fr-above") && (d += e.outerHeight())), e.find(".fr-layer").removeClass("fr-active"), e.find(".fr-" + a + "-layer").addClass("fr-active"), b.popups.show("image.insert", c, d, oa ? oa.outerHeight() : 0) }
  
              function T(a) {
                  var c = b.popups.get("image.insert");
                  c.find(".fr-image-upload-layer").hasClass("fr-active") && a.addClass("fr-active") }
  
              function U(a) {
                  var c = b.popups.get("image.insert");
                  c.find(".fr-image-by-url-layer").hasClass("fr-active") && a.addClass("fr-active") }
  
              function V() {
                  var c;
                  b.shared.$image_resizer ? (pa = b.shared.$image_resizer, ra = b.shared.$img_overlay, b.events.on("destroy", function() { pa.removeClass("fr-active").appendTo(a("body")) }, !0)) : (b.shared.$image_resizer = a('<div class="fr-image-resizer"></div>'), pa = b.shared.$image_resizer, b.events.$on(pa, "mousedown", function(a) { a.stopPropagation() }, !0), b.opts.imageResize && (pa.append(k("nw") + k("ne") + k("sw") + k("se")), b.shared.$img_overlay = a('<div class="fr-image-overlay"></div>'), ra = b.shared.$img_overlay, c = pa.get(0).ownerDocument, a(c).find("body").append(ra))), b.events.on("shared.destroy", function() { pa.html("").removeData().remove(), b.opts.imageResize && ra.remove() }, !0), b.helpers.isMobile() || b.events.$on(a(b.o_win), "resize", function() { oa && !oa.hasClass("fr-uploading") ? aa(!0) : oa && (j(), ja(), q(!1)) }), b.opts.imageResize && (c = pa.get(0).ownerDocument, b.events.$on(pa, b._mousedown, ".fr-handler", l), b.events.$on(a(c), b._mousemove, m), b.events.$on(a(c.defaultView || c.parentWindow), b._mouseup, n), b.events.$on(ra, "mouseleave", n)) }
  
              function W(c) { c = c || oa, c && b.events.trigger("image.beforeRemove", [c]) !== !1 && (b.popups.hideAll(), aa(!0), c.get(0) == b.$el.get(0) ? c.removeAttr("src") : ("A" == c.get(0).parentNode.tagName ? (b.selection.setBefore(c.get(0).parentNode) || b.selection.setAfter(c.get(0).parentNode), a(c.get(0).parentNode).remove()) : (b.selection.setBefore(c.get(0)) || b.selection.setAfter(c.get(0)), c.remove()), b.selection.restore(), b.html.fillEmptyBlocks()), b.undo.saveStep()) }
  
              function X() {
                  if (I(), "IMG" == b.$el.get(0).tagName && b.$el.addClass("fr-view"), b.events.$on(b.$el, b.helpers.isMobile() && !b.helpers.isWindowsPhone() ? "touchend" : "click", "IMG" == b.$el.get(0).tagName ? null : 'img:not([contenteditable="false"])', _), b.helpers.isMobile() && (b.events.$on(b.$el, "touchstart", "IMG" == b.$el.get(0).tagName ? null : 'img:not([contenteditable="false"])', function() { Ca = !1 }), b.events.$on(b.$el, "touchmove", function() { Ca = !0 })), b.events.on("window.keydown keydown", function(c) {
                          var d = c.which;
                          return !oa || d != a.FE.KEYCODE.BACKSPACE && d != a.FE.KEYCODE.DELETE ? oa && d == a.FE.KEYCODE.ESC ? (aa(!0), c.preventDefault(), !1) : oa && !b.keys.ctrlKey(c) ? (c.preventDefault(), !1) : void 0 : (c.preventDefault(), c.stopPropagation(), W(), !1) }, !0), b.events.$on(a(b.o_win), "keydown", function(b) {
                          var c = b.which;
                          return oa && c == a.FE.KEYCODE.BACKSPACE ? (b.preventDefault(), !1) : void 0 }), b.events.on("paste.before", Z), b.events.on("paste.beforeCleanup", $), b.events.on("paste.after", Y), b.events.on("html.set", h), h(), b.events.on("html.get", function(a) {
                          return a = a.replace(/<(img)((?:[\w\W]*?))class="([\w\W]*?)(fr-uploading|fr-error)([\w\W]*?)"((?:[\w\W]*?))>/g, "") }), b.opts.imageOutputSize) {
                      var c;
                      b.events.on("html.beforeGet", function() { c = b.$el.get(0).querySelectorAll("img");
                          for (var d = 0; d < c.length; d++) c[d].setAttribute("width", a(c[d]).width()), c[d].setAttribute("height", a(c[d]).height()) }), b.events.on("html.afterGet", function() {
                          for (var a = 0; a < c.length; a++) c[a].removeAttribute("width"), c[a].removeAttribute("height") }) }
                  b.opts.iframe && b.events.on("image.loaded", b.size.syncIframe), b.$wp && (i(), b.events.on("contentChanged", i)), b.events.$on(a(b.o_win), "orientationchange.image", function() { setTimeout(function() {
                          var a = ma();
                          a && v(a) }, 0) }), p(!0), J(!0), Q(!0), M(!0), b.events.on("node.remove", function(a) {
                      return "IMG" == a.get(0).tagName ? (W(a), !1) : void 0 }) }
  
              function Y() { b.opts.imagePaste ? b.$el.find("img[data-fr-image-pasted]").each(function(c, d) {
                      if (0 === d.src.indexOf("data:")) {
                          if (b.events.trigger("image.beforePasteUpload", [d]) === !1) return !1;
                          var f = b.opts.imageDefaultWidth || "auto"; "auto" != f && (f += b.opts.imageResizeWithPercent ? "%" : "px"), a(d).css("width", f), a(d).addClass("fr-dib"), oa = a(d), j(), e(), ja(), q(), b.edit.off();
                          for (var g = atob(a(d).attr("src").split(",")[1]), h = [], i = 0; i < g.length; i++) h.push(g.charCodeAt(i));
                          var k = new Blob([new Uint8Array(h)], { type: "image/jpeg" });
                          F([k]), a(d).removeAttr("data-fr-image-pasted") } else 0 !== d.src.indexOf("http") ? (b.selection.save(), a(d).remove(), b.selection.restore()) : a(d).removeAttr("data-fr-image-pasted") }) : b.$el.find("img[data-fr-image-pasted]").remove() }
  
              function Z(a) {
                  if (a && a.clipboardData && a.clipboardData.items && a.clipboardData.items[0]) {
                      var c = a.clipboardData.items[0].getAsFile();
                      if (c) {
                          var d = new FileReader;
                          return d.onload = function(a) {
                              var c = a.target.result,
                                  d = b.opts.imageDefaultWidth || "auto";
                              d && "auto" != d && ("" + d).indexOf("px") < 0 && ("" + d).indexOf("%") < 0 && (d += "px"), b.html.insert('<img data-fr-image-pasted="true" class="fr-di' + b.opts.imageDefaultDisplay[0] + ("center" != b.opts.imageDefaultAlign ? " fr-fi" + b.opts.imageDefaultAlign[0] : "") + '" src="' + c + '"' + (d ? ' style="width: ' + d + ';"' : "") + ">"), b.events.trigger("paste.after") }, d.readAsDataURL(c), !1 } } }
  
              function $(a) {
                  return a = a.replace(/<img /gi, '<img data-fr-image-pasted="true" ') }
  
              function _(c) {
                  if (a(this).parents('[contenteditable="false"]:not(.fr-element)').length) return !0;
                  if (c && "touchend" == c.type && Ca) return !0;
                  if (c && b.edit.isDisabled()) return c.stopPropagation(), c.preventDefault(), !1;
                  for (var d = 0; d < a.FE.INSTANCES.length; d++) a.FE.INSTANCES[d] != b && a.FE.INSTANCES[d].events.trigger("image.hideResizer");
                  b.toolbar.disable(), c && (c.stopPropagation(), c.preventDefault()), b.helpers.isMobile() && (b.events.disableBlur(), b.$el.blur(), b.events.enableBlur()), b.opts.iframe && b.size.syncIframe(), oa = a(this), ka(), j(), e(), b.selection.clear(), b.button.bulkRefresh(), b.events.trigger("video.hideResizer") }
  
              function aa(a) { oa && (da() || a === !0) && (b.toolbar.enable(), pa.removeClass("fr-active"), b.popups.hide("image.edit"), oa = null, ca()) }
  
              function ba() { Da = !0 }
  
              function ca() { Da = !1 }
  
              function da() {
                  return Da }
  
              function ea(a) { oa.removeClass("fr-fir fr-fil"), "left" == a ? oa.addClass("fr-fil") : "right" == a && oa.addClass("fr-fir"), j(), e() }
  
              function fa(a) { oa && (oa.hasClass("fr-fil") ? a.find("> *:first").replaceWith(b.icon.create("align-left")) : oa.hasClass("fr-fir") ? a.find("> *:first").replaceWith(b.icon.create("align-right")) : a.find("> *:first").replaceWith(b.icon.create("align-justify"))) }
  
              function ga(a, b) {
                  if (oa) {
                      var c = "justify";
                      oa.hasClass("fr-fil") ? c = "left" : oa.hasClass("fr-fir") && (c = "right"), b.find('.fr-command[data-param1="' + c + '"]').addClass("fr-active") } }
  
              function ha(a) {
                  oa.removeClass("fr-dii fr-dib"), "inline" == a ? oa.addClass("fr-dii") : "block" == a && oa.addClass("fr-dib"),
                      j(), e()
              }
  
              function ia(a, b) {
                  var c = "block";
                  oa.hasClass("fr-dii") && (c = "inline"), b.find('.fr-command[data-param1="' + c + '"]').addClass("fr-active") }
  
              function ja() {
                  var c = b.popups.get("image.insert");
                  c || (c = J()), b.popups.isVisible("image.insert") || (r(), b.popups.refresh("image.insert"), b.popups.setContainer("image.insert", a(b.opts.scrollableContainer)));
                  var d = oa.offset().left + oa.width() / 2,
                      e = oa.offset().top + oa.height();
                  b.popups.show("image.insert", d, e, oa.outerHeight()) }
  
              function ka() {
                  if (oa) { b.selection.clear();
                      var a = b.doc.createRange();
                      a.selectNode(oa.get(0));
                      var c = b.selection.get();
                      c.addRange(a) } }
  
              function la() { oa ? (a(".fr-popup input:focus").blur(), v(oa)) : (b.events.disableBlur(), b.selection.restore(), b.events.enableBlur(), b.popups.hide("image.insert"), b.toolbar.showInline()) }
  
              function ma() {
                  return oa }
  
              function na(a, c, d) {
                  if ("undefined" == typeof c && (c = b.opts.imageStyles), "undefined" == typeof d && (d = b.opts.imageMultipleStyles), !oa) return !1;
                  if (!d) {
                      var e = Object.keys(c);
                      e.splice(e.indexOf(a), 1), oa.removeClass(e.join(" ")) }
                  oa.toggleClass(a), v(oa) }
              var oa, pa, qa, ra, sa = !1,
                  ta = 1,
                  ua = 2,
                  va = 3,
                  wa = 4,
                  xa = 5,
                  ya = 6,
                  za = 7,
                  Aa = {};
              Aa[ta] = "Image cannot be loaded from the passed link.", Aa[ua] = "No link in upload response.", Aa[va] = "Error during file upload.", Aa[wa] = "Parsing response failed.", Aa[xa] = "File is too large.", Aa[ya] = "Image file type is invalid.", Aa[za] = "Files can be uploaded only to same domain in IE 8 and IE 9.";
              var Ba, Ca, Da = !1;
              return { _init: X, showInsertPopup: d, showLayer: S, refreshUploadButton: T, refreshByURLButton: U, upload: F, insertByURL: u, align: ea, refreshAlign: fa, refreshAlignOnShow: ga, display: ha, refreshDisplayOnShow: ia, replace: ja, back: la, get: ma, insert: x, showProgressBar: q, remove: W, hideProgressBar: r, applyStyle: na, showAltPopup: L, showSizePopup: P, setAlt: N, setSize: R, exitEdit: aa, edit: v }
          }, a.FE.DefineIcon("insertImage", { NAME: "image" }), a.FE.RegisterShortcut(80, "insertImage"), a.FE.RegisterCommand("insertImage", { title: "Insert Image", undo: !1, focus: !0, refershAfterCallback: !1, popup: !0, callback: function() { this.popups.isVisible("image.insert") ? (this.$el.find(".fr-marker") && (this.events.disableBlur(), this.selection.restore()), this.popups.hide("image.insert")) : this.image.showInsertPopup() }, plugin: "image" }), a.FE.DefineIcon("imageUpload", { NAME: "upload" }), a.FE.RegisterCommand("imageUpload", { title: "Upload Image", undo: !1, focus: !1, callback: function() { this.image.showLayer("image-upload") }, refresh: function(a) { this.image.refreshUploadButton(a) } }), a.FE.DefineIcon("imageByURL", { NAME: "link" }), a.FE.RegisterCommand("imageByURL", { title: "By URL", undo: !1, focus: !1, callback: function() { this.image.showLayer("image-by-url") }, refresh: function(a) { this.image.refreshByURLButton(a) } }), a.FE.RegisterCommand("imageInsertByURL", { title: "Insert Image", undo: !0, refreshAfterCallback: !1, callback: function() { this.image.insertByURL() }, refresh: function(a) {
                  var b = this.image.get();
                  b ? a.text(this.language.translate("Replace")) : a.text(this.language.translate("Insert")) } }), a.FE.DefineIcon("imageDisplay", { NAME: "star" }), a.FE.RegisterCommand("imageDisplay", { title: "Display", type: "dropdown", options: { inline: "Inline", block: "Break Text" }, callback: function(a, b) { this.image.display(b) }, refresh: function(a) { this.opts.imageTextNear || a.addClass("fr-hidden") }, refreshOnShow: function(a, b) { this.image.refreshDisplayOnShow(a, b) } }), a.FE.DefineIcon("imageAlign", { NAME: "align-center" }), a.FE.RegisterCommand("imageAlign", { type: "dropdown", title: "Align", options: { left: "Align Left", justify: "None", right: "Align Right" }, html: function() {
                  var b = '<ul class="fr-dropdown-list">',
                      c = a.FE.COMMANDS.imageAlign.options;
                  for (var d in c) c.hasOwnProperty(d) && (b += '<li><a class="fr-command fr-title" data-cmd="imageAlign" data-param1="' + d + '" title="' + this.language.translate(c[d]) + '">' + this.icon.create("align-" + d) + "</a></li>");
                  return b += "</ul>" }, callback: function(a, b) { this.image.align(b) }, refresh: function(a) { this.image.refreshAlign(a) }, refreshOnShow: function(a, b) { this.image.refreshAlignOnShow(a, b) } }), a.FE.DefineIcon("imageReplace", { NAME: "exchange" }), a.FE.RegisterCommand("imageReplace", { title: "Replace", undo: !1, focus: !1, refreshAfterCallback: !1, callback: function() { this.image.replace() } }), a.FE.DefineIcon("imageRemove", { NAME: "trash" }), a.FE.RegisterCommand("imageRemove", { title: "Remove", callback: function() { this.image.remove() } }), a.FE.DefineIcon("imageBack", { NAME: "arrow-left" }), a.FE.RegisterCommand("imageBack", { title: "Back", undo: !1, focus: !1, back: !0, callback: function() { this.image.back() }, refresh: function(a) {
                  var b = this.image.get();
                  b || this.opts.toolbarInline ? (a.removeClass("fr-hidden"), a.next(".fr-separator").removeClass("fr-hidden")) : (a.addClass("fr-hidden"), a.next(".fr-separator").addClass("fr-hidden")) } }), a.FE.RegisterCommand("imageDismissError", { title: "OK", undo: !1, callback: function() { this.image.hideProgressBar(!0) } }), a.FE.DefineIcon("imageStyle", { NAME: "magic" }), a.FE.RegisterCommand("imageStyle", { title: "Style", type: "dropdown", html: function() {
                  var a = '<ul class="fr-dropdown-list">',
                      b = this.opts.imageStyles;
                  for (var c in b) b.hasOwnProperty(c) && (a += '<li><a class="fr-command" data-cmd="imageStyle" data-param1="' + c + '">' + this.language.translate(b[c]) + "</a></li>");
                  return a += "</ul>" }, callback: function(a, b) { this.image.applyStyle(b) }, refreshOnShow: function(b, c) {
                  var d = this.image.get();
                  d && c.find(".fr-command").each(function() {
                      var b = a(this).data("param1");
                      a(this).toggleClass("fr-active", d.hasClass(b)) }) } }), a.FE.DefineIcon("imageAlt", { NAME: "info" }), a.FE.RegisterCommand("imageAlt", { undo: !1, focus: !1, title: "Alternate Text", callback: function() { this.image.showAltPopup() } }), a.FE.RegisterCommand("imageSetAlt", { undo: !0, focus: !1, title: "Update", refreshAfterCallback: !1, callback: function() { this.image.setAlt() } }), a.FE.DefineIcon("imageSize", { NAME: "arrows-alt" }), a.FE.RegisterCommand("imageSize", { undo: !1, focus: !1, title: "Change Size", callback: function() { this.image.showSizePopup() } }), a.FE.RegisterCommand("imageSetSize", { undo: !0, focus: !1, title: "Update", refreshAfterCallback: !1, callback: function() { this.image.setSize() } }), a.extend(a.FE.DEFAULTS, { imageManagerLoadURL: "http://i.froala.com/load-files", imageManagerLoadMethod: "get", imageManagerLoadParams: {}, imageManagerPreloader: "", imageManagerDeleteURL: "", imageManagerDeleteMethod: "post", imageManagerDeleteParams: {}, imageManagerPageSize: 12, imageManagerScrollOffset: 20, imageManagerToggleTags: !0 }), a.FE.PLUGINS.imageManager = function(b) {
              function c() { z || h(), z.show(), F.show(), U = b.image.get(), A || x(), i(), b.$doc.find("body").addClass("prevent-scroll"), b.helpers.isMobile() && b.$doc.find("body").addClass("fr-mobile") }
  
              function d() { b.events.enableBlur(), z.hide(), F.hide(), b.$doc.find("body").removeClass("prevent-scroll fr-mobile") }
  
              function e() {
                  var b = a(window).outerWidth();
                  return 768 > b ? 2 : 1200 > b ? 3 : 4 }
  
              function f() { B.empty();
                  for (var a = 0; K > a; a++) B.append('<div class="fr-list-column"></div>') }
  
              function g() {
                  var c = "";
                  b.opts.theme && (c = " " + b.opts.theme + "-theme");
                  var d = '<div class="fr-modal' + c + '"><div class="fr-modal-wrapper">';
                  return d += '<div class="fr-modal-title"><div class="fr-modal-title-line"><i class="fa fa-bars fr-modal-more fr-not-available" id="fr-modal-more-' + b.sid + '" title="' + b.language.translate("Tags") + '"></i><h4 data-text="true">' + b.language.translate("Manage Images") + '</h4><i title="' + b.language.translate("Cancel") + '" class="fa fa-times fr-modal-close" id="fr-modal-close"></i></div>', d += '<div class="fr-modal-tags" id="fr-modal-tags"></div>', d += "</div>", d += '<img class="fr-preloader" id="fr-preloader" alt="' + b.language.translate("Loading") + '.." src="' + b.opts.imageManagerPreloader + '" style="display: none;">', d += '<div class="fr-scroller" id="fr-scroller"><div class="fr-image-list" id="fr-image-list"></div></div>', d += "</div></div>", a(d) }
  
              function h() { b.shared.$modal ? (z = b.shared.$modal, F = b.shared.$overlay) : (b.shared.$modal = g(), z = b.shared.$modal, b.helpers.isMobile() || z.addClass("fr-desktop"), z.appendTo("body"), b.shared.$overlay = a('<div class="fr-overlay">').appendTo("body"), F = b.shared.$overlay, b.opts.theme && F.addClass(b.opts.theme + "-theme"), d()), b.events.on("shared.destroy", function() { z.removeData().remove(), F.removeData().remove() }, !0) }
  
              function i() { A.show(), B.find(".fr-list-column").empty(), b.opts.imageManagerLoadURL ? a.ajax({ url: b.opts.imageManagerLoadURL, method: b.opts.imageManagerLoadMethod, data: b.opts.imageManagerLoadParams, dataType: "json", crossDomain: b.opts.requestWithCORS, xhrFields: { withCredentials: b.opts.requestWithCORS }, headers: b.opts.requestHeaders }).done(function(a, c, d) { b.events.trigger("imageManager.imagesLoaded", [a]), j(a, d.response), A.hide() }).fail(function() {
                      var a = this.xhr();
                      s(M, a.response || a.responseText) }) : s(N) }
  
              function j(a, b) {
                  try { B.find(".fr-list-column").empty(), H = 0, I = 0, J = 0, G = a, k() } catch (c) { s(O, b) } }
  
              function k() {
                  if (I < G.length && (B.outerHeight() <= C.outerHeight() + b.opts.imageManagerScrollOffset || C.scrollTop() + b.opts.imageManagerScrollOffset > B.outerHeight() - C.outerHeight())) { H++;
                      for (var a = b.opts.imageManagerPageSize * (H - 1); a < Math.min(G.length, b.opts.imageManagerPageSize * H); a++) l(G[a]) } }
  
              function l(c) {
                  var d = new Image,
                      e = a('<div class="fr-image-container fr-empty fr-image-' + J++ + '" data-loading="' + b.language.translate("Loading") + '.." data-deleting="' + b.language.translate("Deleting") + '..">');
                  p(!1), d.onload = function() { e.height(Math.floor(e.width() / d.width * d.height));
                      var f = a("<img/>");
                      if (c.thumb) f.attr("src", c.thumb);
                      else {
                          if (s(P, c), !c.url) return s(Q, c), !1;
                          f.attr("src", c.url) }
                      if (c.url && f.attr("data-url", c.url), c.tag)
                          if (E.find(".fr-modal-more.fr-not-available").removeClass("fr-not-available"), E.find(".fr-modal-tags").show(), c.tag.indexOf(",") >= 0) {
                              for (var g = c.tag.split(","), h = 0; h < g.length; h++) g[h] = g[h].trim(), 0 === D.find('a[title="' + g[h] + '"]').length && D.append('<a role="button" title="' + g[h] + '">' + g[h] + "</a>");
                              f.attr("data-tag", g.join()) } else 0 === D.find('a[title="' + c.tag.trim() + '"]').length && D.append('<a role="button" title="' + c.tag.trim() + '">' + c.tag.trim() + "</a>"), f.attr("data-tag", c.tag.trim());
                      for (var i in c) c.hasOwnProperty(i) && "thumb" != i && "url" != i && "tag" != i && f.attr("data-" + i, c[i]);
                      e.append(f).append('<i class="fa fa-trash-o fr-delete-img" title="' + b.language.translate("Delete") + '"></i>').append('<i class="fa fa-plus fr-insert-img" title="' + b.language.translate("Insert") + '"></i>'), D.find(".fr-selected-tag").each(function(a, b) { w(f, b.text) || e.hide() }), f.on("load", function() { e.removeClass("fr-empty"), e.height("auto"), I++;
                          var a = n(parseInt(f.parent().attr("class").match(/fr-image-(\d+)/)[1], 10) + 1);
                          o(a), p(!1), I % b.opts.imageManagerPageSize === 0 && k() }), b.events.trigger("imageManager.imageLoaded", [f]) }, d.onerror = function() { I++, e.remove();
                      var a = n(parseInt(e.attr("class").match(/fr-image-(\d+)/)[1], 10) + 1);
                      o(a), s(L, c), I % b.opts.imageManagerPageSize === 0 && k() }, d.src = c.url, m().append(e) }
  
              function m() {
                  var b, c;
                  return B.find(".fr-list-column").each(function(d, e) {
                      var f = a(e);
                      0 === d ? (c = f.outerHeight(), b = f) : f.outerHeight() < c && (c = f.outerHeight(), b = f) }), b }
  
              function n(b) { void 0 === b && (b = 0);
                  for (var c = [], d = J - 1; d >= b; d--) {
                      var e = B.find(".fr-image-" + d);
                      e.length && (c.push(e), a('<div id="fr-image-hidden-container">').append(e), B.find(".fr-image-" + d).remove()) }
                  return c }
  
              function o(a) {
                  for (var b = a.length - 1; b >= 0; b--) m().append(a[b]) }
  
              function p(a) {
                  if (void 0 === a && (a = !0), !z.is(":visible")) return !0;
                  var c = e();
                  if (c != K) { K = c;
                      var d = n();
                      f(), o(d) }
                  var g = b.$win.height(),
                      h = z.find(".fr-modal-wrapper"),
                      i = parseFloat(h.css("margin-top")) + parseFloat(h.css("margin-bottom")),
                      j = parseFloat(h.css("padding-top")) + parseFloat(h.css("padding-bottom")),
                      l = parseFloat(h.css("border-top-width")),
                      m = h.find("h4").outerHeight();
                  C.height(Math.min(B.outerHeight(), g - i - j - m - l)), a && k() }
  
              function q(c) {
                  var e = a(c.currentTarget).siblings("img");
                  if (d(), b.image.showProgressBar(), U) U.trigger("click");
                  else { b.events.focus(!0), b.selection.restore();
                      var f = b.position.getBoundingRect(),
                          g = f.left + f.width / 2,
                          h = f.top + f.height;
                      b.popups.setContainer("image.insert", b.$box || a("body")), b.popups.show("image.insert", g, h) }
                  var i = {},
                      j = e.data();
                  for (var k in j) j.hasOwnProperty(k) && "url" != k && "tag" != k && (i[k] = j[k]);
                  b.image.insert(e.data("url"), !1, i, U) }
  
              function r(c) {
                  var d = a(c.currentTarget).siblings("img"),
                      e = b.language.translate("Are you sure? Image will be deleted.");
                  confirm(e) && (b.opts.imageManagerDeleteURL ? b.events.trigger("imageManager.beforeDeleteImage", [d]) !== !1 && (d.parent().addClass("fr-image-deleting"), a.ajax({ method: b.opts.imageManagerDeleteMethod, url: b.opts.imageManagerDeleteURL, data: a.extend({ src: d.attr("src") }, b.opts.imageManagerDeleteParams), crossDomain: b.opts.requestWithCORS, xhrFields: { withCredentials: b.opts.requestWithCORS }, headers: b.opts.requestHeaders }).done(function(a) { b.events.trigger("imageManager.imageDeleted", [a]);
                      var c = n(parseInt(d.parent().attr("class").match(/fr-image-(\d+)/)[1], 10) + 1);
                      d.parent().remove(), o(c), p(!0) }).fail(function() {
                      var a = this.xhr();
                      s(R, a.response || a.responseText) })) : s(S)) }
  
              function s(c, d) { c >= 10 && 20 > c ? A.hide() : c >= 20 && 30 > c && a(".fr-image-deleting").removeClass("fr-image-deleting"), b.events.trigger("imageManager.error", [{ code: c, message: T[c] }, d]) }
  
              function t() {
                  var a = E.find(".fr-modal-title-line").outerHeight(),
                      b = D.outerHeight();
                  E.toggleClass(".fr-show-tags"), E.hasClass(".fr-show-tags") ? (E.css("height", a + b), D.find("a").css("opacity", 1)) : (E.css("height", a), D.find("a").css("opacity", 0)) }
  
              function u() {
                  var b = D.find(".fr-selected-tag");
                  b.length > 0 ? (B.find("img").parent().show(), b.each(function(b, c) { B.find("img").each(function(b, d) {
                          var e = a(d);
                          w(e, c.text) || e.parent().hide() }) })) : B.find("img").parent().show();
                  var c = n();
                  o(c), k() }
  
              function v(c) { c.preventDefault();
                  var d = a(c.currentTarget);
                  d.toggleClass("fr-selected-tag"), b.opts.imageManagerToggleTags && d.siblings("a").removeClass("fr-selected-tag"), u() }
  
              function w(a, b) {
                  for (var c = a.attr("data-tag").split(","), d = 0; d < c.length; d++)
                      if (c[d] == b) return !0;
                  return !1 }
  
              function x() { A = z.find("#fr-preloader"), B = z.find("#fr-image-list"), C = z.find("#fr-scroller"), D = z.find("#fr-modal-tags"), E = D.parent(), K = e(), f();
                  var c = E.find(".fr-modal-title-line").outerHeight();
                  E.css("height", c), C.css("margin-top", c), b.events.bindClick(z, "i#fr-modal-close", d), b.events.$on(a(b.o_win), "resize", function() { p(G ? !0 : !1) }), b.helpers.isMobile() && (b.events.bindClick(B, "div.fr-image-container", function(b) { z.find(".fr-mobile-selected").removeClass("fr-mobile-selected"), a(b.currentTarget).addClass("fr-mobile-selected") }), z.on(b._mousedown, function() { z.find(".fr-mobile-selected").removeClass("fr-mobile-selected") })), b.events.bindClick(B, ".fr-insert-img", q), b.events.bindClick(B, ".fr-delete-img", r), z.on(b._mousedown + " " + b._mouseup, function(a) { a.stopPropagation() }), z.on(b._mousedown, "*", function() { b.events.disableBlur() }), C.on("scroll", k), b.events.bindClick(z, "i#fr-modal-more-" + b.sid, t), b.events.bindClick(D, "a", v) }
  
              function y() {
                  return b.$wp || "IMG" == b.$el.get(0).tagName ? void 0 : !1 }
              var z, A, B, C, D, E, F, G, H, I, J, K, L = 10,
                  M = 11,
                  N = 12,
                  O = 13,
                  P = 14,
                  Q = 15,
                  R = 21,
                  S = 22,
                  T = {};
              T[L] = "Image cannot be loaded from the passed link.", T[M] = "Error during load images request.", T[N] = "Missing imageManagerLoadURL option.", T[O] = "Parsing load response failed.", T[P] = "Missing image thumb.", T[Q] = "Missing image URL.", T[R] = "Error during delete image request.", T[S] = "Missing imageManagerDeleteURL option.";
              var U;
              return { require: ["image"], _init: y, show: c, hide: d } }, !a.FE.PLUGINS.image) throw new Error("Image manager plugin requires image plugin.");
      a.FE.DEFAULTS.imageInsertButtons.push("imageManager"), a.FE.RegisterCommand("imageManager", { title: "Browse", undo: !1, focus: !1, callback: function() { this.imageManager.show() }, plugin: "imageManager" }), a.FE.DefineIcon("imageManager", { NAME: "folder" }), a.extend(a.FE.DEFAULTS, { inlineStyles: { "Big Red": "font-size: 20px; color: red;", "Small Blue": "font-size: 14px; color: blue;" } }), a.FE.PLUGINS.inlineStyle = function(b) {
          function c(c) { "" !== b.selection.text() ? b.html.insert(a.FE.START_MARKER + '<span style="' + c + '">' + b.selection.text() + "</span>" + a.FE.END_MARKER) : b.html.insert('<span style="' + c + '">' + a.FE.INVISIBLE_SPACE + a.FE.MARKERS + "</span>") }
          return { apply: c } }, a.FE.RegisterCommand("inlineStyle", { type: "dropdown", html: function() {
              var a = '<ul class="fr-dropdown-list">',
                  b = this.opts.inlineStyles;
              for (var c in b) b.hasOwnProperty(c) && (a += '<li><span style="' + b[c] + '"><a class="fr-command" data-cmd="inlineStyle" data-param1="' + b[c] + '" title="' + this.language.translate(c) + '">' + this.language.translate(c) + "</a></span></li>");
              return a += "</ul>" }, title: "Inline Style", callback: function(a, b) { this.inlineStyle.apply(b) }, plugin: "inlineStyle" }), a.FE.DefineIcon("inlineStyle", { NAME: "paint-brush" }), a.extend(a.FE.DEFAULTS, { lineBreakerTags: ["table", "hr", "iframe", "form", "dl", "img"], lineBreakerOffset: 15 }), a.FE.PLUGINS.lineBreaker = function(b) {
          function c(c, d) {
              var e, f, g, h, i, j, k, l;
              if (null == c) h = d.parent(), i = h.offset().top, k = d.offset().top, e = k - Math.min((k - i) / 2, b.opts.lineBreakerOffset), g = h.outerWidth(), f = h.offset().left;
              else if (null == d) h = c.parent(), j = h.offset().top + h.outerHeight(), l = c.offset().top + c.outerHeight(), e = l + Math.min((j - l) / 2, b.opts.lineBreakerOffset), g = h.outerWidth(), f = h.offset().left;
              else { h = c.parent();
                  var m = c.offset().top + c.height(),
                      o = d.offset().top;
                  if (m > o) return !1;
                  e = (m + o) / 2, g = h.outerWidth(), f = h.offset().left }
              b.opts.iframe && (f += b.$iframe.offset().left - a(b.o_win).scrollLeft(), e += b.$iframe.offset().top - a(b.o_win).scrollTop()), b.$box.append(n), n.css("top", e - b.win.pageYOffset), n.css("left", f - b.win.pageXOffset), n.css("width", g), n.data("tag1", c), n.data("tag2", d), n.addClass("fr-visible").data("instance", b) }
  
          function d(a, d) {
              var f, g, h = a.offset().top,
                  i = a.offset().top + a.outerHeight();
              if (Math.abs(i - d) <= b.opts.lineBreakerOffset || Math.abs(d - h) <= b.opts.lineBreakerOffset)
                  if (Math.abs(i - d) < Math.abs(d - h)) { g = a.get(0);
                      for (var j = g.nextSibling; j && j.nodeType == Node.TEXT_NODE && 0 === j.textContent.length;) j = j.nextSibling;
                      if (!j) return c(a, null), !0;
                      if (f = e(j)) return c(a, f), !0 } else {
                      if (g = a.get(0), !g.previousSibling) return c(null, a), !0;
                      if (f = e(g.previousSibling)) return c(f, a), !0 }
              n.removeClass("fr-visible").removeData("instance") }
  
          function e(c) {
              if (c) {
                  var d = a(c);
                  if (0 === b.$el.find(d).length) return null;
                  if (c.nodeType != Node.TEXT_NODE && b.opts.lineBreakerTags.indexOf(c.tagName.toLowerCase()) >= 0) return d;
                  if (d.parents(b.opts.lineBreakerTags.join(",")).length > 0) return c = d.parents(b.opts.lineBreakerTags.join(",")).get(0), a(c) }
              return null }
  
          function f(c) { p = null;
              var f, g, h, i = null,
                  j = b.doc.elementFromPoint(c.pageX - b.win.pageXOffset, c.pageY - b.win.pageYOffset);
              if (j && ("HTML" == j.tagName || "BODY" == j.tagName || b.node.isElement(j)))
                  for (f = 1; f <= b.opts.lineBreakerOffset; f++) {
                      if (g = b.doc.elementFromPoint(c.pageX - b.win.pageXOffset, c.pageY - b.win.pageYOffset - f), g && !b.node.isElement(g) && g != b.$wp.get(0) && a(g).parents(b.$wp).length) { i = e(g);
                          break }
                      if (h = b.doc.elementFromPoint(c.pageX - b.win.pageXOffset, c.pageY - b.win.pageYOffset + f), h && !b.node.isElement(h) && h != b.$wp.get(0) && a(h).parents(b.$wp).length) { i = e(h);
                          break } } else i = e(j);
              i ? d(i, c.pageY) : b.core.sameInstance(n) && n.removeClass("fr-visible").removeData("instance") }
  
          function g(a) {
              return n.hasClass("fr-visible") && !b.core.sameInstance(n) ? !1 : b.popups.areVisible() || b.$el.get(0).querySelectorAll(".fr-selected-cell").length ? (n.removeClass("fr-visible"), !0) : void(o === !1 && (p && clearTimeout(p), p = setTimeout(f, 30, a))) }
  
          function h() { p && clearTimeout(p), n.hasClass("fr-visible") && n.removeClass("fr-visible").removeData("instance") }
  
          function i() { o = !0, h() }
  
          function j() { o = !1 }
  
          function k(c) {
              if (!b.core.sameInstance(n)) return !0;
              c.preventDefault(), n.removeClass("fr-visible").removeData("instance");
              var d = n.data("tag1"),
                  e = n.data("tag2"),
                  f = b.html.defaultTag();
              null == d ? f && "TD" != e.parent().get(0).tagName ? e.before("<" + f + ">" + a.FE.MARKERS + "<br></" + f + ">") : e.before(a.FE.MARKERS + "<br>") : f && "TD" != d.parent().get(0).tagName ? d.after("<" + f + ">" + a.FE.MARKERS + "<br></" + f + ">") : d.after(a.FE.MARKERS + "<br>"), b.selection.restore() }
  
          function l() { b.shared.$line_breaker || (b.shared.$line_breaker = a('<div class="fr-line-breaker"><a class="fr-floating-btn" role="button" tabindex="-1" title="' + b.language.translate("Break") + '"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><rect x="21" y="11" width="2" height="8"/><rect x="14" y="17" width="7" height="2"/><path d="M14.000,14.000 L14.000,22.013 L9.000,18.031 L14.000,14.000 Z"/></svg></a></div>')), n = b.shared.$line_breaker, b.events.on("shared.destroy", function() { n.html("").removeData().remove() }, !0), b.events.on("destroy", function() { n.removeData("instance").removeClass("fr-visible").appendTo("body") }, !0), b.events.$on(n, "mouseleave", h, !0), b.events.$on(n, "mousemove", function(a) { a.stopPropagation() }, !0), b.events.$on(n, "mousedown", "a", function(a) { a.stopPropagation() }, !0), b.events.$on(n, "click", "a", k, !0) }
  
          function m() {
              return b.$wp ? (l(), o = !1, b.events.$on(b.$win, "mousemove", g), b.events.$on(a(b.win), "scroll", h), b.events.on("popups.show.table.edit", h), b.events.$on(a(b.win), "mousedown", i), void b.events.$on(a(b.win), "mouseup", j)) : !1 }
          var n, o, p;
          return { _init: m } }, a.extend(a.FE.POPUP_TEMPLATES, { "link.edit": "[_BUTTONS_]", "link.insert": "[_BUTTONS_][_INPUT_LAYER_]" }), a.extend(a.FE.DEFAULTS, { linkEditButtons: ["linkOpen", "linkStyle", "linkEdit", "linkRemove"], linkInsertButtons: ["linkBack", "|", "linkList"], linkAttributes: {}, linkAutoPrefix: "http://", linkStyles: { "fr-green": "Green", "fr-strong": "Thick" }, linkMultipleStyles: !0, linkConvertEmailAddress: !0, linkAlwaysBlank: !1, linkAlwaysNoFollow: !1, linkList: [{ text: "Froala", href: "https://froala.com", target: "_blank" }, { text: "Google", href: "https://google.com", target: "_blank" }, { displayText: "Facebook", href: "https://facebook.com" }], linkText: !0 }), a.FE.PLUGINS.link = function(b) {
          function c() {
              var c = b.image ? b.image.get() : null;
              if (!c && b.$wp) {
                  var d = b.selection.element(),
                      e = b.selection.endElement();
                  return "A" != d.tagName && (d = a(d).parents("a:first").get(0)), "A" != e.tagName && (e = a(e).parents("a:first").get(0)), e && e == d ? d : null }
              return "A" == b.$el.get(0).tagName && b.core.hasFocus() ? b.$el : c && c.get(0).parentNode && "A" == c.get(0).parentNode.tagName ? c.get(0).parentNode : void 0 }
  
          function d() {
              var a = b.image ? b.image.get() : null,
                  c = [];
              if (a) "A" == a.get(0).parentNode.tagName && c.push(a.get(0).parentNode);
              else {
                  var d, e, f, g;
                  if (b.win.getSelection) {
                      var h = b.win.getSelection();
                      if (h.getRangeAt && h.rangeCount) { g = b.doc.createRange();
                          for (var i = 0; i < h.rangeCount; ++i)
                              if (d = h.getRangeAt(i), e = d.commonAncestorContainer, e && 1 != e.nodeType && (e = e.parentNode), e && "a" == e.nodeName.toLowerCase()) c.push(e);
                              else { f = e.getElementsByTagName("a");
                                  for (var j = 0; j < f.length; ++j) g.selectNodeContents(f[j]), g.compareBoundaryPoints(d.END_TO_START, d) < 1 && g.compareBoundaryPoints(d.START_TO_END, d) > -1 && c.push(f[j]) } } } else if (b.doc.selection && "Control" != b.doc.selection.type)
                      if (d = b.doc.selection.createRange(), e = d.parentElement(), "a" == e.nodeName.toLowerCase()) c.push(e);
                      else { f = e.getElementsByTagName("a"), g = b.doc.body.createTextRange();
                          for (var k = 0; k < f.length; ++k) g.moveToElementText(f[k]), g.compareEndPoints("StartToEnd", d) > -1 && g.compareEndPoints("EndToStart", d) < 1 && c.push(f[k]) } }
              return c }
  
          function e(d) { g(), setTimeout(function() {
                  if (!d || d && (1 == d.which || "mouseup" != d.type)) {
                      var e = c(),
                          g = b.image ? b.image.get() : null;
                      if (e && !g) {
                          if (b.image) {
                              var h = b.node.contents(e);
                              if (1 == h.length && "IMG" == h[0].tagName) {
                                  var i = b.selection.ranges(0);
                                  return 0 === i.startOffset && 0 === i.endOffset ? a(e).before(a.FE.MARKERS) : a(e).after(a.FE.MARKERS), b.selection.restore(), !1 } }
                          d && d.stopPropagation(), f(e) } } }, b.helpers.isIOS() ? 100 : 0) }
  
          function f(c) {
              var d = b.popups.get("link.edit");
              d || (d = h());
              var e = a(c);
              b.popups.isVisible("link.edit") || b.popups.refresh("link.edit"), b.popups.setContainer("link.edit", a(b.opts.scrollableContainer));
              var f = e.offset().left + a(c).outerWidth() / 2,
                  g = e.offset().top + e.outerHeight();
              b.popups.show("link.edit", f, g, e.outerHeight()) }
  
          function g() { b.popups.hide("link.edit") }
  
          function h() {
              var a = "";
              b.opts.linkEditButtons.length > 1 && ("A" == b.$el.get(0).tagName && b.opts.linkEditButtons.indexOf("linkRemove") >= 0 && b.opts.linkEditButtons.splice(b.opts.linkEditButtons.indexOf("linkRemove"), 1), a = '<div class="fr-buttons">' + b.button.buildList(b.opts.linkEditButtons) + "</div>");
              var d = { buttons: a },
                  e = b.popups.create("link.edit", d);
              return b.$wp && b.events.$on(b.$wp, "scroll.link-edit", function() { c() && b.popups.isVisible("link.edit") && f(c()) }), e }
  
          function i() {}
  
          function j() {
              var d = b.popups.get("link.insert"),
                  e = c();
              if (e) {
                  var f, g, h = a(e),
                      i = d.find('input.fr-link-attr[type="text"]'),
                      j = d.find('input.fr-link-attr[type="checkbox"]');
                  for (f = 0; f < i.length; f++) g = a(i[f]), g.val(h.attr(g.attr("name") || ""));
                  for (j.prop("checked", !1), f = 0; f < j.length; f++) g = a(j[f]), h.attr(g.attr("name")) == g.data("checked") && g.prop("checked", !0);
                  d.find('input.fr-link-attr[type="text"][name="text"]').val(h.text()) } else d.find('input.fr-link-attr[type="text"]').val(""), d.find('input.fr-link-attr[type="checkbox"]').prop("checked", !1), d.find('input.fr-link-attr[type="text"][name="text"]').val(b.selection.text());
              d.find("input.fr-link-attr").trigger("change");
              var k = b.image ? b.image.get() : null;
              k ? d.find('.fr-link-attr[name="text"]').parent().hide() : d.find('.fr-link-attr[name="text"]').parent().show() }
  
          function k() {
              var c = b.$tb.find('.fr-command[data-cmd="insertLink"]'),
                  d = b.popups.get("link.insert");
              if (d || (d = l()), !d.hasClass("fr-active"))
                  if (b.popups.refresh("link.insert"), b.popups.setContainer("link.insert", b.$tb || a(b.opts.scrollableContainer)), c.is(":visible")) {
                      var e = c.offset().left + c.outerWidth() / 2,
                          f = c.offset().top + (b.opts.toolbarBottom ? 10 : c.outerHeight() - 10);
                      b.popups.show("link.insert", e, f, c.outerHeight()) } else b.position.forSelection(d), b.popups.show("link.insert") }
  
          function l(a) {
              if (a) return b.popups.onRefresh("link.insert", j), b.popups.onHide("link.insert", i), !0;
              var d = "";
              b.opts.linkInsertButtons.length >= 1 && (d = '<div class="fr-buttons">' + b.button.buildList(b.opts.linkInsertButtons) + "</div>");
              var e = '<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10" height="10" viewBox="0 0 32 32"><path d="M27 4l-15 15-7-7-5 5 12 12 20-20z" fill="#FFF"></path></svg>',
                  f = "",
                  g = 0;
              f = '<div class="fr-link-insert-layer fr-layer fr-active" id="fr-link-insert-layer-' + b.id + '">', f += '<div class="fr-input-line"><input name="href" type="text" class="fr-link-attr" placeholder="URL" tabIndex="' + ++g + '"></div>', b.opts.linkText && (f += '<div class="fr-input-line"><input name="text" type="text" class="fr-link-attr" placeholder="' + b.language.translate("Text") + '" tabIndex="' + ++g + '"></div>');
              for (var h in b.opts.linkAttributes)
                  if (b.opts.linkAttributes.hasOwnProperty(h)) {
                      var k = b.opts.linkAttributes[h];
                      f += '<div class="fr-input-line"><input name="' + h + '" type="text" class="fr-link-attr" placeholder="' + b.language.translate(k) + '" tabIndex="' + ++g + '"></div>' }
              b.opts.linkAlwaysBlank || (f += '<div class="fr-checkbox-line"><span class="fr-checkbox"><input name="target" class="fr-link-attr" data-checked="_blank" type="checkbox" id="fr-link-target-' + b.id + '" tabIndex="' + ++g + '"><span>' + e + '</span></span><label for="fr-link-target-' + b.id + '">' + b.language.translate("Open in new tab") + "</label></div>"), f += '<div class="fr-action-buttons"><button class="fr-command fr-submit" data-cmd="linkInsert" href="#" tabIndex="' + ++g + '" type="button">' + b.language.translate("Insert") + "</button></div></div>";
              var l = { buttons: d, input_layer: f },
                  m = b.popups.create("link.insert", l);
              return b.$wp && b.events.$on(b.$wp, "scroll.link-insert", function() {
                  var a = b.image ? b.image.get() : null;
                  a && b.popups.isVisible("link.insert") && u(), c && b.popups.isVisible("link.insert") && s() }), m }
  
          function m() {
              var d = c(),
                  e = b.image ? b.image.get() : null;
              return b.events.trigger("link.beforeRemove", [d]) === !1 ? !1 : void(e && d ? (e.unwrap(), b.image.edit(e)) : d && (b.selection.save(), a(d).replaceWith(a(d).html()), b.selection.restore(), g())) }
  
          function n() { b.events.on("keyup", function(b) { b.which != a.FE.KEYCODE.ESC && e(b) }), b.events.on("window.mouseup", e), b.helpers.isMobile() && b.events.$on(b.$doc, "selectionchange", e), l(!0), "A" == b.$el.get(0).tagName && b.$el.addClass("fr-view") }
  
          function o(c) {
              var d, e, f = b.opts.linkList[c],
                  g = b.popups.get("link.insert"),
                  h = g.find('input.fr-link-attr[type="text"]'),
                  i = g.find('input.fr-link-attr[type="checkbox"]');
              for (e = 0; e < h.length; e++) d = a(h[e]), f[d.attr("name")] ? d.val(f[d.attr("name")]) : "text" != d.attr("name") && d.val("");
              for (e = 0; e < i.length; e++) d = a(i[e]), d.prop("checked", d.data("checked") == f[d.attr("name")]) }
  
          function p() {
              var c, d, e = b.popups.get("link.insert"),
                  f = e.find('input.fr-link-attr[type="text"]'),
                  g = e.find('input.fr-link-attr[type="checkbox"]'),
                  h = f.filter('[name="href"]').val(),
                  i = f.filter('[name="text"]').val(),
                  j = {};
              for (d = 0; d < f.length; d++) c = a(f[d]), ["href", "text"].indexOf(c.attr("name")) < 0 && (j[c.attr("name")] = c.val());
              for (d = 0; d < g.length; d++) c = a(g[d]), c.is(":checked") ? j[c.attr("name")] = c.data("checked") : j[c.attr("name")] = c.data("unchecked");
              var k = a(b.o_win).scrollTop();
              r(h, i, j), a(b.o_win).scrollTop(k) }
  
          function q() {
              if (!b.selection.isCollapsed()) { b.selection.save();
                  for (var c = b.$el.find(".fr-marker").addClass("fr-unprocessed").toArray(); c.length;) {
                      var d = a(c.pop());
                      d.removeClass("fr-unprocessed");
                      var e = b.node.deepestParent(d.get(0));
                      if (e) {
                          var f = d.get(0),
                              g = "",
                              h = "";
                          do f = f.parentNode, b.node.isBlock(f) || (g += b.node.closeTagString(f), h = b.node.openTagString(f) + h); while (f != e);
                          var i = b.node.openTagString(d.get(0)) + d.html() + b.node.closeTagString(d.get(0));
                          d.replaceWith('<span id="fr-break"></span>');
                          var j = a(e).html();
                          j = j.replace(/<span id="fr-break"><\/span>/g, g + i + h), a(e).html(j) }
                      c = b.$el.find(".fr-marker.fr-unprocessed").toArray() }
                  b.selection.restore() } }
  
          function r(f, g, h) { "undefined" == typeof h && (h = {});
              var i = b.image ? b.image.get() : null;
              i || "A" == b.$el.get(0).tagName ? "A" == b.$el.get(0).tagName && b.$el.focus() : (b.selection.restore(), b.popups.hide("link.insert"));
              var j = f;
              if (b.opts.linkConvertEmailAddress) {
                  var k = /^[\w._]+@[a-zA-Z0-9_-]+?\.[a-zA-Z0-9]{2,3}$/i;
                  k.test(f) && 0 !== f.indexOf("mailto:") && (f = "mailto:" + f) }
              if (0 === f.indexOf("tel:") || 0 === f.indexOf("sms:") || 0 === f.indexOf("mailto:") || 0 === f.indexOf("notes:") || 0 === f.indexOf("data:image") || "" === b.opts.linkAutoPrefix || /^(https?:|ftps?:|)\/\//.test(f) || (f = b.opts.linkAutoPrefix + f), f = b.helpers.sanitizeURL(f), b.opts.linkAlwaysBlank && (h.target = "_blank"), b.opts.linkAlwaysNoFollow && (h.rel = "nofollow"), g = g || "", f === b.opts.linkAutoPrefix) {
                  var l = b.popups.get("link.insert");
                  return l.find('input[name="href"]').addClass("fr-error"), b.events.trigger("link.bad", [j]), !1 }
              var m, n = c();
              if (n) { m = a(n);
                  var o = b.node.rawAttributes(n);
                  for (var p in o) o.hasOwnProperty(p) && "class" != p && "style" != p && m.removeAttr(p);
                  m.attr("href", f), g.length > 0 && m.text() != g && !i && m.text(g), i || m.prepend(a.FE.START_MARKER).append(a.FE.END_MARKER), m.attr(h), i || b.selection.restore() } else { i ? i.wrap('<a href="' + f + '"></a>') : (b.doc.execCommand("unlink", !1, !1), b.selection.isCollapsed() ? (g = 0 === g.length ? j : g, b.html.insert('<a href="' + f + '">' + a.FE.START_MARKER + g + a.FE.END_MARKER + "</a>"), b.selection.restore()) : g.length > 0 && g != b.selection.text() ? (b.selection.remove(), b.html.insert('<a href="' + f + '">' + a.FE.START_MARKER + g + a.FE.END_MARKER + "</a>"), b.selection.restore()) : (q(), b.doc.execCommand("createLink", !1, f)));
                  for (var r = d(), s = 0; s < r.length; s++) m = a(r[s]), m.attr(h), m.removeAttr("_moz_dirty");
                  1 == r.length && b.$wp && !i && (a(r[0]).prepend(a.FE.START_MARKER).append(a.FE.END_MARKER), b.selection.restore()) }
              if (i) {
                  var t = b.popups.get("link.insert");
                  t.find("input:focus").blur(), b.image.edit(i) } else e() }
  
          function s() { g();
              var d = c();
              if (d) {
                  var e = b.popups.get("link.insert");
                  e || (e = l()), b.popups.isVisible("link.insert") || (b.popups.refresh("link.insert"), b.selection.save(), b.helpers.isMobile() && (b.events.disableBlur(), b.$el.blur(), b.events.enableBlur())), b.popups.setContainer("link.insert", a(b.opts.scrollableContainer));
                  var f = (b.image ? b.image.get() : null) || a(d),
                      h = f.offset().left + f.outerWidth() / 2,
                      i = f.offset().top + f.outerHeight();
                  b.popups.show("link.insert", h, i, f.outerHeight()) } }
  
          function t() {
              var a = b.image ? b.image.get() : null;
              if (a) b.image.back();
              else { b.events.disableBlur(), b.selection.restore(), b.events.enableBlur();
                  var d = c();
                  d && b.$wp ? (b.selection.restore(), g(), e()) : "A" == b.$el.get(0).tagName ? (b.$el.focus(), e()) : (b.popups.hide("link.insert"), b.toolbar.showInline()) } }
  
          function u() {
              var c = b.image ? b.image.get() : null;
              if (c) {
                  var d = b.popups.get("link.insert");
                  d || (d = l()), j(!0), b.popups.setContainer("link.insert", a(b.opts.scrollableContainer));
                  var e = c.offset().left + c.outerWidth() / 2,
                      f = c.offset().top + c.outerHeight();
                  b.popups.show("link.insert", e, f, c.outerHeight()) } }
  
          function v(d, f, g) {
              "undefined" == typeof g && (g = b.opts.linkMultipleStyles), "undefined" == typeof f && (f = b.opts.linkStyles);
              var h = c();
              if (!h) return !1;
              if (!g) {
                  var i = Object.keys(f);
                  i.splice(i.indexOf(d), 1),
                      a(h).removeClass(i.join(" "))
              }
              a(h).toggleClass(d), e()
          }
          return { _init: n, remove: m, showInsertPopup: k, usePredefined: o, insertCallback: p, insert: r, update: s, get: c, allSelected: d, back: t, imageLink: u, applyStyle: v }
      }, a.FE.DefineIcon("insertLink", { NAME: "link" }), a.FE.RegisterShortcut(75, "insertLink"), a.FE.RegisterCommand("insertLink", { title: "Insert Link", undo: !1, focus: !0, refreshOnCallback: !1, popup: !0, callback: function() { this.popups.isVisible("link.insert") ? (this.$el.find(".fr-marker") && (this.events.disableBlur(), this.selection.restore()), this.popups.hide("link.insert")) : this.link.showInsertPopup() }, plugin: "link" }), a.FE.DefineIcon("linkOpen", { NAME: "external-link" }), a.FE.RegisterCommand("linkOpen", { title: "Open Link", undo: !1, refresh: function(a) {
              var b = this.link.get();
              b ? a.removeClass("fr-hidden") : a.addClass("fr-hidden") }, callback: function() {
              var a = this.link.get();
              a && this.o_win.open(a.href) } }), a.FE.DefineIcon("linkEdit", { NAME: "edit" }), a.FE.RegisterCommand("linkEdit", { title: "Edit Link", undo: !1, refreshAfterCallback: !1, callback: function() { this.link.update() }, refresh: function(a) {
              var b = this.link.get();
              b ? a.removeClass("fr-hidden") : a.addClass("fr-hidden") } }), a.FE.DefineIcon("linkRemove", { NAME: "unlink" }), a.FE.RegisterCommand("linkRemove", { title: "Unlink", callback: function() { this.link.remove() }, refresh: function(a) {
              var b = this.link.get();
              b ? a.removeClass("fr-hidden") : a.addClass("fr-hidden") } }), a.FE.DefineIcon("linkBack", { NAME: "arrow-left" }), a.FE.RegisterCommand("linkBack", { title: "Back", undo: !1, focus: !1, back: !0, refreshAfterCallback: !1, callback: function() { this.link.back() }, refresh: function(a) {
              var b = this.link.get(),
                  c = this.image ? this.image.get() : null;
              c || b || this.opts.toolbarInline ? (a.removeClass("fr-hidden"), a.next(".fr-separator").removeClass("fr-hidden")) : (a.addClass("fr-hidden"), a.next(".fr-separator").addClass("fr-hidden")) } }), a.FE.DefineIcon("linkList", { NAME: "search" }), a.FE.RegisterCommand("linkList", { title: "Choose Link", type: "dropdown", focus: !1, undo: !1, refreshAfterCallback: !1, html: function() {
              for (var a = '<ul class="fr-dropdown-list">', b = this.opts.linkList, c = 0; c < b.length; c++) a += '<li><a class="fr-command" data-cmd="linkList" data-param1="' + c + '">' + (b[c].displayText || b[c].text) + "</a></li>";
              return a += "</ul>" }, callback: function(a, b) { this.link.usePredefined(b) } }), a.FE.RegisterCommand("linkInsert", { focus: !1, refreshAfterCallback: !1, callback: function() { this.link.insertCallback() }, refresh: function(a) {
              var b = this.link.get();
              b ? a.text(this.language.translate("Update")) : a.text(this.language.translate("Insert")) } }), a.FE.DefineIcon("imageLink", { NAME: "link" }), a.FE.RegisterCommand("imageLink", { title: "Insert Link", undo: !1, focus: !1, callback: function() { this.link.imageLink() }, refresh: function(a) {
              var b, c = this.link.get();
              c ? (b = a.prev(), b.hasClass("fr-separator") && b.removeClass("fr-hidden"), a.addClass("fr-hidden")) : (b = a.prev(), b.hasClass("fr-separator") && b.addClass("fr-hidden"), a.removeClass("fr-hidden")) } }), a.FE.DefineIcon("linkStyle", { NAME: "magic" }), a.FE.RegisterCommand("linkStyle", { title: "Style", type: "dropdown", html: function() {
              var a = '<ul class="fr-dropdown-list">',
                  b = this.opts.linkStyles;
              for (var c in b) b.hasOwnProperty(c) && (a += '<li><a class="fr-command" data-cmd="linkStyle" data-param1="' + c + '">' + this.language.translate(b[c]) + "</a></li>");
              return a += "</ul>" }, callback: function(a, b) { this.link.applyStyle(b) }, refreshOnShow: function(b, c) {
              var d = this.link.get();
              if (d) {
                  var e = a(d);
                  c.find(".fr-command").each(function() {
                      var b = a(this).data("param1");
                      a(this).toggleClass("fr-active", e.hasClass(b)) }) } } }), a.FE.PLUGINS.lists = function(b) {
          function c(a) {
              return '<span class="fr-open-' + a.toLowerCase() + '"></span>' }
  
          function d(a) {
              return '<span class="fr-close-' + a.toLowerCase() + '"></span>' }
  
          function e(b, c) {
              for (var d = [], e = 0; e < b.length; e++) {
                  var f = b[e].parentNode; "LI" == b[e].tagName && f.tagName != c && d.indexOf(f) < 0 && d.push(f) }
              for (e = d.length - 1; e >= 0; e--) {
                  var g = a(d[e]);
                  g.replaceWith("<" + c.toLowerCase() + ">" + g.html() + "</" + c.toLowerCase() + ">") } }
  
          function f(c, d) { e(c, d);
              for (var f = b.html.defaultTag(), g = 0; g < c.length; g++) "LI" != c[g].tagName && (f && c[g].tagName.toLowerCase() == f ? a(c[g]).replaceWith("<" + d + "><li" + b.node.attributes(c[g]) + ">" + a(c[g]).html() + "</li></" + d + ">") : a(c[g]).wrap("<" + d + "><li></li></" + d + ">"));
              b.clean.lists() }
  
          function g(e) {
              var f, g;
              for (f = e.length - 1; f >= 0; f--)
                  for (g = f - 1; g >= 0; g--)
                      if (a(e[g]).find(e[f]).length || e[g] == e[f]) { e.splice(f, 1);
                          break }
              var h = [];
              for (f = 0; f < e.length; f++) {
                  var i = a(e[f]),
                      j = e[f].parentNode;
                  i.before(d(j.tagName)), "LI" == j.parentNode.tagName ? (i.before(d("LI")), i.after(c("LI"))) : (b.node.isEmpty(i.get(0), !0) || 0 !== i.find(b.html.blockTagsQuery()).length || i.append("<br>"), i.append(c("LI")), i.prepend(d("LI"))), i.after(c(j.tagName)), "LI" == j.parentNode.tagName && (j = j.parentNode.parentNode), h.indexOf(j) < 0 && h.push(j) }
              for (f = 0; f < h.length; f++) {
                  var k = a(h[f]),
                      l = k.html();
                  l = l.replace(/<span class="fr-close-([a-z]*)"><\/span>/g, "</$1>"), l = l.replace(/<span class="fr-open-([a-z]*)"><\/span>/g, "<$1>"), k.replaceWith(b.node.openTagString(k.get(0)) + l + b.node.closeTagString(k.get(0))) }
              b.$el.find("li:empty").remove(), b.$el.find("ul:empty, ol:empty").remove(), b.clean.lists(), b.html.wrap() }
  
          function h(a, b) {
              for (var c = !0, d = 0; d < a.length; d++) {
                  if ("LI" != a[d].tagName) return !1;
                  a[d].parentNode.tagName != b && (c = !1) }
              return c }
  
          function i(a) { b.selection.save(), b.html.wrap(!0, !0), b.selection.restore();
              for (var c = b.selection.blocks(), d = 0; d < c.length; d++) "LI" != c[d].tagName && "LI" == c[d].parentNode.tagName && (c[d] = c[d].parentNode);
              b.selection.save(), h(c, a) ? g(c) : f(c, a), b.html.unwrap(), b.selection.restore() }
  
          function j(c, d) {
              var e = a(b.selection.element());
              if (e.get(0) != b.$el.get(0)) {
                  var f = e.get(0); "LI" != f.tagName && (f = e.parents("li").get(0)), f && f.parentNode.tagName == d && b.$el.get(0).contains(f.parentNode) && c.addClass("fr-active") } }
  
          function k(c) { b.selection.save();
              for (var d = 0; d < c.length; d++) {
                  var e = c[d].previousSibling;
                  if (e) {
                      var f = a(c[d]).find("> ul, > ol").get(0);
                      if (f) {
                          for (var g = a("<li>").prependTo(a(f)), h = b.node.contents(c[d])[0]; h && !b.node.isList(h);) {
                              var i = h.nextSibling;
                              g.append(h), h = i }
                          a(e).append(a(f)), a(c[d]).remove() } else {
                          var j = a(e).find("> ul, > ol").get(0);
                          if (j) a(j).append(a(c[d]));
                          else {
                              var k = a("<" + c[d].parentNode.tagName + ">");
                              a(e).append(k), k.append(a(c[d])) } } } }
              b.clean.lists(), b.selection.restore() }
  
          function l(a) { b.selection.save(), g(a), b.selection.restore() }
  
          function m(a) {
              if ("indent" == a || "outdent" == a) {
                  for (var c = !1, d = b.selection.blocks(), e = [], f = 0; f < d.length; f++) "LI" == d[f].tagName ? (c = !0, e.push(d[f])) : "LI" == d[f].parentNode.tagName && (c = !0, e.push(d[f].parentNode));
                  c && ("indent" == a ? k(e) : l(e)) } }
  
          function n() { b.events.on("commands.after", m), b.events.on("keydown", function(c) {
                  if (c.which == a.FE.KEYCODE.TAB) {
                      for (var d, e = b.selection.blocks(), f = [], g = 0; g < e.length; g++) "LI" == e[g].tagName ? (d = !0, f.push(e[g])) : "LI" == e[g].parentNode.tagName && (d = !0, f.push(e[g].parentNode));
                      if (d) return c.preventDefault(), c.stopPropagation(), c.shiftKey ? l(f) : k(f), !1 } }, !0) }
          return { _init: n, format: i, refresh: j } }, a.FE.RegisterCommand("formatUL", { title: "Unordered List", refresh: function(a) { this.lists.refresh(a, "UL") }, callback: function() { this.lists.format("UL") }, plugin: "lists" }), a.FE.RegisterCommand("formatOL", { title: "Ordered List", refresh: function(a) { this.lists.refresh(a, "OL") }, callback: function() { this.lists.format("OL") }, plugin: "lists" }), a.FE.DefineIcon("formatUL", { NAME: "list-ul" }), a.FE.DefineIcon("formatOL", { NAME: "list-ol" }), a.extend(a.FE.DEFAULTS, { paragraphFormat: { N: "Normal", H1: "Heading 1", H2: "Heading 2", H3: "Heading 3", H4: "Heading 4", PRE: "Code" }, paragraphFormatSelection: !1 }), a.FE.PLUGINS.paragraphFormat = function(b) {
          function c(c, d) {
              var e = b.html.defaultTag();
              if (d && d.toLowerCase() != e)
                  if (c.find("ul, ol").length > 0) {
                      var f = a("<" + d + ">");
                      c.prepend(f);
                      for (var g = b.node.contents(c.get(0))[0]; g && ["UL", "OL"].indexOf(g.tagName) < 0;) {
                          var h = g.nextSibling;
                          f.append(g), g = h } } else c.html("<" + d + ">" + c.html() + "</" + d + ">") }
  
          function d(c, d) {
              var e = b.html.defaultTag();
              d || (d = 'div class="fr-temp-div" data-empty="true"'), d.toLowerCase() == e ? c.replaceWith(c.html()) : c.replaceWith(a("<" + d + ">").html(c.html())) }
  
          function e(c, d) {
              var e = b.html.defaultTag();
              d || (d = 'div class="fr-temp-div"' + (b.node.isEmpty(c.get(0), !0) ? ' data-empty="true"' : "")), d.toLowerCase() == e ? (b.node.isEmpty(c.get(0), !0) || c.append("<br/>"), c.replaceWith(c.html())) : c.replaceWith(a("<" + d + ">").html(c.html())) }
  
          function f(c, d) { d || (d = 'div class="fr-temp-div"' + (b.node.isEmpty(c.get(0), !0) ? ' data-empty="true"' : "")), c.replaceWith(a("<" + d + " " + b.node.attributes(c.get(0)) + ">").html(c.html())) }
  
          function g(g) { "N" == g && (g = b.html.defaultTag()), b.selection.save(), b.html.wrap(!0, !0, !0, !0), b.selection.restore();
              var h = b.selection.blocks();
              b.selection.save(), b.$el.find("pre").attr("skip", !0);
              for (var i = 0; i < h.length; i++)
                  if (h[i].tagName != g && !b.node.isList(h[i])) {
                      var j = a(h[i]); "LI" == h[i].tagName ? c(j, g) : "LI" == h[i].parentNode.tagName && h[i] ? d(j, g) : ["TD", "TH"].indexOf(h[i].parentNode.tagName) >= 0 ? e(j, g) : f(j, g) }
              b.$el.find('pre:not([skip="true"]) + pre:not([skip="true"])').each(function() { a(this).prev().append("<br>" + a(this).html()), a(this).remove() }), b.$el.find("pre").removeAttr("skip"), b.html.unwrap(), b.selection.restore() }
  
          function h(a, c) {
              var d = b.selection.blocks();
              if (d.length) {
                  var e = d[0],
                      f = "N",
                      g = b.html.defaultTag();
                  e.tagName.toLowerCase() != g && e != b.$el.get(0) && (f = e.tagName), c.find('.fr-command[data-param1="' + f + '"]').addClass("fr-active") } else c.find('.fr-command[data-param1="N"]').addClass("fr-active") }
  
          function i(a) {
              if (b.opts.paragraphFormatSelection) {
                  var c = b.selection.blocks();
                  if (c.length) {
                      var d = c[0],
                          e = "N",
                          f = b.html.defaultTag();
                      d.tagName.toLowerCase() != f && d != b.$el.get(0) && (e = d.tagName), ["LI", "TD", "TH"].indexOf(e) >= 0 && (e = "N"), a.find("> span").text(b.opts.paragraphFormat[e]) } else a.find("> span").text(edior.opts.paragraphFormat.N) } }
          return { apply: g, refreshOnShow: h, refresh: i } }, a.FE.RegisterCommand("paragraphFormat", { type: "dropdown", displaySelection: function(a) {
              return a.opts.paragraphFormatSelection }, defaultSelection: "Normal", displaySelectionWidth: 100, html: function() {
              var a = '<ul class="fr-dropdown-list">',
                  b = this.opts.paragraphFormat;
              for (var c in b) b.hasOwnProperty(c) && (a += "<li><" + c + ' style="padding: 0 !important; margin: 0 !important;"><a class="fr-command" data-cmd="paragraphFormat" data-param1="' + c + '" title="' + this.language.translate(b[c]) + '">' + this.language.translate(b[c]) + "</a></" + c + "></li>");
              return a += "</ul>" }, title: "Paragraph Format", callback: function(a, b) { this.paragraphFormat.apply(b) }, refresh: function(a) { this.paragraphFormat.refresh(a) }, refreshOnShow: function(a, b) { this.paragraphFormat.refreshOnShow(a, b) }, plugin: "paragraphFormat" }), a.FE.DefineIcon("paragraphFormat", { NAME: "paragraph" }), a.extend(a.FE.DEFAULTS, { paragraphStyles: { "fr-text-gray": "Gray", "fr-text-bordered": "Bordered", "fr-text-spaced": "Spaced", "fr-text-uppercase": "Uppercase" }, paragraphMultipleStyles: !0 }), a.FE.PLUGINS.paragraphStyle = function(b) {
          function c(c, d, e) { "undefined" == typeof d && (d = b.opts.paragraphStyles), "undefined" == typeof e && (e = b.opts.paragraphMultipleStyles);
              var f = "";
              e || (f = Object.keys(d), f.splice(f.indexOf(c), 1), f = f.join(" ")), b.selection.save(), b.html.wrap(!0, !0, !0, !0), b.selection.restore();
              var g = b.selection.blocks();
              b.selection.save();
              for (var h = a(g[0]).hasClass(c), i = 0; i < g.length; i++) a(g[i]).removeClass(f).toggleClass(c, !h), a(g[i]).hasClass("fr-temp-div") && a(g[i]).removeClass("fr-temp-div"), "" === a(g[i]).attr("class") && a(g[i]).removeAttr("class");
              b.html.unwrap(), b.selection.restore() }
  
          function d(c, d) {
              var e = b.selection.blocks();
              if (e.length) {
                  var f = a(e[0]);
                  d.find(".fr-command").each(function() {
                      var b = a(this).data("param1");
                      a(this).toggleClass("fr-active", f.hasClass(b)) }) } }
  
          function e() {}
          return { _init: e, apply: c, refreshOnShow: d } }, a.FE.RegisterCommand("paragraphStyle", { type: "dropdown", html: function() {
              var a = '<ul class="fr-dropdown-list">',
                  b = this.opts.paragraphStyles;
              for (var c in b) b.hasOwnProperty(c) && (a += '<li><a class="fr-command ' + c + '" data-cmd="paragraphStyle" data-param1="' + c + '" title="' + this.language.translate(b[c]) + '">' + this.language.translate(b[c]) + "</a></li>");
              return a += "</ul>" }, title: "Paragraph Style", callback: function(a, b) { this.paragraphStyle.apply(b) }, refreshOnShow: function(a, b) { this.paragraphStyle.refreshOnShow(a, b) }, plugin: "paragraphStyle" }), a.FE.DefineIcon("paragraphStyle", { NAME: "magic" }), a.extend(a.FE.DEFAULTS, { quickInsertButtons: ["image", "table", "ul", "ol", "hr"], quickInsertTags: ["p", "div", "h1", "h2", "h3", "h4", "h5", "h6", "pre", "blockquote"] }), a.FE.QUICK_INSERT_BUTTONS = { image: { icon: "insertImage", callback: function() {
                  var b = this;
                  b.shared.$qi_image_input || (b.shared.$qi_image_input = a('<input accept="image/*" name="quickInsertImage' + this.id + '" style="display: none;" type="file">'), a("body").append(b.shared.$qi_image_input), b.events.$on(b.shared.$qi_image_input, "change", function() {
                      var b = a(this).data("inst");
                      this.files && (b.quickInsert.hide(), b.image.upload(this.files)), a(this).val("") }, !0)), b.$qi_image_input = b.shared.$qi_image_input, b.helpers.isMobile() && b.selection.save(), b.$qi_image_input.data("inst", b).trigger("click") }, requiredPlugin: "image", title: "Insert Image" }, table: { icon: "insertTable", callback: function() { this.quickInsert.hide(), this.table.insert(2, 2), this.undo.saveStep() }, requiredPlugin: "table", title: "Insert Table" }, ol: { icon: "formatOL", callback: function() { this.quickInsert.hide(), this.lists.format("OL"), this.undo.saveStep() }, requiredPlugin: "lists", title: "Ordered List" }, ul: { icon: "formatUL", callback: function() { this.quickInsert.hide(), this.lists.format("UL"), this.undo.saveStep() }, requiredPlugin: "lists", title: "Unordered List" }, hr: { icon: "insertHR", callback: function() { this.quickInsert.hide(), this.commands.insertHR(), this.undo.saveStep() }, title: "Insert Horizontal Line" } }, a.FE.RegisterQuickInsertCommand = function(b, c) { a.FE.QUICK_INSERT_BUTTONS[b] = c }, a.FE.PLUGINS.quickInsert = function(b) {
          function c(c) { j || h(), b.$box.append(j);
              var d, e;
              d = c.offset().top - b.$box.offset().top - (j.outerHeight() - c.outerHeight()) / 2, e = 0 - j.outerWidth(), b.opts.iframe && (d += b.$iframe.offset().top - a(b.o_win).scrollTop()), j.css("top", d), j.css("left", e), j.data("tag", c), j.addClass("fr-visible") }
  
          function d() {
              var d = b.selection.element();
              b.node.isBlock(d) || (d = b.node.blockParent(d)), d && b.node.isEmpty(d) && b.node.isElement(d.parentNode) ? d && b.selection.isCollapsed() && c(a(d)) : e() }
  
          function e() { j && (b.html.checkIfEmpty(), j.hasClass("fr-on") && g(), j.removeClass("fr-visible fr-on"), j.css("left", -9999).css("top", -9999)) }
  
          function f(c) {
              if (c.preventDefault(), j.hasClass("fr-on")) g();
              else {
                  if (!b.shared.$qi_helper) {
                      for (var d = b.opts.quickInsertButtons, e = '<div class="fr-qi-helper">', f = 0, h = 0; h < d.length; h++) {
                          var i = a.FE.QUICK_INSERT_BUTTONS[d[h]];
                          i && (!i.requiredPlugin || a.FE.PLUGINS[i.requiredPlugin] && b.opts.pluginsEnabled.indexOf(i.requiredPlugin) >= 0) && (e += '<a class="fr-btn fr-floating-btn" role="button" title="' + b.language.translate(i.title) + '" tabindex="-1" data-cmd="' + d[h] + '" style="transition-delay: ' + .025 * f++ + 's;">' + b.icon.create(i.icon) + "</a>") }
                      e += "</div>", b.shared.$qi_helper = a(e), b.tooltip.bind(b.shared.$qi_helper, ".fr-qi-helper > a.fr-btn") }
                  k = b.shared.$qi_helper, k.appendTo(b.$box), setTimeout(function() { k.css("top", parseFloat(j.css("top"))), k.css("left", parseFloat(j.css("left")) + j.outerWidth()), k.find("a").addClass("fr-size-1"), j.addClass("fr-on") }, 10) } }
  
          function g() {
              var a = b.$box.find(".fr-qi-helper");
              a.length && (a.find("a").removeClass("fr-size-1"), a.css("left", -9999), j.removeClass("fr-on")) }
  
          function h() { b.shared.$quick_insert || (b.shared.$quick_insert = a('<div class="fr-quick-insert"><a class="fr-floating-btn" role="button" tabindex="-1" title="' + b.language.translate("Quick Insert") + '"><svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><path d="M22,16.75 L16.75,16.75 L16.75,22 L15.25,22.000 L15.25,16.75 L10,16.75 L10,15.25 L15.25,15.25 L15.25,10 L16.75,10 L16.75,15.25 L22,15.25 L22,16.75 Z"/></svg></a></div>')), j = b.shared.$quick_insert, b.tooltip.bind(b.$box, ".fr-quick-insert > a.fr-floating-btn"), b.events.on("destroy", function() { j.removeClass("fr-on").appendTo(a("body")).css("left", -9999).css("top", -9999), k && (g(), k.appendTo(a("body"))) }, !0), b.events.on("shared.destroy", function() { j.html("").removeData().remove(), k && k.html("").removeData().remove() }, !0), b.events.on("commands.before", e), b.events.on("commands.after", function() { b.popups.areVisible() || d() }), b.events.bindClick(b.$box, ".fr-quick-insert > a", f), b.events.bindClick(b.$box, ".fr-qi-helper > a.fr-btn", function(c) {
                  var d = a(c.currentTarget).data("cmd");
                  a.FE.QUICK_INSERT_BUTTONS[d].callback.apply(b, [c.currentTarget]) }) }
  
          function i() {
              return b.$wp ? (b.opts.iframe && b.$el.parent("html").find("head").append('<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css">'), b.popups.onShow("image.edit", e), b.events.on("mouseup", d), b.helpers.isMobile() && b.events.$on(a(b.o_doc), "selectionchange", d), b.events.on("blur", e), void b.events.on("keyup", d)) : !1 }
          var j, k;
          return { _init: i, hide: e } }, a.FE.PLUGINS.quote = function(b) {
          function c(a) {
              for (; a.parentNode && a.parentNode != b.$el.get(0);) a = a.parentNode;
              return a }
  
          function d() {
              var d, e = b.selection.blocks();
              for (d = 0; d < e.length; d++) e[d] = c(e[d]);
              b.selection.save();
              var f = a("<blockquote>");
              for (f.insertBefore(e[0]), d = 0; d < e.length; d++) f.append(e[d]);
              b.html.unwrap(), b.selection.restore() }
  
          function e() {
              var c, d = b.selection.blocks();
              for (c = 0; c < d.length; c++) "BLOCKQUOTE" != d[c].tagName && (d[c] = a(d[c]).parentsUntil(b.$el, "BLOCKQUOTE").get(0));
              for (b.selection.save(), c = 0; c < d.length; c++) d[c] && a(d[c]).replaceWith(d[c].innerHTML);
              b.html.unwrap(), b.selection.restore() }
  
          function f(a) { b.selection.save(), b.html.wrap(!0, !0, !0, !0), b.selection.restore(), "increase" == a ? d() : "decrease" == a && e() }
          return { apply: f } }, a.FE.RegisterShortcut(222, "quote", "increase"), a.FE.RegisterShortcut(222, "quote", "decrease", !0), a.FE.RegisterCommand("quote", { title: "Quote", type: "dropdown", options: { increase: "Increase", decrease: "Decrease" }, callback: function(a, b) { this.quote.apply(b) }, plugin: "quote" }), a.FE.DefineIcon("quote", { NAME: "quote-left" }), a.extend(a.FE.DEFAULTS, { saveInterval: 1e4, saveURL: null, saveParams: {}, saveParam: "body", saveMethod: "POST" }), a.FE.PLUGINS.save = function(b) {
          function c(a, c) { b.events.trigger("save.error", [{ code: a, message: n[a] }, c]) }
  
          function d(d) {
              if ("undefined" == typeof d && (d = b.html.get()), b.events.trigger("save.before") === !1) return !1;
              if (b.opts.saveURL) {
                  var e = {};
                  for (var f in b.opts.saveParams)
                      if (b.opts.saveParams.hasOwnProperty(f)) {
                          var g = b.opts.saveParams[f]; "function" == typeof g ? e[f] = g.call(this) : e[f] = g }
                  var h = {};
                  h[b.opts.saveParam] = d, a.ajax({ type: b.opts.saveMethod, url: b.opts.saveURL, data: a.extend(h, e), crossDomain: b.opts.requestWithCORS, xhrFields: { withCredentials: b.opts.requestWithCORS }, headers: b.opts.requestHeaders }).done(function(a) { b.events.trigger("save.after", [a]) }).fail(function(a) { c(m, a.response) }) } else c(l) }
  
          function e() { clearTimeout(i), i = setTimeout(function() {
                  var a = b.html.get();
                  (j != a || k) && (j = a, k = !1, d(a)) }, b.opts.saveInterval) }
  
          function f() { e(), k = !1 }
  
          function g() { k = !0 }
  
          function h() { b.opts.saveInterval && (j = b.html.get(), b.events.on("contentChanged", e), b.events.on("keydown", function() { clearTimeout(i) })) }
          var i = null,
              j = null,
              k = !1,
              l = 1,
              m = 2,
              n = {};
          return n[l] = "Missing saveURL option.", n[m] = "Something went wrong during save.", { _init: h, save: d, reset: f, force: g } }, a.FE.DefineIcon("save", { NAME: "floppy-o" }), a.FE.RegisterCommand("save", { title: "Save", undo: !1, focus: !1, refreshAfterCallback: !1, callback: function() { this.save.save() }, plugin: "save" }), a.extend(a.FE.POPUP_TEMPLATES, { "table.insert": "[_BUTTONS_][_ROWS_COLUMNS_]", "table.edit": "[_BUTTONS_]", "table.colors": "[_BUTTONS_][_COLORS_]" }), a.extend(a.FE.DEFAULTS, { tableInsertMaxSize: 10, tableEditButtons: ["tableHeader", "tableRemove", "|", "tableRows", "tableColumns", "tableStyle", "-", "tableCells", "tableCellBackground", "tableCellVerticalAlign", "tableCellHorizontalAlign", "tableCellStyle"], tableInsertButtons: ["tableBack", "|"], tableResizerOffset: 5, tableResizingLimit: 30, tableColorsButtons: ["tableBack", "|"], tableColors: ["#61BD6D", "#1ABC9C", "#54ACD2", "#2C82C9", "#9365B8", "#475577", "#CCCCCC", "#41A85F", "#00A885", "#3D8EB9", "#2969B0", "#553982", "#28324E", "#000000", "#F7DA64", "#FBA026", "#EB6B56", "#E25041", "#A38F84", "#EFEFEF", "#FFFFFF", "#FAC51C", "#F37934", "#D14841", "#B8312F", "#7C706B", "#D1D5D8", "REMOVE"], tableColorsStep: 7, tableCellStyles: { "fr-highlighted": "Highlighted", "fr-thick": "Thick" }, tableStyles: { "fr-dashed-borders": "Dashed Borders", "fr-alternate-rows": "Alternate Rows" }, tableCellMultipleStyles: !0, tableMultipleStyles: !0, tableInsertHelper: !0, tableInsertHelperOffset: 15 }), a.FE.PLUGINS.table = function(b) {
          function c() {
              var a = b.$tb.find('.fr-command[data-cmd="insertTable"]'),
                  c = b.popups.get("table.insert");
              if (c || (c = g()), !c.hasClass("fr-active")) { b.popups.refresh("table.insert"), b.popups.setContainer("table.insert", b.$tb);
                  var d = a.offset().left + a.outerWidth() / 2,
                      e = a.offset().top + (b.opts.toolbarBottom ? 10 : a.outerHeight() - 10);
                  b.popups.show("table.insert", d, e, a.outerHeight()) } }
  
          function d() {
              var c = B();
              if (c) {
                  var d = b.popups.get("table.edit");
                  d || (d = i()), b.popups.setContainer("table.edit", a(b.opts.scrollableContainer));
                  var e = I(c),
                      f = (e.left + e.right) / 2,
                      g = e.bottom;
                  b.popups.show("table.edit", f, g, e.bottom - e.top), ga().length > 1 && (b.toolbar.disable(), b.$el.removeClass("fr-no-selection"), b.edit.on(), b.selection.setAtEnd(b.$el.find(".fr-selected-cell:last").get(0)), b.selection.restore(), b.button.bulkRefresh()) } }
  
          function e() {
              var c = B();
              if (c) {
                  var d = b.popups.get("table.colors");
                  d || (d = j()), b.popups.setContainer("table.colors", a(b.opts.scrollableContainer));
                  var e = I(c),
                      f = (e.left + e.right) / 2,
                      g = e.bottom;
                  l(), b.popups.show("table.colors", f, g, e.bottom - e.top) } }
  
          function f() { 0 === ga().length && b.toolbar.enable() }
  
          function g(c) {
              if (c) return b.popups.onHide("table.insert", function() { b.popups.get("table.insert").find('.fr-table-size .fr-select-table-size > span[data-row="1"][data-col="1"]').trigger("mouseenter") }), !0;
              var d = "";
              b.opts.tableInsertButtons.length > 0 && (d = '<div class="fr-buttons">' + b.button.buildList(b.opts.tableInsertButtons) + "</div>");
              var e = { buttons: d, rows_columns: h() },
                  f = b.popups.create("table.insert", e);
              return b.events.$on(f, "mouseenter", ".fr-table-size .fr-select-table-size .fr-table-cell", function(c) {
                  var d = a(c.currentTarget),
                      e = d.data("row"),
                      f = d.data("col"),
                      g = d.parent();
                  g.siblings(".fr-table-size-info").html(e + " &times; " + f), g.find("> span").removeClass("hover");
                  for (var h = 1; h <= b.opts.tableInsertMaxSize; h++)
                      for (var i = 0; i <= b.opts.tableInsertMaxSize; i++) {
                          var j = g.find('> span[data-row="' + h + '"][data-col="' + i + '"]');
                          e >= h && f >= i ? j.addClass("hover") : e + 1 >= h || 2 >= h && !b.helpers.isMobile() ? j.css("display", "inline-block") : h > 2 && !b.helpers.isMobile() && j.css("display", "none") } }, !0), f }
  
          function h() {
              for (var a = '<div class="fr-table-size"><div class="fr-table-size-info">1 &times; 1</div><div class="fr-select-table-size">', c = 1; c <= b.opts.tableInsertMaxSize; c++) {
                  for (var d = 1; d <= b.opts.tableInsertMaxSize; d++) {
                      var e = "inline-block";
                      c > 2 && !b.helpers.isMobile() && (e = "none");
                      var f = "fr-table-cell ";
                      1 == c && 1 == d && (f += " hover"), a += '<span class="fr-command ' + f + '" data-cmd="tableInsert" data-row="' + c + '" data-col="' + d + '" data-param1="' + c + '" data-param2="' + d + '" style="display: ' + e + ';"><span></span></span>' }
                  a += '<div class="new-line"></div>' }
              return a += "</div></div>" }
  
          function i(a) {
              if (a) return b.popups.onHide("table.edit", f), !0;
              var c = "";
              b.opts.tableEditButtons.length > 0 && (c = '<div class="fr-buttons">' + b.button.buildList(b.opts.tableEditButtons) + "</div>");
              var e = { buttons: c },
                  g = b.popups.create("table.edit", e);
              return b.events.$on(b.$wp, "scroll.table-edit", function() { b.popups.isVisible("table.edit") && d() }), g }
  
          function j() {
              var a = "";
              b.opts.tableColorsButtons.length > 0 && (a = '<div class="fr-buttons fr-table-colors-buttons">' + b.button.buildList(b.opts.tableColorsButtons) + "</div>");
              var c = { buttons: a, colors: k() },
                  d = b.popups.create("table.colors", c);
              return b.events.$on(b.$wp, "scroll.table-colors", function() { b.popups.isVisible("table.colors") && e() }), d }
  
          function k() {
              for (var a = '<div class="fr-table-colors">', c = 0; c < b.opts.tableColors.length; c++) 0 !== c && c % b.opts.tableColorsStep === 0 && (a += "<br>"), a += "REMOVE" != b.opts.tableColors[c] ? '<span class="fr-command" style="background: ' + b.opts.tableColors[c] + ';" data-cmd="tableCellBackgroundColor" data-param1="' + b.opts.tableColors[c] + '"></span>' : '<span class="fr-command" data-cmd="tableCellBackgroundColor" data-param1="REMOVE" title="' + b.language.translate("Clear Formatting") + '"><i class="fa fa-eraser"></i></span>';
              return a += "</div>" }
  
          function l() {
              var a = b.popups.get("table.colors"),
                  c = b.$el.find(".fr-selected-cell:first");
              a.find(".fr-selected-color").removeClass("fr-selected-color"), a.find('span[data-param1="' + b.helpers.RGBToHex(c.css("background-color")) + '"]').addClass("fr-selected-color") }
  
          function m(c, d) {
              var e, f, g = '<table style="width: 100%;"><tbody>',
                  h = 100 / d;
              for (e = 0; c > e; e++) {
                  for (g += "<tr>", f = 0; d > f; f++) g += '<td style="width: ' + h.toFixed(4) + '%;">', 0 === e && 0 === f && (g += a.FE.MARKERS), g += "<br></td>";
                  g += "</tr>" }
              g += "</tbody></table>", b.html.insert(g), b.selection.restore() }
  
          function n() {
              if (ga().length > 0) {
                  var a = ha();
                  b.selection.setBefore(a.get(0)) || b.selection.setAfter(a.get(0)), b.selection.restore(), b.popups.hide("table.edit"), a.remove() } }
  
          function o() {
              var b = ha();
              if (b.length > 0 && 0 === b.find("th").length) {
                  var c, e = "<thead><tr>",
                      f = 0;
                  for (b.find("tr:first > td").each(function() {
                          var b = a(this);
                          f += parseInt(b.attr("colspan"), 10) || 1 }), c = 0; f > c; c++) e += "<th><br></th>";
                  e += "</tr></thead>", b.prepend(e), d() } }
  
          function p() {
              var a = ha(),
                  c = a.find("thead");
              if (c.length > 0)
                  if (0 === a.find("tbody tr").length) n();
                  else if (c.remove(), ga().length > 0) d();
              else { b.popups.hide("table.edit");
                  var e = a.find("tbody tr:first td:first").get(0);
                  e && (b.selection.setAtEnd(e), b.selection.restore()) } }
  
          function q(c) {
              var e = ha();
              if (e.length > 0) {
                  if (b.$el.find("th.fr-selected-cell").length > 0 && "above" == c) return;
                  var f, g, h = B(),
                      i = G(h);
                  g = "above" == c ? i.min_i : i.max_i;
                  var j = "<tr>";
                  for (f = 0; f < h[g].length; f++)
                      if ("below" == c && g < h.length - 1 && h[g][f] == h[g + 1][f] || "above" == c && g > 0 && h[g][f] == h[g - 1][f]) {
                          if (0 === f || f > 0 && h[g][f] != h[g][f - 1]) {
                              var k = a(h[g][f]);
                              k.attr("rowspan", parseInt(k.attr("rowspan"), 10) + 1) } } else j += "<td><br></td>";
                  j += "</tr>";
                  var l = a(e.find("tr").not(e.find("table tr")).get(g)); "below" == c ? l.after(j) : "above" == c && (l.before(j), b.popups.isVisible("table.edit") && d()) } }
  
          function r() {
              var c = ha();
              if (c.length > 0) {
                  var d, e, f, g = B(),
                      h = G(g);
                  if (0 === h.min_i && h.max_i == g.length - 1) n();
                  else {
                      for (d = h.max_i; d >= h.min_i; d--) {
                          for (f = a(c.find("tr").not(c.find("table tr")).get(d)), e = 0; e < g[d].length; e++)
                              if (0 === e || g[d][e] != g[d][e - 1]) {
                                  var i = a(g[d][e]);
                                  if (parseInt(i.attr("rowspan"), 10) > 1) {
                                      var j = parseInt(i.attr("rowspan"), 10) - 1;
                                      1 == j ? i.removeAttr("rowspan") : i.attr("rowspan", j) }
                                  if (d < g.length - 1 && g[d][e] == g[d + 1][e] && (0 === d || g[d][e] != g[d - 1][e])) {
                                      for (var k = g[d][e], l = e; l > 0 && g[d][l] == g[d][l - 1];) l--;
                                      0 === l ? a(c.find("tr").not(c.find("table tr")).get(d + 1)).prepend(k) : a(g[d + 1][l - 1]).after(k) } }
                          var m = f.parent();
                          f.remove(), 0 === m.find("tr").length && m.remove(), g = B(c) }
                      h.min_i > 0 ? b.selection.setAtEnd(g[h.min_i - 1][0]) : b.selection.setAtEnd(g[0][0]), b.selection.restore(), b.popups.hide("table.edit") } } }
  
          function s(c) {
              var e = ha();
              if (e.length > 0) {
                  var f, g = B(),
                      h = G(g);
                  f = "before" == c ? h.min_j : h.max_j;
                  var i, j = 100 / g[0].length,
                      k = 100 / (g[0].length + 1);
                  e.find("th, td").each(function() { i = a(this), i.data("old-width", i.outerWidth() / e.outerWidth() * 100) }), e.find("tr").not(e.find("table tr")).each(function(b) {
                      for (var d, e = a(this), h = 0, i = 0; f > h - 1;) {
                          if (d = e.find("> th, > td").get(i), !d) { d = null;
                              break }
                          d == g[b][h] ? (h += parseInt(a(d).attr("colspan"), 10) || 1, i++) : (h += parseInt(a(g[b][h]).attr("colspan"), 10) || 1, "after" == c && (d = 0 === i ? -1 : e.find("> th, > td").get(i - 1))) }
                      var l = a(d);
                      if ("after" == c && h - 1 > f || "before" == c && f > 0 && g[b][f] == g[b][f - 1]) {
                          if (0 === b || b > 0 && g[b][f] != g[b - 1][f]) {
                              var m = parseInt(l.attr("colspan"), 10) + 1;
                              l.attr("colspan", m), l.css("width", (l.data("old-width") * k / j + k).toFixed(4) + "%"), l.removeData("old-width") } } else {
                          var n;
                          n = e.find("th").length > 0 ? '<th style="width: ' + k.toFixed(4) + '%;"><br></th>' : '<td style="width: ' + k.toFixed(4) + '%;"><br></td>', -1 == d ? e.prepend(n) : null == d ? e.append(n) : "before" == c ? l.before(n) : "after" == c && l.after(n) } }), e.find("th, td").each(function() { i = a(this), i.data("old-width") && (i.css("width", (i.data("old-width") * k / j).toFixed(4) + "%"), i.removeData("old-width")) }), b.popups.isVisible("table.edit") && d() } }
  
          function t() {
              var c = ha();
              if (c.length > 0) {
                  var d, e, f, g = B(),
                      h = G(g);
                  if (0 === h.min_j && h.max_j == g[0].length - 1) n();
                  else {
                      var i = 100 / g[0].length,
                          j = 100 / (g[0].length - h.max_j + h.min_j - 1);
                      for (c.find("th, td").each(function() { f = a(this), f.hasClass("fr-selected-cell") || f.data("old-width", f.outerWidth() / c.outerWidth() * 100) }), e = h.max_j; e >= h.min_j; e--)
                          for (d = 0; d < g.length; d++)
                              if (0 === d || g[d][e] != g[d - 1][e])
                                  if (f = a(g[d][e]), parseInt(f.attr("colspan"), 10) > 1) {
                                      var k = parseInt(f.attr("colspan"), 10) - 1;
                                      1 == k ? f.removeAttr("colspan") : f.attr("colspan", k), f.css("width", ((f.data("old-width") - $(e, g)) * j / i).toFixed(4) + "%"), f.removeData("old-width") } else {
                                      var l = a(f.parent().get(0));
                                      f.remove(), 0 === l.find("> th, > td").length && (0 === l.prev().length || 0 === l.next().length || l.prev().find("> th[rowspan], > td[rowspan]").length < l.prev().find("> th, > td").length) && l.remove() }
                      h.min_j > 0 ? b.selection.setAtEnd(g[h.min_i][h.min_j - 1]) : b.selection.setAtEnd(g[h.min_i][0]), b.selection.restore(), b.popups.hide("table.edit"), c.find("th, td").each(function() { f = a(this), f.data("old-width") && (f.css("width", (f.data("old-width") * j / i).toFixed(4) + "%"), f.removeData("old-width")) }) } } }
  
          function u() {
              if (ga().length > 1 && (0 === b.$el.find("th.fr-selected-cell").length || 0 === b.$el.find("td.fr-selected-cell").length)) {
                  var c, e, f, g = B(),
                      h = G(g),
                      i = b.$el.find(".fr-selected-cell"),
                      j = a(i[0]),
                      k = j.parent(),
                      l = k.find(".fr-selected-cell"),
                      m = j.closest("table"),
                      n = j.html(),
                      o = 0;
                  for (c = 0; c < l.length; c++) o += a(l[c]).outerWidth();
                  for (j.css("width", (o / k.outerWidth() * 100).toFixed(4) + "%"), h.min_j < h.max_j && j.attr("colspan", h.max_j - h.min_j + 1), h.min_i < h.max_i && j.attr("rowspan", h.max_i - h.min_i + 1), c = 1; c < i.length; c++) e = a(i[c]), "<br>" != e.html() && "" !== e.html() && (n += "<br>" + e.html()), e.remove();
                  j.html(n), b.selection.setAtEnd(j.get(0)), b.selection.restore(), b.toolbar.enable();
                  var p = m.find("tr:empty");
                  for (c = p.length - 1; c >= 0; c--) f = a(p[c]), (0 === f.prev().length || 0 === f.next().length || f.prev().find("> th[rowspan], > td[rowspan]").length < f.prev().find("> th, > td").length) && f.remove();
                  d() } }
  
          function v() {
              if (1 == ga().length) {
                  var c = b.$el.find(".fr-selected-cell"),
                      d = c.parent(),
                      e = c.closest("table"),
                      f = parseInt(c.attr("rowspan"), 10),
                      g = B(),
                      h = C(c.get(0), g),
                      i = c.clone().html("<br>");
                  if (f > 1) {
                      var j = Math.ceil(f / 2);
                      j > 1 ? c.attr("rowspan", j) : c.removeAttr("rowspan"), f - j > 1 ? i.attr("rowspan", f - j) : i.removeAttr("rowspan");
                      for (var k = h.row + j, l = 0 === h.col ? h.col : h.col - 1; l >= 0 && (g[k][l] == g[k][l - 1] || k > 0 && g[k][l] == g[k - 1][l]);) l--; - 1 == l ? a(e.find("tr").not(e.find("table tr")).get(k)).prepend(i) : a(g[k][l]).after(i) } else {
                      var m, n = a("<tr>").append(i);
                      for (m = 0; m < g[0].length; m++)
                          if (0 === m || g[h.row][m] != g[h.row][m - 1]) {
                              var o = a(g[h.row][m]);
                              o.is(c) || o.attr("rowspan", (parseInt(o.attr("rowspan"), 10) || 1) + 1) }
                      d.after(n) }
                  E(), b.popups.hide("table.edit") } }
  
          function w() {
              if (1 == ga().length) {
                  var c = b.$el.find(".fr-selected-cell"),
                      d = parseInt(c.attr("colspan"), 10) || 1,
                      e = c.parent().outerWidth(),
                      f = c.outerWidth(),
                      g = c.clone().html("<br>"),
                      h = B(),
                      i = C(c.get(0), h);
                  if (d > 1) {
                      var j = Math.ceil(d / 2);
                      f = _(i.col, i.col + j - 1, h) / e * 100;
                      var k = _(i.col + j, i.col + d - 1, h) / e * 100;
                      j > 1 ? c.attr("colspan", j) : c.removeAttr("colspan"), d - j > 1 ? g.attr("colspan", d - j) : g.removeAttr("colspan"), c.css("width", f.toFixed(4) + "%"), g.css("width", k.toFixed(4) + "%") } else {
                      var l;
                      for (l = 0; l < h.length; l++)
                          if (0 === l || h[l][i.col] != h[l - 1][i.col]) {
                              var m = a(h[l][i.col]);
                              if (!m.is(c)) {
                                  var n = (parseInt(m.attr("colspan"), 10) || 1) + 1;
                                  m.attr("colspan", n) } }
                      f = f / e * 100 / 2, c.css("width", f.toFixed(4) + "%"), g.css("width", f.toFixed(4) + "%") }
                  c.after(g), E(), b.popups.hide("table.edit") } }
  
          function x(a) { "REMOVE" != a ? b.$el.find(".fr-selected-cell").css("background-color", b.helpers.HEXtoRGB(a)) : b.$el.find(".fr-selected-cell").css("background-color", "") }
  
          function y(a) { b.$el.find(".fr-selected-cell").css("vertical-align", a) }
  
          function z(a) { b.$el.find(".fr-selected-cell").css("text-align", a) }
  
          function A(a, b, c, d) {
              if (b.length > 0) {
                  if (!c) {
                      var e = Object.keys(d);
                      e.splice(e.indexOf(a), 1), b.removeClass(e.join(" ")) }
                  b.toggleClass(a) } }
  
          function B(b) {
              b = b || null;
              var c = [];
              if (null == b && ga().length > 0 && (b = ha()), b) {
                  var d = a(b);
                  return d.find("tr").not(d.find("table tr")).each(function(b, d) {
                      var e = a(d),
                          f = 0;
                      e.find("> th, > td").each(function(d, e) {
                          for (var g = a(e), h = parseInt(g.attr("colspan"), 10) || 1, i = parseInt(g.attr("rowspan"), 10) || 1, j = b; b + i > j; j++)
                              for (var k = f; f + h > k; k++) c[j] || (c[j] = []),
                                  c[j][k] ? f++ : c[j][k] = e;
                          f += h
                      })
                  }), c
              }
          }
  
          function C(a, b) {
              for (var c = 0; c < b.length; c++)
                  for (var d = 0; d < b[c].length; d++)
                      if (b[c][d] == a) return { row: c, col: d } }
  
          function D(a, b, c) {
              for (var d = a + 1, e = b + 1; d < c.length;) {
                  if (c[d][b] != c[a][b]) { d--;
                      break }
                  d++ }
              for (d == c.length && d--; e < c[a].length;) {
                  if (c[a][e] != c[a][b]) { e--;
                      break }
                  e++ }
              return e == c[a].length && e--, { row: d, col: e } }
  
          function E() {
              var c = b.$el.find(".fr-selected-cell");
              c.length > 0 && c.each(function() {
                  var b = a(this);
                  b.removeClass("fr-selected-cell"), "" === b.attr("class") && b.removeAttr("class") }) }
  
          function F() { setTimeout(function() { b.selection.clear(), b.$el.addClass("fr-no-selection"), b.edit.off(), b.$el.blur() }, 0) }
  
          function G(a) {
              var c, d = a.length,
                  e = 0,
                  f = a[0].length,
                  g = 0,
                  h = b.$el.find(".fr-selected-cell");
              for (c = 0; c < h.length; c++) {
                  var i = C(h[c], a),
                      j = D(i.row, i.col, a);
                  d = Math.min(i.row, d), e = Math.max(j.row, e), f = Math.min(i.col, f), g = Math.max(j.col, g) }
              return { min_i: d, max_i: e, min_j: f, max_j: g } }
  
          function H(b, c, d, e, f) {
              var g, h, i, j, k = b,
                  l = c,
                  m = d,
                  n = e;
              for (g = k; l >= g; g++)((parseInt(a(f[g][m]).attr("rowspan"), 10) || 1) > 1 || (parseInt(a(f[g][m]).attr("colspan"), 10) || 1) > 1) && (i = C(f[g][m], f), j = D(i.row, i.col, f), k = Math.min(i.row, k), l = Math.max(j.row, l), m = Math.min(i.col, m), n = Math.max(j.col, n)), ((parseInt(a(f[g][n]).attr("rowspan"), 10) || 1) > 1 || (parseInt(a(f[g][n]).attr("colspan"), 10) || 1) > 1) && (i = C(f[g][n], f), j = D(i.row, i.col, f), k = Math.min(i.row, k), l = Math.max(j.row, l), m = Math.min(i.col, m), n = Math.max(j.col, n));
              for (h = m; n >= h; h++)((parseInt(a(f[k][h]).attr("rowspan"), 10) || 1) > 1 || (parseInt(a(f[k][h]).attr("colspan"), 10) || 1) > 1) && (i = C(f[k][h], f), j = D(i.row, i.col, f), k = Math.min(i.row, k), l = Math.max(j.row, l), m = Math.min(i.col, m), n = Math.max(j.col, n)), ((parseInt(a(f[l][h]).attr("rowspan"), 10) || 1) > 1 || (parseInt(a(f[l][h]).attr("colspan"), 10) || 1) > 1) && (i = C(f[l][h], f), j = D(i.row, i.col, f), k = Math.min(i.row, k), l = Math.max(j.row, l), m = Math.min(i.col, m), n = Math.max(j.col, n));
              return k == b && l == c && m == d && n == e ? { min_i: b, max_i: c, min_j: d, max_j: e } : H(k, l, m, n, f) }
  
          function I(b) {
              var c = G(b),
                  d = a(b[c.min_i][c.min_j]),
                  e = a(b[c.min_i][c.max_j]),
                  f = a(b[c.max_i][c.min_j]),
                  g = d.offset().left,
                  h = e.offset().left + e.outerWidth(),
                  i = d.offset().top,
                  j = f.offset().top + f.outerHeight();
              return { left: g, right: h, top: i, bottom: j } }
  
          function J(b, c) {
              if (a(b).is(c)) E(), a(b).addClass("fr-selected-cell");
              else { F();
                  var d = B(),
                      e = C(b, d),
                      f = C(c, d),
                      g = H(Math.min(e.row, f.row), Math.max(e.row, f.row), Math.min(e.col, f.col), Math.max(e.col, f.col), d);
                  E();
                  for (var h = g.min_i; h <= g.max_i; h++)
                      for (var i = g.min_j; i <= g.max_j; i++) a(d[h][i]).addClass("fr-selected-cell") } }
  
          function K(c) {
              var d = null,
                  e = a(c.target);
              return "TD" == c.target.tagName || "TH" == c.target.tagName ? d = c.target : e.closest("td").length > 0 ? d = e.closest("td").get(0) : e.closest("th").length > 0 && (d = e.closest("th").get(0)), 0 === b.$el.find(d).length ? null : d }
  
          function L() { E(), b.popups.hide("table.edit") }
  
          function M(c) {
              var d = K(c);
              if (ga().length > 0 && !d && L(), 1 == c.which) {
                  if (la = !0, d) { ga().length > 0 && !c.shiftKey && L(), c.stopPropagation(), b.events.trigger("image.hideResizer"), b.events.trigger("video.hideResizer"), ka = !0;
                      var e = d.tagName.toLowerCase();
                      c.shiftKey && b.$el.find(e + ".fr-selected-cell").length > 0 ? a(b.$el.find(e + ".fr-selected-cell").closest("table")).is(a(d).closest("table")) ? J(ma, d) : F() : ((b.keys.ctrlKey(c) || c.shiftKey) && F(), ma = d, J(ma, ma)) } } else 3 == c.which && d && L() }
  
          function N(c) {
              if (1 == c.which) {
                  if (la = !1, ka) { ka = !1;
                      var e = K(c);
                      e || 1 != ga().length ? ga().length > 0 && (b.selection.isCollapsed() ? d() : E()) : E() } else b.$tb.is(c.target) || b.$tb.is(a(c.target).closest(b.$tb.get(0))) || (b.$el.get(0).querySelectorAll(".fr-selected-cell").length > 0 && b.toolbar.enable(), E());
                  if (oa) { oa = !1, ia.removeClass("fr-moving"), b.$el.removeClass("fr-no-selection"), b.edit.on();
                      var f = parseFloat(ia.css("left")) + b.opts.tableResizerOffset;
                      b.opts.iframe && (f -= b.$iframe.offset().left), ia.data("release-position", f), ia.removeData("max-left"), ia.removeData("max-right"), Z(c), R() } } }
  
          function O(c) {
              if (ka === !0) {
                  var d = a(c.currentTarget);
                  if (d.closest("table").is(ha())) {
                      if ("TD" == c.currentTarget.tagName && 0 === b.$el.find("th.fr-selected-cell").length) return void J(ma, c.currentTarget);
                      if ("TH" == c.currentTarget.tagName && 0 === b.$el.find("td.fr-selected-cell").length) return void J(ma, c.currentTarget) }
                  F() } }
  
          function P(a) {
              (37 == a.which || 38 == a.which || 39 == a.which || 40 == a.which) && ga().length > 0 && L() }
  
          function Q() { b.shared.$table_resizer || (b.shared.$table_resizer = a('<div class="fr-table-resizer"><div></div></div>')), ia = b.shared.$table_resizer, b.events.$on(ia, "mousedown", function(a) {
                  return b.core.sameInstance(ia) ? (ga().length > 0 && L(), 1 == a.which ? (oa = !0, ia.addClass("fr-moving"), F(), ia.find("div").css("opacity", 1), !1) : void 0) : !0 }), b.events.$on(ia, "mousemove", function(a) {
                  return b.core.sameInstance(ia) ? void(oa && (b.opts.iframe && (a.pageX -= b.$iframe.offset().left), aa(a))) : !0 }), b.events.on("shared.destroy", function() { ia.html("").removeData().remove() }, !0), b.events.on("destroy", function() { b.$el.find(".fr-selected-cell").removeClass("fr-selected-cell"), ia.hide().appendTo(a("body")) }, !0) }
  
          function R() { ia && (ia.find("div").css("opacity", 0), ia.css("top", 0), ia.css("left", 0), ia.css("height", 0), ia.find("div").css("height", 0), ia.hide()) }
  
          function S() { ja && ja.removeClass("fr-visible").css("left", "-9999px") }
  
          function T(c, d) {
              var e = a(d),
                  f = e.closest("table");
              if (d && "TD" != d.tagName && "TH" != d.tagName && (e.closest("td").length > 0 ? d = e.closest("td") : e.closest("th").length > 0 && (d = e.closest("th"))), !d || "TD" != d.tagName && "TH" != d.tagName) ia && e.get(0) != ia.get(0) && e.parent().get(0) != ia.get(0) && b.core.sameInstance(ia) && R();
              else {
                  if (e = a(d), 0 === b.$el.find(e).length) return !1;
                  var g = e.offset().left - 1,
                      h = g + e.outerWidth();
                  if (Math.abs(c.pageX - g) <= b.opts.tableResizerOffset || Math.abs(h - c.pageX) <= b.opts.tableResizerOffset) {
                      var i, j, k, l, m, n = B(f),
                          o = C(d, n),
                          p = D(o.row, o.col, n),
                          q = f.offset().top,
                          r = f.outerHeight() - 1;
                      if (o.col > 0 && c.pageX - g <= b.opts.tableResizerOffset) { k = g;
                          var s = a(n[o.row][o.col - 1]);
                          l = 1 == (parseInt(s.attr("colspan"), 10) || 1) ? s.offset().left - 1 + b.opts.tableResizingLimit : g - $(o.col - 1, n) + b.opts.tableResizingLimit, m = 1 == (parseInt(e.attr("colspan"), 10) || 1) ? g + e.outerWidth() - b.opts.tableResizingLimit : g + $(o.col, n) - b.opts.tableResizingLimit, i = o.col - 1, j = o.col } else if (h - c.pageX <= b.opts.tableResizerOffset)
                          if (k = h, p.col < n[p.row].length && n[p.row][p.col + 1]) {
                              var t = a(n[p.row][p.col + 1]);
                              l = 1 == (parseInt(e.attr("colspan"), 10) || 1) ? g + b.opts.tableResizingLimit : h - $(p.col, n) + b.opts.tableResizingLimit, m = 1 == (parseInt(t.attr("colspan"), 10) || 1) ? h + t.outerWidth() - b.opts.tableResizingLimit : h + $(o.col + 1, n) - b.opts.tableResizingLimit, i = p.col, j = p.col + 1 } else { i = p.col, j = null;
                              var u = f.parent();
                              l = f.offset().left - 1 + n[0].length * b.opts.tableResizingLimit, m = u.offset().left - 1 + u.width() + parseFloat(u.css("padding-left")) }
                      ia || Q(), ia.data("table", f), ia.data("first", i), ia.data("second", j), ia.data("instance", b), b.$wp.append(ia);
                      var v = k - b.win.pageXOffset - b.opts.tableResizerOffset,
                          w = q - b.win.pageYOffset;
                      b.opts.iframe && (v += b.$iframe.offset().left - a(b.o_win).scrollLeft(), w += b.$iframe.offset().top - a(b.o_win).scrollTop(), l += b.$iframe.offset().left, m += b.$iframe.offset().left), ia.data("max-left", l), ia.data("max-right", m), ia.data("origin", k - b.win.pageXOffset), ia.css("top", w), ia.css("left", v), ia.css("height", r), ia.find("div").css("height", r), ia.css("padding-left", b.opts.tableResizerOffset), ia.css("padding-right", b.opts.tableResizerOffset), ia.show() } else b.core.sameInstance(ia) && R() } }
  
          function U(c, d) {
              if (b.$box.find(".fr-line-breaker").is(":visible")) return !1;
              ja || da(), b.$box.append(ja), ja.data("instance", b);
              var e = a(d),
                  f = e.find("tr:first"),
                  g = c.pageX,
                  h = 0,
                  i = 0;
              b.opts.iframe && (h += b.$iframe.offset().left - a(b.o_win).scrollLeft(), i += b.$iframe.offset().top - a(b.o_win).scrollTop());
              var j;
              f.find("th, td").each(function() {
                  var c = a(this);
                  return c.offset().left <= g && g < c.offset().left + c.outerWidth() / 2 ? (j = parseInt(ja.find("a").css("width"), 10), ja.css("top", i + c.offset().top - b.win.pageYOffset - j - 5), ja.css("left", h + c.offset().left - b.win.pageXOffset - j / 2), ja.data("selected-cell", c), ja.data("position", "before"), ja.addClass("fr-visible"), !1) : c.offset().left + c.outerWidth() / 2 <= g && g < c.offset().left + c.outerWidth() ? (j = parseInt(ja.find("a").css("width"), 10), ja.css("top", i + c.offset().top - b.win.pageYOffset - j - 5), ja.css("left", h + c.offset().left + c.outerWidth() - b.win.pageXOffset - j / 2), ja.data("selected-cell", c), ja.data("position", "after"), ja.addClass("fr-visible"), !1) : void 0 }) }
  
          function V(c, d) {
              if (b.$box.find(".fr-line-breaker").is(":visible")) return !1;
              ja || da(), b.$box.append(ja), ja.data("instance", b);
              var e = a(d),
                  f = c.pageY,
                  g = 0,
                  h = 0;
              b.opts.iframe && (g += b.$iframe.offset().left - a(b.o_win).scrollLeft(), h += b.$iframe.offset().top - a(b.o_win).scrollTop());
              var i;
              e.find("tr").each(function() {
                  var c = a(this);
                  return c.offset().top <= f && f < c.offset().top + c.outerHeight() / 2 ? (i = parseInt(ja.find("a").css("width"), 10), ja.css("top", h + c.offset().top - b.win.pageYOffset - i / 2), ja.css("left", g + c.offset().left - b.win.pageXOffset - i - 5), ja.data("selected-cell", c.find("td:first")), ja.data("position", "above"), ja.addClass("fr-visible"), !1) : c.offset().top + c.outerHeight() / 2 <= f && f < c.offset().top + c.outerHeight() ? (i = parseInt(ja.find("a").css("width"), 10), ja.css("top", h + c.offset().top + c.outerHeight() - b.win.pageYOffset - i / 2), ja.css("left", g + c.offset().left - b.win.pageXOffset - i - 5), ja.data("selected-cell", c.find("td:first")), ja.data("position", "below"), ja.addClass("fr-visible"), !1) : void 0 }) }
  
          function W(c, d) {
              if (0 === ga().length) {
                  var e, f, g;
                  if (d && ("HTML" == d.tagName || "BODY" == d.tagName || b.node.isElement(d)))
                      for (e = 1; e <= b.opts.tableInsertHelperOffset; e++) {
                          if (f = b.doc.elementFromPoint(c.pageX - b.win.pageXOffset, c.pageY - b.win.pageYOffset + e), a(f).hasClass("fr-tooltip")) return !0;
                          if (f && ("TH" == f.tagName || "TD" == f.tagName || "TABLE" == f.tagName) && (a(f).parents(".fr-wrapper").length || b.opts.iframe)) return U(c, f.closest("table")), !0;
                          if (g = b.doc.elementFromPoint(c.pageX - b.win.pageXOffset + e, c.pageY - b.win.pageYOffset), a(g).hasClass("fr-tooltip")) return !0;
                          if (g && ("TH" == g.tagName || "TD" == g.tagName || "TABLE" == g.tagName) && (a(g).parents(".fr-wrapper").length || b.opts.iframe)) return V(c, g.closest("table")), !0 }
                  b.core.sameInstance(ja) && S() } }
  
          function X(a) { na = null;
              var c = b.doc.elementFromPoint(a.pageX - b.win.pageXOffset, a.pageY - b.win.pageYOffset);
              (!b.popups.areVisible() || b.popups.areVisible() && b.popups.isVisible("table.edit")) && T(a, c), b.popups.areVisible() || b.$tb.hasClass("fr-inline") && b.$tb.is(":visible") || W(a, c) }
  
          function Y() {
              if (oa) {
                  var c = ia.data("table"),
                      d = c.offset().top - b.win.pageYOffset;
                  b.opts.iframe && (d += b.$iframe.offset().top - a(b.o_win).scrollTop()), ia.css("top", d) } }
  
          function Z() {
              var c = ia.data("origin"),
                  d = ia.data("release-position");
              if (c !== d) {
                  var e = ia.data("first"),
                      f = ia.data("second"),
                      g = ia.data("table"),
                      h = g.outerWidth();
                  if (null !== e && null !== f) {
                      var i, j, k, l = B(g),
                          m = [],
                          n = [],
                          o = [],
                          p = [];
                      for (i = 0; i < l.length; i++) j = a(l[i][e]), k = a(l[i][f]), m[i] = j.outerWidth(), o[i] = k.outerWidth(), n[i] = m[i] / h * 100, p[i] = o[i] / h * 100;
                      for (i = 0; i < l.length; i++) { j = a(l[i][e]), k = a(l[i][f]);
                          var q = (n[i] * (m[i] + d - c) / m[i]).toFixed(4);
                          j.css("width", q + "%"), k.css("width", (n[i] + p[i] - q).toFixed(4) + "%") } } else {
                      var r, s = g.parent(),
                          t = h / s.width() * 100;
                      r = null == e ? (h - d + c) / h * t : (h + d - c) / h * t, g.css("width", Math.round(r).toFixed(4) + "%") } }
              ia.removeData("origin"), ia.removeData("release-position"), ia.removeData("first"), ia.removeData("second"), ia.removeData("table"), b.undo.saveStep() }
  
          function $(b, c) {
              var d, e = a(c[0][b]).outerWidth();
              for (d = 1; d < c.length; d++) e = Math.min(e, a(c[d][b]).outerWidth());
              return e }
  
          function _(a, b, c) {
              var d, e = 0;
              for (d = a; b >= d; d++) e += $(d, c);
              return e }
  
          function aa(a) {
              if (ga().length > 1 && la && F(), la === !1 && ka === !1 && oa === !1) na && clearTimeout(na), na = setTimeout(X, 30, a);
              else if (oa) {
                  var c = a.pageX - b.win.pageXOffset;
                  b.opts.iframe && (c += b.$iframe.offset().left);
                  var d = ia.data("max-left"),
                      e = ia.data("max-right");
                  c >= d && e >= c ? ia.css("left", c - b.opts.tableResizerOffset) : d > c && parseFloat(ia.css("left"), 10) > d - b.opts.tableResizerOffset ? ia.css("left", d - b.opts.tableResizerOffset) : c > e && parseFloat(ia.css("left"), 10) < e - b.opts.tableResizerOffset && ia.css("left", e - b.opts.tableResizerOffset) } else la && S() }
  
          function ba(c) { b.node.isEmpty(c.get(0)) ? c.prepend(a.FE.MARKERS) : c.prepend(a.FE.START_MARKER).append(a.FE.END_MARKER) }
  
          function ca(c) {
              var d = c.which;
              if (d == a.FE.KEYCODE.TAB && 0 === b.opts.tabSpaces) {
                  var e;
                  if (ga().length > 0) e = b.$el.find(".fr-selected-cell:last");
                  else {
                      var f = b.selection.element(); "TD" == f.tagName || "TH" == f.tagName ? e = a(f) : a(f).closest("td").length > 0 ? e = a(f).closest("td") : a(f).closest("th").length > 0 && (e = a(f).closest("th")) }
                  e && (c.preventDefault(), L(), c.shiftKey ? e.prev().length > 0 ? ba(e.prev()) : e.closest("tr").length > 0 && e.closest("tr").prev().length > 0 ? ba(e.closest("tr").prev().find("td:last")) : e.closest("tbody").length > 0 && e.closest("table").find("thead tr").length > 0 && ba(e.closest("table").find("thead tr th:last")) : e.next().length > 0 ? ba(e.next()) : e.closest("tr").length > 0 && e.closest("tr").next().length > 0 ? ba(e.closest("tr").next().find("td:first")) : e.closest("thead").length > 0 && e.closest("table").find("tbody tr").length > 0 ? ba(e.closest("table").find("tbody tr td:first")) : (e.addClass("fr-selected-cell"), q("below"), E(), ba(e.closest("tr").next().find("td:first"))), b.selection.restore()) } }
  
          function da() { b.shared.$ti_helper || (b.shared.$ti_helper = a('<div class="fr-insert-helper"><a class="fr-floating-btn" role="button" tabindex="-1" title="' + b.language.translate("Insert") + '"><svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><path d="M22,16.75 L16.75,16.75 L16.75,22 L15.25,22.000 L15.25,16.75 L10,16.75 L10,15.25 L15.25,15.25 L15.25,10 L16.75,10 L16.75,15.25 L22,15.25 L22,16.75 Z"/></svg></a></div>'), b.events.bindClick(b.shared.$ti_helper, "a", function() {
                  var a = ja.data("selected-cell"),
                      c = ja.data("position"),
                      d = ja.data("instance") || b; "before" == c ? (a.addClass("fr-selected-cell"), d.table.insertColumn(c), a.removeClass("fr-selected-cell")) : "after" == c ? (a.addClass("fr-selected-cell"), d.table.insertColumn(c), a.removeClass("fr-selected-cell")) : "above" == c ? (a.addClass("fr-selected-cell"), d.table.insertRow(c), a.removeClass("fr-selected-cell")) : "below" == c && (a.addClass("fr-selected-cell"), d.table.insertRow(c), a.removeClass("fr-selected-cell")), S() }), b.events.on("shared.destroy", function() { b.shared.$ti_helper.html("").removeData().remove() }, !0), b.events.$on(b.shared.$ti_helper, "mousemove", function(a) { a.stopPropagation() }, !0), b.events.$on(a(b.o_win), "scroll", function() { S() }, !0), b.events.$on(b.$wp, "scroll", function() { S() }, !0)), ja = b.shared.$ti_helper, b.tooltip.bind(b.$box, ".fr-insert-helper > a.fr-floating-btn") }
  
          function ea() {
              if (!b.$wp) return !1;
              if (!b.helpers.isMobile()) { la = !1, ka = !1, oa = !1, b.events.$on(b.$el, "mousedown", M), b.popups.onShow("image.edit", function() { E(), la = !1, ka = !1 }), b.popups.onShow("link.edit", function() { E(), la = !1, ka = !1 }), b.events.on("commands.mousedown", function(a) { a.parents(".fr-toolbar").length > 0 && E() }), b.events.$on(b.$el, "mouseenter", "th, td", O), b.events.$on(b.$win, "mouseup", N), b.opts.iframe && b.events.$on(a(b.o_win), "mouseup", N), b.events.$on(b.$el, "keydown", P), b.events.$on(b.$win, "mousemove", aa), b.events.$on(a(b.o_win), "scroll", Y), b.events.on("contentChanged", function() { ga().length > 0 && (d(), b.$el.find("img").on("load.selected-cells", function() { a(this).off("load.selected-cells"), ga().length > 0 && d() })) }), b.events.$on(a(b.o_win), "resize", function() { E() }), b.events.on("keydown", function(c) {
                      var d = b.$el.get(0).querySelectorAll(".fr-selected-cell");
                      if (d.length > 0) {
                          if (c.which == a.FE.KEYCODE.ESC && b.popups.isVisible("table.edit")) return E(), b.popups.hide("table.edit"), c.preventDefault(), c.stopPropagation(), c.stopImmediatePropagation(), !1;
                          if (d.length > 1) return c.preventDefault(), !1 } }, !0);
                  var c;
                  b.events.on("html.beforeGet", function() { c = b.$el.find(".fr-selected-cell"), c.removeClass("fr-selected-cell") }), b.events.on("html.get", function(a) {
                      return a = a.replace(/<(td|th)((?:[\w\W]*?)) class=""((?:[\w\W]*?))>((?:[\w\W]*?))<\/(td|th)>/g, "<$1$2$3>$4</$5>") }), b.events.on("html.afterGet", function() { c.addClass("fr-selected-cell") }), g(!0), i(!0) }
              b.events.on("keydown", ca, !0) }
  
          function fa() { ga().length > 0 ? d() : (b.popups.hide("table.insert"), b.toolbar.showInline()) }
  
          function ga() {
              return b.$el.get(0).querySelectorAll(".fr-selected-cell") }
  
          function ha() {
              var c = ga();
              if (c.length) {
                  for (var d = c[0]; d && "TABLE" != d.tagName && d.parentNode != b.$el.get(0);) d = d.parentNode;
                  return a(d && "TABLE" == d.tagName ? d : []) } }
          var ia, ja, ka, la, ma, na, oa;
          return { _init: ea, insert: m, remove: n, insertRow: q, deleteRow: r, insertColumn: s, deleteColumn: t, mergeCells: u, splitCellVertically: w, splitCellHorizontally: v, addHeader: o, removeHeader: p, setBackground: x, showInsertPopup: c, showEditPopup: d, showColorsPopup: e, back: fa, verticalAlign: y, horizontalAlign: z, applyStyle: A, selectedTable: ha, selectedCells: ga }
      }, a.FE.DefineIcon("insertTable", { NAME: "table" }), a.FE.RegisterCommand("insertTable", { title: "Insert Table", undo: !1, focus: !0, refreshOnCallback: !1, popup: !0, callback: function() { this.popups.isVisible("table.insert") ? (this.$el.find(".fr-marker") && (this.events.disableBlur(), this.selection.restore()), this.popups.hide("table.insert")) : this.table.showInsertPopup() }, plugin: "table" }), a.FE.RegisterCommand("tableInsert", { callback: function(a, b, c) { this.table.insert(b, c), this.popups.hide("table.insert") } }), a.FE.DefineIcon("tableHeader", { NAME: "header" }), a.FE.RegisterCommand("tableHeader", { title: "Table Header", focus: !1, callback: function() {
              var a = this.popups.get("table.edit").find('.fr-command[data-cmd="tableHeader"]');
              a.hasClass("fr-active") ? this.table.removeHeader() : this.table.addHeader() }, refresh: function(a) {
              var b = this.table.selectedTable();
              b.length > 0 && (0 === b.find("th").length ? a.removeClass("fr-active") : a.addClass("fr-active")) } }), a.FE.DefineIcon("tableRows", { NAME: "bars" }), a.FE.RegisterCommand("tableRows", { type: "dropdown", focus: !1, title: "Row", options: { above: "Insert row above", below: "Insert row below", "delete": "Delete row" }, html: function() {
              var b = '<ul class="fr-dropdown-list">',
                  c = a.FE.COMMANDS.tableRows.options;
              for (var d in c) c.hasOwnProperty(d) && (b += '<li><a class="fr-command" data-cmd="tableRows" data-param1="' + d + '" title="' + this.language.translate(c[d]) + '">' + this.language.translate(c[d]) + "</a></li>");
              return b += "</ul>" }, callback: function(a, b) { "above" == b || "below" == b ? this.table.insertRow(b) : this.table.deleteRow() } }), a.FE.DefineIcon("tableColumns", { NAME: "bars fa-rotate-90" }), a.FE.RegisterCommand("tableColumns", { type: "dropdown", focus: !1, title: "Column", options: { before: "Insert column before", after: "Insert column after", "delete": "Delete column" }, html: function() {
              var b = '<ul class="fr-dropdown-list">',
                  c = a.FE.COMMANDS.tableColumns.options;
              for (var d in c) c.hasOwnProperty(d) && (b += '<li><a class="fr-command" data-cmd="tableColumns" data-param1="' + d + '" title="' + this.language.translate(c[d]) + '">' + this.language.translate(c[d]) + "</a></li>");
              return b += "</ul>" }, callback: function(a, b) { "before" == b || "after" == b ? this.table.insertColumn(b) : this.table.deleteColumn() } }), a.FE.DefineIcon("tableCells", { NAME: "square-o" }), a.FE.RegisterCommand("tableCells", { type: "dropdown", focus: !1, title: "Cell", options: { merge: "Merge cells", "vertical-split": "Vertical split", "horizontal-split": "Horizontal split" }, html: function() {
              var b = '<ul class="fr-dropdown-list">',
                  c = a.FE.COMMANDS.tableCells.options;
              for (var d in c) c.hasOwnProperty(d) && (b += '<li><a class="fr-command" data-cmd="tableCells" data-param1="' + d + '" title="' + this.language.translate(c[d]) + '">' + this.language.translate(c[d]) + "</a></li>");
              return b += "</ul>" }, callback: function(a, b) { "merge" == b ? this.table.mergeCells() : "vertical-split" == b ? this.table.splitCellVertically() : this.table.splitCellHorizontally() }, refreshOnShow: function(a, b) { this.$el.find(".fr-selected-cell").length > 1 ? (b.find('a[data-param1="vertical-split"]').addClass("fr-disabled"), b.find('a[data-param1="horizontal-split"]').addClass("fr-disabled"), b.find('a[data-param1="merge"]').removeClass("fr-disabled")) : (b.find('a[data-param1="merge"]').addClass("fr-disabled"), b.find('a[data-param1="vertical-split"]').removeClass("fr-disabled"), b.find('a[data-param1="horizontal-split"]').removeClass("fr-disabled")) } }), a.FE.DefineIcon("tableRemove", { NAME: "trash" }), a.FE.RegisterCommand("tableRemove", { title: "Remove Table", focus: !1, callback: function() { this.table.remove() } }), a.FE.DefineIcon("tableStyle", { NAME: "paint-brush" }), a.FE.RegisterCommand("tableStyle", { title: "Table Style", type: "dropdown", focus: !1, html: function() {
              var a = '<ul class="fr-dropdown-list">',
                  b = this.opts.tableStyles;
              for (var c in b) b.hasOwnProperty(c) && (a += '<li><a class="fr-command" data-cmd="tableStyle" data-param1="' + c + '" title="' + this.language.translate(b[c]) + '">' + this.language.translate(b[c]) + "</a></li>");
              return a += "</ul>" }, callback: function(a, b) { this.table.applyStyle(b, this.$el.find(".fr-selected-cell").closest("table"), this.opts.tableMultipleStyles, this.opts.tableStyles) }, refreshOnShow: function(b, c) {
              var d = this.$el.find(".fr-selected-cell").closest("table");
              d && c.find(".fr-command").each(function() {
                  var b = a(this).data("param1");
                  a(this).toggleClass("fr-active", d.hasClass(b)) }) } }), a.FE.DefineIcon("tableCellBackground", { NAME: "tint" }), a.FE.RegisterCommand("tableCellBackground", { title: "Cell Background", focus: !1, callback: function() { this.table.showColorsPopup() } }), a.FE.RegisterCommand("tableCellBackgroundColor", { undo: !0, focus: !1, callback: function(a, b) { this.table.setBackground(b) } }), a.FE.DefineIcon("tableBack", { NAME: "arrow-left" }), a.FE.RegisterCommand("tableBack", { title: "Back", undo: !1, focus: !1, back: !0, callback: function() { this.table.back() }, refresh: function(a) { 0 !== this.table.selectedCells().length || this.opts.toolbarInline ? (a.removeClass("fr-hidden"), a.next(".fr-separator").removeClass("fr-hidden")) : (a.addClass("fr-hidden"), a.next(".fr-separator").addClass("fr-hidden")) } }), a.FE.DefineIcon("tableCellVerticalAlign", { NAME: "arrows-v" }), a.FE.RegisterCommand("tableCellVerticalAlign", { type: "dropdown", focus: !1, title: "Vertical Align", options: { Top: "Align Top", Middle: "Align Middle", Bottom: "Align Bottom" }, html: function() {
              var b = '<ul class="fr-dropdown-list">',
                  c = a.FE.COMMANDS.tableCellVerticalAlign.options;
              for (var d in c) c.hasOwnProperty(d) && (b += '<li><a class="fr-command" data-cmd="tableCellVerticalAlign" data-param1="' + d.toLowerCase() + '" title="' + this.language.translate(c[d]) + '">' + this.language.translate(d) + "</a></li>");
              return b += "</ul>" }, callback: function(a, b) { this.table.verticalAlign(b) }, refreshOnShow: function(a, b) { b.find('.fr-command[data-param1="' + this.$el.find(".fr-selected-cell").css("vertical-align") + '"]').addClass("fr-active") } }), a.FE.DefineIcon("tableCellHorizontalAlign", { NAME: "align-left" }), a.FE.DefineIcon("align-left", { NAME: "align-left" }), a.FE.DefineIcon("align-right", { NAME: "align-right" }), a.FE.DefineIcon("align-center", { NAME: "align-center" }), a.FE.DefineIcon("align-justify", { NAME: "align-justify" }), a.FE.RegisterCommand("tableCellHorizontalAlign", { type: "dropdown", focus: !1, title: "Horizontal Align", options: { left: "Align Left", center: "Align Center", right: "Align Right", justify: "Align Justify" }, html: function() {
              var b = '<ul class="fr-dropdown-list">',
                  c = a.FE.COMMANDS.tableCellHorizontalAlign.options;
              for (var d in c) c.hasOwnProperty(d) && (b += '<li><a class="fr-command fr-title" data-cmd="tableCellHorizontalAlign" data-param1="' + d + '" title="' + this.language.translate(c[d]) + '">' + this.icon.create("align-" + d) + "</a></li>");
              return b += "</ul>" }, callback: function(a, b) { this.table.horizontalAlign(b) }, refresh: function(b) {
              var c = this.table.selectedCells();
              c.length && b.find("> *:first").replaceWith(this.icon.create("align-" + this.helpers.getAlignment(a(c[0])))) }, refreshOnShow: function(a, b) { b.find('.fr-command[data-param1="' + this.helpers.getAlignment(this.$el.find(".fr-selected-cell:first")) + '"]').addClass("fr-active") } }), a.FE.DefineIcon("tableCellStyle", { NAME: "magic" }), a.FE.RegisterCommand("tableCellStyle", { title: "Cell Style", type: "dropdown", focus: !1, html: function() {
              var a = '<ul class="fr-dropdown-list">',
                  b = this.opts.tableCellStyles;
              for (var c in b) b.hasOwnProperty(c) && (a += '<li><a class="fr-command" data-cmd="tableCellStyle" data-param1="' + c + '" title="' + this.language.translate(b[c]) + '">' + this.language.translate(b[c]) + "</a></li>");
              return a += "</ul>" }, callback: function(a, b) { this.table.applyStyle(b, this.$el.find(".fr-selected-cell"), this.opts.tableCellMultipleStyles, this.opts.tableCellStyles) }, refreshOnShow: function(b, c) {
              var d = this.$el.find(".fr-selected-cell:first");
              d && c.find(".fr-command").each(function() {
                  var b = a(this).data("param1");
                  a(this).toggleClass("fr-active", d.hasClass(b)) }) } }), a.extend(a.FE.DEFAULTS, {}), a.FE.URLRegEx = /(\s|^|>)((http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+(\.[a-zA-Z]{2,3})?(:\d*)?(\/[^\s<]*)?)(\s|$|<)/gi, a.FE.PLUGINS.url = function(b) {
          function c(d) { d.each(function() {
                  if ("IFRAME" != this.tagName)
                      if (3 == this.nodeType) {
                          var d = this.textContent.replace(/&nbsp;/gi, "");
                          a.FE.URLRegEx.test(d) && (a(this).before(d.replace(a.FE.URLRegEx, '$1<a href="$2">$2</a>$7')), a(this).remove()) } else 1 == this.nodeType && ["A", "BUTTON", "TEXTAREA"].indexOf(this.tagName) < 0 && c(b.node.contents(this)) }) }
  
          function d() { b.events.on("paste.afterCleanup", function(b) {
                  return a.FE.URLRegEx.test(b) ? b.replace(a.FE.URLRegEx, '$1<a href="$2">$2</a>$7') : void 0 }), b.events.on("keyup", function(d) {
                  var e = d.which;
                  (e == a.FE.KEYCODE.ENTER || e == a.FE.KEYCODE.SPACE) && c(b.node.contents(b.$el.get(0))) }), b.events.on("keydown", function(c) {
                  var d = c.which;
                  if (d == a.FE.KEYCODE.ENTER) {
                      var e = b.selection.element();
                      if (("A" == e.tagName || a(e).parents("a").length) && b.selection.info(e).atEnd) return c.stopImmediatePropagation(), "A" !== e.tagName && (e = a(e).parents("a")[0]), a(e).after("&nbsp;" + a.FE.MARKERS), b.selection.restore(), !1 } }) }
          return { _init: d } }, a.extend(a.FE.POPUP_TEMPLATES, { "video.insert": "[_BUTTONS_][_BY_URL_LAYER_][_EMBED_LAYER_]", "video.edit": "[_BUTTONS_]", "video.size": "[_BUTTONS_][_SIZE_LAYER_]" }), a.extend(a.FE.DEFAULTS, { videoInsertButtons: ["videoBack", "|", "videoByURL", "videoEmbed"], videoEditButtons: ["videoDisplay", "videoAlign", "videoSize", "videoRemove"], videoResize: !0, videoSizeButtons: ["videoBack", "|"], videoSplitHTML: !1, videoTextNear: !0, videoDefaultAlign: "center", videoDefaultDisplay: "block", videoMove: !0 }), a.FE.VIDEO_PROVIDERS = [{ test_regex: /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/, url_regex: /(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=|embed\/)?([0-9a-zA-Z_\-]+)(.+)?/g, url_text: "//www.youtube.com/embed/$1", html: '<iframe width="640" height="360" src="{url}" frameborder="0" allowfullscreen></iframe>' }, { test_regex: /^.*(vimeo\.com\/)((channels\/[A-z]+\/)|(groups\/[A-z]+\/videos\/))?([0-9]+)/, url_regex: /(?:https?:\/\/)?(?:www\.)?(?:vimeo\.com)\/(?:channels\/[A-z]+\/|groups\/[A-z]+\/videos\/)?(.+)/g, url_text: "//player.vimeo.com/video/$1", html: '<iframe width="640" height="360" src="{url}" frameborder="0" allowfullscreen></iframe>' }, { test_regex: /^.+(dailymotion.com|dai.ly)\/(video|hub)?\/?([^_]+)[^#]*(#video=([^_&]+))?/, url_regex: /(?:https?:\/\/)?(?:www\.)?(?:dailymotion\.com|dai\.ly)\/(?:video|hub)?\/?(.+)/g, url_text: "//www.dailymotion.com/embed/video/$1", html: '<iframe width="640" height="360" src="{url}" frameborder="0" allowfullscreen></iframe>' }, { test_regex: /^.+(screen.yahoo.com)\/[^_&]+/, url_regex: "", url_text: "", html: '<iframe width="640" height="360" src="{url}?format=embed" frameborder="0" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true" allowtransparency="true"></iframe>' }, { test_regex: /^.+(rutube.ru)\/[^_&]+/, url_regex: /(?:https?:\/\/)?(?:www\.)?(?:rutube\.ru)\/(?:video)?\/?(.+)/g, url_text: "//rutube.ru/play/embed/$1", html: '<iframe width="640" height="360" src="{url}" frameborder="0" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true" allowtransparency="true"></iframe>' }], a.FE.PLUGINS.video = function(b) {
          function c() {
              var a = b.popups.get("video.insert"),
                  c = a.find(".fr-video-by-url-layer input");
              c.val("").trigger("change");
              var d = a.find(".fr-video-embed-layer textarea");
              d.val("").trigger("change") }
  
          function d() {
              var a = b.$tb.find('.fr-command[data-cmd="insertVideo"]'),
                  c = b.popups.get("video.insert");
              if (c || (c = f()), !c.hasClass("fr-active")) { b.popups.refresh("video.insert"), b.popups.setContainer("video.insert", b.$tb);
                  var d = a.offset().left + a.outerWidth() / 2,
                      e = a.offset().top + (b.opts.toolbarBottom ? 10 : a.outerHeight() - 10);
                  b.popups.show("video.insert", d, e, a.outerHeight()) } }
  
          function e() {
              var c = b.popups.get("video.edit");
              c || (c = z()), b.popups.setContainer("video.edit", a(b.opts.scrollableContainer)), b.popups.refresh("video.edit");
              var d = S.find("iframe, embed, video"),
                  e = d.offset().left + d.outerWidth() / 2,
                  f = d.offset().top + d.outerHeight();
              b.popups.show("video.edit", e, f, d.outerHeight()) }
  
          function f(a) {
              if (a) return b.popups.onRefresh("video.insert", c), b.popups.onHide("video.insert", j), !0;
              var d = "";
              b.opts.videoInsertButtons.length > 1 && (d = '<div class="fr-buttons">' + b.button.buildList(b.opts.videoInsertButtons) + "</div>");
              var e = "";
              b.opts.videoInsertButtons.indexOf("videoByURL") >= 0 && (e = '<div class="fr-video-by-url-layer fr-layer fr-active" id="fr-video-by-url-layer-' + b.id + '"><div class="fr-input-line"><input type="text" placeholder="http://" tabIndex="1"></div><div class="fr-action-buttons"><button type="button" class="fr-command fr-submit" data-cmd="videoInsertByURL" tabIndex="2">' + b.language.translate("Insert") + "</button></div></div>");
              var f = "";
              b.opts.videoInsertButtons.indexOf("videoEmbed") >= 0 && (f = '<div class="fr-video-embed-layer fr-layer" id="fr-video-embed-layer-' + b.id + '"><div class="fr-input-line"><textarea type="text" placeholder="' + b.language.translate("Embedded Code") + '" tabIndex="1" rows="5"></textarea></div><div class="fr-action-buttons"><button type="button" class="fr-command fr-submit" data-cmd="videoInsertEmbed" tabIndex="2">' + b.language.translate("Insert") + "</button></div></div>");
              var g = { buttons: d, by_url_layer: e, embed_layer: f },
                  h = b.popups.create("video.insert", g);
              return h }
  
          function g(a) {
              var c, d, e = b.popups.get("video.insert");
              if (!S && !b.opts.toolbarInline) {
                  var f = b.$tb.find('.fr-command[data-cmd="insertVideo"]');
                  c = f.offset().left + f.outerWidth() / 2, d = f.offset().top + (b.opts.toolbarBottom ? 10 : f.outerHeight() - 10) }
              b.opts.toolbarInline && (d = e.offset().top - b.helpers.getPX(e.css("margin-top")), e.hasClass("fr-above") && (d += e.outerHeight())), e.find(".fr-layer").removeClass("fr-active"), e.find(".fr-" + a + "-layer").addClass("fr-active"), b.popups.show("video.insert", c, d, 0) }
  
          function h(a) {
              var c = b.popups.get("video.insert");
              c.find(".fr-video-by-url-layer").hasClass("fr-active") && a.addClass("fr-active") }
  
          function i(a) {
              var c = b.popups.get("video.insert");
              c.find(".fr-video-embed-layer").hasClass("fr-active") && a.addClass("fr-active") }
  
          function j() {}
  
          function k(a) { b.events.focus(!0), b.selection.restore(), b.html.insert('<span contenteditable="false" draggable="true" class="fr-jiv fr-video fr-dv' + b.opts.videoDefaultDisplay[0] + ("center" != b.opts.videoDefaultAlign ? " fr-fv" + b.opts.videoDefaultAlign[0] : "") + '">' + a + "</span>", !1, b.opts.videoSplitHTML), b.popups.hide("video.insert");
              var c = b.$el.find(".fr-jiv");
              c.removeClass("fr-jiv"), c.toggleClass("fr-draggable", b.opts.videoMove), b.events.trigger("video.inserted", [c]) }
  
          function l(c) {
              if ("undefined" == typeof c) {
                  var d = b.popups.get("video.insert");
                  c = d.find('.fr-video-by-url-layer input[type="text"]').val() || "" }
              var e = null;
              if (b.helpers.isURL(c))
                  for (var f = 0; f < a.FE.VIDEO_PROVIDERS.length; f++) {
                      var g = a.FE.VIDEO_PROVIDERS[f];
                      if (g.test_regex.test(c)) { e = c.replace(g.url_regex, g.url_text), e = g.html.replace(/\{url\}/, e);
                          break } }
              e ? k(e) : b.events.trigger("video.linkError", [c]) }
  
          function m(a) {
              if ("undefined" == typeof a) {
                  var c = b.popups.get("video.insert");
                  a = c.find(".fr-video-embed-layer textarea").val() || "" }
              0 === a.length ? b.events.trigger("video.codeError", [a]) : k(a) }
  
          function n(c) {
              if (!b.core.sameInstance(R)) return !0;
              c.preventDefault(), c.stopPropagation();
              var d = c.pageX || (c.originalEvent.touches ? c.originalEvent.touches[0].pageX : null),
                  e = c.pageY || (c.originalEvent.touches ? c.originalEvent.touches[0].pageY : null);
              return d && e ? (b.undo.canDo() || b.undo.saveStep(), Q = a(this), Q.data("start-x", d), Q.data("start-y", e), P.show(), b.popups.hideAll(), void w()) : !1 }
  
          function o(a) {
              if (!b.core.sameInstance(R)) return !0;
              if (Q) {
                  a.preventDefault();
                  var c = a.pageX || (a.originalEvent.touches ? a.originalEvent.touches[0].pageX : null),
                      d = a.pageY || (a.originalEvent.touches ? a.originalEvent.touches[0].pageY : null);
                  if (!c || !d) return !1;
                  var e = Q.data("start-x"),
                      f = Q.data("start-y");
                  Q.data("start-x", c), Q.data("start-y", d);
                  var g = c - e,
                      h = d - f,
                      i = S.find("iframe, embed, video"),
                      j = i.width(),
                      k = i.height();
                  (Q.hasClass("fr-hnw") || Q.hasClass("fr-hsw")) && (g = 0 - g), (Q.hasClass("fr-hnw") || Q.hasClass("fr-hne")) && (h = 0 - h),
                  i.css("width", j + g), i.css("height", k + h), i.removeAttr("width"), i.removeAttr("height"), s()
              }
          }
  
          function p(a) {
              return b.core.sameInstance(R) ? void(Q && S && (a && a.stopPropagation(), Q = null, P.hide(), s(), e(), b.undo.saveStep())) : !0 }
  
          function q(a) {
              return '<div class="fr-handler fr-h' + a + '"></div>' }
  
          function r() {
              var c;
              b.shared.$video_resizer ? (R = b.shared.$video_resizer, P = b.shared.$vid_overlay, b.events.on("destroy", function() { R.removeClass("fr-active").appendTo(a("body")) }, !0)) : (b.shared.$video_resizer = a('<div class="fr-video-resizer"></div>'), R = b.shared.$video_resizer, b.events.$on(R, "mousedown", function(a) { a.stopPropagation() }, !0), b.opts.videoResize && (R.append(q("nw") + q("ne") + q("sw") + q("se")), b.shared.$vid_overlay = a('<div class="fr-video-overlay"></div>'), P = b.shared.$vid_overlay, c = R.get(0).ownerDocument, a(c).find("body").append(P))), b.events.on("shared.destroy", function() { R.html("").removeData().remove(), b.opts.videoResize && P.remove() }, !0), b.helpers.isMobile() || b.events.$on(a(b.o_win), "resize.video", function() { u(!0) }), b.opts.videoResize && (c = R.get(0).ownerDocument, b.events.$on(R, b._mousedown, ".fr-handler", n), b.events.$on(a(c), b._mousemove, o), b.events.$on(a(c.defaultView || c.parentWindow), b._mouseup, p), b.events.$on(P, "mouseleave", p)) }
  
          function s() { R || r(), (b.$wp || a(b.opts.scrollableContainer)).append(R), R.data("instance", b);
              var c = S.find("iframe, embed, video");
              R.css("top", (b.opts.iframe ? c.offset().top - 1 : c.offset().top - b.$wp.offset().top - 1) + b.$wp.scrollTop()).css("left", (b.opts.iframe ? c.offset().left - 1 : c.offset().left - b.$wp.offset().left - 1) + b.$wp.scrollLeft()).css("width", c.outerWidth()).css("height", c.height()).addClass("fr-active") }
  
          function t(c) {
              if (c && "touchend" == c.type && T) return !0;
              if (c.preventDefault(), c.stopPropagation(), b.edit.isDisabled()) return !1;
              for (var d = 0; d < a.FE.INSTANCES.length; d++) a.FE.INSTANCES[d] != b && a.FE.INSTANCES[d].events.trigger("video.hideResizer");
              b.toolbar.disable(), b.helpers.isMobile() && (b.events.disableBlur(), b.$el.blur(), b.events.enableBlur()), S = a(this), a(this).addClass("fr-active"), b.opts.iframe && b.size.syncIframe(), s(), e(), b.selection.clear(), b.button.bulkRefresh(), b.events.trigger("image.hideResizer") }
  
          function u(a) { S && (x() || a === !0) && (R.removeClass("fr-active"), b.toolbar.enable(), S.removeClass("fr-active"), S = null, w()) }
  
          function v() { b.shared.vid_exit_flag = !0 }
  
          function w() { b.shared.vid_exit_flag = !1 }
  
          function x() {
              return b.shared.vid_exit_flag }
  
          function y() { b.events.on("mousedown window.mousedown", v), b.events.on("window.touchmove", w), b.events.on("mouseup window.mouseup", u), b.events.on("commands.mousedown", function(a) { a.parents(".fr-toolbar").length > 0 && u() }), b.events.on("blur video.hideResizer commands.undo commands.redo element.dropped", function() { u(!0) }) }
  
          function z() {
              var a = "";
              b.opts.videoEditButtons.length > 1 && (a += '<div class="fr-buttons">', a += b.button.buildList(b.opts.videoEditButtons), a += "</div>");
              var c = { buttons: a },
                  d = b.popups.create("video.edit", c);
              return b.events.$on(b.$wp, "scroll.video-edit", function() { S && b.popups.isVisible("video.edit") && e() }), d }
  
          function A() {
              if (S) {
                  var a = b.popups.get("video.size"),
                      c = S.find("iframe, embed, video");
                  a.find('input[name="width"]').val(c.get(0).style.width || c.attr("width")).trigger("change"), a.find('input[name="height"]').val(c.get(0).style.height || c.attr("height")).trigger("change") } }
  
          function B() {
              var c = b.popups.get("video.size");
              c || (c = C()), b.popups.refresh("video.size"), b.popups.setContainer("video.size", a(b.opts.scrollableContainer));
              var d = S.find("iframe, embed, video"),
                  e = d.offset().left + d.width() / 2,
                  f = d.offset().top + d.height();
              b.popups.show("video.size", e, f, d.height()) }
  
          function C(a) {
              if (a) return b.popups.onRefresh("video.size", A), !0;
              var c = "";
              c = '<div class="fr-buttons">' + b.button.buildList(b.opts.videoSizeButtons) + "</div>";
              var d = "";
              d = '<div class="fr-video-size-layer fr-layer fr-active" id="fr-video-size-layer-' + b.id + '"><div class="fr-video-group"><div class="fr-input-line"><input type="text" name="width" placeholder="' + b.language.translate("Width") + '" tabIndex="1"></div><div class="fr-input-line"><input type="text" name="height" placeholder="' + b.language.translate("Height") + '" tabIndex="1"></div></div><div class="fr-action-buttons"><button type="button" class="fr-command fr-submit" data-cmd="videoSetSize" tabIndex="2">' + b.language.translate("Update") + "</button></div></div>";
              var e = { buttons: c, size_layer: d },
                  f = b.popups.create("video.size", e);
              return b.events.$on(b.$wp, "scroll", function() { S && b.popups.isVisible("video.size") && B() }), f }
  
          function D(a) { S.removeClass("fr-fvr fr-fvl"), "left" == a ? S.addClass("fr-fvl") : "right" == a && S.addClass("fr-fvr"), s(), e() }
  
          function E(a) {
              return S ? void(S.hasClass("fr-fvl") ? a.find("> *:first").replaceWith(b.icon.create("align-left")) : S.hasClass("fr-fvr") ? a.find("> *:first").replaceWith(b.icon.create("align-right")) : a.find("> *:first").replaceWith(b.icon.create("align-justify"))) : !1 }
  
          function F(a, b) {
              var c = "justify";
              S.hasClass("fr-fvl") ? c = "left" : S.hasClass("fr-fvr") && (c = "right"), b.find('.fr-command[data-param1="' + c + '"]').addClass("fr-active") }
  
          function G(a) { S.removeClass("fr-dvi fr-dvb"), "inline" == a ? S.addClass("fr-dvi") : "block" == a && S.addClass("fr-dvb"), s(), e() }
  
          function H(a, b) {
              var c = "block";
              S.hasClass("fr-dvi") && (c = "inline"), b.find('.fr-command[data-param1="' + c + '"]').addClass("fr-active") }
  
          function I() {
              if (S && b.events.trigger("video.beforeRemove", [S]) !== !1) {
                  var a = S;
                  b.popups.hideAll(), u(!0), b.selection.setBefore(a.get(0)) || b.selection.setAfter(a.get(0)), a.remove(), b.selection.restore(), b.html.fillEmptyBlocks(), b.events.trigger("video.removed", [a]) } }
  
          function J(a) {
              if (!a.hasClass("fr-dvi") && !a.hasClass("fr-dvb")) {
                  var c = a.css("float");
                  a.css("float", "none"), "block" == a.css("display") ? (a.css("float", c), 0 === parseInt(a.css("margin-left"), 10) && (a.attr("style") || "").indexOf("margin-right: auto") >= 0 ? a.addClass("fr-fvl") : 0 === parseInt(a.css("margin-right"), 10) && (a.attr("style") || "").indexOf("margin-left: auto") >= 0 && a.addClass("fr-fvr"), a.addClass("fr-dvb")) : (a.css("float", c), "left" == a.css("float") ? a.addClass("fr-fvl") : "right" == a.css("float") && a.addClass("fr-fvr"), a.addClass("fr-dvi")), a.css("margin", ""), a.css("float", ""), a.css("display", ""), a.css("z-index", ""), a.css("position", ""), a.css("overflow", ""), a.css("vertical-align", "") }
              b.opts.videoTextNear || a.removeClass("fr-dvi").addClass("fr-dvb") }
  
          function K() { b.$el.find("video").filter(function() {
                  return 0 === a(this).parents("span.fr-video").length }).wrap('<span class="fr-video" contenteditable="false"></span>'), b.$el.find("embed, iframe").filter(function() {
                  if (b.browser.safari && this.getAttribute("src") && this.setAttribute("src", this.src), a(this).parents("span.fr-video").length > 0) return !1;
                  for (var c = a(this).attr("src"), d = 0; d < a.FE.VIDEO_PROVIDERS.length; d++) {
                      var e = a.FE.VIDEO_PROVIDERS[d];
                      if (e.test_regex.test(c)) return !0 }
                  return !1 }).map(function() {
                  return 0 === a(this).parents("object").length ? this : a(this).parents("object").get(0) }).wrap('<span class="fr-video" contenteditable="false"></span>');
              for (var c = b.$el.find("span.fr-video"), d = 0; d < c.length; d++) J(a(c[d]));
              c.toggleClass("fr-draggable", b.opts.videoMove) }
  
          function L() { y(), b.helpers.isMobile() && (b.events.$on(b.$el, "touchstart", "span.fr-video", function() { T = !1 }), b.events.$on(b.$el, "touchmove", function() { T = !0 })), b.events.on("html.set", K), K(), b.events.$on(b.$el, "mousedown", "span.fr-video", function(a) { a.stopPropagation() }), b.events.$on(b.$el, "click touchend", "span.fr-video", t), b.events.on("keydown", function(c) {
                  var d = c.which;
                  return !S || d != a.FE.KEYCODE.BACKSPACE && d != a.FE.KEYCODE.DELETE ? S && d == a.FE.KEYCODE.ESC ? (u(!0), c.preventDefault(), !1) : S && !b.keys.ctrlKey(c) ? (c.preventDefault(), !1) : void 0 : (c.preventDefault(), I(), !1) }, !0), b.events.on("keydown", function() { b.$el.find("span.fr-video:empty").remove() }), f(!0), C(!0) }
  
          function M() { S ? S.trigger("click") : (b.events.disableBlur(), b.selection.restore(), b.events.enableBlur(), b.popups.hide("video.insert"), b.toolbar.showInline()) }
  
          function N(a, c) {
              if (S) {
                  var d = b.popups.get("video.size"),
                      e = S.find("iframe, embed, video");
                  e.css("width", a || d.find('input[name="width"]').val()), e.css("height", c || d.find('input[name="height"]').val()), e.get(0).style.width && e.removeAttr("width"), e.get(0).style.height && e.removeAttr("height"), d.find("input").blur(), setTimeout(function() { S.trigger("click") }, b.helpers.isAndroid() ? 50 : 0) } }
  
          function O() {
              return S }
          var P, Q, R, S, T;
          return b.shared.vid_exit_flag = !1, { _init: L, showInsertPopup: d, showLayer: g, refreshByURLButton: h, refreshEmbedButton: i, insertByURL: l, insertEmbed: m, insert: k, align: D, refreshAlign: E, refreshAlignOnShow: F, display: G, refreshDisplayOnShow: H, remove: I, showSizePopup: B, back: M, setSize: N, get: O }
      }, a.FE.RegisterCommand("insertVideo", { title: "Insert Video", undo: !1, focus: !0, refreshAfterCallback: !1, popup: !0, callback: function() { this.popups.isVisible("video.insert") ? (this.$el.find(".fr-marker") && (this.events.disableBlur(), this.selection.restore()), this.popups.hide("video.insert")) : this.video.showInsertPopup() }, plugin: "video" }), a.FE.DefineIcon("insertVideo", { NAME: "video-camera" }), a.FE.DefineIcon("videoByURL", { NAME: "link" }), a.FE.RegisterCommand("videoByURL", { title: "By URL", undo: !1, focus: !1, callback: function() { this.video.showLayer("video-by-url") }, refresh: function(a) { this.video.refreshByURLButton(a) } }), a.FE.DefineIcon("videoEmbed", { NAME: "code" }), a.FE.RegisterCommand("videoEmbed", { title: "Embedded Code", undo: !1, focus: !1, callback: function() { this.video.showLayer("video-embed") }, refresh: function(a) { this.video.refreshEmbedButton(a) } }), a.FE.RegisterCommand("videoInsertByURL", { undo: !0, focus: !0, callback: function() { this.video.insertByURL() } }), a.FE.RegisterCommand("videoInsertEmbed", { undo: !0, focus: !0, callback: function() { this.video.insertEmbed() } }), a.FE.DefineIcon("videoDisplay", { NAME: "star" }), a.FE.RegisterCommand("videoDisplay", { title: "Display", type: "dropdown", options: { inline: "Inline", block: "Break Text" }, callback: function(a, b) { this.video.display(b) }, refresh: function(a) { this.opts.videoTextNear || a.addClass("fr-hidden") }, refreshOnShow: function(a, b) { this.video.refreshDisplayOnShow(a, b) } }), a.FE.DefineIcon("videoAlign", { NAME: "align-center" }), a.FE.RegisterCommand("videoAlign", { type: "dropdown", title: "Align", options: { left: "Align Left", justify: "None", right: "Align Right" }, html: function() {
              var b = '<ul class="fr-dropdown-list">',
                  c = a.FE.COMMANDS.videoAlign.options;
              for (var d in c) c.hasOwnProperty(d) && (b += '<li><a class="fr-command fr-title" data-cmd="videoAlign" data-param1="' + d + '" title="' + this.language.translate(c[d]) + '">' + this.icon.create("align-" + d) + "</a></li>");
              return b += "</ul>" }, callback: function(a, b) { this.video.align(b) }, refresh: function(a) { this.video.refreshAlign(a) }, refreshOnShow: function(a, b) { this.video.refreshAlignOnShow(a, b) } }), a.FE.DefineIcon("videoRemove", { NAME: "trash" }), a.FE.RegisterCommand("videoRemove", { title: "Remove", callback: function() { this.video.remove() } }), a.FE.DefineIcon("videoSize", { NAME: "arrows-alt" }), a.FE.RegisterCommand("videoSize", { undo: !1, focus: !1, title: "Change Size", callback: function() { this.video.showSizePopup() } }), a.FE.DefineIcon("videoBack", { NAME: "arrow-left" }), a.FE.RegisterCommand("videoBack", { title: "Back", undo: !1, focus: !1, back: !0, callback: function() { this.video.back() }, refresh: function(a) {
              var b = this.video.get();
              b || this.opts.toolbarInline ? (a.removeClass("fr-hidden"), a.next(".fr-separator").removeClass("fr-hidden")) : (a.addClass("fr-hidden"), a.next(".fr-separator").addClass("fr-hidden")) } }), a.FE.RegisterCommand("videoSetSize", { undo: !0, focus: !1, callback: function() { this.video.setSize() } })
  });
  