! function(e, t) { "object" == typeof module && "object" == typeof module.exports ? module.exports = e.document ? t(e, !0) : function(e) { if (!e.document) throw new Error("jQuery requires a window with a document"); return t(e) } : t(e) }("undefined" != typeof window ? window : this, function(e, t) { function n(e) { var t = "length" in e && e.length, n = ie.type(e); return "function" === n || ie.isWindow(e) ? !1 : 1 === e.nodeType && t ? !0 : "array" === n || 0 === t || "number" == typeof t && t > 0 && t - 1 in e } function r(e, t, n) { if (ie.isFunction(t)) return ie.grep(e, function(e, r) { return !!t.call(e, r, e) !== n }); if (t.nodeType) return ie.grep(e, function(e) { return e === t !== n }); if ("string" == typeof t) { if (he.test(t)) return ie.filter(t, e, n); t = ie.filter(t, e) } return ie.grep(e, function(e) { return ie.inArray(e, t) >= 0 !== n }) } function i(e, t) { do e = e[t]; while (e && 1 !== e.nodeType); return e } function a(e) { var t = be[e] = {}; return ie.each(e.match(xe) || [], function(e, n) { t[n] = !0 }), t } function o() { fe.addEventListener ? (fe.removeEventListener("DOMContentLoaded", s, !1), e.removeEventListener("load", s, !1)) : (fe.detachEvent("onreadystatechange", s), e.detachEvent("onload", s)) } function s() { (fe.addEventListener || "load" === event.type || "complete" === fe.readyState) && (o(), ie.ready()) } function l(e, t, n) { if (void 0 === n && 1 === e.nodeType) { var r = "data-" + t.replace(Se, "-$1").toLowerCase(); if (n = e.getAttribute(r), "string" == typeof n) { try { n = "true" === n ? !0 : "false" === n ? !1 : "null" === n ? null : +n + "" === n ? +n : Te.test(n) ? ie.parseJSON(n) : n } catch (i) {} ie.data(e, t, n) } else n = void 0 } return n } function u(e) { var t; for (t in e) if (("data" !== t || !ie.isEmptyObject(e[t])) && "toJSON" !== t) return !1; return !0 } function c(e, t, n, r) { if (ie.acceptData(e)) { var i, a, o = ie.expando, s = e.nodeType, l = s ? ie.cache : e, u = s ? e[o] : e[o] && o; if (u && l[u] && (r || l[u].data) || void 0 !== n || "string" != typeof t) return u || (u = s ? e[o] = U.pop() || ie.guid++ : o), l[u] || (l[u] = s ? {} : { toJSON: ie.noop }), ("object" == typeof t || "function" == typeof t) && (r ? l[u] = ie.extend(l[u], t) : l[u].data = ie.extend(l[u].data, t)), a = l[u], r || (a.data || (a.data = {}), a = a.data), void 0 !== n && (a[ie.camelCase(t)] = n), "string" == typeof t ? (i = a[t], null == i && (i = a[ie.camelCase(t)])) : i = a, i } } function d(e, t, n) { if (ie.acceptData(e)) { var r, i, a = e.nodeType, o = a ? ie.cache : e, s = a ? e[ie.expando] : ie.expando; if (o[s]) { if (t && (r = n ? o[s] : o[s].data)) { ie.isArray(t) ? t = t.concat(ie.map(t, ie.camelCase)) : t in r ? t = [t] : (t = ie.camelCase(t), t = t in r ? [t] : t.split(" ")), i = t.length; for (; i--;) delete r[t[i]]; if (n ? !u(r) : !ie.isEmptyObject(r)) return }(n || (delete o[s].data, u(o[s]))) && (a ? ie.cleanData([e], !0) : ne.deleteExpando || o != o.window ? delete o[s] : o[s] = null) } } } function h() { return !0 } function p() { return !1 } function f() { try { return fe.activeElement } catch (e) {} } function v(e) { var t = Ie.split("|"), n = e.createDocumentFragment(); if (n.createElement) for (; t.length;) n.createElement(t.pop()); return n } function g(e, t) { var n, r, i = 0, a = typeof e.getElementsByTagName !== Ee ? e.getElementsByTagName(t || "*") : typeof e.querySelectorAll !== Ee ? e.querySelectorAll(t || "*") : void 0; if (!a) for (a = [], n = e.childNodes || e; null != (r = n[i]); i++) !t || ie.nodeName(r, t) ? a.push(r) : ie.merge(a, g(r, t)); return void 0 === t || t && ie.nodeName(e, t) ? ie.merge([e], a) : a } function y(e) { Pe.test(e.type) && (e.defaultChecked = e.checked) } function m(e, t) { return ie.nodeName(e, "table") && ie.nodeName(11 !== t.nodeType ? t : t.firstChild, "tr") ? e.getElementsByTagName("tbody")[0] || e.appendChild(e.ownerDocument.createElement("tbody")) : e } function x(e) { return e.type = (null !== ie.find.attr(e, "type")) + "/" + e.type, e } function b(e) { var t = We.exec(e.type); return t ? e.type = t[1] : e.removeAttribute("type"), e } function w(e, t) { for (var n, r = 0; null != (n = e[r]); r++) ie._data(n, "globalEval", !t || ie._data(t[r], "globalEval")) } function _(e, t) { if (1 === t.nodeType && ie.hasData(e)) { var n, r, i, a = ie._data(e), o = ie._data(t, a), s = a.events; if (s) { delete o.handle, o.events = {}; for (n in s) for (r = 0, i = s[n].length; i > r; r++) ie.event.add(t, n, s[n][r]) } o.data && (o.data = ie.extend({}, o.data)) } } function E(e, t) { var n, r, i; if (1 === t.nodeType) { if (n = t.nodeName.toLowerCase(), !ne.noCloneEvent && t[ie.expando]) { i = ie._data(t); for (r in i.events) ie.removeEvent(t, r, i.handle); t.removeAttribute(ie.expando) } "script" === n && t.text !== e.text ? (x(t).text = e.text, b(t)) : "object" === n ? (t.parentNode && (t.outerHTML = e.outerHTML), ne.html5Clone && e.innerHTML && !ie.trim(t.innerHTML) && (t.innerHTML = e.innerHTML)) : "input" === n && Pe.test(e.type) ? (t.defaultChecked = t.checked = e.checked, t.value !== e.value && (t.value = e.value)) : "option" === n ? t.defaultSelected = t.selected = e.defaultSelected : ("input" === n || "textarea" === n) && (t.defaultValue = e.defaultValue) } } function T(t, n) { var r, i = ie(n.createElement(t)).appendTo(n.body), a = e.getDefaultComputedStyle && (r = e.getDefaultComputedStyle(i[0])) ? r.display : ie.css(i[0], "display"); return i.detach(), a } function S(e) { var t = fe, n = Qe[e]; return n || (n = T(e, t), "none" !== n && n || (Je = (Je || ie("<iframe frameborder='0' width='0' height='0'/>")).appendTo(t.documentElement), t = (Je[0].contentWindow || Je[0].contentDocument).document, t.write(), t.close(), n = T(e, t), Je.detach()), Qe[e] = n), n } function C(e, t) { return { get: function() { var n = e(); if (null != n) return n ? void delete this.get : (this.get = t).apply(this, arguments) } } } function k(e, t) { if (t in e) return t; for (var n = t.charAt(0).toUpperCase() + t.slice(1), r = t, i = ht.length; i--;) if (t = ht[i] + n, t in e) return t; return r } function D(e, t) { for (var n, r, i, a = [], o = 0, s = e.length; s > o; o++) r = e[o], r.style && (a[o] = ie._data(r, "olddisplay"), n = r.style.display, t ? (a[o] || "none" !== n || (r.style.display = ""), "" === r.style.display && De(r) && (a[o] = ie._data(r, "olddisplay", S(r.nodeName)))) : (i = De(r), (n && "none" !== n || !i) && ie._data(r, "olddisplay", i ? n : ie.css(r, "display")))); for (o = 0; s > o; o++) r = e[o], r.style && (t && "none" !== r.style.display && "" !== r.style.display || (r.style.display = t ? a[o] || "" : "none")); return e } function N(e, t, n) { var r = lt.exec(t); return r ? Math.max(0, r[1] - (n || 0)) + (r[2] || "px") : t } function P(e, t, n, r, i) { for (var a = n === (r ? "border" : "content") ? 4 : "width" === t ? 1 : 0, o = 0; 4 > a; a += 2) "margin" === n && (o += ie.css(e, n + ke[a], !0, i)), r ? ("content" === n && (o -= ie.css(e, "padding" + ke[a], !0, i)), "margin" !== n && (o -= ie.css(e, "border" + ke[a] + "Width", !0, i))) : (o += ie.css(e, "padding" + ke[a], !0, i), "padding" !== n && (o += ie.css(e, "border" + ke[a] + "Width", !0, i))); return o } function M(e, t, n) { var r = !0, i = "width" === t ? e.offsetWidth : e.offsetHeight, a = et(e), o = ne.boxSizing && "border-box" === ie.css(e, "boxSizing", !1, a); if (0 >= i || null == i) { if (i = tt(e, t, a), (0 > i || null == i) && (i = e.style[t]), rt.test(i)) return i; r = o && (ne.boxSizingReliable() || i === e.style[t]), i = parseFloat(i) || 0 } return i + P(e, t, n || (o ? "border" : "content"), r, a) + "px" } function B(e, t, n, r, i) { return new B.prototype.init(e, t, n, r, i) } function L() { return setTimeout(function() { pt = void 0 }), pt = ie.now() } function O(e, t) { var n, r = { height: e }, i = 0; for (t = t ? 1 : 0; 4 > i; i += 2 - t) n = ke[i], r["margin" + n] = r["padding" + n] = e; return t && (r.opacity = r.width = e), r } function A(e, t, n) { for (var r, i = (xt[t] || []).concat(xt["*"]), a = 0, o = i.length; o > a; a++) if (r = i[a].call(n, t, e)) return r } function I(e, t, n) { var r, i, a, o, s, l, u, c, d = this, h = {}, p = e.style, f = e.nodeType && De(e), v = ie._data(e, "fxshow"); n.queue || (s = ie._queueHooks(e, "fx"), null == s.unqueued && (s.unqueued = 0, l = s.empty.fire, s.empty.fire = function() { s.unqueued || l() }), s.unqueued++, d.always(function() { d.always(function() { s.unqueued--, ie.queue(e, "fx").length || s.empty.fire() }) })), 1 === e.nodeType && ("height" in t || "width" in t) && (n.overflow = [p.overflow, p.overflowX, p.overflowY], u = ie.css(e, "display"), c = "none" === u ? ie._data(e, "olddisplay") || S(e.nodeName) : u, "inline" === c && "none" === ie.css(e, "float") && (ne.inlineBlockNeedsLayout && "inline" !== S(e.nodeName) ? p.zoom = 1 : p.display = "inline-block")), n.overflow && (p.overflow = "hidden", ne.shrinkWrapBlocks() || d.always(function() { p.overflow = n.overflow[0], p.overflowX = n.overflow[1], p.overflowY = n.overflow[2] })); for (r in t) if (i = t[r], vt.exec(i)) { if (delete t[r], a = a || "toggle" === i, i === (f ? "hide" : "show")) { if ("show" !== i || !v || void 0 === v[r]) continue; f = !0 } h[r] = v && v[r] || ie.style(e, r) } else u = void 0; if (ie.isEmptyObject(h)) "inline" === ("none" === u ? S(e.nodeName) : u) && (p.display = u); else { v ? "hidden" in v && (f = v.hidden) : v = ie._data(e, "fxshow", {}), a && (v.hidden = !f), f ? ie(e).show() : d.done(function() { ie(e).hide() }), d.done(function() { var t; ie._removeData(e, "fxshow"); for (t in h) ie.style(e, t, h[t]) }); for (r in h) o = A(f ? v[r] : 0, r, d), r in v || (v[r] = o.start, f && (o.end = o.start, o.start = "width" === r || "height" === r ? 1 : 0)) } } function z(e, t) { var n, r, i, a, o; for (n in e) if (r = ie.camelCase(n), i = t[r], a = e[n], ie.isArray(a) && (i = a[1], a = e[n] = a[0]), n !== r && (e[r] = a, delete e[n]), o = ie.cssHooks[r], o && "expand" in o) { a = o.expand(a), delete e[r]; for (n in a) n in e || (e[n] = a[n], t[n] = i) } else t[r] = i } function R(e, t, n) { var r, i, a = 0, o = mt.length, s = ie.Deferred().always(function() { delete l.elem }), l = function() { if (i) return !1; for (var t = pt || L(), n = Math.max(0, u.startTime + u.duration - t), r = n / u.duration || 0, a = 1 - r, o = 0, l = u.tweens.length; l > o; o++) u.tweens[o].run(a); return s.notifyWith(e, [u, a, n]), 1 > a && l ? n : (s.resolveWith(e, [u]), !1) }, u = s.promise({ elem: e, props: ie.extend({}, t), opts: ie.extend(!0, { specialEasing: {} }, n), originalProperties: t, originalOptions: n, startTime: pt || L(), duration: n.duration, tweens: [], createTween: function(t, n) { var r = ie.Tween(e, u.opts, t, n, u.opts.specialEasing[t] || u.opts.easing); return u.tweens.push(r), r }, stop: function(t) { var n = 0, r = t ? u.tweens.length : 0; if (i) return this; for (i = !0; r > n; n++) u.tweens[n].run(1); return t ? s.resolveWith(e, [u, t]) : s.rejectWith(e, [u, t]), this } }), c = u.props; for (z(c, u.opts.specialEasing); o > a; a++) if (r = mt[a].call(u, e, c, u.opts)) return r; return ie.map(c, A, u), ie.isFunction(u.opts.start) && u.opts.start.call(e, u), ie.fx.timer(ie.extend(l, { elem: e, anim: u, queue: u.opts.queue })), u.progress(u.opts.progress).done(u.opts.done, u.opts.complete).fail(u.opts.fail).always(u.opts.always) } function j(e) { return function(t, n) { "string" != typeof t && (n = t, t = "*"); var r, i = 0, a = t.toLowerCase().match(xe) || []; if (ie.isFunction(n)) for (; r = a[i++];) "+" === r.charAt(0) ? (r = r.slice(1) || "*", (e[r] = e[r] || []).unshift(n)) : (e[r] = e[r] || []).push(n) } } function F(e, t, n, r) { function i(s) { var l; return a[s] = !0, ie.each(e[s] || [], function(e, s) { var u = s(t, n, r); return "string" != typeof u || o || a[u] ? o ? !(l = u) : void 0 : (t.dataTypes.unshift(u), i(u), !1) }), l } var a = {}, o = e === Xt; return i(t.dataTypes[0]) || !a["*"] && i("*") } function q(e, t) { var n, r, i = ie.ajaxSettings.flatOptions || {}; for (r in t) void 0 !== t[r] && ((i[r] ? e : n || (n = {}))[r] = t[r]); return n && ie.extend(!0, e, n), e } function V(e, t, n) { for (var r, i, a, o, s = e.contents, l = e.dataTypes; "*" === l[0];) l.shift(), void 0 === i && (i = e.mimeType || t.getResponseHeader("Content-Type")); if (i) for (o in s) if (s[o] && s[o].test(i)) { l.unshift(o); break } if (l[0] in n) a = l[0]; else { for (o in n) { if (!l[0] || e.converters[o + " " + l[0]]) { a = o; break } r || (r = o) } a = a || r } return a ? (a !== l[0] && l.unshift(a), n[a]) : void 0 } function X(e, t, n, r) { var i, a, o, s, l, u = {}, c = e.dataTypes.slice(); if (c[1]) for (o in e.converters) u[o.toLowerCase()] = e.converters[o]; for (a = c.shift(); a;) if (e.responseFields[a] && (n[e.responseFields[a]] = t), !l && r && e.dataFilter && (t = e.dataFilter(t, e.dataType)), l = a, a = c.shift()) if ("*" === a) a = l; else if ("*" !== l && l !== a) { if (o = u[l + " " + a] || u["* " + a], !o) for (i in u) if (s = i.split(" "), s[1] === a && (o = u[l + " " + s[0]] || u["* " + s[0]])) { o === !0 ? o = u[i] : u[i] !== !0 && (a = s[0], c.unshift(s[1])); break } if (o !== !0) if (o && e["throws"]) t = o(t); else try { t = o(t) } catch (d) { return { state: "parsererror", error: o ? d : "No conversion from " + l + " to " + a } } } return { state: "success", data: t } } function H(e, t, n, r) { var i; if (ie.isArray(t)) ie.each(t, function(t, i) { n || Wt.test(e) ? r(e, i) : H(e + "[" + ("object" == typeof i ? t : "") + "]", i, n, r) }); else if (n || "object" !== ie.type(t)) r(e, t); else for (i in t) H(e + "[" + i + "]", t[i], n, r) } function Y() { try { return new e.XMLHttpRequest } catch (t) {} } function $() { try { return new e.ActiveXObject("Microsoft.XMLHTTP") } catch (t) {} } function W(e) { return ie.isWindow(e) ? e : 9 === e.nodeType ? e.defaultView || e.parentWindow : !1 } var U = [], Z = U.slice, G = U.concat, K = U.push, J = U.indexOf, Q = {}, ee = Q.toString, te = Q.hasOwnProperty, ne = {}, re = "1.11.3", ie = function(e, t) { return new ie.fn.init(e, t) }, ae = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, oe = /^-ms-/, se = /-([\da-z])/gi, le = function(e, t) { return t.toUpperCase() }; ie.fn = ie.prototype = { jquery: re, constructor: ie, selector: "", length: 0, toArray: function() { return Z.call(this) }, get: function(e) { return null != e ? 0 > e ? this[e + this.length] : this[e] : Z.call(this) }, pushStack: function(e) { var t = ie.merge(this.constructor(), e); return t.prevObject = this, t.context = this.context, t }, each: function(e, t) { return ie.each(this, e, t) }, map: function(e) { return this.pushStack(ie.map(this, function(t, n) { return e.call(t, n, t) })) }, slice: function() { return this.pushStack(Z.apply(this, arguments)) }, first: function() { return this.eq(0) }, last: function() { return this.eq(-1) }, eq: function(e) { var t = this.length, n = +e + (0 > e ? t : 0); return this.pushStack(n >= 0 && t > n ? [this[n]] : []) }, end: function() { return this.prevObject || this.constructor(null) }, push: K, sort: U.sort, splice: U.splice }, ie.extend = ie.fn.extend = function() { var e, t, n, r, i, a, o = arguments[0] || {}, s = 1, l = arguments.length, u = !1; for ("boolean" == typeof o && (u = o, o = arguments[s] || {}, s++), "object" == typeof o || ie.isFunction(o) || (o = {}), s === l && (o = this, s--); l > s; s++) if (null != (i = arguments[s])) for (r in i) e = o[r], n = i[r], o !== n && (u && n && (ie.isPlainObject(n) || (t = ie.isArray(n))) ? (t ? (t = !1, a = e && ie.isArray(e) ? e : []) : a = e && ie.isPlainObject(e) ? e : {}, o[r] = ie.extend(u, a, n)) : void 0 !== n && (o[r] = n)); return o }, ie.extend({ expando: "jQuery" + (re + Math.random()).replace(/\D/g, ""), isReady: !0, error: function(e) { throw new Error(e) }, noop: function() {}, isFunction: function(e) { return "function" === ie.type(e) }, isArray: Array.isArray || function(e) { return "array" === ie.type(e) }, isWindow: function(e) { return null != e && e == e.window }, isNumeric: function(e) { return !ie.isArray(e) && e - parseFloat(e) + 1 >= 0 }, isEmptyObject: function(e) { var t; for (t in e) return !1; return !0 }, isPlainObject: function(e) { var t; if (!e || "object" !== ie.type(e) || e.nodeType || ie.isWindow(e)) return !1; try { if (e.constructor && !te.call(e, "constructor") && !te.call(e.constructor.prototype, "isPrototypeOf")) return !1 } catch (n) { return !1 } if (ne.ownLast) for (t in e) return te.call(e, t); for (t in e); return void 0 === t || te.call(e, t) }, type: function(e) { return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? Q[ee.call(e)] || "object" : typeof e }, globalEval: function(t) { t && ie.trim(t) && (e.execScript || function(t) { e.eval.call(e, t) })(t) }, camelCase: function(e) { return e.replace(oe, "ms-").replace(se, le) }, nodeName: function(e, t) { return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase() }, each: function(e, t, r) { var i, a = 0, o = e.length, s = n(e); if (r) { if (s) for (; o > a && (i = t.apply(e[a], r), i !== !1); a++); else for (a in e) if (i = t.apply(e[a], r), i === !1) break } else if (s) for (; o > a && (i = t.call(e[a], a, e[a]), i !== !1); a++); else for (a in e) if (i = t.call(e[a], a, e[a]), i === !1) break; return e }, trim: function(e) { return null == e ? "" : (e + "").replace(ae, "") }, makeArray: function(e, t) { var r = t || []; return null != e && (n(Object(e)) ? ie.merge(r, "string" == typeof e ? [e] : e) : K.call(r, e)), r }, inArray: function(e, t, n) { var r; if (t) { if (J) return J.call(t, e, n); for (r = t.length, n = n ? 0 > n ? Math.max(0, r + n) : n : 0; r > n; n++) if (n in t && t[n] === e) return n } return -1 }, merge: function(e, t) { for (var n = +t.length, r = 0, i = e.length; n > r;) e[i++] = t[r++]; if (n !== n) for (; void 0 !== t[r];) e[i++] = t[r++]; return e.length = i, e }, grep: function(e, t, n) { for (var r, i = [], a = 0, o = e.length, s = !n; o > a; a++) r = !t(e[a], a), r !== s && i.push(e[a]); return i }, map: function(e, t, r) { var i, a = 0, o = e.length, s = n(e), l = []; if (s) for (; o > a; a++) i = t(e[a], a, r), null != i && l.push(i); else for (a in e) i = t(e[a], a, r), null != i && l.push(i); return G.apply([], l) }, guid: 1, proxy: function(e, t) { var n, r, i; return "string" == typeof t && (i = e[t], t = e, e = i), ie.isFunction(e) ? (n = Z.call(arguments, 2), r = function() { return e.apply(t || this, n.concat(Z.call(arguments))) }, r.guid = e.guid = e.guid || ie.guid++, r) : void 0 }, now: function() { return +new Date }, support: ne }), ie.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(e, t) { Q["[object " + t + "]"] = t.toLowerCase() }); var ue = function(e) { function t(e, t, n, r) { var i, a, o, s, l, u, d, p, f, v; if ((t ? t.ownerDocument || t : F) !== B && M(t), t = t || B, n = n || [], s = t.nodeType, "string" != typeof e || !e || 1 !== s && 9 !== s && 11 !== s) return n; if (!r && O) { if (11 !== s && (i = me.exec(e))) if (o = i[1]) { if (9 === s) { if (a = t.getElementById(o), !a || !a.parentNode) return n; if (a.id === o) return n.push(a), n } else if (t.ownerDocument && (a = t.ownerDocument.getElementById(o)) && R(t, a) && a.id === o) return n.push(a), n } else { if (i[2]) return J.apply(n, t.getElementsByTagName(e)), n; if ((o = i[3]) && w.getElementsByClassName) return J.apply(n, t.getElementsByClassName(o)), n } if (w.qsa && (!A || !A.test(e))) { if (p = d = j, f = t, v = 1 !== s && e, 1 === s && "object" !== t.nodeName.toLowerCase()) { for (u = S(e), (d = t.getAttribute("id")) ? p = d.replace(be, "\\$&") : t.setAttribute("id", p), p = "[id='" + p + "'] ", l = u.length; l--;) u[l] = p + h(u[l]); f = xe.test(e) && c(t.parentNode) || t, v = u.join(",") } if (v) try { return J.apply(n, f.querySelectorAll(v)), n } catch (g) {} finally { d || t.removeAttribute("id") } } } return k(e.replace(le, "$1"), t, n, r) } function n() { function e(n, r) { return t.push(n + " ") > _.cacheLength && delete e[t.shift()], e[n + " "] = r } var t = []; return e } function r(e) { return e[j] = !0, e } function i(e) { var t = B.createElement("div"); try { return !!e(t) } catch (n) { return !1 } finally { t.parentNode && t.parentNode.removeChild(t), t = null } } function a(e, t) { for (var n = e.split("|"), r = e.length; r--;) _.attrHandle[n[r]] = t } function o(e, t) { var n = t && e, r = n && 1 === e.nodeType && 1 === t.nodeType && (~t.sourceIndex || W) - (~e.sourceIndex || W); if (r) return r; if (n) for (; n = n.nextSibling;) if (n === t) return -1; return e ? 1 : -1 } function s(e) { return function(t) { var n = t.nodeName.toLowerCase(); return "input" === n && t.type === e } } function l(e) { return function(t) { var n = t.nodeName.toLowerCase(); return ("input" === n || "button" === n) && t.type === e } } function u(e) { return r(function(t) { return t = +t, r(function(n, r) { for (var i, a = e([], n.length, t), o = a.length; o--;) n[i = a[o]] && (n[i] = !(r[i] = n[i])) }) }) } function c(e) { return e && "undefined" != typeof e.getElementsByTagName && e } function d() {} function h(e) { for (var t = 0, n = e.length, r = ""; n > t; t++) r += e[t].value; return r } function p(e, t, n) { var r = t.dir, i = n && "parentNode" === r, a = V++; return t.first ? function(t, n, a) { for (; t = t[r];) if (1 === t.nodeType || i) return e(t, n, a) } : function(t, n, o) { var s, l, u = [q, a]; if (o) { for (; t = t[r];) if ((1 === t.nodeType || i) && e(t, n, o)) return !0 } else for (; t = t[r];) if (1 === t.nodeType || i) { if (l = t[j] || (t[j] = {}), (s = l[r]) && s[0] === q && s[1] === a) return u[2] = s[2]; if (l[r] = u, u[2] = e(t, n, o)) return !0 } } } function f(e) { return e.length > 1 ? function(t, n, r) { for (var i = e.length; i--;) if (!e[i](t, n, r)) return !1; return !0 } : e[0] } function v(e, n, r) { for (var i = 0, a = n.length; a > i; i++) t(e, n[i], r); return r } function g(e, t, n, r, i) { for (var a, o = [], s = 0, l = e.length, u = null != t; l > s; s++)(a = e[s]) && (!n || n(a, r, i)) && (o.push(a), u && t.push(s)); return o } function y(e, t, n, i, a, o) { return i && !i[j] && (i = y(i)), a && !a[j] && (a = y(a, o)), r(function(r, o, s, l) { var u, c, d, h = [], p = [], f = o.length, y = r || v(t || "*", s.nodeType ? [s] : s, []), m = !e || !r && t ? y : g(y, h, e, s, l), x = n ? a || (r ? e : f || i) ? [] : o : m; if (n && n(m, x, s, l), i) for (u = g(x, p), i(u, [], s, l), c = u.length; c--;)(d = u[c]) && (x[p[c]] = !(m[p[c]] = d)); if (r) { if (a || e) { if (a) { for (u = [], c = x.length; c--;)(d = x[c]) && u.push(m[c] = d); a(null, x = [], u, l) } for (c = x.length; c--;)(d = x[c]) && (u = a ? ee(r, d) : h[c]) > -1 && (r[u] = !(o[u] = d)) } } else x = g(x === o ? x.splice(f, x.length) : x), a ? a(null, o, x, l) : J.apply(o, x) }) } function m(e) { for (var t, n, r, i = e.length, a = _.relative[e[0].type], o = a || _.relative[" "], s = a ? 1 : 0, l = p(function(e) { return e === t }, o, !0), u = p(function(e) { return ee(t, e) > -1 }, o, !0), c = [function(e, n, r) { var i = !a && (r || n !== D) || ((t = n).nodeType ? l(e, n, r) : u(e, n, r)); return t = null, i }]; i > s; s++) if (n = _.relative[e[s].type]) c = [p(f(c), n)]; else { if (n = _.filter[e[s].type].apply(null, e[s].matches), n[j]) { for (r = ++s; i > r && !_.relative[e[r].type]; r++); return y(s > 1 && f(c), s > 1 && h(e.slice(0, s - 1).concat({ value: " " === e[s - 2].type ? "*" : "" })).replace(le, "$1"), n, r > s && m(e.slice(s, r)), i > r && m(e = e.slice(r)), i > r && h(e)) } c.push(n) } return f(c) } function x(e, n) { var i = n.length > 0, a = e.length > 0, o = function(r, o, s, l, u) { var c, d, h, p = 0, f = "0", v = r && [], y = [], m = D, x = r || a && _.find.TAG("*", u), b = q += null == m ? 1 : Math.random() || .1, w = x.length; for (u && (D = o !== B && o); f !== w && null != (c = x[f]); f++) { if (a && c) { for (d = 0; h = e[d++];) if (h(c, o, s)) { l.push(c); break } u && (q = b) } i && ((c = !h && c) && p--, r && v.push(c)) } if (p += f, i && f !== p) { for (d = 0; h = n[d++];) h(v, y, o, s); if (r) { if (p > 0) for (; f--;) v[f] || y[f] || (y[f] = G.call(l)); y = g(y) } J.apply(l, y), u && !r && y.length > 0 && p + n.length > 1 && t.uniqueSort(l) } return u && (q = b, D = m), v }; return i ? r(o) : o } var b, w, _, E, T, S, C, k, D, N, P, M, B, L, O, A, I, z, R, j = "sizzle" + 1 * new Date, F = e.document, q = 0, V = 0, X = n(), H = n(), Y = n(), $ = function(e, t) { return e === t && (P = !0), 0 }, W = 1 << 31, U = {}.hasOwnProperty, Z = [], G = Z.pop, K = Z.push, J = Z.push, Q = Z.slice, ee = function(e, t) { for (var n = 0, r = e.length; r > n; n++) if (e[n] === t) return n; return -1 }, te = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", ne = "[\\x20\\t\\r\\n\\f]", re = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", ie = re.replace("w", "w#"), ae = "\\[" + ne + "*(" + re + ")(?:" + ne + "*([*^$|!~]?=)" + ne + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + ie + "))|)" + ne + "*\\]", oe = ":(" + re + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + ae + ")*)|.*)\\)|)", se = new RegExp(ne + "+", "g"), le = new RegExp("^" + ne + "+|((?:^|[^\\\\])(?:\\\\.)*)" + ne + "+$", "g"), ue = new RegExp("^" + ne + "*," + ne + "*"), ce = new RegExp("^" + ne + "*([>+~]|" + ne + ")" + ne + "*"), de = new RegExp("=" + ne + "*([^\\]'\"]*?)" + ne + "*\\]", "g"), he = new RegExp(oe), pe = new RegExp("^" + ie + "$"), fe = { ID: new RegExp("^#(" + re + ")"), CLASS: new RegExp("^\\.(" + re + ")"), TAG: new RegExp("^(" + re.replace("w", "w*") + ")"), ATTR: new RegExp("^" + ae), PSEUDO: new RegExp("^" + oe), CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + ne + "*(even|odd|(([+-]|)(\\d*)n|)" + ne + "*(?:([+-]|)" + ne + "*(\\d+)|))" + ne + "*\\)|)", "i"), bool: new RegExp("^(?:" + te + ")$", "i"), needsContext: new RegExp("^" + ne + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + ne + "*((?:-\\d)?\\d*)" + ne + "*\\)|)(?=[^-]|$)", "i") }, ve = /^(?:input|select|textarea|button)$/i, ge = /^h\d$/i, ye = /^[^{]+\{\s*\[native \w/, me = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, xe = /[+~]/, be = /'|\\/g, we = new RegExp("\\\\([\\da-f]{1,6}" + ne + "?|(" + ne + ")|.)", "ig"), _e = function(e, t, n) { var r = "0x" + t - 65536; return r !== r || n ? t : 0 > r ? String.fromCharCode(r + 65536) : String.fromCharCode(r >> 10 | 55296, 1023 & r | 56320) }, Ee = function() { M() }; try { J.apply(Z = Q.call(F.childNodes), F.childNodes), Z[F.childNodes.length].nodeType } catch (Te) { J = { apply: Z.length ? function(e, t) { K.apply(e, Q.call(t)) } : function(e, t) { for (var n = e.length, r = 0; e[n++] = t[r++];); e.length = n - 1 } } } w = t.support = {}, T = t.isXML = function(e) { var t = e && (e.ownerDocument || e).documentElement; return t ? "HTML" !== t.nodeName : !1 }, M = t.setDocument = function(e) { var t, n, r = e ? e.ownerDocument || e : F; return r !== B && 9 === r.nodeType && r.documentElement ? (B = r, L = r.documentElement, n = r.defaultView, n && n !== n.top && (n.addEventListener ? n.addEventListener("unload", Ee, !1) : n.attachEvent && n.attachEvent("onunload", Ee)), O = !T(r), w.attributes = i(function(e) { return e.className = "i", !e.getAttribute("className") }), w.getElementsByTagName = i(function(e) { return e.appendChild(r.createComment("")), !e.getElementsByTagName("*").length }), w.getElementsByClassName = ye.test(r.getElementsByClassName), w.getById = i(function(e) { return L.appendChild(e).id = j, !r.getElementsByName || !r.getElementsByName(j).length }), w.getById ? (_.find.ID = function(e, t) { if ("undefined" != typeof t.getElementById && O) { var n = t.getElementById(e); return n && n.parentNode ? [n] : [] } }, _.filter.ID = function(e) { var t = e.replace(we, _e); return function(e) { return e.getAttribute("id") === t } }) : (delete _.find.ID, _.filter.ID = function(e) { var t = e.replace(we, _e); return function(e) { var n = "undefined" != typeof e.getAttributeNode && e.getAttributeNode("id"); return n && n.value === t } }), _.find.TAG = w.getElementsByTagName ? function(e, t) { return "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName(e) : w.qsa ? t.querySelectorAll(e) : void 0 } : function(e, t) { var n, r = [], i = 0, a = t.getElementsByTagName(e); if ("*" === e) { for (; n = a[i++];) 1 === n.nodeType && r.push(n); return r } return a }, _.find.CLASS = w.getElementsByClassName && function(e, t) { return O ? t.getElementsByClassName(e) : void 0 }, I = [], A = [], (w.qsa = ye.test(r.querySelectorAll)) && (i(function(e) { L.appendChild(e).innerHTML = "<a id='" + j + "'></a><select id='" + j + "-\f]' msallowcapture=''><option selected=''></option></select>", e.querySelectorAll("[msallowcapture^='']").length && A.push("[*^$]=" + ne + "*(?:''|\"\")"), e.querySelectorAll("[selected]").length || A.push("\\[" + ne + "*(?:value|" + te + ")"), e.querySelectorAll("[id~=" + j + "-]").length || A.push("~="), e.querySelectorAll(":checked").length || A.push(":checked"), e.querySelectorAll("a#" + j + "+*").length || A.push(".#.+[+~]") }), i(function(e) { var t = r.createElement("input"); t.setAttribute("type", "hidden"), e.appendChild(t).setAttribute("name", "D"), e.querySelectorAll("[name=d]").length && A.push("name" + ne + "*[*^$|!~]?="), e.querySelectorAll(":enabled").length || A.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), A.push(",.*:") })), (w.matchesSelector = ye.test(z = L.matches || L.webkitMatchesSelector || L.mozMatchesSelector || L.oMatchesSelector || L.msMatchesSelector)) && i(function(e) { w.disconnectedMatch = z.call(e, "div"), z.call(e, "[s!='']:x"), I.push("!=", oe) }), A = A.length && new RegExp(A.join("|")), I = I.length && new RegExp(I.join("|")), t = ye.test(L.compareDocumentPosition), R = t || ye.test(L.contains) ? function(e, t) { var n = 9 === e.nodeType ? e.documentElement : e, r = t && t.parentNode; return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r))) } : function(e, t) { if (t) for (; t = t.parentNode;) if (t === e) return !0; return !1 }, $ = t ? function(e, t) { if (e === t) return P = !0, 0; var n = !e.compareDocumentPosition - !t.compareDocumentPosition; return n ? n : (n = (e.ownerDocument || e) === (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1, 1 & n || !w.sortDetached && t.compareDocumentPosition(e) === n ? e === r || e.ownerDocument === F && R(F, e) ? -1 : t === r || t.ownerDocument === F && R(F, t) ? 1 : N ? ee(N, e) - ee(N, t) : 0 : 4 & n ? -1 : 1) } : function(e, t) { if (e === t) return P = !0, 0; var n, i = 0, a = e.parentNode, s = t.parentNode, l = [e], u = [t]; if (!a || !s) return e === r ? -1 : t === r ? 1 : a ? -1 : s ? 1 : N ? ee(N, e) - ee(N, t) : 0; if (a === s) return o(e, t); for (n = e; n = n.parentNode;) l.unshift(n); for (n = t; n = n.parentNode;) u.unshift(n); for (; l[i] === u[i];) i++; return i ? o(l[i], u[i]) : l[i] === F ? -1 : u[i] === F ? 1 : 0 }, r) : B }, t.matches = function(e, n) { return t(e, null, null, n) }, t.matchesSelector = function(e, n) { if ((e.ownerDocument || e) !== B && M(e), n = n.replace(de, "='$1']"), w.matchesSelector && O && (!I || !I.test(n)) && (!A || !A.test(n))) try { var r = z.call(e, n); if (r || w.disconnectedMatch || e.document && 11 !== e.document.nodeType) return r } catch (i) {} return t(n, B, null, [e]).length > 0 }, t.contains = function(e, t) { return (e.ownerDocument || e) !== B && M(e), R(e, t) }, t.attr = function(e, t) { (e.ownerDocument || e) !== B && M(e); var n = _.attrHandle[t.toLowerCase()], r = n && U.call(_.attrHandle, t.toLowerCase()) ? n(e, t, !O) : void 0; return void 0 !== r ? r : w.attributes || !O ? e.getAttribute(t) : (r = e.getAttributeNode(t)) && r.specified ? r.value : null }, t.error = function(e) { throw new Error("Syntax error, unrecognized expression: " + e) }, t.uniqueSort = function(e) { var t, n = [], r = 0, i = 0; if (P = !w.detectDuplicates, N = !w.sortStable && e.slice(0), e.sort($), P) { for (; t = e[i++];) t === e[i] && (r = n.push(i)); for (; r--;) e.splice(n[r], 1) } return N = null, e }, E = t.getText = function(e) { var t, n = "", r = 0, i = e.nodeType; if (i) { if (1 === i || 9 === i || 11 === i) { if ("string" == typeof e.textContent) return e.textContent; for (e = e.firstChild; e; e = e.nextSibling) n += E(e) } else if (3 === i || 4 === i) return e.nodeValue } else for (; t = e[r++];) n += E(t); return n }, _ = t.selectors = { cacheLength: 50, createPseudo: r, match: fe, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: !0 }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: !0 }, "~": { dir: "previousSibling" } }, preFilter: { ATTR: function(e) { return e[1] = e[1].replace(we, _e), e[3] = (e[3] || e[4] || e[5] || "").replace(we, _e), "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice(0, 4) }, CHILD: function(e) { return e[1] = e[1].toLowerCase(), "nth" === e[1].slice(0, 3) ? (e[3] || t.error(e[0]), e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])), e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && t.error(e[0]), e }, PSEUDO: function(e) { var t, n = !e[6] && e[2]; return fe.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && he.test(n) && (t = S(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t), e[2] = n.slice(0, t)), e.slice(0, 3)) } }, filter: { TAG: function(e) { var t = e.replace(we, _e).toLowerCase(); return "*" === e ? function() { return !0 } : function(e) { return e.nodeName && e.nodeName.toLowerCase() === t } }, CLASS: function(e) { var t = X[e + " "]; return t || (t = new RegExp("(^|" + ne + ")" + e + "(" + ne + "|$)")) && X(e, function(e) { return t.test("string" == typeof e.className && e.className || "undefined" != typeof e.getAttribute && e.getAttribute("class") || "") }) }, ATTR: function(e, n, r) { return function(i) { var a = t.attr(i, e); return null == a ? "!=" === n : n ? (a += "", "=" === n ? a === r : "!=" === n ? a !== r : "^=" === n ? r && 0 === a.indexOf(r) : "*=" === n ? r && a.indexOf(r) > -1 : "$=" === n ? r && a.slice(-r.length) === r : "~=" === n ? (" " + a.replace(se, " ") + " ").indexOf(r) > -1 : "|=" === n ? a === r || a.slice(0, r.length + 1) === r + "-" : !1) : !0 } }, CHILD: function(e, t, n, r, i) { var a = "nth" !== e.slice(0, 3), o = "last" !== e.slice(-4), s = "of-type" === t; return 1 === r && 0 === i ? function(e) { return !!e.parentNode } : function(t, n, l) { var u, c, d, h, p, f, v = a !== o ? "nextSibling" : "previousSibling", g = t.parentNode, y = s && t.nodeName.toLowerCase(), m = !l && !s; if (g) { if (a) { for (; v;) { for (d = t; d = d[v];) if (s ? d.nodeName.toLowerCase() === y : 1 === d.nodeType) return !1; f = v = "only" === e && !f && "nextSibling" } return !0 } if (f = [o ? g.firstChild : g.lastChild], o && m) { for (c = g[j] || (g[j] = {}), u = c[e] || [], p = u[0] === q && u[1], h = u[0] === q && u[2], d = p && g.childNodes[p]; d = ++p && d && d[v] || (h = p = 0) || f.pop();) if (1 === d.nodeType && ++h && d === t) { c[e] = [q, p, h]; break } } else if (m && (u = (t[j] || (t[j] = {}))[e]) && u[0] === q) h = u[1]; else for (; (d = ++p && d && d[v] || (h = p = 0) || f.pop()) && ((s ? d.nodeName.toLowerCase() !== y : 1 !== d.nodeType) || !++h || (m && ((d[j] || (d[j] = {}))[e] = [q, h]), d !== t));); return h -= i, h === r || h % r === 0 && h / r >= 0 } } }, PSEUDO: function(e, n) { var i, a = _.pseudos[e] || _.setFilters[e.toLowerCase()] || t.error("unsupported pseudo: " + e); return a[j] ? a(n) : a.length > 1 ? (i = [e, e, "", n], _.setFilters.hasOwnProperty(e.toLowerCase()) ? r(function(e, t) { for (var r, i = a(e, n), o = i.length; o--;) r = ee(e, i[o]), e[r] = !(t[r] = i[o]) }) : function(e) { return a(e, 0, i) }) : a } }, pseudos: { not: r(function(e) { var t = [], n = [], i = C(e.replace(le, "$1")); return i[j] ? r(function(e, t, n, r) { for (var a, o = i(e, null, r, []), s = e.length; s--;)(a = o[s]) && (e[s] = !(t[s] = a)) }) : function(e, r, a) { return t[0] = e, i(t, null, a, n), t[0] = null, !n.pop() } }), has: r(function(e) { return function(n) { return t(e, n).length > 0 } }), contains: r(function(e) { return e = e.replace(we, _e), function(t) { return (t.textContent || t.innerText || E(t)).indexOf(e) > -1 } }), lang: r(function(e) { return pe.test(e || "") || t.error("unsupported lang: " + e), e = e.replace(we, _e).toLowerCase(), function(t) { var n; do if (n = O ? t.lang : t.getAttribute("xml:lang") || t.getAttribute("lang")) return n = n.toLowerCase(), n === e || 0 === n.indexOf(e + "-"); while ((t = t.parentNode) && 1 === t.nodeType); return !1 } }), target: function(t) { var n = e.location && e.location.hash; return n && n.slice(1) === t.id }, root: function(e) { return e === L }, focus: function(e) { return e === B.activeElement && (!B.hasFocus || B.hasFocus()) && !!(e.type || e.href || ~e.tabIndex) }, enabled: function(e) { return e.disabled === !1 }, disabled: function(e) { return e.disabled === !0 }, checked: function(e) { var t = e.nodeName.toLowerCase(); return "input" === t && !!e.checked || "option" === t && !!e.selected }, selected: function(e) { return e.parentNode && e.parentNode.selectedIndex, e.selected === !0 }, empty: function(e) { for (e = e.firstChild; e; e = e.nextSibling) if (e.nodeType < 6) return !1; return !0 }, parent: function(e) { return !_.pseudos.empty(e) }, header: function(e) { return ge.test(e.nodeName) }, input: function(e) { return ve.test(e.nodeName) }, button: function(e) { var t = e.nodeName.toLowerCase(); return "input" === t && "button" === e.type || "button" === t }, text: function(e) { var t; return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase()) }, first: u(function() { return [0] }), last: u(function(e, t) { return [t - 1] }), eq: u(function(e, t, n) { return [0 > n ? n + t : n] }), even: u(function(e, t) { for (var n = 0; t > n; n += 2) e.push(n); return e }), odd: u(function(e, t) { for (var n = 1; t > n; n += 2) e.push(n); return e }), lt: u(function(e, t, n) { for (var r = 0 > n ? n + t : n; --r >= 0;) e.push(r); return e }), gt: u(function(e, t, n) { for (var r = 0 > n ? n + t : n; ++r < t;) e.push(r); return e }) } }, _.pseudos.nth = _.pseudos.eq; for (b in { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 }) _.pseudos[b] = s(b); for (b in { submit: !0, reset: !0 }) _.pseudos[b] = l(b); return d.prototype = _.filters = _.pseudos, _.setFilters = new d, S = t.tokenize = function(e, n) { var r, i, a, o, s, l, u, c = H[e + " "]; if (c) return n ? 0 : c.slice(0); for (s = e, l = [], u = _.preFilter; s;) { (!r || (i = ue.exec(s))) && (i && (s = s.slice(i[0].length) || s), l.push(a = [])), r = !1, (i = ce.exec(s)) && (r = i.shift(), a.push({ value: r, type: i[0].replace(le, " ") }), s = s.slice(r.length)); for (o in _.filter) !(i = fe[o].exec(s)) || u[o] && !(i = u[o](i)) || (r = i.shift(), a.push({ value: r, type: o, matches: i }), s = s.slice(r.length)); if (!r) break } return n ? s.length : s ? t.error(e) : H(e, l).slice(0) }, C = t.compile = function(e, t) { var n, r = [], i = [], a = Y[e + " "]; if (!a) { for (t || (t = S(e)), n = t.length; n--;) a = m(t[n]), a[j] ? r.push(a) : i.push(a); a = Y(e, x(i, r)), a.selector = e } return a }, k = t.select = function(e, t, n, r) { var i, a, o, s, l, u = "function" == typeof e && e, d = !r && S(e = u.selector || e); if (n = n || [], 1 === d.length) { if (a = d[0] = d[0].slice(0), a.length > 2 && "ID" === (o = a[0]).type && w.getById && 9 === t.nodeType && O && _.relative[a[1].type]) { if (t = (_.find.ID(o.matches[0].replace(we, _e), t) || [])[0], !t) return n; u && (t = t.parentNode), e = e.slice(a.shift().value.length) } for (i = fe.needsContext.test(e) ? 0 : a.length; i-- && (o = a[i], !_.relative[s = o.type]);) if ((l = _.find[s]) && (r = l(o.matches[0].replace(we, _e), xe.test(a[0].type) && c(t.parentNode) || t))) { if (a.splice(i, 1), e = r.length && h(a), !e) return J.apply(n, r), n; break } } return (u || C(e, d))(r, t, !O, n, xe.test(e) && c(t.parentNode) || t), n }, w.sortStable = j.split("").sort($).join("") === j, w.detectDuplicates = !!P, M(), w.sortDetached = i(function(e) { return 1 & e.compareDocumentPosition(B.createElement("div")) }), i(function(e) { return e.innerHTML = "<a href='#'></a>", "#" === e.firstChild.getAttribute("href") }) || a("type|href|height|width", function(e, t, n) { return n ? void 0 : e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2) }), w.attributes && i(function(e) { return e.innerHTML = "<input/>", e.firstChild.setAttribute("value", ""), "" === e.firstChild.getAttribute("value") }) || a("value", function(e, t, n) { return n || "input" !== e.nodeName.toLowerCase() ? void 0 : e.defaultValue }), i(function(e) { return null == e.getAttribute("disabled") }) || a(te, function(e, t, n) { var r; return n ? void 0 : e[t] === !0 ? t.toLowerCase() : (r = e.getAttributeNode(t)) && r.specified ? r.value : null }), t }(e); ie.find = ue, ie.expr = ue.selectors, ie.expr[":"] = ie.expr.pseudos, ie.unique = ue.uniqueSort, ie.text = ue.getText, ie.isXMLDoc = ue.isXML, ie.contains = ue.contains; var ce = ie.expr.match.needsContext, de = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, he = /^.[^:#\[\.,]*$/; ie.filter = function(e, t, n) { var r = t[0]; return n && (e = ":not(" + e + ")"), 1 === t.length && 1 === r.nodeType ? ie.find.matchesSelector(r, e) ? [r] : [] : ie.find.matches(e, ie.grep(t, function(e) { return 1 === e.nodeType })) }, ie.fn.extend({ find: function(e) { var t, n = [], r = this, i = r.length; if ("string" != typeof e) return this.pushStack(ie(e).filter(function() { for (t = 0; i > t; t++) if (ie.contains(r[t], this)) return !0 })); for (t = 0; i > t; t++) ie.find(e, r[t], n); return n = this.pushStack(i > 1 ? ie.unique(n) : n), n.selector = this.selector ? this.selector + " " + e : e, n }, filter: function(e) { return this.pushStack(r(this, e || [], !1)) }, not: function(e) { return this.pushStack(r(this, e || [], !0)) }, is: function(e) { return !!r(this, "string" == typeof e && ce.test(e) ? ie(e) : e || [], !1).length } }); var pe, fe = e.document, ve = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, ge = ie.fn.init = function(e, t) { var n, r; if (!e) return this; if ("string" == typeof e) { if (n = "<" === e.charAt(0) && ">" === e.charAt(e.length - 1) && e.length >= 3 ? [null, e, null] : ve.exec(e), !n || !n[1] && t) return !t || t.jquery ? (t || pe).find(e) : this.constructor(t).find(e); if (n[1]) { if (t = t instanceof ie ? t[0] : t, ie.merge(this, ie.parseHTML(n[1], t && t.nodeType ? t.ownerDocument || t : fe, !0)), de.test(n[1]) && ie.isPlainObject(t)) for (n in t) ie.isFunction(this[n]) ? this[n](t[n]) : this.attr(n, t[n]); return this } if (r = fe.getElementById(n[2]), r && r.parentNode) { if (r.id !== n[2]) return pe.find(e); this.length = 1, this[0] = r } return this.context = fe, this.selector = e, this } return e.nodeType ? (this.context = this[0] = e, this.length = 1, this) : ie.isFunction(e) ? "undefined" != typeof pe.ready ? pe.ready(e) : e(ie) : (void 0 !== e.selector && (this.selector = e.selector, this.context = e.context), ie.makeArray(e, this)) }; ge.prototype = ie.fn, pe = ie(fe); var ye = /^(?:parents|prev(?:Until|All))/, me = { children: !0, contents: !0, next: !0, prev: !0 }; ie.extend({ dir: function(e, t, n) { for (var r = [], i = e[t]; i && 9 !== i.nodeType && (void 0 === n || 1 !== i.nodeType || !ie(i).is(n));) 1 === i.nodeType && r.push(i), i = i[t]; return r }, sibling: function(e, t) { for (var n = []; e; e = e.nextSibling) 1 === e.nodeType && e !== t && n.push(e); return n } }), ie.fn.extend({ has: function(e) { var t, n = ie(e, this), r = n.length; return this.filter(function() { for (t = 0; r > t; t++) if (ie.contains(this, n[t])) return !0 }) }, closest: function(e, t) { for (var n, r = 0, i = this.length, a = [], o = ce.test(e) || "string" != typeof e ? ie(e, t || this.context) : 0; i > r; r++) for (n = this[r]; n && n !== t; n = n.parentNode) if (n.nodeType < 11 && (o ? o.index(n) > -1 : 1 === n.nodeType && ie.find.matchesSelector(n, e))) { a.push(n); break } return this.pushStack(a.length > 1 ? ie.unique(a) : a) }, index: function(e) { return e ? "string" == typeof e ? ie.inArray(this[0], ie(e)) : ie.inArray(e.jquery ? e[0] : e, this) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1 }, add: function(e, t) { return this.pushStack(ie.unique(ie.merge(this.get(), ie(e, t)))) }, addBack: function(e) { return this.add(null == e ? this.prevObject : this.prevObject.filter(e)) } }), ie.each({ parent: function(e) { var t = e.parentNode; return t && 11 !== t.nodeType ? t : null }, parents: function(e) { return ie.dir(e, "parentNode") }, parentsUntil: function(e, t, n) { return ie.dir(e, "parentNode", n) }, next: function(e) { return i(e, "nextSibling") }, prev: function(e) { return i(e, "previousSibling") }, nextAll: function(e) { return ie.dir(e, "nextSibling") }, prevAll: function(e) { return ie.dir(e, "previousSibling") }, nextUntil: function(e, t, n) { return ie.dir(e, "nextSibling", n) }, prevUntil: function(e, t, n) { return ie.dir(e, "previousSibling", n) }, siblings: function(e) { return ie.sibling((e.parentNode || {}).firstChild, e) }, children: function(e) { return ie.sibling(e.firstChild) }, contents: function(e) { return ie.nodeName(e, "iframe") ? e.contentDocument || e.contentWindow.document : ie.merge([], e.childNodes) } }, function(e, t) { ie.fn[e] = function(n, r) { var i = ie.map(this, t, n); return "Until" !== e.slice(-5) && (r = n), r && "string" == typeof r && (i = ie.filter(r, i)), this.length > 1 && (me[e] || (i = ie.unique(i)), ye.test(e) && (i = i.reverse())), this.pushStack(i) } }); var xe = /\S+/g, be = {}; ie.Callbacks = function(e) { e = "string" == typeof e ? be[e] || a(e) : ie.extend({}, e); var t, n, r, i, o, s, l = [], u = !e.once && [], c = function(a) { for (n = e.memory && a, r = !0, o = s || 0, s = 0, i = l.length, t = !0; l && i > o; o++) if (l[o].apply(a[0], a[1]) === !1 && e.stopOnFalse) { n = !1; break } t = !1, l && (u ? u.length && c(u.shift()) : n ? l = [] : d.disable()) }, d = { add: function() { if (l) { var r = l.length; ! function a(t) { ie.each(t, function(t, n) { var r = ie.type(n); "function" === r ? e.unique && d.has(n) || l.push(n) : n && n.length && "string" !== r && a(n) }) }(arguments), t ? i = l.length : n && (s = r, c(n)) } return this }, remove: function() { return l && ie.each(arguments, function(e, n) { for (var r; (r = ie.inArray(n, l, r)) > -1;) l.splice(r, 1), t && (i >= r && i--, o >= r && o--) }), this }, has: function(e) { return e ? ie.inArray(e, l) > -1 : !(!l || !l.length) }, empty: function() { return l = [], i = 0, this }, disable: function() { return l = u = n = void 0, this }, disabled: function() { return !l }, lock: function() { return u = void 0, n || d.disable(), this }, locked: function() { return !u }, fireWith: function(e, n) { return !l || r && !u || (n = n || [], n = [e, n.slice ? n.slice() : n], t ? u.push(n) : c(n)), this }, fire: function() { return d.fireWith(this, arguments), this }, fired: function() { return !!r } }; return d }, ie.extend({ Deferred: function(e) { var t = [ ["resolve", "done", ie.Callbacks("once memory"), "resolved"], ["reject", "fail", ie.Callbacks("once memory"), "rejected"], ["notify", "progress", ie.Callbacks("memory")] ], n = "pending", r = { state: function() { return n }, always: function() { return i.done(arguments).fail(arguments), this }, then: function() { var e = arguments; return ie.Deferred(function(n) { ie.each(t, function(t, a) { var o = ie.isFunction(e[t]) && e[t]; i[a[1]](function() { var e = o && o.apply(this, arguments); e && ie.isFunction(e.promise) ? e.promise().done(n.resolve).fail(n.reject).progress(n.notify) : n[a[0] + "With"](this === r ? n.promise() : this, o ? [e] : arguments) }) }), e = null }).promise() }, promise: function(e) { return null != e ? ie.extend(e, r) : r } }, i = {}; return r.pipe = r.then, ie.each(t, function(e, a) { var o = a[2], s = a[3]; r[a[1]] = o.add, s && o.add(function() { n = s }, t[1 ^ e][2].disable, t[2][2].lock), i[a[0]] = function() { return i[a[0] + "With"](this === i ? r : this, arguments), this }, i[a[0] + "With"] = o.fireWith }), r.promise(i), e && e.call(i, i), i }, when: function(e) { var t, n, r, i = 0, a = Z.call(arguments), o = a.length, s = 1 !== o || e && ie.isFunction(e.promise) ? o : 0, l = 1 === s ? e : ie.Deferred(), u = function(e, n, r) { return function(i) { n[e] = this, r[e] = arguments.length > 1 ? Z.call(arguments) : i, r === t ? l.notifyWith(n, r) : --s || l.resolveWith(n, r) } }; if (o > 1) for (t = new Array(o), n = new Array(o), r = new Array(o); o > i; i++) a[i] && ie.isFunction(a[i].promise) ? a[i].promise().done(u(i, r, a)).fail(l.reject).progress(u(i, n, t)) : --s; return s || l.resolveWith(r, a), l.promise() } }); var we; ie.fn.ready = function(e) { return ie.ready.promise().done(e), this }, ie.extend({ isReady: !1, readyWait: 1, holdReady: function(e) { e ? ie.readyWait++ : ie.ready(!0) }, ready: function(e) { if (e === !0 ? !--ie.readyWait : !ie.isReady) { if (!fe.body) return setTimeout(ie.ready); ie.isReady = !0, e !== !0 && --ie.readyWait > 0 || (we.resolveWith(fe, [ie]), ie.fn.triggerHandler && (ie(fe).triggerHandler("ready"), ie(fe).off("ready"))) } } }), ie.ready.promise = function(t) { if (!we) if (we = ie.Deferred(), "complete" === fe.readyState) setTimeout(ie.ready); else if (fe.addEventListener) fe.addEventListener("DOMContentLoaded", s, !1), e.addEventListener("load", s, !1); else { fe.attachEvent("onreadystatechange", s), e.attachEvent("onload", s); var n = !1; try { n = null == e.frameElement && fe.documentElement } catch (r) {} n && n.doScroll && ! function i() { if (!ie.isReady) { try { n.doScroll("left") } catch (e) { return setTimeout(i, 50) } o(), ie.ready() } }() } return we.promise(t) }; var _e, Ee = "undefined"; for (_e in ie(ne)) break; ne.ownLast = "0" !== _e, ne.inlineBlockNeedsLayout = !1, ie(function() { var e, t, n, r; n = fe.getElementsByTagName("body")[0], n && n.style && (t = fe.createElement("div"), r = fe.createElement("div"), r.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px", n.appendChild(r).appendChild(t), typeof t.style.zoom !== Ee && (t.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1", ne.inlineBlockNeedsLayout = e = 3 === t.offsetWidth, e && (n.style.zoom = 1)), n.removeChild(r)) }), function() { var e = fe.createElement("div"); if (null == ne.deleteExpando) { ne.deleteExpando = !0; try { delete e.test } catch (t) { ne.deleteExpando = !1 } } e = null }(), ie.acceptData = function(e) { var t = ie.noData[(e.nodeName + " ").toLowerCase()], n = +e.nodeType || 1; return 1 !== n && 9 !== n ? !1 : !t || t !== !0 && e.getAttribute("classid") === t }; var Te = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, Se = /([A-Z])/g; ie.extend({ cache: {}, noData: { "applet ": !0, "embed ": !0, "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" }, hasData: function(e) { return e = e.nodeType ? ie.cache[e[ie.expando]] : e[ie.expando], !!e && !u(e) }, data: function(e, t, n) { return c(e, t, n) }, removeData: function(e, t) { return d(e, t) }, _data: function(e, t, n) { return c(e, t, n, !0) }, _removeData: function(e, t) { return d(e, t, !0) } }), ie.fn.extend({ data: function(e, t) { var n, r, i, a = this[0], o = a && a.attributes; if (void 0 === e) { if (this.length && (i = ie.data(a), 1 === a.nodeType && !ie._data(a, "parsedAttrs"))) { for (n = o.length; n--;) o[n] && (r = o[n].name, 0 === r.indexOf("data-") && (r = ie.camelCase(r.slice(5)), l(a, r, i[r]))); ie._data(a, "parsedAttrs", !0) } return i } return "object" == typeof e ? this.each(function() { ie.data(this, e) }) : arguments.length > 1 ? this.each(function() { ie.data(this, e, t) }) : a ? l(a, e, ie.data(a, e)) : void 0 }, removeData: function(e) { return this.each(function() { ie.removeData(this, e) }) } }), ie.extend({ queue: function(e, t, n) { var r; return e ? (t = (t || "fx") + "queue", r = ie._data(e, t), n && (!r || ie.isArray(n) ? r = ie._data(e, t, ie.makeArray(n)) : r.push(n)), r || []) : void 0 }, dequeue: function(e, t) { t = t || "fx"; var n = ie.queue(e, t), r = n.length, i = n.shift(), a = ie._queueHooks(e, t), o = function() { ie.dequeue(e, t) }; "inprogress" === i && (i = n.shift(), r--), i && ("fx" === t && n.unshift("inprogress"), delete a.stop, i.call(e, o, a)), !r && a && a.empty.fire() }, _queueHooks: function(e, t) { var n = t + "queueHooks"; return ie._data(e, n) || ie._data(e, n, { empty: ie.Callbacks("once memory").add(function() { ie._removeData(e, t + "queue"), ie._removeData(e, n) }) }) } }), ie.fn.extend({ queue: function(e, t) { var n = 2; return "string" != typeof e && (t = e, e = "fx", n--), arguments.length < n ? ie.queue(this[0], e) : void 0 === t ? this : this.each(function() { var n = ie.queue(this, e, t); ie._queueHooks(this, e), "fx" === e && "inprogress" !== n[0] && ie.dequeue(this, e) }) }, dequeue: function(e) { return this.each(function() { ie.dequeue(this, e) }) }, clearQueue: function(e) { return this.queue(e || "fx", []) }, promise: function(e, t) { var n, r = 1, i = ie.Deferred(), a = this, o = this.length, s = function() { --r || i.resolveWith(a, [a]) }; for ("string" != typeof e && (t = e, e = void 0), e = e || "fx"; o--;) n = ie._data(a[o], e + "queueHooks"), n && n.empty && (r++, n.empty.add(s)); return s(), i.promise(t) } }); var Ce = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, ke = ["Top", "Right", "Bottom", "Left"], De = function(e, t) { return e = t || e, "none" === ie.css(e, "display") || !ie.contains(e.ownerDocument, e) }, Ne = ie.access = function(e, t, n, r, i, a, o) { var s = 0, l = e.length, u = null == n; if ("object" === ie.type(n)) { i = !0; for (s in n) ie.access(e, t, s, n[s], !0, a, o) } else if (void 0 !== r && (i = !0, ie.isFunction(r) || (o = !0), u && (o ? (t.call(e, r), t = null) : (u = t, t = function(e, t, n) { return u.call(ie(e), n) })), t)) for (; l > s; s++) t(e[s], n, o ? r : r.call(e[s], s, t(e[s], n))); return i ? e : u ? t.call(e) : l ? t(e[0], n) : a }, Pe = /^(?:checkbox|radio)$/i; ! function() { var e = fe.createElement("input"), t = fe.createElement("div"), n = fe.createDocumentFragment(); if (t.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", ne.leadingWhitespace = 3 === t.firstChild.nodeType, ne.tbody = !t.getElementsByTagName("tbody").length, ne.htmlSerialize = !!t.getElementsByTagName("link").length, ne.html5Clone = "<:nav></:nav>" !== fe.createElement("nav").cloneNode(!0).outerHTML, e.type = "checkbox", e.checked = !0, n.appendChild(e), ne.appendChecked = e.checked, t.innerHTML = "<textarea>x</textarea>", ne.noCloneChecked = !!t.cloneNode(!0).lastChild.defaultValue, n.appendChild(t), t.innerHTML = "<input type='radio' checked='checked' name='t'/>", ne.checkClone = t.cloneNode(!0).cloneNode(!0).lastChild.checked, ne.noCloneEvent = !0, t.attachEvent && (t.attachEvent("onclick", function() { ne.noCloneEvent = !1 }), t.cloneNode(!0).click()), null == ne.deleteExpando) { ne.deleteExpando = !0; try { delete t.test } catch (r) { ne.deleteExpando = !1 } } }(), function() { var t, n, r = fe.createElement("div"); for (t in { submit: !0, change: !0, focusin: !0 }) n = "on" + t, (ne[t + "Bubbles"] = n in e) || (r.setAttribute(n, "t"), ne[t + "Bubbles"] = r.attributes[n].expando === !1); r = null }(); var Me = /^(?:input|select|textarea)$/i, Be = /^key/, Le = /^(?:mouse|pointer|contextmenu)|click/, Oe = /^(?:focusinfocus|focusoutblur)$/, Ae = /^([^.]*)(?:\.(.+)|)$/; ie.event = { global: {}, add: function(e, t, n, r, i) { var a, o, s, l, u, c, d, h, p, f, v, g = ie._data(e); if (g) { for (n.handler && (l = n, n = l.handler, i = l.selector), n.guid || (n.guid = ie.guid++), (o = g.events) || (o = g.events = {}), (c = g.handle) || (c = g.handle = function(e) { return typeof ie === Ee || e && ie.event.triggered === e.type ? void 0 : ie.event.dispatch.apply(c.elem, arguments) }, c.elem = e), t = (t || "").match(xe) || [""], s = t.length; s--;) a = Ae.exec(t[s]) || [], p = v = a[1], f = (a[2] || "").split(".").sort(), p && (u = ie.event.special[p] || {}, p = (i ? u.delegateType : u.bindType) || p, u = ie.event.special[p] || {}, d = ie.extend({ type: p, origType: v, data: r, handler: n, guid: n.guid, selector: i, needsContext: i && ie.expr.match.needsContext.test(i), namespace: f.join(".") }, l), (h = o[p]) || (h = o[p] = [], h.delegateCount = 0, u.setup && u.setup.call(e, r, f, c) !== !1 || (e.addEventListener ? e.addEventListener(p, c, !1) : e.attachEvent && e.attachEvent("on" + p, c))), u.add && (u.add.call(e, d), d.handler.guid || (d.handler.guid = n.guid)), i ? h.splice(h.delegateCount++, 0, d) : h.push(d), ie.event.global[p] = !0); e = null } }, remove: function(e, t, n, r, i) { var a, o, s, l, u, c, d, h, p, f, v, g = ie.hasData(e) && ie._data(e); if (g && (c = g.events)) { for (t = (t || "").match(xe) || [""], u = t.length; u--;) if (s = Ae.exec(t[u]) || [], p = v = s[1], f = (s[2] || "").split(".").sort(), p) { for (d = ie.event.special[p] || {}, p = (r ? d.delegateType : d.bindType) || p, h = c[p] || [], s = s[2] && new RegExp("(^|\\.)" + f.join("\\.(?:.*\\.|)") + "(\\.|$)"), l = a = h.length; a--;) o = h[a], !i && v !== o.origType || n && n.guid !== o.guid || s && !s.test(o.namespace) || r && r !== o.selector && ("**" !== r || !o.selector) || (h.splice(a, 1), o.selector && h.delegateCount--, d.remove && d.remove.call(e, o)); l && !h.length && (d.teardown && d.teardown.call(e, f, g.handle) !== !1 || ie.removeEvent(e, p, g.handle), delete c[p]) } else for (p in c) ie.event.remove(e, p + t[u], n, r, !0); ie.isEmptyObject(c) && (delete g.handle, ie._removeData(e, "events")) } }, trigger: function(t, n, r, i) { var a, o, s, l, u, c, d, h = [r || fe], p = te.call(t, "type") ? t.type : t, f = te.call(t, "namespace") ? t.namespace.split(".") : []; if (s = c = r = r || fe, 3 !== r.nodeType && 8 !== r.nodeType && !Oe.test(p + ie.event.triggered) && (p.indexOf(".") >= 0 && (f = p.split("."), p = f.shift(), f.sort()), o = p.indexOf(":") < 0 && "on" + p, t = t[ie.expando] ? t : new ie.Event(p, "object" == typeof t && t), t.isTrigger = i ? 2 : 3, t.namespace = f.join("."), t.namespace_re = t.namespace ? new RegExp("(^|\\.)" + f.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, t.result = void 0, t.target || (t.target = r), n = null == n ? [t] : ie.makeArray(n, [t]), u = ie.event.special[p] || {}, i || !u.trigger || u.trigger.apply(r, n) !== !1)) { if (!i && !u.noBubble && !ie.isWindow(r)) { for (l = u.delegateType || p, Oe.test(l + p) || (s = s.parentNode); s; s = s.parentNode) h.push(s), c = s; c === (r.ownerDocument || fe) && h.push(c.defaultView || c.parentWindow || e) } for (d = 0; (s = h[d++]) && !t.isPropagationStopped();) t.type = d > 1 ? l : u.bindType || p, a = (ie._data(s, "events") || {})[t.type] && ie._data(s, "handle"), a && a.apply(s, n), a = o && s[o], a && a.apply && ie.acceptData(s) && (t.result = a.apply(s, n), t.result === !1 && t.preventDefault()); if (t.type = p, !i && !t.isDefaultPrevented() && (!u._default || u._default.apply(h.pop(), n) === !1) && ie.acceptData(r) && o && r[p] && !ie.isWindow(r)) { c = r[o], c && (r[o] = null), ie.event.triggered = p; try { r[p]() } catch (v) {} ie.event.triggered = void 0, c && (r[o] = c) } return t.result } }, dispatch: function(e) { e = ie.event.fix(e); var t, n, r, i, a, o = [], s = Z.call(arguments), l = (ie._data(this, "events") || {})[e.type] || [], u = ie.event.special[e.type] || {}; if (s[0] = e, e.delegateTarget = this, !u.preDispatch || u.preDispatch.call(this, e) !== !1) { for (o = ie.event.handlers.call(this, e, l), t = 0; (i = o[t++]) && !e.isPropagationStopped();) for (e.currentTarget = i.elem, a = 0; (r = i.handlers[a++]) && !e.isImmediatePropagationStopped();)(!e.namespace_re || e.namespace_re.test(r.namespace)) && (e.handleObj = r, e.data = r.data, n = ((ie.event.special[r.origType] || {}).handle || r.handler).apply(i.elem, s), void 0 !== n && (e.result = n) === !1 && (e.preventDefault(), e.stopPropagation())); return u.postDispatch && u.postDispatch.call(this, e), e.result } }, handlers: function(e, t) { var n, r, i, a, o = [], s = t.delegateCount, l = e.target; if (s && l.nodeType && (!e.button || "click" !== e.type)) for (; l != this; l = l.parentNode || this) if (1 === l.nodeType && (l.disabled !== !0 || "click" !== e.type)) { for (i = [], a = 0; s > a; a++) r = t[a], n = r.selector + " ", void 0 === i[n] && (i[n] = r.needsContext ? ie(n, this).index(l) >= 0 : ie.find(n, this, null, [l]).length), i[n] && i.push(r); i.length && o.push({ elem: l, handlers: i }) } return s < t.length && o.push({ elem: this, handlers: t.slice(s) }), o }, fix: function(e) { if (e[ie.expando]) return e; var t, n, r, i = e.type, a = e, o = this.fixHooks[i]; for (o || (this.fixHooks[i] = o = Le.test(i) ? this.mouseHooks : Be.test(i) ? this.keyHooks : {}), r = o.props ? this.props.concat(o.props) : this.props, e = new ie.Event(a), t = r.length; t--;) n = r[t], e[n] = a[n]; return e.target || (e.target = a.srcElement || fe), 3 === e.target.nodeType && (e.target = e.target.parentNode), e.metaKey = !!e.metaKey, o.filter ? o.filter(e, a) : e }, props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), fixHooks: {}, keyHooks: { props: "char charCode key keyCode".split(" "), filter: function(e, t) { return null == e.which && (e.which = null != t.charCode ? t.charCode : t.keyCode), e } }, mouseHooks: { props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), filter: function(e, t) { var n, r, i, a = t.button, o = t.fromElement; return null == e.pageX && null != t.clientX && (r = e.target.ownerDocument || fe, i = r.documentElement, n = r.body, e.pageX = t.clientX + (i && i.scrollLeft || n && n.scrollLeft || 0) - (i && i.clientLeft || n && n.clientLeft || 0), e.pageY = t.clientY + (i && i.scrollTop || n && n.scrollTop || 0) - (i && i.clientTop || n && n.clientTop || 0)), !e.relatedTarget && o && (e.relatedTarget = o === e.target ? t.toElement : o), e.which || void 0 === a || (e.which = 1 & a ? 1 : 2 & a ? 3 : 4 & a ? 2 : 0), e } }, special: { load: { noBubble: !0 }, focus: { trigger: function() { if (this !== f() && this.focus) try { return this.focus(), !1 } catch (e) {} }, delegateType: "focusin" }, blur: { trigger: function() { return this === f() && this.blur ? (this.blur(), !1) : void 0 }, delegateType: "focusout" }, click: { trigger: function() { return ie.nodeName(this, "input") && "checkbox" === this.type && this.click ? (this.click(), !1) : void 0 }, _default: function(e) { return ie.nodeName(e.target, "a") } }, beforeunload: { postDispatch: function(e) { void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result) } } }, simulate: function(e, t, n, r) { var i = ie.extend(new ie.Event, n, { type: e, isSimulated: !0, originalEvent: {} }); r ? ie.event.trigger(i, null, t) : ie.event.dispatch.call(t, i), i.isDefaultPrevented() && n.preventDefault() } }, ie.removeEvent = fe.removeEventListener ? function(e, t, n) { e.removeEventListener && e.removeEventListener(t, n, !1) } : function(e, t, n) { var r = "on" + t; e.detachEvent && (typeof e[r] === Ee && (e[r] = null), e.detachEvent(r, n)) }, ie.Event = function(e, t) { return this instanceof ie.Event ? (e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || void 0 === e.defaultPrevented && e.returnValue === !1 ? h : p) : this.type = e, t && ie.extend(this, t), this.timeStamp = e && e.timeStamp || ie.now(), void(this[ie.expando] = !0)) : new ie.Event(e, t) }, ie.Event.prototype = { isDefaultPrevented: p, isPropagationStopped: p, isImmediatePropagationStopped: p, preventDefault: function() { var e = this.originalEvent; this.isDefaultPrevented = h, e && (e.preventDefault ? e.preventDefault() : e.returnValue = !1) }, stopPropagation: function() { var e = this.originalEvent; this.isPropagationStopped = h, e && (e.stopPropagation && e.stopPropagation(), e.cancelBubble = !0) }, stopImmediatePropagation: function() { var e = this.originalEvent; this.isImmediatePropagationStopped = h, e && e.stopImmediatePropagation && e.stopImmediatePropagation(), this.stopPropagation() } }, ie.each({ mouseenter: "mouseover", mouseleave: "mouseout", pointerenter: "pointerover", pointerleave: "pointerout" }, function(e, t) { ie.event.special[e] = { delegateType: t, bindType: t, handle: function(e) { var n, r = this, i = e.relatedTarget, a = e.handleObj; return (!i || i !== r && !ie.contains(r, i)) && (e.type = a.origType, n = a.handler.apply(this, arguments), e.type = t), n } } }), ne.submitBubbles || (ie.event.special.submit = { setup: function() { return ie.nodeName(this, "form") ? !1 : void ie.event.add(this, "click._submit keypress._submit", function(e) { var t = e.target, n = ie.nodeName(t, "input") || ie.nodeName(t, "button") ? t.form : void 0; n && !ie._data(n, "submitBubbles") && (ie.event.add(n, "submit._submit", function(e) { e._submit_bubble = !0 }), ie._data(n, "submitBubbles", !0)) }) }, postDispatch: function(e) { e._submit_bubble && (delete e._submit_bubble, this.parentNode && !e.isTrigger && ie.event.simulate("submit", this.parentNode, e, !0)) }, teardown: function() { return ie.nodeName(this, "form") ? !1 : void ie.event.remove(this, "._submit") } }), ne.changeBubbles || (ie.event.special.change = { setup: function() { return Me.test(this.nodeName) ? (("checkbox" === this.type || "radio" === this.type) && (ie.event.add(this, "propertychange._change", function(e) { "checked" === e.originalEvent.propertyName && (this._just_changed = !0) }), ie.event.add(this, "click._change", function(e) { this._just_changed && !e.isTrigger && (this._just_changed = !1), ie.event.simulate("change", this, e, !0) })), !1) : void ie.event.add(this, "beforeactivate._change", function(e) { var t = e.target; Me.test(t.nodeName) && !ie._data(t, "changeBubbles") && (ie.event.add(t, "change._change", function(e) { !this.parentNode || e.isSimulated || e.isTrigger || ie.event.simulate("change", this.parentNode, e, !0) }), ie._data(t, "changeBubbles", !0)) }) }, handle: function(e) { var t = e.target; return this !== t || e.isSimulated || e.isTrigger || "radio" !== t.type && "checkbox" !== t.type ? e.handleObj.handler.apply(this, arguments) : void 0 }, teardown: function() { return ie.event.remove(this, "._change"), !Me.test(this.nodeName) } }), ne.focusinBubbles || ie.each({ focus: "focusin", blur: "focusout" }, function(e, t) { var n = function(e) { ie.event.simulate(t, e.target, ie.event.fix(e), !0) }; ie.event.special[t] = { setup: function() { var r = this.ownerDocument || this, i = ie._data(r, t); i || r.addEventListener(e, n, !0), ie._data(r, t, (i || 0) + 1) }, teardown: function() { var r = this.ownerDocument || this, i = ie._data(r, t) - 1; i ? ie._data(r, t, i) : (r.removeEventListener(e, n, !0), ie._removeData(r, t)) } } }), ie.fn.extend({ on: function(e, t, n, r, i) { var a, o; if ("object" == typeof e) { "string" != typeof t && (n = n || t, t = void 0); for (a in e) this.on(a, t, n, e[a], i); return this } if (null == n && null == r ? (r = t, n = t = void 0) : null == r && ("string" == typeof t ? (r = n, n = void 0) : (r = n, n = t, t = void 0)), r === !1) r = p; else if (!r) return this; return 1 === i && (o = r, r = function(e) { return ie().off(e), o.apply(this, arguments) }, r.guid = o.guid || (o.guid = ie.guid++)), this.each(function() { ie.event.add(this, e, r, n, t) }) }, one: function(e, t, n, r) { return this.on(e, t, n, r, 1) }, off: function(e, t, n) { var r, i; if (e && e.preventDefault && e.handleObj) return r = e.handleObj, ie(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler), this; if ("object" == typeof e) { for (i in e) this.off(i, t, e[i]); return this } return (t === !1 || "function" == typeof t) && (n = t, t = void 0), n === !1 && (n = p), this.each(function() { ie.event.remove(this, e, n, t) }) }, trigger: function(e, t) { return this.each(function() { ie.event.trigger(e, t, this) }) }, triggerHandler: function(e, t) { var n = this[0]; return n ? ie.event.trigger(e, t, n, !0) : void 0 } }); var Ie = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", ze = / jQuery\d+="(?:null|\d+)"/g, Re = new RegExp("<(?:" + Ie + ")[\\s/>]", "i"), je = /^\s+/, Fe = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, qe = /<([\w:]+)/, Ve = /<tbody/i, Xe = /<|&#?\w+;/, He = /<(?:script|style|link)/i, Ye = /checked\s*(?:[^=]|=\s*.checked.)/i, $e = /^$|\/(?:java|ecma)script/i, We = /^true\/(.*)/, Ue = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, Ze = { option: [1, "<select multiple='multiple'>", "</select>"], legend: [1, "<fieldset>", "</fieldset>"], area: [1, "<map>", "</map>"], param: [1, "<object>", "</object>"], thead: [1, "<table>", "</table>"], tr: [2, "<table><tbody>", "</tbody></table>"], col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"], td: [3, "<table><tbody><tr>", "</tr></tbody></table>"], _default: ne.htmlSerialize ? [0, "", ""] : [1, "X<div>", "</div>"] }, Ge = v(fe), Ke = Ge.appendChild(fe.createElement("div")); Ze.optgroup = Ze.option, Ze.tbody = Ze.tfoot = Ze.colgroup = Ze.caption = Ze.thead, Ze.th = Ze.td, ie.extend({ clone: function(e, t, n) { var r, i, a, o, s, l = ie.contains(e.ownerDocument, e); if (ne.html5Clone || ie.isXMLDoc(e) || !Re.test("<" + e.nodeName + ">") ? a = e.cloneNode(!0) : (Ke.innerHTML = e.outerHTML, Ke.removeChild(a = Ke.firstChild)), !(ne.noCloneEvent && ne.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || ie.isXMLDoc(e))) for (r = g(a), s = g(e), o = 0; null != (i = s[o]); ++o) r[o] && E(i, r[o]); if (t) if (n) for (s = s || g(e), r = r || g(a), o = 0; null != (i = s[o]); o++) _(i, r[o]); else _(e, a); return r = g(a, "script"), r.length > 0 && w(r, !l && g(e, "script")), r = s = i = null, a }, buildFragment: function(e, t, n, r) { for (var i, a, o, s, l, u, c, d = e.length, h = v(t), p = [], f = 0; d > f; f++) if (a = e[f], a || 0 === a) if ("object" === ie.type(a)) ie.merge(p, a.nodeType ? [a] : a); else if (Xe.test(a)) { for (s = s || h.appendChild(t.createElement("div")), l = (qe.exec(a) || ["", ""])[1].toLowerCase(), c = Ze[l] || Ze._default, s.innerHTML = c[1] + a.replace(Fe, "<$1></$2>") + c[2], i = c[0]; i--;) s = s.lastChild; if (!ne.leadingWhitespace && je.test(a) && p.push(t.createTextNode(je.exec(a)[0])), !ne.tbody) for (a = "table" !== l || Ve.test(a) ? "<table>" !== c[1] || Ve.test(a) ? 0 : s : s.firstChild, i = a && a.childNodes.length; i--;) ie.nodeName(u = a.childNodes[i], "tbody") && !u.childNodes.length && a.removeChild(u); for (ie.merge(p, s.childNodes), s.textContent = ""; s.firstChild;) s.removeChild(s.firstChild); s = h.lastChild } else p.push(t.createTextNode(a)); for (s && h.removeChild(s), ne.appendChecked || ie.grep(g(p, "input"), y), f = 0; a = p[f++];) if ((!r || -1 === ie.inArray(a, r)) && (o = ie.contains(a.ownerDocument, a), s = g(h.appendChild(a), "script"), o && w(s), n)) for (i = 0; a = s[i++];) $e.test(a.type || "") && n.push(a); return s = null, h }, cleanData: function(e, t) { for (var n, r, i, a, o = 0, s = ie.expando, l = ie.cache, u = ne.deleteExpando, c = ie.event.special; null != (n = e[o]); o++) if ((t || ie.acceptData(n)) && (i = n[s], a = i && l[i])) { if (a.events) for (r in a.events) c[r] ? ie.event.remove(n, r) : ie.removeEvent(n, r, a.handle); l[i] && (delete l[i], u ? delete n[s] : typeof n.removeAttribute !== Ee ? n.removeAttribute(s) : n[s] = null, U.push(i)) } } }), ie.fn.extend({ text: function(e) { return Ne(this, function(e) { return void 0 === e ? ie.text(this) : this.empty().append((this[0] && this[0].ownerDocument || fe).createTextNode(e)) }, null, e, arguments.length) }, append: function() { return this.domManip(arguments, function(e) { if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { var t = m(this, e); t.appendChild(e) } }) }, prepend: function() { return this.domManip(arguments, function(e) { if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { var t = m(this, e); t.insertBefore(e, t.firstChild) } }) }, before: function() { return this.domManip(arguments, function(e) { this.parentNode && this.parentNode.insertBefore(e, this) }) }, after: function() { return this.domManip(arguments, function(e) { this.parentNode && this.parentNode.insertBefore(e, this.nextSibling) }) }, remove: function(e, t) { for (var n, r = e ? ie.filter(e, this) : this, i = 0; null != (n = r[i]); i++) t || 1 !== n.nodeType || ie.cleanData(g(n)), n.parentNode && (t && ie.contains(n.ownerDocument, n) && w(g(n, "script")), n.parentNode.removeChild(n)); return this }, empty: function() { for (var e, t = 0; null != (e = this[t]); t++) { for (1 === e.nodeType && ie.cleanData(g(e, !1)); e.firstChild;) e.removeChild(e.firstChild); e.options && ie.nodeName(e, "select") && (e.options.length = 0) } return this }, clone: function(e, t) { return e = null == e ? !1 : e, t = null == t ? e : t, this.map(function() { return ie.clone(this, e, t) }) }, html: function(e) { return Ne(this, function(e) { var t = this[0] || {}, n = 0, r = this.length; if (void 0 === e) return 1 === t.nodeType ? t.innerHTML.replace(ze, "") : void 0; if ("string" == typeof e && !He.test(e) && (ne.htmlSerialize || !Re.test(e)) && (ne.leadingWhitespace || !je.test(e)) && !Ze[(qe.exec(e) || ["", ""])[1].toLowerCase()]) { e = e.replace(Fe, "<$1></$2>"); try { for (; r > n; n++) t = this[n] || {}, 1 === t.nodeType && (ie.cleanData(g(t, !1)), t.innerHTML = e); t = 0 } catch (i) {} } t && this.empty().append(e) }, null, e, arguments.length) }, replaceWith: function() { var e = arguments[0]; return this.domManip(arguments, function(t) { e = this.parentNode, ie.cleanData(g(this)), e && e.replaceChild(t, this) }), e && (e.length || e.nodeType) ? this : this.remove() }, detach: function(e) { return this.remove(e, !0) }, domManip: function(e, t) { e = G.apply([], e); var n, r, i, a, o, s, l = 0, u = this.length, c = this, d = u - 1, h = e[0], p = ie.isFunction(h); if (p || u > 1 && "string" == typeof h && !ne.checkClone && Ye.test(h)) return this.each(function(n) { var r = c.eq(n); p && (e[0] = h.call(this, n, r.html())), r.domManip(e, t) }); if (u && (s = ie.buildFragment(e, this[0].ownerDocument, !1, this), n = s.firstChild, 1 === s.childNodes.length && (s = n), n)) { for (a = ie.map(g(s, "script"), x), i = a.length; u > l; l++) r = s, l !== d && (r = ie.clone(r, !0, !0), i && ie.merge(a, g(r, "script"))), t.call(this[l], r, l); if (i) for (o = a[a.length - 1].ownerDocument, ie.map(a, b), l = 0; i > l; l++) r = a[l], $e.test(r.type || "") && !ie._data(r, "globalEval") && ie.contains(o, r) && (r.src ? ie._evalUrl && ie._evalUrl(r.src) : ie.globalEval((r.text || r.textContent || r.innerHTML || "").replace(Ue, ""))); s = n = null } return this } }), ie.each({ appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function(e, t) { ie.fn[e] = function(e) { for (var n, r = 0, i = [], a = ie(e), o = a.length - 1; o >= r; r++) n = r === o ? this : this.clone(!0), ie(a[r])[t](n), K.apply(i, n.get()); return this.pushStack(i) } }); var Je, Qe = {}; ! function() { var e; ne.shrinkWrapBlocks = function() { if (null != e) return e; e = !1; var t, n, r; return n = fe.getElementsByTagName("body")[0], n && n.style ? (t = fe.createElement("div"), r = fe.createElement("div"), r.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px", n.appendChild(r).appendChild(t), typeof t.style.zoom !== Ee && (t.style.cssText = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1", t.appendChild(fe.createElement("div")).style.width = "5px", e = 3 !== t.offsetWidth), n.removeChild(r), e) : void 0 } }(); var et, tt, nt = /^margin/, rt = new RegExp("^(" + Ce + ")(?!px)[a-z%]+$", "i"), it = /^(top|right|bottom|left)$/; e.getComputedStyle ? (et = function(t) { return t.ownerDocument.defaultView.opener ? t.ownerDocument.defaultView.getComputedStyle(t, null) : e.getComputedStyle(t, null) }, tt = function(e, t, n) { var r, i, a, o, s = e.style; return n = n || et(e), o = n ? n.getPropertyValue(t) || n[t] : void 0, n && ("" !== o || ie.contains(e.ownerDocument, e) || (o = ie.style(e, t)), rt.test(o) && nt.test(t) && (r = s.width, i = s.minWidth, a = s.maxWidth, s.minWidth = s.maxWidth = s.width = o, o = n.width, s.width = r, s.minWidth = i, s.maxWidth = a)), void 0 === o ? o : o + "" }) : fe.documentElement.currentStyle && (et = function(e) { return e.currentStyle }, tt = function(e, t, n) { var r, i, a, o, s = e.style; return n = n || et(e), o = n ? n[t] : void 0, null == o && s && s[t] && (o = s[t]), rt.test(o) && !it.test(t) && (r = s.left, i = e.runtimeStyle, a = i && i.left, a && (i.left = e.currentStyle.left), s.left = "fontSize" === t ? "1em" : o, o = s.pixelLeft + "px", s.left = r, a && (i.left = a)), void 0 === o ? o : o + "" || "auto" }), function() { function t() { var t, n, r, i; n = fe.getElementsByTagName("body")[0], n && n.style && (t = fe.createElement("div"), r = fe.createElement("div"), r.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px", n.appendChild(r).appendChild(t), t.style.cssText = "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute", a = o = !1, l = !0, e.getComputedStyle && (a = "1%" !== (e.getComputedStyle(t, null) || {}).top, o = "4px" === (e.getComputedStyle(t, null) || { width: "4px" }).width, i = t.appendChild(fe.createElement("div")), i.style.cssText = t.style.cssText = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0", i.style.marginRight = i.style.width = "0", t.style.width = "1px", l = !parseFloat((e.getComputedStyle(i, null) || {}).marginRight), t.removeChild(i)), t.innerHTML = "<table><tr><td></td><td>t</td></tr></table>", i = t.getElementsByTagName("td"), i[0].style.cssText = "margin:0;border:0;padding:0;display:none", s = 0 === i[0].offsetHeight, s && (i[0].style.display = "", i[1].style.display = "none", s = 0 === i[0].offsetHeight), n.removeChild(r)) } var n, r, i, a, o, s, l; n = fe.createElement("div"), n.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", i = n.getElementsByTagName("a")[0], r = i && i.style, r && (r.cssText = "float:left;opacity:.5", ne.opacity = "0.5" === r.opacity, ne.cssFloat = !!r.cssFloat, n.style.backgroundClip = "content-box", n.cloneNode(!0).style.backgroundClip = "", ne.clearCloneStyle = "content-box" === n.style.backgroundClip, ne.boxSizing = "" === r.boxSizing || "" === r.MozBoxSizing || "" === r.WebkitBoxSizing, ie.extend(ne, { reliableHiddenOffsets: function() { return null == s && t(), s }, boxSizingReliable: function() { return null == o && t(), o }, pixelPosition: function() { return null == a && t(), a }, reliableMarginRight: function() { return null == l && t(), l } })) }(), ie.swap = function(e, t, n, r) { var i, a, o = {}; for (a in t) o[a] = e.style[a], e.style[a] = t[a]; i = n.apply(e, r || []); for (a in t) e.style[a] = o[a]; return i }; var at = /alpha\([^)]*\)/i, ot = /opacity\s*=\s*([^)]*)/, st = /^(none|table(?!-c[ea]).+)/, lt = new RegExp("^(" + Ce + ")(.*)$", "i"), ut = new RegExp("^([+-])=(" + Ce + ")", "i"), ct = { position: "absolute", visibility: "hidden", display: "block" }, dt = { letterSpacing: "0", fontWeight: "400" }, ht = ["Webkit", "O", "Moz", "ms"]; ie.extend({ cssHooks: { opacity: { get: function(e, t) { if (t) { var n = tt(e, "opacity"); return "" === n ? "1" : n } } } }, cssNumber: { columnCount: !0, fillOpacity: !0, flexGrow: !0, flexShrink: !0, fontWeight: !0, lineHeight: !0, opacity: !0, order: !0, orphans: !0, widows: !0, zIndex: !0, zoom: !0 }, cssProps: { "float": ne.cssFloat ? "cssFloat" : "styleFloat" }, style: function(e, t, n, r) { if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) { var i, a, o, s = ie.camelCase(t), l = e.style; if (t = ie.cssProps[s] || (ie.cssProps[s] = k(l, s)), o = ie.cssHooks[t] || ie.cssHooks[s], void 0 === n) return o && "get" in o && void 0 !== (i = o.get(e, !1, r)) ? i : l[t]; if (a = typeof n, "string" === a && (i = ut.exec(n)) && (n = (i[1] + 1) * i[2] + parseFloat(ie.css(e, t)), a = "number"), null != n && n === n && ("number" !== a || ie.cssNumber[s] || (n += "px"), ne.clearCloneStyle || "" !== n || 0 !== t.indexOf("background") || (l[t] = "inherit"), !(o && "set" in o && void 0 === (n = o.set(e, n, r))))) try { l[t] = n } catch (u) {} } }, css: function(e, t, n, r) { var i, a, o, s = ie.camelCase(t); return t = ie.cssProps[s] || (ie.cssProps[s] = k(e.style, s)), o = ie.cssHooks[t] || ie.cssHooks[s], o && "get" in o && (a = o.get(e, !0, n)), void 0 === a && (a = tt(e, t, r)), "normal" === a && t in dt && (a = dt[t]), "" === n || n ? (i = parseFloat(a), n === !0 || ie.isNumeric(i) ? i || 0 : a) : a } }), ie.each(["height", "width"], function(e, t) { ie.cssHooks[t] = { get: function(e, n, r) { return n ? st.test(ie.css(e, "display")) && 0 === e.offsetWidth ? ie.swap(e, ct, function() { return M(e, t, r) }) : M(e, t, r) : void 0 }, set: function(e, n, r) { var i = r && et(e); return N(e, n, r ? P(e, t, r, ne.boxSizing && "border-box" === ie.css(e, "boxSizing", !1, i), i) : 0) } } }), ne.opacity || (ie.cssHooks.opacity = { get: function(e, t) { return ot.test((t && e.currentStyle ? e.currentStyle.filter : e.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "" : t ? "1" : "" }, set: function(e, t) { var n = e.style, r = e.currentStyle, i = ie.isNumeric(t) ? "alpha(opacity=" + 100 * t + ")" : "", a = r && r.filter || n.filter || ""; n.zoom = 1, (t >= 1 || "" === t) && "" === ie.trim(a.replace(at, "")) && n.removeAttribute && (n.removeAttribute("filter"), "" === t || r && !r.filter) || (n.filter = at.test(a) ? a.replace(at, i) : a + " " + i) } }), ie.cssHooks.marginRight = C(ne.reliableMarginRight, function(e, t) { return t ? ie.swap(e, { display: "inline-block" }, tt, [e, "marginRight"]) : void 0 }), ie.each({ margin: "", padding: "", border: "Width" }, function(e, t) { ie.cssHooks[e + t] = { expand: function(n) { for (var r = 0, i = {}, a = "string" == typeof n ? n.split(" ") : [n]; 4 > r; r++) i[e + ke[r] + t] = a[r] || a[r - 2] || a[0]; return i } }, nt.test(e) || (ie.cssHooks[e + t].set = N) }), ie.fn.extend({ css: function(e, t) { return Ne(this, function(e, t, n) { var r, i, a = {}, o = 0; if (ie.isArray(t)) { for (r = et(e), i = t.length; i > o; o++) a[t[o]] = ie.css(e, t[o], !1, r); return a } return void 0 !== n ? ie.style(e, t, n) : ie.css(e, t) }, e, t, arguments.length > 1) }, show: function() { return D(this, !0) }, hide: function() { return D(this) }, toggle: function(e) { return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function() { De(this) ? ie(this).show() : ie(this).hide() }) } }), ie.Tween = B, B.prototype = { constructor: B, init: function(e, t, n, r, i, a) { this.elem = e, this.prop = n, this.easing = i || "swing", this.options = t, this.start = this.now = this.cur(), this.end = r, this.unit = a || (ie.cssNumber[n] ? "" : "px") }, cur: function() { var e = B.propHooks[this.prop]; return e && e.get ? e.get(this) : B.propHooks._default.get(this) }, run: function(e) { var t, n = B.propHooks[this.prop]; return this.options.duration ? this.pos = t = ie.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e, this.now = (this.end - this.start) * t + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), n && n.set ? n.set(this) : B.propHooks._default.set(this), this } }, B.prototype.init.prototype = B.prototype, B.propHooks = { _default: { get: function(e) { var t; return null == e.elem[e.prop] || e.elem.style && null != e.elem.style[e.prop] ? (t = ie.css(e.elem, e.prop, ""), t && "auto" !== t ? t : 0) : e.elem[e.prop] }, set: function(e) { ie.fx.step[e.prop] ? ie.fx.step[e.prop](e) : e.elem.style && (null != e.elem.style[ie.cssProps[e.prop]] || ie.cssHooks[e.prop]) ? ie.style(e.elem, e.prop, e.now + e.unit) : e.elem[e.prop] = e.now } } }, B.propHooks.scrollTop = B.propHooks.scrollLeft = { set: function(e) { e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now) } }, ie.easing = { linear: function(e) { return e }, swing: function(e) { return .5 - Math.cos(e * Math.PI) / 2 } }, ie.fx = B.prototype.init, ie.fx.step = {}; var pt, ft, vt = /^(?:toggle|show|hide)$/, gt = new RegExp("^(?:([+-])=|)(" + Ce + ")([a-z%]*)$", "i"), yt = /queueHooks$/, mt = [I], xt = { "*": [function(e, t) { var n = this.createTween(e, t), r = n.cur(), i = gt.exec(t), a = i && i[3] || (ie.cssNumber[e] ? "" : "px"), o = (ie.cssNumber[e] || "px" !== a && +r) && gt.exec(ie.css(n.elem, e)), s = 1, l = 20; if (o && o[3] !== a) { a = a || o[3], i = i || [], o = +r || 1; do s = s || ".5", o /= s, ie.style(n.elem, e, o + a); while (s !== (s = n.cur() / r) && 1 !== s && --l) } return i && (o = n.start = +o || +r || 0, n.unit = a, n.end = i[1] ? o + (i[1] + 1) * i[2] : +i[2]), n }] }; ie.Animation = ie.extend(R, { tweener: function(e, t) { ie.isFunction(e) ? (t = e, e = ["*"]) : e = e.split(" "); for (var n, r = 0, i = e.length; i > r; r++) n = e[r], xt[n] = xt[n] || [], xt[n].unshift(t) }, prefilter: function(e, t) { t ? mt.unshift(e) : mt.push(e) } }), ie.speed = function(e, t, n) { var r = e && "object" == typeof e ? ie.extend({}, e) : { complete: n || !n && t || ie.isFunction(e) && e, duration: e, easing: n && t || t && !ie.isFunction(t) && t }; return r.duration = ie.fx.off ? 0 : "number" == typeof r.duration ? r.duration : r.duration in ie.fx.speeds ? ie.fx.speeds[r.duration] : ie.fx.speeds._default, (null == r.queue || r.queue === !0) && (r.queue = "fx"), r.old = r.complete, r.complete = function() { ie.isFunction(r.old) && r.old.call(this), r.queue && ie.dequeue(this, r.queue) }, r }, ie.fn.extend({ fadeTo: function(e, t, n, r) { return this.filter(De).css("opacity", 0).show().end().animate({ opacity: t }, e, n, r) }, animate: function(e, t, n, r) { var i = ie.isEmptyObject(e), a = ie.speed(t, n, r), o = function() { var t = R(this, ie.extend({}, e), a); (i || ie._data(this, "finish")) && t.stop(!0) }; return o.finish = o, i || a.queue === !1 ? this.each(o) : this.queue(a.queue, o) }, stop: function(e, t, n) { var r = function(e) { var t = e.stop; delete e.stop, t(n) }; return "string" != typeof e && (n = t, t = e, e = void 0), t && e !== !1 && this.queue(e || "fx", []), this.each(function() { var t = !0, i = null != e && e + "queueHooks", a = ie.timers, o = ie._data(this); if (i) o[i] && o[i].stop && r(o[i]); else for (i in o) o[i] && o[i].stop && yt.test(i) && r(o[i]); for (i = a.length; i--;) a[i].elem !== this || null != e && a[i].queue !== e || (a[i].anim.stop(n), t = !1, a.splice(i, 1)); (t || !n) && ie.dequeue(this, e) }) }, finish: function(e) { return e !== !1 && (e = e || "fx"), this.each(function() { var t, n = ie._data(this), r = n[e + "queue"], i = n[e + "queueHooks"], a = ie.timers, o = r ? r.length : 0; for (n.finish = !0, ie.queue(this, e, []), i && i.stop && i.stop.call(this, !0), t = a.length; t--;) a[t].elem === this && a[t].queue === e && (a[t].anim.stop(!0), a.splice(t, 1)); for (t = 0; o > t; t++) r[t] && r[t].finish && r[t].finish.call(this); delete n.finish }) } }), ie.each(["toggle", "show", "hide"], function(e, t) { var n = ie.fn[t]; ie.fn[t] = function(e, r, i) { return null == e || "boolean" == typeof e ? n.apply(this, arguments) : this.animate(O(t, !0), e, r, i) } }), ie.each({ slideDown: O("show"), slideUp: O("hide"), slideToggle: O("toggle"), fadeIn: { opacity: "show" }, fadeOut: { opacity: "hide" }, fadeToggle: { opacity: "toggle" } }, function(e, t) { ie.fn[e] = function(e, n, r) { return this.animate(t, e, n, r) } }), ie.timers = [], ie.fx.tick = function() { var e, t = ie.timers, n = 0; for (pt = ie.now(); n < t.length; n++) e = t[n], e() || t[n] !== e || t.splice(n--, 1); t.length || ie.fx.stop(), pt = void 0 }, ie.fx.timer = function(e) { ie.timers.push(e), e() ? ie.fx.start() : ie.timers.pop() }, ie.fx.interval = 13, ie.fx.start = function() { ft || (ft = setInterval(ie.fx.tick, ie.fx.interval)) }, ie.fx.stop = function() { clearInterval(ft), ft = null }, ie.fx.speeds = { slow: 600, fast: 200, _default: 400 }, ie.fn.delay = function(e, t) { return e = ie.fx ? ie.fx.speeds[e] || e : e, t = t || "fx", this.queue(t, function(t, n) { var r = setTimeout(t, e); n.stop = function() { clearTimeout(r) } }) }, function() { var e, t, n, r, i; t = fe.createElement("div"), t.setAttribute("className", "t"), t.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", r = t.getElementsByTagName("a")[0], n = fe.createElement("select"), i = n.appendChild(fe.createElement("option")), e = t.getElementsByTagName("input")[0], r.style.cssText = "top:1px", ne.getSetAttribute = "t" !== t.className, ne.style = /top/.test(r.getAttribute("style")), ne.hrefNormalized = "/a" === r.getAttribute("href"), ne.checkOn = !!e.value, ne.optSelected = i.selected, ne.enctype = !!fe.createElement("form").enctype, n.disabled = !0, ne.optDisabled = !i.disabled, e = fe.createElement("input"), e.setAttribute("value", ""), ne.input = "" === e.getAttribute("value"), e.value = "t", e.setAttribute("type", "radio"), ne.radioValue = "t" === e.value }(); var bt = /\r/g; ie.fn.extend({ val: function(e) { var t, n, r, i = this[0]; { if (arguments.length) return r = ie.isFunction(e), this.each(function(n) { var i; 1 === this.nodeType && (i = r ? e.call(this, n, ie(this).val()) : e, null == i ? i = "" : "number" == typeof i ? i += "" : ie.isArray(i) && (i = ie.map(i, function(e) { return null == e ? "" : e + "" })), t = ie.valHooks[this.type] || ie.valHooks[this.nodeName.toLowerCase()], t && "set" in t && void 0 !== t.set(this, i, "value") || (this.value = i)) }); if (i) return t = ie.valHooks[i.type] || ie.valHooks[i.nodeName.toLowerCase()], t && "get" in t && void 0 !== (n = t.get(i, "value")) ? n : (n = i.value, "string" == typeof n ? n.replace(bt, "") : null == n ? "" : n) } } }), ie.extend({ valHooks: { option: { get: function(e) { var t = ie.find.attr(e, "value"); return null != t ? t : ie.trim(ie.text(e)) } }, select: { get: function(e) { for (var t, n, r = e.options, i = e.selectedIndex, a = "select-one" === e.type || 0 > i, o = a ? null : [], s = a ? i + 1 : r.length, l = 0 > i ? s : a ? i : 0; s > l; l++) if (n = r[l], (n.selected || l === i) && (ne.optDisabled ? !n.disabled : null === n.getAttribute("disabled")) && (!n.parentNode.disabled || !ie.nodeName(n.parentNode, "optgroup"))) { if (t = ie(n).val(), a) return t; o.push(t) } return o }, set: function(e, t) { for (var n, r, i = e.options, a = ie.makeArray(t), o = i.length; o--;) if (r = i[o], ie.inArray(ie.valHooks.option.get(r), a) >= 0) try { r.selected = n = !0 } catch (s) { r.scrollHeight } else r.selected = !1; return n || (e.selectedIndex = -1), i } } } }), ie.each(["radio", "checkbox"], function() { ie.valHooks[this] = { set: function(e, t) { return ie.isArray(t) ? e.checked = ie.inArray(ie(e).val(), t) >= 0 : void 0 } }, ne.checkOn || (ie.valHooks[this].get = function(e) { return null === e.getAttribute("value") ? "on" : e.value }) }); var wt, _t, Et = ie.expr.attrHandle, Tt = /^(?:checked|selected)$/i, St = ne.getSetAttribute, Ct = ne.input; ie.fn.extend({ attr: function(e, t) { return Ne(this, ie.attr, e, t, arguments.length > 1) }, removeAttr: function(e) { return this.each(function() { ie.removeAttr(this, e) }) } }), ie.extend({ attr: function(e, t, n) { var r, i, a = e.nodeType; if (e && 3 !== a && 8 !== a && 2 !== a) return typeof e.getAttribute === Ee ? ie.prop(e, t, n) : (1 === a && ie.isXMLDoc(e) || (t = t.toLowerCase(), r = ie.attrHooks[t] || (ie.expr.match.bool.test(t) ? _t : wt)), void 0 === n ? r && "get" in r && null !== (i = r.get(e, t)) ? i : (i = ie.find.attr(e, t), null == i ? void 0 : i) : null !== n ? r && "set" in r && void 0 !== (i = r.set(e, n, t)) ? i : (e.setAttribute(t, n + ""), n) : void ie.removeAttr(e, t)) }, removeAttr: function(e, t) { var n, r, i = 0, a = t && t.match(xe); if (a && 1 === e.nodeType) for (; n = a[i++];) r = ie.propFix[n] || n, ie.expr.match.bool.test(n) ? Ct && St || !Tt.test(n) ? e[r] = !1 : e[ie.camelCase("default-" + n)] = e[r] = !1 : ie.attr(e, n, ""), e.removeAttribute(St ? n : r) }, attrHooks: { type: { set: function(e, t) { if (!ne.radioValue && "radio" === t && ie.nodeName(e, "input")) { var n = e.value; return e.setAttribute("type", t), n && (e.value = n), t } } } } }), _t = { set: function(e, t, n) { return t === !1 ? ie.removeAttr(e, n) : Ct && St || !Tt.test(n) ? e.setAttribute(!St && ie.propFix[n] || n, n) : e[ie.camelCase("default-" + n)] = e[n] = !0, n } }, ie.each(ie.expr.match.bool.source.match(/\w+/g), function(e, t) { var n = Et[t] || ie.find.attr; Et[t] = Ct && St || !Tt.test(t) ? function(e, t, r) { var i, a; return r || (a = Et[t], Et[t] = i, i = null != n(e, t, r) ? t.toLowerCase() : null, Et[t] = a), i } : function(e, t, n) { return n ? void 0 : e[ie.camelCase("default-" + t)] ? t.toLowerCase() : null } }), Ct && St || (ie.attrHooks.value = { set: function(e, t, n) { return ie.nodeName(e, "input") ? void(e.defaultValue = t) : wt && wt.set(e, t, n) } }), St || (wt = { set: function(e, t, n) { var r = e.getAttributeNode(n); return r || e.setAttributeNode(r = e.ownerDocument.createAttribute(n)), r.value = t += "", "value" === n || t === e.getAttribute(n) ? t : void 0 } }, Et.id = Et.name = Et.coords = function(e, t, n) { var r; return n ? void 0 : (r = e.getAttributeNode(t)) && "" !== r.value ? r.value : null }, ie.valHooks.button = { get: function(e, t) { var n = e.getAttributeNode(t); return n && n.specified ? n.value : void 0 }, set: wt.set }, ie.attrHooks.contenteditable = { set: function(e, t, n) { wt.set(e, "" === t ? !1 : t, n) } }, ie.each(["width", "height"], function(e, t) { ie.attrHooks[t] = { set: function(e, n) { return "" === n ? (e.setAttribute(t, "auto"), n) : void 0 } } })), ne.style || (ie.attrHooks.style = { get: function(e) { return e.style.cssText || void 0 }, set: function(e, t) { return e.style.cssText = t + "" } }); var kt = /^(?:input|select|textarea|button|object)$/i, Dt = /^(?:a|area)$/i; ie.fn.extend({ prop: function(e, t) { return Ne(this, ie.prop, e, t, arguments.length > 1) }, removeProp: function(e) { return e = ie.propFix[e] || e, this.each(function() { try { this[e] = void 0, delete this[e] } catch (t) {} }) } }), ie.extend({ propFix: { "for": "htmlFor", "class": "className" }, prop: function(e, t, n) { var r, i, a, o = e.nodeType; if (e && 3 !== o && 8 !== o && 2 !== o) return a = 1 !== o || !ie.isXMLDoc(e), a && (t = ie.propFix[t] || t, i = ie.propHooks[t]), void 0 !== n ? i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : e[t] = n : i && "get" in i && null !== (r = i.get(e, t)) ? r : e[t] }, propHooks: { tabIndex: { get: function(e) { var t = ie.find.attr(e, "tabindex"); return t ? parseInt(t, 10) : kt.test(e.nodeName) || Dt.test(e.nodeName) && e.href ? 0 : -1 } } } }), ne.hrefNormalized || ie.each(["href", "src"], function(e, t) { ie.propHooks[t] = { get: function(e) { return e.getAttribute(t, 4) } } }), ne.optSelected || (ie.propHooks.selected = { get: function(e) { var t = e.parentNode; return t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex), null } }), ie.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function() { ie.propFix[this.toLowerCase()] = this }), ne.enctype || (ie.propFix.enctype = "encoding"); var Nt = /[\t\r\n\f]/g; ie.fn.extend({ addClass: function(e) { var t, n, r, i, a, o, s = 0, l = this.length, u = "string" == typeof e && e; if (ie.isFunction(e)) return this.each(function(t) { ie(this).addClass(e.call(this, t, this.className)) }); if (u) for (t = (e || "").match(xe) || []; l > s; s++) if (n = this[s], r = 1 === n.nodeType && (n.className ? (" " + n.className + " ").replace(Nt, " ") : " ")) { for (a = 0; i = t[a++];) r.indexOf(" " + i + " ") < 0 && (r += i + " "); o = ie.trim(r), n.className !== o && (n.className = o) } return this }, removeClass: function(e) { var t, n, r, i, a, o, s = 0, l = this.length, u = 0 === arguments.length || "string" == typeof e && e; if (ie.isFunction(e)) return this.each(function(t) { ie(this).removeClass(e.call(this, t, this.className)) }); if (u) for (t = (e || "").match(xe) || []; l > s; s++) if (n = this[s], r = 1 === n.nodeType && (n.className ? (" " + n.className + " ").replace(Nt, " ") : "")) { for (a = 0; i = t[a++];) for (; r.indexOf(" " + i + " ") >= 0;) r = r.replace(" " + i + " ", " "); o = e ? ie.trim(r) : "", n.className !== o && (n.className = o) } return this }, toggleClass: function(e, t) { var n = typeof e; return "boolean" == typeof t && "string" === n ? t ? this.addClass(e) : this.removeClass(e) : ie.isFunction(e) ? this.each(function(n) { ie(this).toggleClass(e.call(this, n, this.className, t), t) }) : this.each(function() { if ("string" === n) for (var t, r = 0, i = ie(this), a = e.match(xe) || []; t = a[r++];) i.hasClass(t) ? i.removeClass(t) : i.addClass(t); else(n === Ee || "boolean" === n) && (this.className && ie._data(this, "__className__", this.className), this.className = this.className || e === !1 ? "" : ie._data(this, "__className__") || "") }) }, hasClass: function(e) { for (var t = " " + e + " ", n = 0, r = this.length; r > n; n++) if (1 === this[n].nodeType && (" " + this[n].className + " ").replace(Nt, " ").indexOf(t) >= 0) return !0; return !1 } }), ie.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function(e, t) { ie.fn[t] = function(e, n) { return arguments.length > 0 ? this.on(t, null, e, n) : this.trigger(t) } }), ie.fn.extend({ hover: function(e, t) { return this.mouseenter(e).mouseleave(t || e) }, bind: function(e, t, n) { return this.on(e, null, t, n) }, unbind: function(e, t) { return this.off(e, null, t) }, delegate: function(e, t, n, r) { return this.on(t, e, n, r) }, undelegate: function(e, t, n) { return 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", n) } }); var Pt = ie.now(), Mt = /\?/, Bt = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g; ie.parseJSON = function(t) { if (e.JSON && e.JSON.parse) return e.JSON.parse(t + ""); var n, r = null, i = ie.trim(t + ""); return i && !ie.trim(i.replace(Bt, function(e, t, i, a) { return n && t && (r = 0), 0 === r ? e : (n = i || t, r += !a - !i, "") })) ? Function("return " + i)() : ie.error("Invalid JSON: " + t) }, ie.parseXML = function(t) { var n, r; if (!t || "string" != typeof t) return null; try { e.DOMParser ? (r = new DOMParser, n = r.parseFromString(t, "text/xml")) : (n = new ActiveXObject("Microsoft.XMLDOM"), n.async = "false", n.loadXML(t)) } catch (i) { n = void 0 } return n && n.documentElement && !n.getElementsByTagName("parsererror").length || ie.error("Invalid XML: " + t), n }; var Lt, Ot, At = /#.*$/, It = /([?&])_=[^&]*/, zt = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm, Rt = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, jt = /^(?:GET|HEAD)$/, Ft = /^\/\//, qt = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, Vt = {}, Xt = {}, Ht = "*/".concat("*"); try { Ot = location.href } catch (Yt) { Ot = fe.createElement("a"), Ot.href = "", Ot = Ot.href } Lt = qt.exec(Ot.toLowerCase()) || [], ie.extend({ active: 0, lastModified: {}, etag: {}, ajaxSettings: { url: Ot, type: "GET", isLocal: Rt.test(Lt[1]), global: !0, processData: !0, async: !0, contentType: "application/x-www-form-urlencoded; charset=UTF-8", accepts: { "*": Ht, text: "text/plain", html: "text/html", xml: "application/xml, text/xml", json: "application/json, text/javascript" }, contents: { xml: /xml/, html: /html/, json: /json/ }, responseFields: { xml: "responseXML", text: "responseText", json: "responseJSON" }, converters: { "* text": String, "text html": !0, "text json": ie.parseJSON, "text xml": ie.parseXML }, flatOptions: { url: !0, context: !0 } }, ajaxSetup: function(e, t) { return t ? q(q(e, ie.ajaxSettings), t) : q(ie.ajaxSettings, e) }, ajaxPrefilter: j(Vt), ajaxTransport: j(Xt), ajax: function(e, t) { function n(e, t, n, r) { var i, c, y, m, b, _ = t; 2 !== x && (x = 2, s && clearTimeout(s), u = void 0, o = r || "", w.readyState = e > 0 ? 4 : 0, i = e >= 200 && 300 > e || 304 === e, n && (m = V(d, w, n)), m = X(d, m, w, i), i ? (d.ifModified && (b = w.getResponseHeader("Last-Modified"), b && (ie.lastModified[a] = b), b = w.getResponseHeader("etag"), b && (ie.etag[a] = b)), 204 === e || "HEAD" === d.type ? _ = "nocontent" : 304 === e ? _ = "notmodified" : (_ = m.state, c = m.data, y = m.error, i = !y)) : (y = _, (e || !_) && (_ = "error", 0 > e && (e = 0))), w.status = e, w.statusText = (t || _) + "", i ? f.resolveWith(h, [c, _, w]) : f.rejectWith(h, [w, _, y]), w.statusCode(g), g = void 0, l && p.trigger(i ? "ajaxSuccess" : "ajaxError", [w, d, i ? c : y]), v.fireWith(h, [w, _]), l && (p.trigger("ajaxComplete", [w, d]), --ie.active || ie.event.trigger("ajaxStop"))) } "object" == typeof e && (t = e, e = void 0), t = t || {}; var r, i, a, o, s, l, u, c, d = ie.ajaxSetup({}, t), h = d.context || d, p = d.context && (h.nodeType || h.jquery) ? ie(h) : ie.event, f = ie.Deferred(), v = ie.Callbacks("once memory"), g = d.statusCode || {}, y = {}, m = {}, x = 0, b = "canceled", w = { readyState: 0, getResponseHeader: function(e) { var t; if (2 === x) { if (!c) for (c = {}; t = zt.exec(o);) c[t[1].toLowerCase()] = t[2]; t = c[e.toLowerCase()] } return null == t ? null : t }, getAllResponseHeaders: function() { return 2 === x ? o : null }, setRequestHeader: function(e, t) { var n = e.toLowerCase(); return x || (e = m[n] = m[n] || e, y[e] = t), this }, overrideMimeType: function(e) { return x || (d.mimeType = e), this }, statusCode: function(e) { var t; if (e) if (2 > x) for (t in e) g[t] = [g[t], e[t]]; else w.always(e[w.status]); return this }, abort: function(e) { var t = e || b; return u && u.abort(t), n(0, t), this } }; if (f.promise(w).complete = v.add, w.success = w.done, w.error = w.fail, d.url = ((e || d.url || Ot) + "").replace(At, "").replace(Ft, Lt[1] + "//"), d.type = t.method || t.type || d.method || d.type, d.dataTypes = ie.trim(d.dataType || "*").toLowerCase().match(xe) || [""], null == d.crossDomain && (r = qt.exec(d.url.toLowerCase()), d.crossDomain = !(!r || r[1] === Lt[1] && r[2] === Lt[2] && (r[3] || ("http:" === r[1] ? "80" : "443")) === (Lt[3] || ("http:" === Lt[1] ? "80" : "443")))), d.data && d.processData && "string" != typeof d.data && (d.data = ie.param(d.data, d.traditional)), F(Vt, d, t, w), 2 === x) return w; l = ie.event && d.global, l && 0 === ie.active++ && ie.event.trigger("ajaxStart"), d.type = d.type.toUpperCase(), d.hasContent = !jt.test(d.type), a = d.url, d.hasContent || (d.data && (a = d.url += (Mt.test(a) ? "&" : "?") + d.data, delete d.data), d.cache === !1 && (d.url = It.test(a) ? a.replace(It, "$1_=" + Pt++) : a + (Mt.test(a) ? "&" : "?") + "_=" + Pt++)), d.ifModified && (ie.lastModified[a] && w.setRequestHeader("If-Modified-Since", ie.lastModified[a]), ie.etag[a] && w.setRequestHeader("If-None-Match", ie.etag[a])), (d.data && d.hasContent && d.contentType !== !1 || t.contentType) && w.setRequestHeader("Content-Type", d.contentType), w.setRequestHeader("Accept", d.dataTypes[0] && d.accepts[d.dataTypes[0]] ? d.accepts[d.dataTypes[0]] + ("*" !== d.dataTypes[0] ? ", " + Ht + "; q=0.01" : "") : d.accepts["*"]); for (i in d.headers) w.setRequestHeader(i, d.headers[i]); if (d.beforeSend && (d.beforeSend.call(h, w, d) === !1 || 2 === x)) return w.abort(); b = "abort"; for (i in { success: 1, error: 1, complete: 1 }) w[i](d[i]); if (u = F(Xt, d, t, w)) { w.readyState = 1, l && p.trigger("ajaxSend", [w, d]), d.async && d.timeout > 0 && (s = setTimeout(function() { w.abort("timeout") }, d.timeout)); try { x = 1, u.send(y, n) } catch (_) { if (!(2 > x)) throw _; n(-1, _) } } else n(-1, "No Transport"); return w }, getJSON: function(e, t, n) { return ie.get(e, t, n, "json") }, getScript: function(e, t) { return ie.get(e, void 0, t, "script") } }), ie.each(["get", "post"], function(e, t) { ie[t] = function(e, n, r, i) { return ie.isFunction(n) && (i = i || r, r = n, n = void 0), ie.ajax({ url: e, type: t, dataType: i, data: n, success: r }) } }), ie._evalUrl = function(e) { return ie.ajax({ url: e, type: "GET", dataType: "script", async: !1, global: !1, "throws": !0 }) }, ie.fn.extend({ wrapAll: function(e) { if (ie.isFunction(e)) return this.each(function(t) { ie(this).wrapAll(e.call(this, t)) }); if (this[0]) { var t = ie(e, this[0].ownerDocument).eq(0).clone(!0); this[0].parentNode && t.insertBefore(this[0]), t.map(function() { for (var e = this; e.firstChild && 1 === e.firstChild.nodeType;) e = e.firstChild; return e }).append(this) } return this }, wrapInner: function(e) { return ie.isFunction(e) ? this.each(function(t) { ie(this).wrapInner(e.call(this, t)) }) : this.each(function() { var t = ie(this), n = t.contents(); n.length ? n.wrapAll(e) : t.append(e) }) }, wrap: function(e) { var t = ie.isFunction(e); return this.each(function(n) { ie(this).wrapAll(t ? e.call(this, n) : e) }) }, unwrap: function() { return this.parent().each(function() { ie.nodeName(this, "body") || ie(this).replaceWith(this.childNodes) }).end() } }), ie.expr.filters.hidden = function(e) { return e.offsetWidth <= 0 && e.offsetHeight <= 0 || !ne.reliableHiddenOffsets() && "none" === (e.style && e.style.display || ie.css(e, "display")) }, ie.expr.filters.visible = function(e) { return !ie.expr.filters.hidden(e) }; var $t = /%20/g, Wt = /\[\]$/, Ut = /\r?\n/g, Zt = /^(?:submit|button|image|reset|file)$/i, Gt = /^(?:input|select|textarea|keygen)/i; ie.param = function(e, t) { var n, r = [], i = function(e, t) { t = ie.isFunction(t) ? t() : null == t ? "" : t, r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(t) }; if (void 0 === t && (t = ie.ajaxSettings && ie.ajaxSettings.traditional), ie.isArray(e) || e.jquery && !ie.isPlainObject(e)) ie.each(e, function() { i(this.name, this.value) }); else for (n in e) H(n, e[n], t, i); return r.join("&").replace($t, "+") }, ie.fn.extend({ serialize: function() { return ie.param(this.serializeArray()) }, serializeArray: function() { return this.map(function() { var e = ie.prop(this, "elements"); return e ? ie.makeArray(e) : this }).filter(function() { var e = this.type; return this.name && !ie(this).is(":disabled") && Gt.test(this.nodeName) && !Zt.test(e) && (this.checked || !Pe.test(e)) }).map(function(e, t) { var n = ie(this).val(); return null == n ? null : ie.isArray(n) ? ie.map(n, function(e) { return { name: t.name, value: e.replace(Ut, "\r\n") } }) : { name: t.name, value: n.replace(Ut, "\r\n") } }).get() } }), ie.ajaxSettings.xhr = void 0 !== e.ActiveXObject ? function() { return !this.isLocal && /^(get|post|head|put|delete|options)$/i.test(this.type) && Y() || $() } : Y; var Kt = 0, Jt = {}, Qt = ie.ajaxSettings.xhr(); e.attachEvent && e.attachEvent("onunload", function() { for (var e in Jt) Jt[e](void 0, !0) }), ne.cors = !!Qt && "withCredentials" in Qt, Qt = ne.ajax = !!Qt, Qt && ie.ajaxTransport(function(e) { if (!e.crossDomain || ne.cors) { var t; return { send: function(n, r) { var i, a = e.xhr(), o = ++Kt; if (a.open(e.type, e.url, e.async, e.username, e.password), e.xhrFields) for (i in e.xhrFields) a[i] = e.xhrFields[i]; e.mimeType && a.overrideMimeType && a.overrideMimeType(e.mimeType), e.crossDomain || n["X-Requested-With"] || (n["X-Requested-With"] = "XMLHttpRequest"); for (i in n) void 0 !== n[i] && a.setRequestHeader(i, n[i] + ""); a.send(e.hasContent && e.data || null), t = function(n, i) { var s, l, u; if (t && (i || 4 === a.readyState)) if (delete Jt[o], t = void 0, a.onreadystatechange = ie.noop, i) 4 !== a.readyState && a.abort(); else { u = {}, s = a.status, "string" == typeof a.responseText && (u.text = a.responseText); try { l = a.statusText } catch (c) { l = "" } s || !e.isLocal || e.crossDomain ? 1223 === s && (s = 204) : s = u.text ? 200 : 404 } u && r(s, l, u, a.getAllResponseHeaders()) }, e.async ? 4 === a.readyState ? setTimeout(t) : a.onreadystatechange = Jt[o] = t : t() }, abort: function() { t && t(void 0, !0) } } } }), ie.ajaxSetup({ accepts: { script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" }, contents: { script: /(?:java|ecma)script/ }, converters: { "text script": function(e) { return ie.globalEval(e), e } } }), ie.ajaxPrefilter("script", function(e) { void 0 === e.cache && (e.cache = !1), e.crossDomain && (e.type = "GET", e.global = !1) }), ie.ajaxTransport("script", function(e) { if (e.crossDomain) { var t, n = fe.head || ie("head")[0] || fe.documentElement; return { send: function(r, i) { t = fe.createElement("script"), t.async = !0, e.scriptCharset && (t.charset = e.scriptCharset), t.src = e.url, t.onload = t.onreadystatechange = function(e, n) { (n || !t.readyState || /loaded|complete/.test(t.readyState)) && (t.onload = t.onreadystatechange = null, t.parentNode && t.parentNode.removeChild(t), t = null, n || i(200, "success")) }, n.insertBefore(t, n.firstChild) }, abort: function() { t && t.onload(void 0, !0) } } } }); var en = [], tn = /(=)\?(?=&|$)|\?\?/; ie.ajaxSetup({ jsonp: "callback", jsonpCallback: function() { var e = en.pop() || ie.expando + "_" + Pt++; return this[e] = !0, e } }), ie.ajaxPrefilter("json jsonp", function(t, n, r) { var i, a, o, s = t.jsonp !== !1 && (tn.test(t.url) ? "url" : "string" == typeof t.data && !(t.contentType || "").indexOf("application/x-www-form-urlencoded") && tn.test(t.data) && "data"); return s || "jsonp" === t.dataTypes[0] ? (i = t.jsonpCallback = ie.isFunction(t.jsonpCallback) ? t.jsonpCallback() : t.jsonpCallback, s ? t[s] = t[s].replace(tn, "$1" + i) : t.jsonp !== !1 && (t.url += (Mt.test(t.url) ? "&" : "?") + t.jsonp + "=" + i), t.converters["script json"] = function() { return o || ie.error(i + " was not called"), o[0] }, t.dataTypes[0] = "json", a = e[i], e[i] = function() { o = arguments }, r.always(function() { e[i] = a, t[i] && (t.jsonpCallback = n.jsonpCallback, en.push(i)), o && ie.isFunction(a) && a(o[0]), o = a = void 0 }), "script") : void 0 }), ie.parseHTML = function(e, t, n) { if (!e || "string" != typeof e) return null; "boolean" == typeof t && (n = t, t = !1), t = t || fe; var r = de.exec(e), i = !n && []; return r ? [t.createElement(r[1])] : (r = ie.buildFragment([e], t, i), i && i.length && ie(i).remove(), ie.merge([], r.childNodes)) }; var nn = ie.fn.load; ie.fn.load = function(e, t, n) { if ("string" != typeof e && nn) return nn.apply(this, arguments); var r, i, a, o = this, s = e.indexOf(" "); return s >= 0 && (r = ie.trim(e.slice(s, e.length)), e = e.slice(0, s)), ie.isFunction(t) ? (n = t, t = void 0) : t && "object" == typeof t && (a = "POST"), o.length > 0 && ie.ajax({ url: e, type: a, dataType: "html", data: t }).done(function(e) { i = arguments, o.html(r ? ie("<div>").append(ie.parseHTML(e)).find(r) : e) }).complete(n && function(e, t) { o.each(n, i || [e.responseText, t, e]) }), this }, ie.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(e, t) { ie.fn[t] = function(e) { return this.on(t, e) } }), ie.expr.filters.animated = function(e) { return ie.grep(ie.timers, function(t) { return e === t.elem }).length }; var rn = e.document.documentElement; ie.offset = { setOffset: function(e, t, n) { var r, i, a, o, s, l, u, c = ie.css(e, "position"), d = ie(e), h = {}; "static" === c && (e.style.position = "relative"), s = d.offset(), a = ie.css(e, "top"), l = ie.css(e, "left"), u = ("absolute" === c || "fixed" === c) && ie.inArray("auto", [a, l]) > -1, u ? (r = d.position(), o = r.top, i = r.left) : (o = parseFloat(a) || 0, i = parseFloat(l) || 0), ie.isFunction(t) && (t = t.call(e, n, s)), null != t.top && (h.top = t.top - s.top + o), null != t.left && (h.left = t.left - s.left + i), "using" in t ? t.using.call(e, h) : d.css(h) } }, ie.fn.extend({ offset: function(e) { if (arguments.length) return void 0 === e ? this : this.each(function(t) { ie.offset.setOffset(this, e, t) }); var t, n, r = { top: 0, left: 0 }, i = this[0], a = i && i.ownerDocument; if (a) return t = a.documentElement, ie.contains(t, i) ? (typeof i.getBoundingClientRect !== Ee && (r = i.getBoundingClientRect()), n = W(a), { top: r.top + (n.pageYOffset || t.scrollTop) - (t.clientTop || 0), left: r.left + (n.pageXOffset || t.scrollLeft) - (t.clientLeft || 0) }) : r }, position: function() { if (this[0]) { var e, t, n = { top: 0, left: 0 }, r = this[0]; return "fixed" === ie.css(r, "position") ? t = r.getBoundingClientRect() : (e = this.offsetParent(), t = this.offset(), ie.nodeName(e[0], "html") || (n = e.offset()), n.top += ie.css(e[0], "borderTopWidth", !0), n.left += ie.css(e[0], "borderLeftWidth", !0)), { top: t.top - n.top - ie.css(r, "marginTop", !0), left: t.left - n.left - ie.css(r, "marginLeft", !0) } } }, offsetParent: function() { return this.map(function() { for (var e = this.offsetParent || rn; e && !ie.nodeName(e, "html") && "static" === ie.css(e, "position");) e = e.offsetParent; return e || rn }) } }), ie.each({ scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function(e, t) { var n = /Y/.test(t); ie.fn[e] = function(r) { return Ne(this, function(e, r, i) { var a = W(e); return void 0 === i ? a ? t in a ? a[t] : a.document.documentElement[r] : e[r] : void(a ? a.scrollTo(n ? ie(a).scrollLeft() : i, n ? i : ie(a).scrollTop()) : e[r] = i) }, e, r, arguments.length, null) } }), ie.each(["top", "left"], function(e, t) { ie.cssHooks[t] = C(ne.pixelPosition, function(e, n) { return n ? (n = tt(e, t), rt.test(n) ? ie(e).position()[t] + "px" : n) : void 0 }) }), ie.each({ Height: "height", Width: "width" }, function(e, t) { ie.each({ padding: "inner" + e, content: t, "": "outer" + e }, function(n, r) { ie.fn[r] = function(r, i) { var a = arguments.length && (n || "boolean" != typeof r), o = n || (r === !0 || i === !0 ? "margin" : "border"); return Ne(this, function(t, n, r) { var i; return ie.isWindow(t) ? t.document.documentElement["client" + e] : 9 === t.nodeType ? (i = t.documentElement, Math.max(t.body["scroll" + e], i["scroll" + e], t.body["offset" + e], i["offset" + e], i["client" + e])) : void 0 === r ? ie.css(t, n, o) : ie.style(t, n, r, o) }, t, a ? r : void 0, a, null) } }) }), ie.fn.size = function() { return this.length }, ie.fn.andSelf = ie.fn.addBack, "function" == typeof define && define.amd && define("jquery", [], function() { return ie }); var an = e.jQuery, on = e.$; return ie.noConflict = function(t) { return e.$ === ie && (e.$ = on), t && e.jQuery === ie && (e.jQuery = an), ie }, typeof t === Ee && (e.jQuery = e.$ = ie), ie }); var cytoscape; ! function(e) { "use strict"; var t = cytoscape = function() { return cytoscape.init.apply(cytoscape, arguments) }; t.version = "2.4.6", t.init = function(e) { return void 0 === e && (e = {}), t.is.plainObject(e) ? new t.Core(e) : t.is.string(e) ? t.extension.apply(t.extension, arguments) : void 0 }, t.fn = {}, "undefined" != typeof module && module.exports && (module.exports = cytoscape), "undefined" != typeof define && define.amd && define("cytoscape", function() { return cytoscape }), e && (e.cytoscape = cytoscape) }("undefined" == typeof window ? null : window), this.cytoscape = cytoscape, function(e) { "use strict"; var t = 0, n = 1, r = 2, i = function(e) { return this instanceof i ? (this.id = "Thenable/1.0.7", this.state = t, this.fulfillValue = void 0, this.rejectReason = void 0, this.onFulfilled = [], this.onRejected = [], this.proxy = { then: this.then.bind(this) }, void("function" == typeof e && e.call(this, this.fulfill.bind(this), this.reject.bind(this)))) : new i(e) }; i.prototype = { fulfill: function(e) { return a(this, n, "fulfillValue", e) }, reject: function(e) { return a(this, r, "rejectReason", e) }, then: function(e, t) { var n = this, r = new i; return n.onFulfilled.push(l(e, r, "fulfill")), n.onRejected.push(l(t, r, "reject")), o(n), r.proxy } }; var a = function(e, n, r, i) { return e.state === t && (e.state = n, e[r] = i, o(e)), e }, o = function(e) { e.state === n ? s(e, "onFulfilled", e.fulfillValue) : e.state === r && s(e, "onRejected", e.rejectReason) }, s = function(e, t, n) { if (0 !== e[t].length) { var r = e[t]; e[t] = []; var i = function() { for (var e = 0; e < r.length; e++) r[e](n) }; "object" == typeof process && "function" == typeof process.nextTick ? process.nextTick(i) : "function" == typeof setImmediate ? setImmediate(i) : setTimeout(i, 0) } }, l = function(e, t, n) { return function(r) { if ("function" != typeof e) t[n].call(t, r); else { var i; try { i = e(r) } catch (a) { return void t.reject(a) } u(t, i) } } }, u = function(e, t) { if (e === t || e.proxy === t) return void e.reject(new TypeError("cannot resolve promise with itself")); var n; if ("object" == typeof t && null !== t || "function" == typeof t) try { n = t.then } catch (r) { return void e.reject(r) } if ("function" != typeof n) e.fulfill(t); else { var i = !1; try { n.call(t, function(n) { i || (i = !0, n === t ? e.reject(new TypeError("circular thenable chain")) : u(e, n)) }, function(t) { i || (i = !0, e.reject(t)) }) } catch (r) { i || e.reject(r) } } }; e.Promise = "undefined" == typeof Promise ? i : Promise, e.Promise.all = e.Promise.all || function(t) { return new e.Promise(function(e, n) { for (var r = new Array(t.length), i = 0, a = function(n, a) { r[n] = a, i++, i === t.length && e(r) }, o = 0; o < t.length; o++) ! function(e) { var r = t[e], i = null != r.then; if (i) r.then(function(t) { a(e, t) }, function(e) { n(e) }); else { var o = r; a(e, o) } }(o) }) } }(cytoscape), function(e, t) { "use strict"; var n = "string", r = typeof {}, i = "function"; e.is = { defined: function(e) { return null != e }, string: function(e) { return null != e && typeof e == n }, fn: function(e) { return null != e && typeof e === i }, array: function(e) { return Array.isArray ? Array.isArray(e) : null != e && e instanceof Array }, plainObject: function(t) { return null != t && typeof t === r && !e.is.array(t) && t.constructor === Object }, object: function(e) { return null != e && typeof e === r }, number: function(e) { return null != e && "number" == typeof e && !isNaN(e) }, integer: function(t) { return e.is.number(t) && Math.floor(t) === t }, color: function(e) { return null != e && "string" == typeof e && "" !== $.Color(e).toString() }, bool: function(e) { return null != e && typeof e == typeof !0 }, elementOrCollection: function(t) { return e.is.element(t) || e.is.collection(t) }, element: function(t) { return t instanceof e.Element && t._private.single }, collection: function(t) { return t instanceof e.Collection && !t._private.single }, core: function(t) { return t instanceof e.Core }, style: function(t) { return t instanceof e.Style }, stylesheet: function(t) { return t instanceof e.Stylesheet }, event: function(t) { return t instanceof e.Event }, thread: function(t) { return t instanceof e.Thread }, fabric: function(t) { return t instanceof e.Fabric }, emptyString: function(t) { return t ? e.is.string(t) && ("" === t || t.match(/^\s+$/)) ? !0 : !1 : !0 }, nonemptyString: function(t) { return t && e.is.string(t) && "" !== t && !t.match(/^\s+$/) ? !0 : !1 }, domElement: function(e) { return "undefined" == typeof HTMLElement ? !1 : e instanceof HTMLElement }, boundingBox: function(t) { return e.is.plainObject(t) && e.is.number(t.x1) && e.is.number(t.x2) && e.is.number(t.y1) && e.is.number(t.y2) }, promise: function(t) { return e.is.object(t) && e.is.fn(t.then) }, touch: function() { return t && ("ontouchstart" in t || t.DocumentTouch && document instanceof DocumentTouch) }, gecko: function() { return "undefined" != typeof InstallTrigger || "MozAppearance" in document.documentElement.style }, webkit: function() { return "undefined" != typeof webkitURL || "WebkitAppearance" in document.documentElement.style }, chromium: function() { return "undefined" != typeof chrome }, khtml: function() { return navigator.vendor.match(/kde/i) }, khtmlEtc: function() { return e.is.khtml() || e.is.webkit() || e.is.chromium() }, trident: function() { return "undefined" != typeof ActiveXObject || !1 }, windows: function() { return "undefined" != typeof navigator && navigator.appVersion.match(/Win/i) }, mac: function() { return "undefined" != typeof navigator && navigator.appVersion.match(/Mac/i) }, linux: function() { return "undefined" != typeof navigator && navigator.appVersion.match(/Linux/i) }, unix: function() { return "undefined" != typeof navigator && navigator.appVersion.match(/X11/i) } } }(cytoscape, "undefined" == typeof window ? null : window), function(e, t) { "use strict"; e.util = { extend: function() { var t, n, r, i, a, o, s = arguments[0] || {}, l = 1, u = arguments.length, c = !1; for ("boolean" == typeof s && (c = s, s = arguments[1] || {}, l = 2), "object" == typeof s || e.is.fn(s) || (s = {}), u === l && (s = this, --l); u > l; l++) if (null != (t = arguments[l])) for (n in t) r = s[n], i = t[n], s !== i && (c && i && (e.is.plainObject(i) || (a = e.is.array(i))) ? (a ? (a = !1, o = r && e.is.array(r) ? r : []) : o = r && e.is.plainObject(r) ? r : {}, s[n] = e.util.extend(c, o, i)) : void 0 !== i && (s[n] = i)); return s }, require: function(n, r, i) { var a; i = e.util.extend({ msgIfNotFound: !0 }, i); var o = !1, s = function(e) { o = !0, r(e) }, l = function(e) { t && (a = t[n]), void 0 !== a && s(a), e && e() }, u = function() { o || c(d) }, c = function(e) { if ("undefined" != typeof module && module.exports && require) try { a = require(n) } catch (t) {} void 0 !== a && s(a), e && e() }, d = function() { o || h(p) }, h = function(e) { "undefined" != typeof define && define.amd && require && require([n], function(t) { a = t, void 0 !== a && s(a), e && e() }, function(t) { e && e() }) }, p = function() { !o && i.msgIfNotFound && e.util.error("Cytoscape.js tried to pull in dependency `" + n + "` but no module (i.e. CommonJS, AMD, or window) was found") }; l(u) }, requires: function(t, n) { for (var r = [], i = [], a = function() { for (var e = 0; e < t.length; e++) if (!i[e]) return; n.apply(n, r) }, o = 0; o < t.length; o++) ! function() { var n = t[o], s = o; e.util.require(n, function(e) { r[s] = e, i[s] = !0, a() }) }() }, throttle: function(t, n, r) { var i = !0, a = !0; return r === !1 ? i = !1 : e.is.plainObject(r) && (i = "leading" in r ? r.leading : i, a = "trailing" in r ? r.trailing : a), r = r || {}, r.leading = i, r.maxWait = n, r.trailing = a, e.util.debounce(t, n, r) }, now: function() { return +new Date }, debounce: function(t, n, r) { var i, a, o, s, l, u, c, d = 0, h = !1, p = !0; if (e.is.fn(t)) { if (n = Math.max(0, n) || 0, r === !0) { var f = !0; p = !1 } else e.is.plainObject(r) && (f = r.leading, h = "maxWait" in r && (Math.max(n, r.maxWait) || 0), p = "trailing" in r ? r.trailing : p); var v = function() { var r = n - (e.util.now() - s); if (0 >= r) { a && clearTimeout(a); var h = c; a = u = c = void 0, h && (d = e.util.now(), o = t.apply(l, i), u || a || (i = l = null)) } else u = setTimeout(v, r) }, g = function() { u && clearTimeout(u), a = u = c = void 0, (p || h !== n) && (d = e.util.now(), o = t.apply(l, i), u || a || (i = l = null)) }; return function() { if (i = arguments, s = e.util.now(), l = this, c = p && (u || !f), h === !1) var r = f && !u; else { a || f || (d = s); var y = h - (s - d), m = 0 >= y; m ? (a && (a = clearTimeout(a)), d = s, o = t.apply(l, i)) : a || (a = setTimeout(g, y)) } return m && u ? u = clearTimeout(u) : u || n === h || (u = setTimeout(v, n)), r && (m = !0, o = t.apply(l, i)), !m || u || a || (i = l = null), o } } }, error: function(e) { if (!console) throw e; if (console.error) console.error.apply(console, arguments); else { if (!console.log) throw e; console.log.apply(console, arguments) } }, clone: function(e) { var t = {}; for (var n in e) t[n] = e[n]; return t }, copy: function(t) { return null == t ? t : e.is.array(t) ? t.slice() : e.is.plainObject(t) ? e.util.clone(t) : t }, makeBoundingBox: function(e) { if (null != e.x1 && null != e.y1) { if (null != e.x2 && null != e.y2 && e.x2 >= e.x1 && e.y2 >= e.y1) return { x1: e.x1, y1: e.y1, x2: e.x2, y2: e.y2, w: e.x2 - e.x1, h: e.y2 - e.y1 }; if (null != e.w && null != e.h && e.w >= 0 && e.h >= 0) return { x1: e.x1, y1: e.y1, x2: e.x1 + e.w, y2: e.y1 + e.h, w: e.w, h: e.h } } }, mapEmpty: function(e) { var t = !0; if (null != e) for (var n in e) { t = !1; break } return t }, pushMap: function(t) { var n = e.util.getMap(t); null == n ? e.util.setMap($.extend({}, t, { value: [t.value] })) : n.push(t.value) }, setMap: function(t) { for (var n, r = t.map, i = t.keys, a = i.length, o = 0; a > o; o++) { var n = i[o]; e.is.plainObject(n) && e.util.error("Tried to set map with object key"), o < i.length - 1 ? (null == r[n] && (r[n] = {}), r = r[n]) : r[n] = t.value } }, getMap: function(t) { for (var n = t.map, r = t.keys, i = r.length, a = 0; i > a; a++) { var o = r[a]; if (e.is.plainObject(o) && e.util.error("Tried to get map with object key"), n = n[o], null == n) return n } return n }, deleteMap: function(t) { for (var n = t.map, r = t.keys, i = r.length, a = t.keepChildren, o = 0; i > o; o++) { var s = r[o]; e.is.plainObject(s) && e.util.error("Tried to delete map with object key"); var l = o === t.keys.length - 1; if (l) if (a) for (var u in n) a[u] || (n[u] = void 0); else n[s] = void 0; else n = n[s] } }, capitalize: function(t) { return e.is.emptyString(t) ? t : t.charAt(0).toUpperCase() + t.substring(1) }, trim: function(e) { var t, n; for (t = 0; t < e.length && " " === e[t]; t++); for (n = e.length - 1; n > t && " " === e[n]; n--); return e.substring(t, n + 1) }, hex2tuple: function(e) { if ((4 === e.length || 7 === e.length) && "#" === e[0]) { var t, n, r, i = 4 === e.length, a = 16; return i ? (t = parseInt(e[1] + e[1], a), n = parseInt(e[2] + e[2], a), r = parseInt(e[3] + e[3], a)) : (t = parseInt(e[1] + e[2], a), n = parseInt(e[3] + e[4], a), r = parseInt(e[5] + e[6], a)), [t, n, r] } }, hsl2tuple: function(t) { function n(e, t, n) { return 0 > n && (n += 1), n > 1 && (n -= 1), 1 / 6 > n ? e + 6 * (t - e) * n : .5 > n ? t : 2 / 3 > n ? e + (t - e) * (2 / 3 - n) * 6 : e } var r, i, a, o, s, l, u, c, d = new RegExp("^" + e.util.regex.hsla + "$").exec(t); if (d) { if (i = parseInt(d[1]), 0 > i ? i = (360 - -1 * i % 360) % 360 : i > 360 && (i %= 360), i /= 360, a = parseFloat(d[2]), 0 > a || a > 100) return; if (a /= 100, o = parseFloat(d[3]), 0 > o || o > 100) return; if (o /= 100, s = d[4], void 0 !== s && (s = parseFloat(s), 0 > s || s > 1)) return; if (0 === a) l = u = c = Math.round(255 * o); else { var h = .5 > o ? o * (1 + a) : o + a - o * a, p = 2 * o - h; l = Math.round(255 * n(p, h, i + 1 / 3)), u = Math.round(255 * n(p, h, i)), c = Math.round(255 * n(p, h, i - 1 / 3)) } r = [l, u, c, s] } return r }, rgb2tuple: function(t) { var n, r = new RegExp("^" + e.util.regex.rgba + "$").exec(t); if (r) { n = []; for (var i = [], a = 1; 3 >= a; a++) { var o = r[a]; if ("%" === o[o.length - 1] && (i[a] = !0), o = parseFloat(o), i[a] && (o = o / 100 * 255), 0 > o || o > 255) return; n.push(Math.floor(o)) } var s = i[1] || i[2] || i[3], l = i[1] && i[2] && i[3]; if (s && !l) return; var u = r[4]; if (void 0 !== u) { if (u = parseFloat(u), 0 > u || u > 1) return; n.push(u) } } return n }, colorname2tuple: function(t) { return e.util.colors[t.toLowerCase()] }, color2tuple: function(t) { return (e.is.array(t) ? t : null) || e.util.colorname2tuple(t) || e.util.hex2tuple(t) || e.util.rgb2tuple(t) || e.util.hsl2tuple(t) }, tuple2hex: function(e) { function t(e) { var t = e.toString(16); return 1 === t.length && (t = "0" + t), t } var n = e[0], r = e[1], i = e[2]; return "#" + t(n) + t(r) + t(i) }, colors: { transparent: [0, 0, 0, 0], aliceblue: [240, 248, 255], antiquewhite: [250, 235, 215], aqua: [0, 255, 255], aquamarine: [127, 255, 212], azure: [240, 255, 255], beige: [245, 245, 220], bisque: [255, 228, 196], black: [0, 0, 0], blanchedalmond: [255, 235, 205], blue: [0, 0, 255], blueviolet: [138, 43, 226], brown: [165, 42, 42], burlywood: [222, 184, 135], cadetblue: [95, 158, 160], chartreuse: [127, 255, 0], chocolate: [210, 105, 30], coral: [255, 127, 80], cornflowerblue: [100, 149, 237], cornsilk: [255, 248, 220], crimson: [220, 20, 60], cyan: [0, 255, 255], darkblue: [0, 0, 139], darkcyan: [0, 139, 139], darkgoldenrod: [184, 134, 11], darkgray: [169, 169, 169], darkgreen: [0, 100, 0], darkgrey: [169, 169, 169], darkkhaki: [189, 183, 107], darkmagenta: [139, 0, 139], darkolivegreen: [85, 107, 47], darkorange: [255, 140, 0], darkorchid: [153, 50, 204], darkred: [139, 0, 0], darksalmon: [233, 150, 122], darkseagreen: [143, 188, 143], darkslateblue: [72, 61, 139], darkslategray: [47, 79, 79], darkslategrey: [47, 79, 79], darkturquoise: [0, 206, 209], darkviolet: [148, 0, 211], deeppink: [255, 20, 147], deepskyblue: [0, 191, 255], dimgray: [105, 105, 105], dimgrey: [105, 105, 105], dodgerblue: [30, 144, 255], firebrick: [178, 34, 34], floralwhite: [255, 250, 240], forestgreen: [34, 139, 34], fuchsia: [255, 0, 255], gainsboro: [220, 220, 220], ghostwhite: [248, 248, 255], gold: [255, 215, 0], goldenrod: [218, 165, 32], gray: [128, 128, 128], grey: [128, 128, 128], green: [0, 128, 0], greenyellow: [173, 255, 47], honeydew: [240, 255, 240], hotpink: [255, 105, 180], indianred: [205, 92, 92], indigo: [75, 0, 130], ivory: [255, 255, 240], khaki: [240, 230, 140], lavender: [230, 230, 250], lavenderblush: [255, 240, 245], lawngreen: [124, 252, 0], lemonchiffon: [255, 250, 205], lightblue: [173, 216, 230], lightcoral: [240, 128, 128], lightcyan: [224, 255, 255], lightgoldenrodyellow: [250, 250, 210], lightgray: [211, 211, 211], lightgreen: [144, 238, 144], lightgrey: [211, 211, 211], lightpink: [255, 182, 193], lightsalmon: [255, 160, 122], lightseagreen: [32, 178, 170], lightskyblue: [135, 206, 250], lightslategray: [119, 136, 153], lightslategrey: [119, 136, 153], lightsteelblue: [176, 196, 222], lightyellow: [255, 255, 224], lime: [0, 255, 0], limegreen: [50, 205, 50], linen: [250, 240, 230], magenta: [255, 0, 255], maroon: [128, 0, 0], mediumaquamarine: [102, 205, 170], mediumblue: [0, 0, 205], mediumorchid: [186, 85, 211], mediumpurple: [147, 112, 219], mediumseagreen: [60, 179, 113], mediumslateblue: [123, 104, 238], mediumspringgreen: [0, 250, 154], mediumturquoise: [72, 209, 204], mediumvioletred: [199, 21, 133], midnightblue: [25, 25, 112], mintcream: [245, 255, 250], mistyrose: [255, 228, 225], moccasin: [255, 228, 181], navajowhite: [255, 222, 173], navy: [0, 0, 128], oldlace: [253, 245, 230], olive: [128, 128, 0], olivedrab: [107, 142, 35], orange: [255, 165, 0], orangered: [255, 69, 0], orchid: [218, 112, 214], palegoldenrod: [238, 232, 170], palegreen: [152, 251, 152], paleturquoise: [175, 238, 238], palevioletred: [219, 112, 147], papayawhip: [255, 239, 213], peachpuff: [255, 218, 185], peru: [205, 133, 63], pink: [255, 192, 203], plum: [221, 160, 221], powderblue: [176, 224, 230], purple: [128, 0, 128], red: [255, 0, 0], rosybrown: [188, 143, 143], royalblue: [65, 105, 225], saddlebrown: [139, 69, 19], salmon: [250, 128, 114], sandybrown: [244, 164, 96], seagreen: [46, 139, 87], seashell: [255, 245, 238], sienna: [160, 82, 45], silver: [192, 192, 192], skyblue: [135, 206, 235], slateblue: [106, 90, 205], slategray: [112, 128, 144], slategrey: [112, 128, 144], snow: [255, 250, 250], springgreen: [0, 255, 127], steelblue: [70, 130, 180], tan: [210, 180, 140], teal: [0, 128, 128], thistle: [216, 191, 216], tomato: [255, 99, 71], turquoise: [64, 224, 208], violet: [238, 130, 238], wheat: [245, 222, 179], white: [255, 255, 255], whitesmoke: [245, 245, 245], yellow: [255, 255, 0], yellowgreen: [154, 205, 50] }, memoize: function(e, t) { var n = this, r = {}; return t || (t = function() { if (1 === arguments.length) return arguments[0]; for (var e = [], t = 0; t < arguments.length; t++) e.push(arguments[t]); return e.join("$") }), function() { var i, a = arguments, o = t.apply(n, a); return (i = r[o]) || (i = r[o] = e.apply(n, a)), i } } }, e.util.camel2dash = e.util.memoize(function(e) { for (var t = [], n = 0; n < e.length; n++) { var r = e[n], i = r.toLowerCase(), a = r !== i; a ? (t.push("-"), t.push(i)) : t.push(r) } var o = t.length === e.length; return o ? e : t.join("") }), e.util.dash2camel = e.util.memoize(function(e) { for (var t = [], n = !1, r = 0; r < e.length; r++) { var i = e[r], a = "-" === i; a ? n = !0 : (n ? t.push(i.toUpperCase()) : t.push(i), n = !1) } return t.join("") }), e.util.regex = {}, e.util.regex.number = "(?:[-]?\\d*\\.\\d+|[-]?\\d+|[-]?\\d*\\.\\d+[eE]\\d+)", e.util.regex.rgba = "rgb[a]?\\((" + e.util.regex.number + "[%]?)\\s*,\\s*(" + e.util.regex.number + "[%]?)\\s*,\\s*(" + e.util.regex.number + "[%]?)(?:\\s*,\\s*(" + e.util.regex.number + "))?\\)", e.util.regex.rgbaNoBackRefs = "rgb[a]?\\((?:" + e.util.regex.number + "[%]?)\\s*,\\s*(?:" + e.util.regex.number + "[%]?)\\s*,\\s*(?:" + e.util.regex.number + "[%]?)(?:\\s*,\\s*(?:" + e.util.regex.number + "))?\\)", e.util.regex.hsla = "hsl[a]?\\((" + e.util.regex.number + ")\\s*,\\s*(" + e.util.regex.number + "[%])\\s*,\\s*(" + e.util.regex.number + "[%])(?:\\s*,\\s*(" + e.util.regex.number + "))?\\)", e.util.regex.hslaNoBackRefs = "hsl[a]?\\((?:" + e.util.regex.number + ")\\s*,\\s*(?:" + e.util.regex.number + "[%])\\s*,\\s*(?:" + e.util.regex.number + "[%])(?:\\s*,\\s*(?:" + e.util.regex.number + "))?\\)", e.util.regex.hex3 = "\\#[0-9a-fA-F]{3}", e.util.regex.hex6 = "\\#[0-9a-fA-F]{6}"; var n = t ? t.requestAnimationFrame || t.mozRequestAnimationFrame || t.webkitRequestAnimationFrame || t.msRequestAnimationFrame : null; n = n || function(e) { e && setTimeout(e, 1e3 / 60) }, e.util.requestAnimationFrame = function(e) { n(e) } }(cytoscape, "undefined" == typeof window ? null : window), function(e) { "use strict"; e.math = {}, e.math.signum = function(e) { return e > 0 ? 1 : 0 > e ? -1 : 0 }, e.math.distance = function(e, t) { var n = t.x - e.x, r = t.y - e.y; return Math.sqrt(n * n + r * r) }, e.math.qbezierAt = function(e, t, n, r) { return (1 - r) * (1 - r) * e + 2 * (1 - r) * r * t + r * r * n }, e.math.qbezierPtAt = function(t, n, r, i) { return { x: e.math.qbezierAt(t.x, n.x, r.x, i), y: e.math.qbezierAt(t.y, n.y, r.y, i) } }, e.math.boundingBoxesIntersect = function(e, t) { return e.x1 > t.x2 ? !1 : t.x1 > e.x2 ? !1 : e.x2 < t.x1 ? !1 : t.x2 < e.x1 ? !1 : e.y2 < t.y1 ? !1 : t.y2 < e.y1 ? !1 : e.y1 > t.y2 ? !1 : t.y1 > e.y2 ? !1 : !0 }, e.math.inBoundingBox = function(e, t, n) { return e.x1 <= t && t <= e.x2 && e.y1 <= n && n <= e.y2 }, e.math.pointInBoundingBox = function(e, t) { return this.inBoundingBox(e, t.x, t.y) }, e.math.roundRectangleIntersectLine = function(e, t, n, r, i, a, o) { var s, l = this.getRoundRectangleRadius(i, a), u = i / 2, c = a / 2, d = n - u + l - o, h = r - c - o, p = n + u - l + o, f = h; if (s = this.finiteLinesIntersect(e, t, n, r, d, h, p, f, !1), s.length > 0) return s; var v = n + u + o, g = r - c + l - o, y = v, m = r + c - l + o; if (s = this.finiteLinesIntersect(e, t, n, r, v, g, y, m, !1), s.length > 0) return s; var x = n - u + l - o, b = r + c + o, w = n + u - l + o, _ = b; if (s = this.finiteLinesIntersect(e, t, n, r, x, b, w, _, !1), s.length > 0) return s; var E = n - u - o, T = r - c + l - o, S = E, C = r + c - l + o; if (s = this.finiteLinesIntersect(e, t, n, r, E, T, S, C, !1), s.length > 0) return s; var k, D = n - u + l, N = r - c + l; if (k = this.intersectLineCircle(e, t, n, r, D, N, l + o), k.length > 0 && k[0] <= D && k[1] <= N) return [k[0], k[1]]; var P = n + u - l, M = r - c + l; if (k = this.intersectLineCircle(e, t, n, r, P, M, l + o), k.length > 0 && k[0] >= P && k[1] <= M) return [k[0], k[1]]; var B = n + u - l, L = r + c - l; if (k = this.intersectLineCircle(e, t, n, r, B, L, l + o), k.length > 0 && k[0] >= B && k[1] >= L) return [k[0], k[1]]; var O = n - u + l, A = r + c - l; return k = this.intersectLineCircle(e, t, n, r, O, A, l + o), k.length > 0 && k[0] <= O && k[1] >= A ? [k[0], k[1]] : [] }, e.math.roundRectangleIntersectBox = function(e, t, n, r, i, a, o, s, l) { var u = this.getRoundRectangleRadius(i, a), c = o - i / 2 - l, d = s - a / 2 + u - l, h = o + i / 2 + l, p = s + a / 2 - u + l, f = o - i / 2 + u - l, v = s - a / 2 - l, g = o + i / 2 - u + l, y = s + a / 2 + l, m = Math.min(e, n), x = Math.max(e, n), b = Math.min(t, r), w = Math.max(t, r); return c > x ? !1 : m > h ? !1 : v > w ? !1 : b > y ? !1 : c >= m && x >= c && d >= b && w >= d ? !0 : h >= m && x >= h && d >= b && w >= d ? !0 : h >= m && x >= h && p >= b && w >= p ? !0 : c >= m && x >= c && p >= b && w >= p ? !0 : m >= c && h >= m && b >= d && p >= b ? !0 : x >= c && h >= x && b >= d && p >= b ? !0 : x >= c && h >= x && w >= d && p >= w ? !0 : m >= c && h >= m && w >= d && p >= w ? !0 : f >= m && x >= f && v >= b && w >= v ? !0 : g >= m && x >= g && v >= b && w >= v ? !0 : g >= m && x >= g && y >= b && w >= y ? !0 : f >= m && x >= f && y >= b && w >= y ? !0 : m >= f && g >= m && b >= v && y >= b ? !0 : x >= f && g >= x && b >= v && y >= b ? !0 : x >= f && g >= x && w >= v && y >= w ? !0 : m >= f && g >= m && w >= v && y >= w ? !0 : this.boxIntersectEllipse(m, b, x, w, l, 2 * u, 2 * u, f + l, d + l) ? !0 : this.boxIntersectEllipse(m, b, x, w, l, 2 * u, 2 * u, g - l, d + l) ? !0 : this.boxIntersectEllipse(m, b, x, w, l, 2 * u, 2 * u, g - l, p - l) ? !0 : this.boxIntersectEllipse(m, b, x, w, l, 2 * u, 2 * u, f + l, p - l) ? !0 : !1 }, e.math.checkInBoundingCircle = function(e, t, n, r, i, a, o, s) { return e = (e - o) / (i + r), t = (t - s) / (a + r), n >= e * e + t * t }, e.math.boxInBezierVicinity = function(e, t, n, r, i, a, o, s, l, u, c) { var d = .25 * i + .5 * o + .25 * l, h = .25 * a + .5 * s + .25 * u, p = Math.min(e, n) - c, f = Math.min(t, r) - c, v = Math.max(e, n) + c, g = Math.max(t, r) + c; if (i >= p && v >= i && a >= f && g >= a) return 1; if (l >= p && v >= l && u >= f && g >= u) return 1; if (d >= p && v >= d && h >= f && g >= h) return 1; if (o >= p && v >= o && s >= f && g >= s) return 1; var y = Math.min(i, d, l), m = Math.min(a, h, u), x = Math.max(i, d, l), b = Math.max(a, h, u); return y > v || p > x || m > g || f > b ? 0 : 1 }, e.math.checkBezierInBox = function(t, n, r, i, a, o, s, l, u, c, d) { function h(d) { var h = e.math.qbezierAt(a, s, u, d), p = e.math.qbezierAt(o, l, c, d); return h >= t && r >= h && p >= n && i >= p } for (var p = 0; 1 >= p; p += .25) if (!h(p)) return !1; return !0 }, e.math.checkStraightEdgeInBox = function(e, t, n, r, i, a, o, s, l) { return i >= e && n >= i && o >= e && n >= o && a >= t && r >= a && s >= t && r >= s }, e.math.checkStraightEdgeCrossesBox = function(e, t, n, r, i, a, o, s, l) { var u, c, d = Math.min(e, n) - l, h = Math.min(t, r) - l, p = Math.max(e, n) + l, f = Math.max(t, r) + l, v = o - i, g = i, y = s - a, m = a; if (Math.abs(v) < 1e-4) return i >= d && p >= i && Math.min(a, s) <= h && Math.max(a, s) >= f; var x = (d - g) / v; if (x > 0 && 1 >= x && (u = y * x + m, u >= h && f >= u)) return !0; var b = (p - g) / v; if (b > 0 && 1 >= b && (u = y * b + m, u >= h && f >= u)) return !0; var w = (h - m) / y; if (w > 0 && 1 >= w && (c = v * w + g, c >= d && p >= c)) return !0; var _ = (f - m) / y; return _ > 0 && 1 >= _ && (c = v * _ + g, c >= d && p >= c) ? !0 : !1 }, e.math.checkBezierCrossesBox = function(e, t, n, r, i, a, o, s, l, u, c) { var d = Math.min(e, n) - c, h = Math.min(t, r) - c, p = Math.max(e, n) + c, f = Math.max(t, r) + c; if (i >= d && p >= i && a >= h && f >= a) return !0; if (l >= d && p >= l && u >= h && f >= u) return !0; var v = i - 2 * o + l, g = -2 * i + 2 * o, y = i, m = []; if (Math.abs(v) < 1e-4) { var x = (d - i) / g, b = (p - i) / g; m.push(x, b) } else { var w, _, E = g * g - 4 * v * (y - d); if (E > 0) { var T = Math.sqrt(E); w = (-g + T) / (2 * v), _ = (-g - T) / (2 * v), m.push(w, _) } var S, C, k = g * g - 4 * v * (y - p); if (k > 0) { var T = Math.sqrt(k); S = (-g + T) / (2 * v), C = (-g - T) / (2 * v), m.push(S, C) } } m.sort(function(e, t) { return e - t }); var D = a - 2 * s + u, N = -2 * a + 2 * s, P = a, M = []; if (Math.abs(D) < 1e-4) { var B = (h - a) / N, L = (f - a) / N; M.push(B, L) } else { var O, A, I = N * N - 4 * D * (P - h); if (I > 0) { var T = Math.sqrt(I); O = (-N + T) / (2 * D), A = (-N - T) / (2 * D), M.push(O, A) } var z, R, j = N * N - 4 * D * (P - f); if (j > 0) { var T = Math.sqrt(j); z = (-N + T) / (2 * D), R = (-N - T) / (2 * D), M.push(z, R) } } M.sort(function(e, t) { return e - t }); for (var F = 0; F < m.length; F += 2) for (var q = 1; q < M.length; q += 2) if (m[F] < M[q] && M[q] >= 0 && m[F] <= 1 && m[F + 1] > M[q - 1] && M[q - 1] <= 1 && m[F + 1] >= 0) return !0; return !1 }, e.math.inLineVicinity = function(e, t, n, r, i, a, o) { var s = o, l = Math.min(n, i), u = Math.max(n, i), c = Math.min(r, a), d = Math.max(r, a); return e >= l - s && u + s >= e && t >= c - s && d + s >= t }, e.math.inBezierVicinity = function(e, t, n, r, i, a, o, s, l) { var u = { x1: Math.min(n, o, i), x2: Math.max(n, o, i), y1: Math.min(r, s, a), y2: Math.max(r, s, a) }; return e < u.x1 || e > u.x2 || t < u.y1 || t > u.y2 ? !1 : !0 }, e.math.solveCubic = function(e, t, n, r, i) { t /= e, n /= e, r /= e; var a, o, s, l, u, c, d, h; return o = (3 * n - t * t) / 9, s = -(27 * r) + t * (9 * n - 2 * (t * t)), s /= 54, a = o * o * o + s * s, i[1] = 0, d = t / 3, a > 0 ? (u = s + Math.sqrt(a), u = 0 > u ? -Math.pow(-u, 1 / 3) : Math.pow(u, 1 / 3), c = s - Math.sqrt(a), c = 0 > c ? -Math.pow(-c, 1 / 3) : Math.pow(c, 1 / 3), i[0] = -d + u + c, d += (u + c) / 2, i[4] = i[2] = -d, d = Math.sqrt(3) * (-c + u) / 2, i[3] = d, void(i[5] = -d)) : (i[5] = i[3] = 0, 0 === a ? (h = 0 > s ? -Math.pow(-s, 1 / 3) : Math.pow(s, 1 / 3), i[0] = -d + 2 * h, void(i[4] = i[2] = -(h + d))) : (o = -o, l = o * o * o, l = Math.acos(s / Math.sqrt(l)), h = 2 * Math.sqrt(o), i[0] = -d + h * Math.cos(l / 3), i[2] = -d + h * Math.cos((l + 2 * Math.PI) / 3), void(i[4] = -d + h * Math.cos((l + 4 * Math.PI) / 3)))) }, e.math.sqDistanceToQuadraticBezier = function(e, t, n, r, i, a, o, s) { var l = 1 * n * n - 4 * n * i + 2 * n * o + 4 * i * i - 4 * i * o + o * o + r * r - 4 * r * a + 2 * r * s + 4 * a * a - 4 * a * s + s * s, u = 9 * n * i - 3 * n * n - 3 * n * o - 6 * i * i + 3 * i * o + 9 * r * a - 3 * r * r - 3 * r * s - 6 * a * a + 3 * a * s, c = 3 * n * n - 6 * n * i + n * o - n * e + 2 * i * i + 2 * i * e - o * e + 3 * r * r - 6 * r * a + r * s - r * t + 2 * a * a + 2 * a * t - s * t, d = 1 * n * i - n * n + n * e - i * e + r * a - r * r + r * t - a * t, h = []; this.solveCubic(l, u, c, d, h); for (var p = 1e-7, f = [], v = 0; 6 > v; v += 2) Math.abs(h[v + 1]) < p && h[v] >= 0 && h[v] <= 1 && f.push(h[v]); f.push(1), f.push(0); for (var g, y, m, x, b = -1, w = 0; w < f.length; w++) y = Math.pow(1 - f[w], 2) * n + 2 * (1 - f[w]) * f[w] * i + f[w] * f[w] * o, m = Math.pow(1 - f[w], 2) * r + 2 * (1 - f[w]) * f[w] * a + f[w] * f[w] * s, x = Math.pow(y - e, 2) + Math.pow(m - t, 2), b >= 0 ? b > x && (b = x, g = f[w]) : (b = x, g = f[w]); return b }, e.math.sqDistanceToFiniteLine = function(e, t, n, r, i, a) { var o = [e - n, t - r], s = [i - n, a - r], l = s[0] * s[0] + s[1] * s[1], u = o[0] * o[0] + o[1] * o[1], c = o[0] * s[0] + o[1] * s[1], d = c * c / l; return 0 > c ? u : d > l ? (e - i) * (e - i) + (t - a) * (t - a) : u - d }, e.math.pointInsidePolygon = function(e, t, n, r, i, a, o, s, l) { var u = new Array(n.length), c = Math.asin(s[1] / Math.sqrt(s[0] * s[0] + s[1] * s[1])); s[0] < 0 ? c += Math.PI / 2 : c = -c - Math.PI / 2; for (var d = Math.cos(-c), h = Math.sin(-c), p = 0; p < u.length / 2; p++) u[2 * p] = a / 2 * (n[2 * p] * d - n[2 * p + 1] * h), u[2 * p + 1] = o / 2 * (n[2 * p + 1] * d + n[2 * p] * h), u[2 * p] += r, u[2 * p + 1] += i; var f; if (l > 0) { var v = this.expandPolygon(u, -l); f = this.joinLines(v) } else f = u; for (var g, y, m, x, b, w = 0, _ = 0, p = 0; p < f.length / 2; p++) if (g = f[2 * p], y = f[2 * p + 1], p + 1 < f.length / 2 ? (m = f[2 * (p + 1)], x = f[2 * (p + 1) + 1]) : (m = f[2 * (p + 1 - f.length / 2)], x = f[2 * (p + 1 - f.length / 2) + 1]), g == e && m == e); else { if (!(g >= e && e >= m || e >= g && m >= e)) continue; b = (e - g) / (m - g) * (x - y) + y, b > t && w++, t > b && _++ } return w % 2 === 0 ? !1 : !0 }, e.math.joinLines = function(e) { for (var t, n, r, i, a, o, s, l, u = new Array(e.length / 2), c = 0; c < e.length / 4; c++) { t = e[4 * c], n = e[4 * c + 1], r = e[4 * c + 2], i = e[4 * c + 3], c < e.length / 4 - 1 ? (a = e[4 * (c + 1)], o = e[4 * (c + 1) + 1], s = e[4 * (c + 1) + 2], l = e[4 * (c + 1) + 3]) : (a = e[0], o = e[1], s = e[2], l = e[3]); var d = this.finiteLinesIntersect(t, n, r, i, a, o, s, l, !0); u[2 * c] = d[0], u[2 * c + 1] = d[1] } return u }, e.math.expandPolygon = function(e, t) { for (var n, r, i, a, o = new Array(2 * e.length), s = 0; s < e.length / 2; s++) { n = e[2 * s], r = e[2 * s + 1], s < e.length / 2 - 1 ? (i = e[2 * (s + 1)], a = e[2 * (s + 1) + 1]) : (i = e[0], a = e[1]); var l = a - r, u = -(i - n), c = Math.sqrt(l * l + u * u), d = l / c, h = u / c; o[4 * s] = n + d * t, o[4 * s + 1] = r + h * t, o[4 * s + 2] = i + d * t, o[4 * s + 3] = a + h * t } return o }, e.math.intersectLineEllipse = function(e, t, n, r, i, a) { var o = n - e, s = r - t; o /= i, s /= a; var l = Math.sqrt(o * o + s * s), u = l - 1; if (0 > u) return []; var c = u / l; return [(n - e) * c + e, (r - t) * c + t] }, e.math.dotProduct = function(e, t) { if (2 != e.length || 2 != t.length) throw "dot product: arguments are not vectors"; return e[0] * t[0] + e[1] * t[1] }, e.math.intersectLineCircle = function(e, t, n, r, i, a, o) { var s = [n - e, r - t], l = [i, a], u = [e - i, t - a], c = s[0] * s[0] + s[1] * s[1], d = 2 * (u[0] * s[0] + u[1] * s[1]), l = u[0] * u[0] + u[1] * u[1] - o * o, h = d * d - 4 * c * l; if (0 > h) return []; var p = (-d + Math.sqrt(h)) / (2 * c), f = (-d - Math.sqrt(h)) / (2 * c), v = Math.min(p, f), g = Math.max(p, f), y = []; if (v >= 0 && 1 >= v && y.push(v), g >= 0 && 1 >= g && y.push(g), 0 === y.length) return []; var m = y[0] * s[0] + e, x = y[0] * s[1] + t; if (y.length > 1) { if (y[0] == y[1]) return [m, x]; var b = y[1] * s[0] + e, w = y[1] * s[1] + t; return [m, x, b, w] } return [m, x] }, e.math.findCircleNearPoint = function(e, t, n, r, i) { var a = r - e, o = i - t, s = Math.sqrt(a * a + o * o), l = a / s, u = o / s; return [e + l * n, t + u * n] }, e.math.findMaxSqDistanceToOrigin = function(e) { for (var t, n = 1e-6, r = 0; r < e.length / 2; r++) t = e[2 * r] * e[2 * r] + e[2 * r + 1] * e[2 * r + 1], t > n && (n = t); return n }, e.math.finiteLinesIntersect = function(e, t, n, r, i, a, o, s, l) { var u = (o - i) * (t - a) - (s - a) * (e - i), c = (n - e) * (t - a) - (r - t) * (e - i), d = (s - a) * (n - e) - (o - i) * (r - t); if (0 !== d) { var h = u / d, p = c / d; return h >= 0 && 1 >= h && p >= 0 && 1 >= p ? [e + h * (n - e), t + h * (r - t)] : l ? [e + h * (n - e), t + h * (r - t)] : [] } return 0 === u || 0 === c ? [e, n, o].sort()[1] === o ? [o, s] : [e, n, i].sort()[1] === i ? [i, a] : [i, o, n].sort()[1] === n ? [n, r] : [] : [] }, e.math.boxIntersectEllipse = function(e, t, n, r, i, a, o, s, l) { if (e > n) { var u = e; e = n, n = u } if (t > r) { var c = t; t = r, r = c } var d = [s - a / 2 - i, l], h = [s + a / 2 + i, l], p = [s, l - o / 2 - i], f = [s, l + o / 2 + i]; return n < d[0] ? !1 : e > h[0] ? !1 : t > f[1] ? !1 : r < p[1] ? !1 : e <= h[0] && h[0] <= n && t <= h[1] && h[1] <= r ? !0 : e <= d[0] && d[0] <= n && t <= d[1] && d[1] <= r ? !0 : e <= p[0] && p[0] <= n && t <= p[1] && p[1] <= r ? !0 : e <= f[0] && f[0] <= n && t <= f[1] && f[1] <= r ? !0 : (e = (e - s) / (a / 2 + i), n = (n - s) / (a / 2 + i), t = (t - l) / (o / 2 + i), r = (r - l) / (o / 2 + i), 1 >= e * e + t * t ? !0 : 1 >= n * n + t * t ? !0 : 1 >= n * n + r * r ? !0 : 1 >= e * e + r * r ? !0 : !1) }, e.math.boxIntersectPolygon = function(t, n, r, i, a, o, s, l, u, c, d) { if (t > r) { var h = t; t = r, r = h } if (n > i) { var p = n; n = i, i = p } var f = new Array(a.length), v = Math.asin(c[1] / Math.sqrt(c[0] * c[0] + c[1] * c[1])); c[0] < 0 ? v += Math.PI / 2 : v = -v - Math.PI / 2; for (var g = Math.cos(-v), y = Math.sin(-v), m = 0; m < f.length / 2; m++) f[2 * m] = o / 2 * (a[2 * m] * g - a[2 * m + 1] * y), f[2 * m + 1] = s / 2 * (a[2 * m + 1] * g + a[2 * m] * y), f[2 * m] += l, f[2 * m + 1] += u; for (var x = f[0], b = f[0], w = f[1], _ = f[1], m = 1; m < f.length / 2; m++) f[2 * m] > b && (b = f[2 * m]), f[2 * m] < x && (x = f[2 * m]), f[2 * m + 1] > _ && (_ = f[2 * m + 1]), f[2 * m + 1] < w && (w = f[2 * m + 1]); if (x - d > r) return !1; if (t > b + d) return !1; if (w - d > i) return !1; if (n > _ + d) return !1; var E; if (d > 0) { var T = e.math.expandPolygon(f, -d); E = e.math.joinLines(T) } else E = f; for (var m = 0; m < f.length / 2; m++) if (t <= f[2 * m] && f[2 * m] <= r && n <= f[2 * m + 1] && f[2 * m + 1] <= i) return !0; for (var m = 0; m < E.length / 2; m++) { var S, C, k = E[2 * m], D = E[2 * m + 1]; if (m < E.length / 2 - 1 ? (S = E[2 * (m + 1)], C = E[2 * (m + 1) + 1]) : (S = E[0], C = E[1]), e.math.finiteLinesIntersect(k, D, S, C, t, n, r, n, !1).length > 0) return !0; if (e.math.finiteLinesIntersect(k, D, S, C, t, i, r, i, !1).length > 0) return !0; if (e.math.finiteLinesIntersect(k, D, S, C, t, n, t, i, !1).length > 0) return !0; if (e.math.finiteLinesIntersect(k, D, S, C, r, n, r, i, !1).length > 0) return !0 } return !1 }, e.math.polygonIntersectLine = function(t, n, r, i, a, o, s, l) { for (var u, c = [], d = new Array(r.length), h = 0; h < d.length / 2; h++) d[2 * h] = r[2 * h] * o + i, d[2 * h + 1] = r[2 * h + 1] * s + a; var p; if (l > 0) { var f = e.math.expandPolygon(d, -l); p = e.math.joinLines(f) } else p = d; for (var v, g, y, m, h = 0; h < p.length / 2; h++) v = p[2 * h], g = p[2 * h + 1], h < p.length / 2 - 1 ? (y = p[2 * (h + 1)], m = p[2 * (h + 1) + 1]) : (y = p[0], m = p[1]), u = this.finiteLinesIntersect(t, n, i, a, v, g, y, m), 0 !== u.length && c.push(u[0], u[1]); return c }, e.math.shortenIntersection = function(e, t, n) { var r = [e[0] - t[0], e[1] - t[1]], i = Math.sqrt(r[0] * r[0] + r[1] * r[1]), a = (i - n) / i; return 0 > a && (a = 1e-5), [t[0] + a * r[0], t[1] + a * r[1]] }, e.math.generateUnitNgonPointsFitToSquare = function(t, n) { var r = e.math.generateUnitNgonPoints(t, n); return r = e.math.fitPolygonToSquare(r) }, e.math.fitPolygonToSquare = function(e) { for (var t, n, r = e.length / 2, i = 1 / 0, a = 1 / 0, o = -(1 / 0), s = -(1 / 0), l = 0; r > l; l++) t = e[2 * l], n = e[2 * l + 1], i = Math.min(i, t), o = Math.max(o, t), a = Math.min(a, n), s = Math.max(s, n); for (var u = 2 / (o - i), c = 2 / (s - a), l = 0; r > l; l++) t = e[2 * l] = e[2 * l] * u, n = e[2 * l + 1] = e[2 * l + 1] * c, i = Math.min(i, t), o = Math.max(o, t), a = Math.min(a, n), s = Math.max(s, n); if (-1 > a) for (var l = 0; r > l; l++) n = e[2 * l + 1] = e[2 * l + 1] + (-1 - a); return e }, e.math.generateUnitNgonPoints = function(e, t) { var n = 1 / e * 2 * Math.PI, r = e % 2 === 0 ? Math.PI / 2 + n / 2 : Math.PI / 2; r += t; for (var i, a, o, s = new Array(2 * e), l = 0; e > l; l++) i = l * n + r, a = s[2 * l] = Math.cos(i), o = s[2 * l + 1] = Math.sin(-i); return s }, e.math.getRoundRectangleRadius = function(e, t) { return Math.min(e / 4, t / 4, 8) } }(cytoscape), function(e) { "use strict"; function t(t, n, r) { var i = {}; switch (i[n] = r, t) { case "core": case "collection": e.fn[t](i) } if ("layout" === t) { for (var o = r.prototype, s = [], l = 0; l < s.length; l++) { var u = s[l]; o[u] = o[u] || function() { return this } } o.start && !o.run ? o.run = function() { return this.start(), this } : !o.start && o.run && (o.start = function() { return this.run(), this }), o.stop || (o.stop = function() { var e = this.options; return e && e.animate && e.eles.stop(), this }), o.on = e.define.on({ layout: !0 }), o.one = e.define.on({ layout: !0, unbindSelfOnTrigger: !0 }), o.once = e.define.on({ layout: !0, unbindAllBindersOnTrigger: !0 }), o.off = e.define.off({ layout: !0 }), o.trigger = e.define.trigger({ layout: !0 }), e.define.eventAliasesOn(o) } return e.util.setMap({ map: a, keys: [t, n], value: r }) } function n(t, n) { return e.util.getMap({ map: a, keys: [t, n] }) } function r(t, n, r, i, a) { return e.util.setMap({ map: o, keys: [t, n, r, i], value: a }) } function i(t, n, r, i) { return e.util.getMap({ map: o, keys: [t, n, r, i] }) } var a = {}; e.extensions = a; var o = {}; e.modules = o, e.extension = function() { return 2 == arguments.length ? n.apply(this, arguments) : 3 == arguments.length ? t.apply(this, arguments) : 4 == arguments.length ? i.apply(this, arguments) : 5 == arguments.length ? r.apply(this, arguments) : void e.util.error("Invalid extension access syntax") } }(cytoscape), function(e, t) { "use strict"; var n = function(e) { var t = e[0]._cyreg = e[0]._cyreg || {}; return t }; t.registerJquery = function(e) { e && (e.fn.cytoscape || (e.fn.cytoscape = function(r) { var i = e(this); if ("get" === r) return n(i).cy; if (t.is.fn(r)) { var a = r, o = n(i).cy; if (o && o.isReady()) o.trigger("ready", [], a); else { var s = n(i), l = s.readies = s.readies || []; l.push(a) } } else if (t.is.plainObject(r)) return i.each(function() { var t = e.extend({}, r, { container: e(this)[0] }); window.cy = cytoscape(t) }) }, e.cytoscape = cytoscape, null == e.fn.cy && null == e.cy && (e.fn.cy = e.fn.cytoscape, e.cy = e.cytoscape))) }, t.registerJquery(e), t.util.require("jquery", function(e) { t.registerJquery(e) }) }("undefined" != typeof jQuery ? jQuery : null, cytoscape), function(e) { "use strict"; function t() { return !1 } function n() { return !0 } e.Event = function(r, i) { return this instanceof e.Event ? (r && r.type ? (this.originalEvent = r, this.type = r.type, this.isDefaultPrevented = r.defaultPrevented ? n : t) : this.type = r, i && (this.type = void 0 !== i.type ? i.type : this.type, this.cy = i.cy, this.cyTarget = i.cyTarget, this.cyPosition = i.cyPosition, this.cyRenderedPosition = i.cyRenderedPosition, this.namespace = i.namespace, this.layout = i.layout, this.data = i.data, this.message = i.message), void(this.timeStamp = r && r.timeStamp || +new Date)) : new e.Event(r, i) }, e.Event.prototype = { preventDefault: function() { this.isDefaultPrevented = n; var e = this.originalEvent; e && e.preventDefault && e.preventDefault() }, stopPropagation: function() { this.isPropagationStopped = n; var e = this.originalEvent; e && e.stopPropagation && e.stopPropagation() }, stopImmediatePropagation: function() { this.isImmediatePropagationStopped = n, this.stopPropagation() }, isDefaultPrevented: t, isPropagationStopped: t, isImmediatePropagationStopped: t } }(cytoscape), function(e) { "use strict"; e.define = { data: function(t) { var n = { field: "data", bindingEvent: "data", allowBinding: !1, allowSetting: !1, allowGetting: !1, settingEvent: "data", settingTriggersEvent: !1, triggerFnName: "trigger", immutableKeys: {}, updateStyle: !1, onSet: function(e) {}, canSet: function(e) { return !0 } }; return t = e.util.extend({}, n, t), function(n, r) { var i = t, a = this, o = void 0 !== a.length, s = o ? a : [a], l = o ? a[0] : a; if (e.is.string(n)) { if (i.allowGetting && void 0 === r) { var u; return l && (u = l._private[i.field][n]), u } if (i.allowSetting && void 0 !== r) { var c = !i.immutableKeys[n]; if (c) { for (var d = 0, h = s.length; h > d; d++) i.canSet(s[d]) && (s[d]._private[i.field][n] = r); i.updateStyle && a.updateStyle(), i.onSet(a), i.settingTriggersEvent && a[i.triggerFnName](i.settingEvent) } } } else if (i.allowSetting && e.is.plainObject(n)) { var p, f, v = n; for (p in v) { f = v[p]; var c = !i.immutableKeys[p]; if (c) for (var d = 0, h = s.length; h > d; d++) i.canSet(s[d]) && (s[d]._private[i.field][p] = f) } i.updateStyle && a.updateStyle(), i.onSet(a), i.settingTriggersEvent && a[i.triggerFnName](i.settingEvent) } else if (i.allowBinding && e.is.fn(n)) { var g = n; a.bind(i.bindingEvent, g) } else if (i.allowGetting && void 0 === n) { var u; return l && (u = l._private[i.field]), u } return a } }, removeData: function(t) { var n = { field: "data", event: "data", triggerFnName: "trigger", triggerEvent: !1, immutableKeys: {} }; return t = e.util.extend({}, n, t), function(n) { var r = t, i = this, a = void 0 !== i.length, o = a ? i : [i]; if (e.is.string(n)) { for (var s = n.split(/\s+/), l = s.length, u = 0; l > u; u++) { var c = s[u]; if (!e.is.emptyString(c)) { var d = !r.immutableKeys[c]; if (d) for (var h = 0, p = o.length; p > h; h++) o[h]._private[r.field][c] = void 0 } } r.triggerEvent && i[r.triggerFnName](r.event) } else if (void 0 === n) { for (var h = 0, p = o.length; p > h; h++) { var f = o[h]._private[r.field]; for (var c in f) { var v = !r.immutableKeys[c]; v && (f[c] = void 0) } } r.triggerEvent && i[r.triggerFnName](r.event) } return i } }, event: { regex: /(\w+)(\.\w+)?/, optionalTypeRegex: /(\w+)?(\.\w+)?/, falseCallback: function() { return !1 } }, on: function(t) { var n = { unbindSelfOnTrigger: !1, unbindAllBindersOnTrigger: !1 }; return t = e.util.extend({}, n, t), function(n, r, i, a) { var o = this, s = void 0 !== o.length, l = s ? o : [o], u = e.is.string(n), c = t; if (e.is.plainObject(r) ? (a = i, i = r, r = void 0) : (e.is.fn(r) || r === !1) && (a = r, i = void 0, r = void 0), (e.is.fn(i) || i === !1) && (a = i, i = void 0), !e.is.fn(a) && a !== !1 && u) return o; if (u) { var d = {}; d[n] = a, n = d } for (var h in n) if (a = n[h], a === !1 && (a = e.define.event.falseCallback), e.is.fn(a)) { h = h.split(/\s+/); for (var p = 0; p < h.length; p++) { var f = h[p]; if (!e.is.emptyString(f)) { var v = f.match(e.define.event.regex); if (v) for (var g = v[1], y = v[2] ? v[2] : void 0, m = { callback: a, data: i, delegated: r ? !0 : !1, selector: r, selObj: new e.Selector(r), type: g, namespace: y, unbindSelfOnTrigger: c.unbindSelfOnTrigger, unbindAllBindersOnTrigger: c.unbindAllBindersOnTrigger, binders: l }, x = 0; x < l.length; x++) { var b = l[x]._private; b.listeners = b.listeners || [], b.listeners.push(m) } } } } return o } }, eventAliasesOn: function(t) { var n = t; n.addListener = n.listen = n.bind = n.on, n.removeListener = n.unlisten = n.unbind = n.off, n.emit = n.trigger, n.pon = n.promiseOn = function(t, n) { var r = this, i = Array.prototype.slice.call(arguments, 0); return new e.Promise(function(e, t) { var n = function(t) { r.off.apply(r, o), e(t) }, a = i.concat([n]), o = a.concat([]); r.on.apply(r, a) }) } }, off: function(t) { var n = {}; return t = e.util.extend({}, n, t), function(t, n, r) { var i = this, a = void 0 !== i.length, o = a ? i : [i], s = e.is.string(t); if (0 === arguments.length) { for (var l = 0; l < o.length; l++) o[l]._private.listeners = []; return i } if ((e.is.fn(n) || n === !1) && (r = n, n = void 0), s) { var u = {}; u[t] = r, t = u } for (var c in t) { r = t[c], r === !1 && (r = e.define.event.falseCallback), c = c.split(/\s+/); for (var d = 0; d < c.length; d++) { var h = c[d]; if (!e.is.emptyString(h)) { var p = h.match(e.define.event.optionalTypeRegex); if (p) for (var f = p[1] ? p[1] : void 0, v = p[2] ? p[2] : void 0, l = 0; l < o.length; l++) for (var g = o[l]._private.listeners = o[l]._private.listeners || [], y = 0; y < g.length; y++) { var m = g[y], x = !v || v === m.namespace, b = !f || m.type === f, w = !r || r === m.callback, _ = x && b && w; _ && (g.splice(y, 1), y--) } } } } return i } }, trigger: function(t) { var n = {}; return t = e.util.extend({}, n, t), function(n, r, i) { var a = this, o = void 0 !== a.length, s = o ? a : [a], l = e.is.string(n), u = e.is.plainObject(n), c = e.is.event(n), d = this._private.cy || (e.is.core(this) ? this : null), h = d ? d.hasCompoundNodes() : !1; if (l) { var p = n.split(/\s+/); n = []; for (var f = 0; f < p.length; f++) { var v = p[f]; if (!e.is.emptyString(v)) { var g = v.match(e.define.event.regex), y = g[1], m = g[2] ? g[2] : void 0; n.push({ type: y, namespace: m }) } } } else if (u) { var x = n; n = [x] } r ? e.is.array(r) || (r = [r]) : r = []; for (var f = 0; f < n.length; f++) for (var b = n[f], w = 0; w < s.length; w++) { var v, _ = s[w], E = _._private.listeners = _._private.listeners || [], T = e.is.element(_), S = T || t.layout; if (c ? (v = b, v.cyTarget = v.cyTarget || _, v.cy = v.cy || d) : v = new e.Event(b, { cyTarget: _, cy: d, namespace: b.namespace }), b.layout && (v.layout = b.layout), t.layout && (v.layout = _), v.cyPosition) { var C = v.cyPosition, k = d.zoom(), D = d.pan(); v.cyRenderedPosition = { x: C.x * k + D.x, y: C.y * k + D.y } } i && (E = [{ namespace: v.namespace, type: v.type, callback: i }]); for (var N = 0; N < E.length; N++) { var P = E[N], M = !P.namespace || P.namespace === v.namespace, B = P.type === v.type, L = P.delegated ? _ !== v.cyTarget && e.is.element(v.cyTarget) && P.selObj.matches(v.cyTarget) : !0, O = M && B && L; if (O) { var A = [v]; if (A = A.concat(r), P.data ? v.data = P.data : v.data = void 0, (P.unbindSelfOnTrigger || P.unbindAllBindersOnTrigger) && (E.splice(N, 1), N--), P.unbindAllBindersOnTrigger) for (var I = P.binders, z = 0; z < I.length; z++) { var R = I[z]; if (R && R !== _) for (var j = R._private.listeners, F = 0; F < j.length; F++) { var q = j[F]; q === P && (j.splice(F, 1), F--) } } var V = P.delegated ? v.cyTarget : _, X = P.callback.apply(V, A); (X === !1 || v.isPropagationStopped()) && (S = !1, X === !1 && (v.stopPropagation(), v.preventDefault())) } } if (S) { var H = h ? _._private.parent : null, Y = null != H && 0 !== H.length; Y ? (H = H[0], H.trigger(v)) : d.trigger(v) } } return a } }, animated: function(t) { var n = {}; return t = e.util.extend({}, n, t), function() { var e = this, t = void 0 !== e.length, n = t ? e : [e], r = this._private.cy || this; if (!r.styleEnabled()) return !1; var i = n[0]; return i ? i._private.animation.current.length > 0 : void 0 } }, clearQueue: function(t) { var n = {}; return t = e.util.extend({}, n, t), function() { var e = this, t = void 0 !== e.length, n = t ? e : [e], r = this._private.cy || this; if (!r.styleEnabled()) return this; for (var i = 0; i < n.length; i++) { var a = n[i]; a._private.animation.queue = [] } return this } }, delay: function(t) { var n = {}; return t = e.util.extend({}, n, t), function(e, t) { var n = this._private.cy || this; return n.styleEnabled() ? (this.animate({ delay: e }, { duration: e, complete: t }), this) : this } }, animate: function(t) { var n = {}; return t = e.util.extend({}, n, t), function(e, t) { var n = this, r = void 0 !== n.length, i = r ? n : [n], a = this._private.cy || this, o = !r, s = !o; if (!a.styleEnabled()) return this; var l, u = +new Date, c = a.style(); switch (void 0 === t && (t = {}), void 0 === t.duration && (t.duration = 400), t.duration) { case "slow": t.duration = 600; break; case "fast": t.duration = 200 } var d = !0; if (e) for (var h in e) { d = !1; break } if (d) return this; if (e.css && s && (e.css = c.getPropsList(e.css)), e.renderedPosition && s) { var p = e.renderedPosition, f = a.pan(), v = a.zoom(); e.position = { x: (p.x - f.x) / v, y: (p.y - f.y) / v } } if (e.panBy && o) { var g = e.panBy, y = a.pan(); e.pan = { x: y.x + g.x, y: y.y + g.y } } var m = e.center || e.centre; if (m && o) { var x = a.getCenterPan(m.eles, e.zoom); x && (e.pan = x) } if (e.fit && o) { var b = e.fit, w = a.getFitViewport(b.eles || b.boundingBox, b.padding); w && (e.pan = w.pan, e.zoom = w.zoom) } for (var h = 0; h < i.length; h++) { var _ = i[h]; l = _.animated() && (void 0 === t.queue || t.queue) ? _._private.animation.queue : _._private.animation.current, l.push({ properties: e, duration: t.duration, params: t, callTime: u }) } return s && a.addToAnimationPool(this), this } }, stop: function(t) { var n = {}; return t = e.util.extend({}, n, t), function(e, t) { var n = this, r = void 0 !== n.length, i = r ? n : [n], a = this._private.cy || this; if (!a.styleEnabled()) return this; for (var o = 0; o < i.length; o++) { for (var s = i[o], l = s._private.animation.current, u = 0; u < l.length; u++) { var c = l[u]; t && (c.duration = 0) } e && (s._private.animation.queue = []), t || (s._private.animation.current = []) } return a.notify({ collection: this, type: "draw" }), this } } } }(cytoscape), function(e) { "use strict"; e.fn.selector = function(t, n) { for (var r in t) { var i = t[r]; e.Selector.prototype[r] = i } }, e.Selector = function(t, n) { if (!(this instanceof e.Selector)) return new e.Selector(t, n); void 0 === n && void 0 !== t && (n = t, t = void 0); var r = this; if (r._private = { selectorText: null, invalid: !0 }, !n || e.is.string(n) && n.match(/^\s*$/)) null == t ? r.length = 0 : (r[0] = o(), r[0].group = t, r.length = 1); else if (e.is.element(n)) { var i = new e.Collection(r.cy(), [n]); r[0] = o(), r[0].collection = i, r.length = 1 } else if (e.is.collection(n)) r[0] = o(), r[0].collection = n, r.length = 1; else if (e.is.fn(n)) r[0] = o(), r[0].filter = n, r.length = 1; else { if (!e.is.string(n)) return void e.util.error("A selector must be created from a string; found " + n); var a = null, o = function() { return { classes: [], colonSelectors: [], data: [], group: null, ids: [], meta: [], collection: null, filter: null, parent: null, ancestor: null, subject: null, child: null, descendant: null } }, s = { metaChar: "[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]", comparatorOp: "=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=", boolOp: "\\?|\\!|\\^", string: '"(?:\\\\"|[^"])+"|' + "'(?:\\\\'|[^'])+'", number: e.util.regex.number, meta: "degree|indegree|outdegree", separator: "\\s*,\\s*", descendant: "\\s+", child: "\\s+>\\s+", subject: "\\$" }; s.variable = "(?:[\\w-]|(?:\\\\" + s.metaChar + "))+", s.value = s.string + "|" + s.number, s.className = s.variable, s.id = s.variable; for (var l = function(e) { return e.replace(new RegExp("\\\\(" + s.metaChar + ")", "g"), function(e, t, n, r) { return t }) }, u = s.comparatorOp.split("|"), c = 0; c < u.length; c++) { var d = u[c]; s.comparatorOp += "|@" + d } for (var u = s.comparatorOp.split("|"), c = 0; c < u.length; c++) { var d = u[c]; d.indexOf("!") >= 0 || "=" !== d && (s.comparatorOp += "|\\!" + d) } var h = { group: { query: !0, regex: "(node|edge|\\*)", populate: function(e) { this.group = "*" == e ? e : e + "s" } }, state: { query: !0, regex: "(:selected|:unselected|:locked|:unlocked|:visible|:hidden|:transparent|:grabbed|:free|:removed|:inside|:grabbable|:ungrabbable|:animated|:unanimated|:selectable|:unselectable|:orphan|:nonorphan|:parent|:child|:loop|:simple|:active|:inactive|:touch|:backgrounding|:nonbackgrounding)", populate: function(e) { this.colonSelectors.push(e) } }, id: { query: !0, regex: "\\#(" + s.id + ")", populate: function(e) { this.ids.push(l(e)) } }, className: { query: !0, regex: "\\.(" + s.className + ")", populate: function(e) { this.classes.push(l(e)) } }, dataExists: { query: !0, regex: "\\[\\s*(" + s.variable + ")\\s*\\]", populate: function(e) { this.data.push({ field: l(e) }) } }, dataCompare: { query: !0, regex: "\\[\\s*(" + s.variable + ")\\s*(" + s.comparatorOp + ")\\s*(" + s.value + ")\\s*\\]", populate: function(e, t, n) { var r = null != new RegExp("^" + s.string + "$").exec(n); n = r ? n.substring(1, n.length - 1) : parseFloat(n), this.data.push({ field: l(e), operator: t, value: n }) } }, dataBool: { query: !0, regex: "\\[\\s*(" + s.boolOp + ")\\s*(" + s.variable + ")\\s*\\]", populate: function(e, t) { this.data.push({ field: l(t), operator: e }) } }, metaCompare: { query: !0, regex: "\\[\\[\\s*(" + s.meta + ")\\s*(" + s.comparatorOp + ")\\s*(" + s.number + ")\\s*\\]\\]", populate: function(e, t, n) { this.meta.push({ field: l(e), operator: t, value: parseFloat(n) }) } }, nextQuery: { separator: !0, regex: s.separator, populate: function() { r[++c] = o(), a = null } }, child: { separator: !0, regex: s.child, populate: function() { var e = o(); e.parent = this, e.subject = a, r[c] = e } }, descendant: { separator: !0, regex: s.descendant, populate: function() { var e = o(); e.ancestor = this, e.subject = a, r[c] = e } }, subject: { modifier: !0, regex: s.subject, populate: function() { return null != a && this.subject != this ? (e.util.error("Redefinition of subject in selector `" + n + "`"), !1) : (a = this, void(this.subject = this)) } } }, p = 0; for (var f in h) h[p] = h[f], h[p].name = f, p++; h.length = p, r._private.selectorText = n; var v = n, c = 0, g = function(t) { for (var n, r, i, a = 0; a < h.length; a++) { var o = h[a], s = o.name; if (!e.is.fn(t) || t(s, o)) { var l = v.match(new RegExp("^" + o.regex)); if (null != l) { r = l, n = o, i = s; var u = l[0]; v = v.substring(u.length); break } } } return { expr: n, match: r, name: i } }, y = function() { var e = v.match(/^\s+/); if (e) { var t = e[0]; v = v.substring(t.length) } }; for (r[0] = o(), y();;) { var m = g(); if (null == m.expr) return void e.util.error("The selector `" + n + "`is invalid"); for (var x = [], p = 1; p < m.match.length; p++) x.push(m.match[p]); var b = m.expr.populate.apply(r[c], x); if (b === !1) return; if (v.match(/^\s*$/)) break } for (r.length = c + 1, p = 0; p < r.length; p++) { var w = r[p]; if (null != w.subject) { for (; w.subject != w;) if (null != w.parent) { var _ = w.parent, E = w; E.parent = null, _.child = E, w = _ } else { if (null == w.ancestor) { e.util.error("When adjusting references for the selector `" + w + "`, neither parent nor ancestor was found"); break } var T = w.ancestor, S = w; S.ancestor = null, T.descendant = S, w = T } r[p] = w.subject } } if (null != t) for (var p = 0; p < r.length; p++) { if (null != r[p].group && r[p].group != t) return void e.util.error("Group `" + r[p].group + "` conflicts with implicit group `" + t + "` in selector `" + n + "`"); r[p].group = t } } r._private.invalid = !1 }, e.selfn = e.Selector.prototype, e.selfn.size = function() { return this.length }, e.selfn.eq = function(e) { return this[e] }, e.selfn.find = function() {}; var t = function(n, r) { if (null != n.group && "*" != n.group && n.group != r._private.group) return !1; for (var i = r.cy(), a = !0, o = 0; o < n.colonSelectors.length; o++) { var s = n.colonSelectors[o]; switch (s) { case ":selected": a = r.selected(); break; case ":unselected": a = !r.selected(); break; case ":selectable": a = r.selectable(); break; case ":unselectable": a = !r.selectable(); break; case ":locked": a = r.locked(); break; case ":unlocked": a = !r.locked(); break; case ":visible": a = r.visible(); break; case ":hidden": a = !r.visible(); break; case ":transparent": a = r.transparent(); break; case ":grabbed": a = r.grabbed(); break; case ":free": a = !r.grabbed(); break; case ":removed": a = r.removed(); break; case ":inside": a = !r.removed(); break; case ":grabbable": a = r.grabbable(); break; case ":ungrabbable": a = !r.grabbable(); break; case ":animated": a = r.animated(); break; case ":unanimated": a = !r.animated(); break; case ":parent": a = r.isNode() && r.children().nonempty(); break; case ":child": case ":nonorphan": a = r.isNode() && r.parent().nonempty(); break; case ":orphan": a = r.isNode() && r.parent().empty(); break; case ":loop": a = r.isEdge() && r.data("source") === r.data("target"); break; case ":simple": a = r.isEdge() && r.data("source") !== r.data("target"); break; case ":active": a = r.active(); break; case ":inactive": a = !r.active(); break; case ":touch": a = e.is.touch(); break; case ":backgrounding": a = r.backgrounding(); break; case ":nonbackgrounding": a = !r.backgrounding() } if (!a) break } if (!a) return !1; for (var l = !0, o = 0; o < n.ids.length; o++) { var u = n.ids[o], c = r._private.data.id; if (l = l && u == c, !l) break } if (!l) return !1; for (var d = !0, o = 0; o < n.classes.length; o++) { var h = n.classes[o]; if (d = d && r.hasClass(h), !d) break } if (!d) return !1; var p = function(t) { for (var r = !0, i = 0; i < n[t.name].length; i++) { var a, o = n[t.name][i], s = o.operator, l = o.value, u = o.field; if (null != s && null != l) { var c = t.fieldValue(u), d = e.is.string(c) || e.is.number(c) ? "" + c : "", h = "" + l, p = !1; s.indexOf("@") >= 0 && (d = d.toLowerCase(), h = h.toLowerCase(), s = s.replace("@", ""), p = !0); var f = !1, v = !1; switch (s.indexOf("!") >= 0 && (s = s.replace("!", ""), f = !0), p && (l = h.toLowerCase(), c = d.toLowerCase()), s) { case "*=": a = d.search(h) >= 0; break; case "$=": a = null != new RegExp(h + "$").exec(d); break; case "^=": a = null != new RegExp("^" + h).exec(d); break; case "=": a = c === l; break; case "!=": a = c !== l; break; case ">": a = f ? l >= c : c > l, v = !0; break; case ">=": a = f ? l > c : c >= l, v = !0; break; case "<": a = f ? c >= l : l > c, v = !0; break; case "<=": a = f ? c > l : l >= c, v = !0; break; default: a = !1 } } else if (null != s) switch (s) { case "?": a = t.fieldTruthy(u); break; case "!": a = !t.fieldTruthy(u); break; case "^": a = t.fieldUndefined(u) } else a = !t.fieldUndefined(u); if (f && !v && (a = !a, v = !0), !a) { r = !1; break } } return r }, f = p({ name: "data", fieldValue: function(e) { return r._private.data[e] }, fieldRef: function(e) { return "element._private.data." + e }, fieldUndefined: function(e) { return void 0 === r._private.data[e] }, fieldTruthy: function(e) { return r._private.data[e] ? !0 : !1 } }); if (!f) return !1; var v = p({ name: "meta", fieldValue: function(e) { return r[e]() }, fieldRef: function(e) { return "element." + e + "()" }, fieldUndefined: function(e) { return null == r[e]() }, fieldTruthy: function(e) { return r[e]() ? !0 : !1 } }); if (!v) return !1; if (null != n.collection) { var g = null != n.collection._private.ids[r.id()]; if (!g) return !1 } if (null != n.filter && 0 === r.collection().filter(n.filter).size()) return !1; var y = function(e, n) { if (null != e) { var r = !1; if (!i.hasCompoundNodes()) return !1; n = n(); for (var a = 0; a < n.length; a++) if (t(e, n[a])) { r = !0; break } return r } return !0 }; return y(n.parent, function() { return r.parent() }) && y(n.ancestor, function() { return r.parents() }) && y(n.child, function() { return r.children() }) && y(n.descendant, function() { return r.descendants() }) ? !0 : !1 }; e.selfn.filter = function(n) { var r = this, i = n.cy(); if (r._private.invalid) return new e.Collection(i); var a = function(e, n) { for (var i = 0; i < r.length; i++) { var a = r[i]; if (t(a, n)) return !0 } return !1 }; null == r._private.selectorText && (a = function() { return !0 }); var o = n.filter(a); return o }, e.selfn.matches = function(e) { var n = this; if (n._private.invalid) return !1; for (var r = 0; r < n.length; r++) { var i = n[r]; if (t(i, e)) return !0 } return !1 }, e.selfn.toString = e.selfn.selector = function() { for (var t = "", n = function(t, n) { return e.is.string(t) ? n ? '"' + t + '"' : t : "" }, r = function(e) { var t = ""; e.subject === e && (t += "$"); var a = n(e.group); t += a.substring(0, a.length - 1); for (var o = 0; o < e.data.length; o++) { var s = e.data[o]; t += s.value ? "[" + s.field + n(s.operator) + n(s.value, !0) + "]" : "[" + n(s.operator) + s.field + "]" } for (var o = 0; o < e.meta.length; o++) { var l = e.meta[o]; t += "[[" + l.field + n(l.operator) + n(l.value, !0) + "]]" } for (var o = 0; o < e.colonSelectors.length; o++) { var u = e.colonSelectors[i]; t += u } for (var o = 0; o < e.ids.length; o++) { var u = "#" + e.ids[i]; t += u } for (var o = 0; o < e.classes.length; o++) { var u = "." + e.classes[i]; t += u } return null != e.parent && (t = r(e.parent) + " > " + t), null != e.ancestor && (t = r(e.ancestor) + " " + t), null != e.child && (t += " > " + r(e.child)), null != e.descendant && (t += " " + r(e.descendant)), t }, i = 0; i < this.length; i++) { var a = this[i]; t += r(a), this.length > 1 && i < this.length - 1 && (t += ", ") } return t } }(cytoscape), function(e) { "use strict"; e.Style = function(t) { return this instanceof e.Style ? e.is.core(t) ? (this._private = { cy: t, coreStyle: {}, newStyle: !0 }, this.length = 0, void this.addDefaultStylesheet()) : void e.util.error("A style must have a core reference") : new e.Style(t) }, e.style = e.Style, e.styfn = e.Style.prototype, e.fn.style = function(t, n) { for (var r in t) { var i = t[r]; e.Style.prototype = i } }, function() { var t = e.util.regex.number, n = e.util.regex.rgbaNoBackRefs, r = e.util.regex.hslaNoBackRefs, i = e.util.regex.hex3, a = e.util.regex.hex6, o = function(e) { return "^" + e + "\\s*\\(\\s*([\\w\\.]+)\\s*\\)$" }, s = function(e) { return "^" + e + "\\s*\\(([\\w\\.]+)\\s*\\,\\s*(" + t + ")\\s*\\,\\s*(" + t + ")\\s*,\\s*(" + t + "|\\w+|" + n + "|" + r + "|" + i + "|" + a + ")\\s*\\,\\s*(" + t + "|\\w+|" + n + "|" + r + "|" + i + "|" + a + ")\\)$" }; e.style.types = { time: { number: !0, min: 0, units: "s|ms", implicitUnits: "ms" }, percent: { number: !0, min: 0, max: 100, units: "%" }, zeroOneNumber: { number: !0, min: 0, max: 1, unitless: !0 }, nOneOneNumber: { number: !0, min: -1, max: 1, unitless: !0 }, nonNegativeInt: { number: !0, min: 0, integer: !0, unitless: !0 }, position: { enums: ["parent", "origin"] }, autoSize: { number: !0, min: 0, enums: ["auto"] }, number: { number: !0 }, size: { number: !0, min: 0 }, bgSize: { number: !0, min: 0, allowPercent: !0 }, bgWH: { number: !0, min: 0, allowPercent: !0, enums: ["auto"] }, bgPos: { number: !0, allowPercent: !0 }, bgRepeat: { enums: ["repeat", "repeat-x", "repeat-y", "no-repeat"] }, bgFit: { enums: ["none", "contain", "cover"] }, bgClip: { enums: ["none", "node"] }, color: { color: !0 }, lineStyle: { enums: ["solid", "dotted", "dashed"] }, borderStyle: { enums: ["solid", "dotted", "dashed", "double"] }, curveStyle: { enums: ["bezier", "unbundled-bezier", "haystack"] }, fontFamily: { regex: '^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$' }, fontVariant: { enums: ["small-caps", "normal"] }, fontStyle: { enums: ["italic", "normal", "oblique"] }, fontWeight: { enums: ["normal", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "800", "900", 100, 200, 300, 400, 500, 600, 700, 800, 900] }, textDecoration: { enums: ["none", "underline", "overline", "line-through"] }, textTransform: { enums: ["none", "uppercase", "lowercase"] }, textWrap: { enums: ["none", "wrap"] }, textBackgroundShape: { enums: ["rectangle", "roundrectangle"] }, nodeShape: { enums: ["rectangle", "roundrectangle", "ellipse", "triangle", "square", "pentagon", "hexagon", "heptagon", "octagon", "star", "diamond", "vee", "rhomboid"] }, compoundIncludeLabels: { enums: ["include", "exclude"] }, arrowShape: { enums: ["tee", "triangle", "triangle-tee", "triangle-backcurve", "half-triangle-overshot", "square", "circle", "diamond", "none"] }, arrowFill: { enums: ["filled", "hollow"] }, display: { enums: ["element", "none"] }, visibility: { enums: ["hidden", "visible"] }, valign: { enums: ["top", "center", "bottom"] }, halign: { enums: ["left", "center", "right"] }, text: { string: !0 }, data: { mapping: !0, regex: o("data") }, layoutData: { mapping: !0, regex: o("layoutData") }, scratch: { mapping: !0, regex: o("scratch") }, mapData: { mapping: !0, regex: s("mapData") }, mapLayoutData: { mapping: !0, regex: s("mapLayoutData") }, mapScratch: { mapping: !0, regex: s("mapScratch") }, fn: { mapping: !0, fn: !0 }, url: { regex: "^url\\s*\\(\\s*([^\\s]+)\\s*\\s*\\)|none|(.+)$" }, propList: { propList: !0 }, angle: { number: !0, units: "deg|rad" }, textRotation: { enums: ["none", "autorotate"] } }; var l = e.style.types, u = e.style.properties = [{ name: "text-valign", type: l.valign }, { name: "text-halign", type: l.halign }, { name: "color", type: l.color }, { name: "content", type: l.text }, { name: "text-outline-color", type: l.color }, { name: "text-outline-width", type: l.size }, { name: "text-outline-opacity", type: l.zeroOneNumber }, { name: "text-opacity", type: l.zeroOneNumber }, { name: "text-background-color", type: l.color }, { name: "text-background-opacity", type: l.zeroOneNumber }, { name: "text-border-opacity", type: l.zeroOneNumber }, { name: "text-border-color", type: l.color }, { name: "text-border-width", type: l.size }, { name: "text-border-style", type: l.borderStyle }, { name: "text-background-shape", type: l.textBackgroundShape }, { name: "text-transform", type: l.textTransform }, { name: "text-wrap", type: l.textWrap }, { name: "text-max-width", type: l.size }, { name: "font-family", type: l.fontFamily }, { name: "font-style", type: l.fontStyle }, { name: "font-weight", type: l.fontWeight }, { name: "font-size", type: l.size }, { name: "min-zoomed-font-size", type: l.size }, { name: "edge-text-rotation", type: l.textRotation }, { name: "display", type: l.display }, { name: "visibility", type: l.visibility }, { name: "opacity", type: l.zeroOneNumber }, { name: "z-index", type: l.nonNegativeInt }, { name: "overlay-padding", type: l.size }, { name: "overlay-color", type: l.color }, { name: "overlay-opacity", type: l.zeroOneNumber }, { name: "shadow-blur", type: l.size }, { name: "shadow-color", type: l.color }, { name: "shadow-opacity", type: l.zeroOneNumber }, { name: "shadow-offset-x", type: l.number }, { name: "shadow-offset-y", type: l.number }, { name: "text-shadow-blur", type: l.size }, { name: "text-shadow-color", type: l.color }, { name: "text-shadow-opacity", type: l.zeroOneNumber }, { name: "text-shadow-offset-x", type: l.number }, { name: "text-shadow-offset-y", type: l.number }, { name: "transition-property", type: l.propList }, { name: "transition-duration", type: l.time }, { name: "transition-delay", type: l.time }, { name: "height", type: l.autoSize }, { name: "width", type: l.autoSize }, { name: "shape", type: l.nodeShape }, { name: "background-color", type: l.color }, { name: "background-opacity", type: l.zeroOneNumber }, { name: "background-blacken", type: l.nOneOneNumber }, { name: "border-color", type: l.color }, { name: "border-opacity", type: l.zeroOneNumber }, { name: "border-width", type: l.size }, { name: "border-style", type: l.borderStyle }, { name: "background-image", type: l.url }, { name: "background-image-opacity", type: l.zeroOneNumber }, { name: "background-position-x", type: l.bgPos }, { name: "background-position-y", type: l.bgPos }, { name: "background-repeat", type: l.bgRepeat }, { name: "background-fit", type: l.bgFit }, { name: "background-clip", type: l.bgClip }, { name: "background-width", type: l.bgWH }, { name: "background-height", type: l.bgWH }, { name: "padding-left", type: l.size }, { name: "padding-right", type: l.size }, { name: "padding-top", type: l.size }, { name: "padding-bottom", type: l.size }, { name: "position", type: l.position }, { name: "compound-sizing-wrt-labels", type: l.compoundIncludeLabels }, { name: "line-style", type: l.lineStyle }, { name: "line-color", type: l.color }, { name: "control-point-step-size", type: l.size }, { name: "control-point-distance", type: l.number }, { name: "control-point-weight", type: l.zeroOneNumber }, { name: "curve-style", type: l.curveStyle }, { name: "haystack-radius", type: l.zeroOneNumber }, { name: "source-arrow-shape", type: l.arrowShape }, { name: "target-arrow-shape", type: l.arrowShape }, { name: "mid-source-arrow-shape", type: l.arrowShape }, { name: "mid-target-arrow-shape", type: l.arrowShape }, { name: "source-arrow-color", type: l.color }, { name: "target-arrow-color", type: l.color }, { name: "mid-source-arrow-color", type: l.color }, { name: "mid-target-arrow-color", type: l.color }, { name: "source-arrow-fill", type: l.arrowFill }, { name: "target-arrow-fill", type: l.arrowFill }, { name: "mid-source-arrow-fill", type: l.arrowFill }, { name: "mid-target-arrow-fill", type: l.arrowFill }, { name: "selection-box-color", type: l.color }, { name: "selection-box-opacity", type: l.zeroOneNumber }, { name: "selection-box-border-color", type: l.color }, { name: "selection-box-border-width", type: l.size }, { name: "active-bg-color", type: l.color }, { name: "active-bg-opacity", type: l.zeroOneNumber }, { name: "active-bg-size", type: l.size }, { name: "outside-texture-bg-color", type: l.color }, { name: "outside-texture-bg-opacity", type: l.zeroOneNumber }]; e.style.pieBackgroundN = 16, u.push({ name: "pie-size", type: l.bgSize }); for (var c = 1; c <= e.style.pieBackgroundN; c++) u.push({ name: "pie-" + c + "-background-color", type: l.color }), u.push({ name: "pie-" + c + "-background-size", type: l.percent }), u.push({ name: "pie-" + c + "-background-opacity", type: l.zeroOneNumber }); for (var c = 0; c < u.length; c++) { var d = u[c]; u[d.name] = d } }(), e.styfn.addDefaultStylesheet = function() { var e = "Helvetica", t = "normal", n = "normal", r = "#000", i = "none", a = 16, o = 9999; this.selector("node, edge").css({ "text-valign": "top", "text-halign": "center", color: r, "text-outline-color": "#000", "text-outline-width": 0, "text-outline-opacity": 1, "text-opacity": 1, "text-decoration": "none", "text-transform": i, "text-wrap": "none", "text-max-width": o, "text-background-color": "#000", "text-background-opacity": 0, "text-border-opacity": 0, "text-border-width": 0, "text-border-style": "solid", "text-border-color": "#000", "text-background-shape": "rectangle", "font-family": e, "font-style": t, "font-weight": n, "font-size": a, "min-zoomed-font-size": 0, "edge-text-rotation": "none", visibility: "visible", display: "element", opacity: 1, "z-index": 0, content: "", "overlay-opacity": 0, "overlay-color": "#000", "overlay-padding": 10, "shadow-opacity": 0, "shadow-color": "#000", "shadow-blur": 10, "shadow-offset-x": 0, "shadow-offset-y": 0, "text-shadow-opacity": 0, "text-shadow-color": "#000", "text-shadow-blur": 5, "text-shadow-offset-x": 0, "text-shadow-offset-y": 0, "transition-property": "none", "transition-duration": 0, "transition-delay": 0, "background-blacken": 0, "background-color": "#888", "background-opacity": 1, "background-image": "none", "background-image-opacity": 1, "background-position-x": "50%", "background-position-y": "50%", "background-repeat": "no-repeat", "background-fit": "none", "background-clip": "node", "background-width": "auto", "background-height": "auto", "border-color": "#000", "border-opacity": 1, "border-width": 0, "border-style": "solid", height: 30, width: 30, shape: "ellipse", "padding-top": 0, "padding-bottom": 0, "padding-left": 0, "padding-right": 0, position: "origin", "compound-sizing-wrt-labels": "include", "pie-size": "100%", "pie-1-background-color": "black", "pie-2-background-color": "black", "pie-3-background-color": "black", "pie-4-background-color": "black", "pie-5-background-color": "black", "pie-6-background-color": "black", "pie-7-background-color": "black", "pie-8-background-color": "black", "pie-9-background-color": "black", "pie-10-background-color": "black", "pie-11-background-color": "black", "pie-12-background-color": "black", "pie-13-background-color": "black", "pie-14-background-color": "black", "pie-15-background-color": "black", "pie-16-background-color": "black", "pie-1-background-size": "0%", "pie-2-background-size": "0%", "pie-3-background-size": "0%", "pie-4-background-size": "0%", "pie-5-background-size": "0%", "pie-6-background-size": "0%", "pie-7-background-size": "0%", "pie-8-background-size": "0%", "pie-9-background-size": "0%", "pie-10-background-size": "0%", "pie-11-background-size": "0%", "pie-12-background-size": "0%", "pie-13-background-size": "0%", "pie-14-background-size": "0%", "pie-15-background-size": "0%", "pie-16-background-size": "0%", "pie-1-background-opacity": 1, "pie-2-background-opacity": 1, "pie-3-background-opacity": 1, "pie-4-background-opacity": 1, "pie-5-background-opacity": 1, "pie-6-background-opacity": 1, "pie-7-background-opacity": 1, "pie-8-background-opacity": 1, "pie-9-background-opacity": 1, "pie-10-background-opacity": 1, "pie-11-background-opacity": 1, "pie-12-background-opacity": 1, "pie-13-background-opacity": 1, "pie-14-background-opacity": 1, "pie-15-background-opacity": 1, "pie-16-background-opacity": 1, "source-arrow-shape": "none", "mid-source-arrow-shape": "none", "target-arrow-shape": "none", "mid-target-arrow-shape": "none", "source-arrow-color": "#ddd", "mid-source-arrow-color": "#ddd", "target-arrow-color": "#ddd", "mid-target-arrow-color": "#ddd", "source-arrow-fill": "filled", "mid-source-arrow-fill": "filled", "target-arrow-fill": "filled", "mid-target-arrow-fill": "filled", "line-style": "solid", "line-color": "#ddd", "control-point-step-size": 40, "control-point-weight": .5, "curve-style": "bezier", "haystack-radius": .8 }).selector("$node > node").css({ width: "auto", height: "auto", shape: "rectangle", "background-opacity": .5, "padding-top": 10, "padding-right": 10, "padding-left": 10, "padding-bottom": 10 }).selector("edge").css({ width: 1 }).selector(":active").css({ "overlay-color": "black", "overlay-padding": 10, "overlay-opacity": .25 }).selector("core").css({ "selection-box-color": "#ddd", "selection-box-opacity": .65, "selection-box-border-color": "#aaa", "selection-box-border-width": 1, "active-bg-color": "black", "active-bg-opacity": .15, "active-bg-size": 30, "outside-texture-bg-color": "#000", "outside-texture-bg-opacity": .125 }), this.defaultLength = this.length }, e.styfn.clear = function() { for (var e = 0; e < this.length; e++) this[e] = void 0; return this.length = 0, this._private.newStyle = !0, this }, e.styfn.resetToDefault = function() { return this.clear(), this.addDefaultStylesheet(), this }, e.styfn.core = function() { return this._private.coreStyle }, e.styfn.parse = function(t, n, r, i) { var a, o = [t, n, r, i].join("$"), s = this.propCache = this.propCache || {}; return (a = s[o]) || (a = s[o] = this.parseImpl(t, n, r, i)), e.util.copy(a) }, e.styfn.parseImpl = function(t, n, r, i) { t = e.util.camel2dash(t); var a = e.style.properties[t], o = n, s = e.style.types; if (!a) return null; if (void 0 === n || null === n) return null; var l = e.is.string(n); l && (n = e.util.trim(n)); var u = a.type; if (!u) return null; if (r && ("" === n || null === n)) return { name: t, value: n, bypass: !0, deleteBypass: !0 }; var c = t.match(/pie-(\d+)-background-size/); if (e.is.fn(n)) return { name: t, value: n, strValue: "fn", mapped: s.fn, bypass: r, hasPie: c }; var d, h, p, f, v, g; if (!l || i); else { if ((d = new RegExp(s.data.regex).exec(n)) || (p = new RegExp(s.layoutData.regex).exec(n)) || (v = new RegExp(s.scratch.regex).exec(n))) { if (r) return !1; var y; return y = d ? s.data : p ? s.layoutData : s.scratch, d = d || p || v, { name: t, value: d, strValue: "" + n, mapped: y, field: d[1], bypass: r, hasPie: c } } if ((h = new RegExp(s.mapData.regex).exec(n)) || (f = new RegExp(s.mapLayoutData.regex).exec(n)) || (g = new RegExp(s.mapScratch.regex).exec(n))) { if (r) return !1; var y; if (y = h ? s.mapData : f ? s.mapLayoutData : s.mapScratch, h = h || f || g, !u.color && !u.number) return !1; var m = this.parse(t, h[4]); if (!m || m.mapped) return !1; var x = this.parse(t, h[5]); if (!x || x.mapped) return !1; if (m.value === x.value) return !1; if (u.color) { var b = m.value, w = x.value, _ = !(b[0] !== w[0] || b[1] !== w[1] || b[2] !== w[2] || b[3] !== w[3] && (null != b[3] && 1 !== b[3] || null != w[3] && 1 !== w[3])); if (_) return !1 } return { name: t, value: h, strValue: "" + n, mapped: y, field: h[1], fieldMin: parseFloat(h[2]), fieldMax: parseFloat(h[3]), valueMin: m.value, valueMax: x.value, bypass: r, hasPie: c } } } if (u.number) { var E, T = "px"; if (u.units && (E = u.units), u.implicitUnits && (T = u.implicitUnits), !u.unitless) if (l) { var S = "px|em" + (u.allowPercent ? "|\\%" : ""); E && (S = E); var C = n.match("^(" + e.util.regex.number + ")(" + S + ")?$"); C && (n = C[1], E = C[2] || T) } else(!E || u.implicitUnits) && (E = T); if (n = parseFloat(n), isNaN(n) && void 0 === u.enums) return null; if (isNaN(n) && void 0 !== u.enums) { n = o; for (var k = 0; k < u.enums.length; k++) { var D = u.enums[k]; if (D === n) return { name: t, value: n, strValue: "" + n, bypass: r } } return null } if (u.integer && !e.is.integer(n)) return null; if (void 0 !== u.min && n < u.min || void 0 !== u.max && n > u.max) return null; var N = { name: t, value: n, strValue: "" + n + (E ? E : ""), units: E, bypass: r, hasPie: c && null != n && 0 !== n && "" !== n }; return u.unitless || "px" !== E && "em" !== E || (N.pxValue = "px" !== E && E ? this.getEmSizeInPixels() * n : n), ("ms" === E || "s" === E) && (N.msValue = "ms" === E ? n : 1e3 * n), N } if (u.propList) { var P = [], M = "" + n; if ("none" === M); else { for (var B = M.split(","), k = 0; k < B.length; k++) { var L = e.util.trim(B[k]); e.style.properties[L] && P.push(L) } if (0 === P.length) return null } return { name: t, value: P, strValue: 0 === P.length ? "none" : P.join(", "), bypass: r } } if (u.color) { var O = e.util.color2tuple(n); return O ? { name: t, value: O, strValue: "" + n, bypass: r } : null } if (u.enums) { for (var k = 0; k < u.enums.length; k++) { var D = u.enums[k]; if (D === n) return { name: t, value: n, strValue: "" + n, bypass: r } } return null } if (u.regex) { var A = new RegExp(u.regex), I = A.exec(n); return I ? { name: t, value: I, strValue: "" + n, bypass: r } : null } return u.string ? { name: t, value: n, strValue: "" + n, bypass: r } : null }, e.styfn.selector = function(t) { var n = "core" === t ? null : new e.Selector(t), r = this.length++; return this[r] = { selector: n, properties: [], mappedProperties: [], index: r }, this }, e.styfn.css = function() { var t = arguments; switch (t.length) { case 1: for (var n = t[0], r = 0; r < e.style.properties.length; r++) { var i = e.style.properties[r], a = n[i.name]; void 0 === a && (a = n[e.util.dash2camel(i.name)]), void 0 !== a && this.cssRule(i.name, a) } break; case 2: this.cssRule(t[0], t[1]) } return this }, e.styfn.style = e.styfn.css, e.styfn.cssRule = function(e, t) { var n = this.parse(e, t); if (n) { var r = this.length - 1; this[r].properties.push(n), this[r].properties[n.name] = n, n.hasPie && (this._private.hasPie = !0), n.mapped && this[r].mappedProperties.push(n); var i = !this[r].selector; i && (this._private.coreStyle[n.name] = n) } return this } }(cytoscape), function(e) { "use strict"; e.styfn.apply = function(e) { var t = this; t._private.newStyle && (this._private.contextStyles = {}, this._private.propDiffs = {}); for (var n = 0; n < e.length; n++) { var r = e[n], i = t.getContextMeta(r), a = t.getContextStyle(i), o = t.applyContextStyle(i, a, r); t.updateTransitions(r, o.diffProps), t.updateStyleHints(r) } t._private.newStyle = !1 }, e.styfn.getPropertiesDiff = function(e, t) { var n = this, r = n._private.propDiffs = n._private.propDiffs || {}, i = e + "-" + t, a = r[i]; if (a) return a; for (var o = [], s = {}, l = 0; l < n.length; l++) { var u = n[l], c = "t" === e[l], d = "t" === t[l], h = c !== d, p = u.mappedProperties.length > 0; if (h || p) { var f; h && p ? f = u.properties : h ? f = u.properties : p && (f = u.mappedProperties); for (var v = 0; v < f.length; v++) { for (var g = f[v], y = g.name, m = !1, x = l + 1; x < n.length; x++) { var b = n[x], w = "t" === t[x]; if (w && (m = null != b.properties[g.name])) break } s[y] || m || (s[y] = !0, o.push(y)) } } } return r[i] = o, o }, e.styfn.getContextMeta = function(e) { var t, n = this, r = "", i = e._private.styleCxtKey || ""; n._private.newStyle && (i = ""); for (var a = 0; a < n.length; a++) { var o = n[a], s = o.selector && o.selector.matches(e); r += s ? "t" : "f" } return t = n.getPropertiesDiff(i, r), e._private.styleCxtKey = r, { key: r, diffPropNames: t } }, e.styfn.getContextStyle = function(e) { var t = e.key, n = this, r = this._private.contextStyles = this._private.contextStyles || {}; if (r[t]) return r[t]; for (var i = { _private: { key: t } }, a = 0; a < n.length; a++) { var o = n[a], s = "t" === t[a]; if (s) for (var l = 0; l < o.properties.length; l++) { var u = o.properties[l], c = i[u.name] = u; c.context = o } } return r[t] = i, i }, e.styfn.applyContextStyle = function(e, t, n) { for (var r = this, i = e.diffPropNames, a = {}, o = 0; o < i.length; o++) { var s = i[o], l = t[s], u = n._private.style[s]; if (l && u !== l) { var c = a[s] = { prev: u }; r.applyParsedProperty(n, l), c.next = n._private.style[s], c.next && c.next.bypass && (c.next = c.next.bypassed) } } return { diffProps: a } }, e.styfn.updateStyleHints = function(t) { var n = t._private, r = this, i = n.style, a = !1; if ("nodes" === n.group && r._private.hasPie) for (var o = 1; o <= e.style.pieBackgroundN; o++) { var s = n.style["pie-" + o + "-background-size"].value; if (s > 0) { a = !0; break } } n.hasPie = a; var l = i["text-transform"].strValue, u = i.content.strValue, c = i["font-style"].strValue, s = i["font-size"].pxValue + "px", d = i["font-family"].strValue, h = i["font-weight"].strValue, p = i["text-valign"].strValue, f = i["text-valign"].strValue, v = i["text-outline-width"].pxValue, g = i["text-wrap"].strValue, y = i["text-max-width"].pxValue; n.labelKey = c + "$" + s + "$" + d + "$" + h + "$" + u + "$" + l + "$" + p + "$" + f + "$" + v + "$" + g + "$" + y, n.fontKey = c + "$" + h + "$" + s + "$" + d; var m = i.width.pxValue, x = i.height.pxValue, b = i["border-width"].pxValue; if (n.boundingBoxKey = m + "$" + x + "$" + b, "edges" === t._private.group) { var w = i["control-point-step-size"].pxValue, _ = i["control-point-distance"] ? i["control-point-distance"].pxValue : void 0, E = i["control-point-weight"].value, T = i["curve-style"].strValue; n.boundingBoxKey += "$" + w + "$" + _ + "$" + E + "$" + T } n.styleKey = Date.now() }, e.styfn.applyParsedProperty = function(t, n) { var r, i, a = n, o = t._private.style, s = e.style.types, l = e.style.properties[a.name].type, u = a.bypass, c = o[a.name], d = c && c.bypass, h = t._private; if (("height" === n.name || "width" === n.name) && t.isNode()) { if ("auto" === n.value && !t.isParent()) return !1; "auto" !== n.value && t.isParent() && (a = n = this.parse(n.name, "auto", u)) } if (u && a.deleteBypass) { var p = o[a.name]; return p ? p.bypass && p.bypassed ? (o[a.name] = p.bypassed, !0) : !1 : !0 } var f = function() { e.util.error("Do not assign mappings to elements without corresponding data (e.g. ele `" + t.id() + "` for property `" + a.name + "` with data field `" + a.field + "`); try a `[" + a.field + "]` selector to limit scope to elements with `" + a.field + "` defined") }; switch (a.mapped) { case s.mapData: case s.mapLayoutData: case s.mapScratch: var r, v = a.mapped === s.mapLayoutData, g = a.mapped === s.mapScratch, y = a.field.split("."); r = g || v ? h.scratch : h.data; for (var m = 0; m < y.length && r; m++) { var x = y[m]; r = r[x] } var b; if (b = e.is.number(r) ? (r - a.fieldMin) / (a.fieldMax - a.fieldMin) : 0, 0 > b ? b = 0 : b > 1 && (b = 1), l.color) { var w = a.valueMin[0], _ = a.valueMax[0], E = a.valueMin[1], T = a.valueMax[1], S = a.valueMin[2], C = a.valueMax[2], k = null == a.valueMin[3] ? 1 : a.valueMin[3], D = null == a.valueMax[3] ? 1 : a.valueMax[3], N = [Math.round(w + (_ - w) * b), Math.round(E + (T - E) * b), Math.round(S + (C - S) * b), Math.round(k + (D - k) * b)]; i = { bypass: a.bypass, name: a.name, value: N, strValue: "rgb(" + N[0] + ", " + N[1] + ", " + N[2] + ")" } } else { if (!l.number) return !1; var P = a.valueMin + (a.valueMax - a.valueMin) * b; i = this.parse(a.name, P, a.bypass, !0) } i || (i = this.parse(a.name, c.strValue, a.bypass, !0)), i || f(), i.mapping = a, a = i; break; case s.data: case s.layoutData: case s.scratch: var r, v = a.mapped === s.layoutData, g = a.mapped === s.scratch, y = a.field.split("."); if (r = g || v ? h.scratch : h.data) for (var m = 0; m < y.length; m++) { var x = y[m]; r = r[x] } if (i = this.parse(a.name, r, a.bypass, !0), !i) { var M = c ? c.strValue : ""; i = this.parse(a.name, M, a.bypass, !0) } i || f(), i.mapping = a, a = i; break; case s.fn: var B = a.value, L = B(t); i = this.parse(a.name, L, a.bypass, !0), i.mapping = a, a = i; break; case void 0: break; default: return !1 } return u ? (d ? a.bypassed = c.bypassed : a.bypassed = c, o[a.name] = a) : d ? c.bypassed = a : o[a.name] = a, !0 }, e.styfn.update = function() { var e = this._private.cy, t = e.elements(); t.updateStyle() }, e.styfn.updateMappers = function(t) { for (var n = 0; n < t.length; n++) { for (var r = t[n], i = r._private.style, a = 0; a < e.style.properties.length; a++) { var o = e.style.properties[a], s = i[o.name]; if (s && s.mapping) { var l = s.mapping; this.applyParsedProperty(r, l) } } this.updateStyleHints(r) } }, e.styfn.updateTransitions = function(t, n, r) { var i = this, a = t._private.style, o = a["transition-property"].value, s = a["transition-duration"].msValue, l = a["transition-delay"].msValue, u = {}; if (o.length > 0 && s > 0) { for (var c = !1, d = 0; d < o.length; d++) { var h = o[d], p = a[h], f = n[h]; if (f) { var v, g = f.prev, y = g, m = null != f.next ? f.next : p, x = !1, b = 1e-6; y && (e.is.number(y.pxValue) && e.is.number(m.pxValue) ? (x = m.pxValue - y.pxValue, v = y.pxValue + b * x) : e.is.number(y.value) && e.is.number(m.value) ? (x = m.value - y.value, v = y.value + b * x) : e.is.array(y.value) && e.is.array(m.value) && (x = y.value[0] !== m.value[0] || y.value[1] !== m.value[1] || y.value[2] !== m.value[2], v = y.strValue), x && (u[h] = m.strValue, this.applyBypass(t, h, v), c = !0)) } } if (!c) return; t._private.transitioning = !0, t.stop(), l > 0 && t.delay(l), t.animate({ css: u }, { duration: s, queue: !1, complete: function() { r || i.removeBypasses(t, o), t._private.transitioning = !1 } }) } else t._private.transitioning && (t.stop(), this.removeBypasses(t, o), t._private.transitioning = !1) } }(cytoscape), function(e) { "use strict"; e.styfn.applyBypass = function(t, n, r, i) { var a = [], o = !0; if ("*" === n || "**" === n) { if (void 0 !== r) for (var s = 0; s < e.style.properties.length; s++) { var l = e.style.properties[s], n = l.name, u = this.parse(n, r, !0); u && a.push(u) } } else if (e.is.string(n)) { var u = this.parse(n, r, !0); u && a.push(u) } else { if (!e.is.plainObject(n)) return !1; var c = n; i = r; for (var s = 0; s < e.style.properties.length; s++) { var l = e.style.properties[s], n = l.name, r = c[n]; if (void 0 === r && (r = c[e.util.dash2camel(n)]), void 0 !== r) { var u = this.parse(n, r, !0); u && a.push(u) } } } if (0 === a.length) return !1; for (var d = !1, s = 0; s < t.length; s++) { for (var h, p = t[s], f = p._private.style, v = {}, g = 0; g < a.length; g++) { var l = a[g]; if (i) { var y = f[l.name]; h = v[l.name] = { prev: y } } d = this.applyParsedProperty(p, l) || d, i && (h.next = f[l.name]) } i && this.updateTransitions(p, v, o) } return d }, e.styfn.overrideBypass = function(t, n, r) { for (var i = 0; i < t.length; i++) { var a = t[i], o = a._private.style[e.util.camel2dash(n)]; o.bypass ? (o.value = r, o.pxValue = r) : this.applyBypass(a, n, r) } }, e.styfn.removeAllBypasses = function(t, n) { for (var r = !0, i = 0; i < t.length; i++) { for (var a = t[i], o = {}, s = a._private.style, l = 0; l < e.style.properties.length; l++) { var u = e.style.properties[l], c = u.name, d = "", h = this.parse(c, d, !0), p = s[u.name], f = o[u.name] = { prev: p }; this.applyParsedProperty(a, h), f.next = s[u.name] } n && this.updateTransitions(a, o, r) } }, e.styfn.removeBypasses = function(t, n, r) { for (var i = !0, a = 0; a < t.length; a++) { for (var o = t[a], s = {}, l = o._private.style, u = 0; u < n.length; u++) { var c = n[u], d = e.style.properties[c], h = "", p = this.parse(c, h, !0), f = l[d.name], v = s[d.name] = { prev: f }; this.applyParsedProperty(o, p), v.next = l[d.name] } r && this.updateTransitions(o, s, i) } } }(cytoscape), function(e, t) { "use strict"; e.styfn.getEmSizeInPixels = function() { var e = this._private.cy, n = e.container(); if (t && n && t.getComputedStyle) { var r = t.getComputedStyle(n).getPropertyValue("font-size"), i = parseFloat(r); return i } return 1 }, e.styfn.containerCss = function(e) { var n = this._private.cy, r = n.container(); return t && r && t.getComputedStyle ? t.getComputedStyle(r).getPropertyValue(e) : void 0 }, e.styfn.containerProperty = function(e) { var t = this.containerCss(e), n = this.parse(e, t); return n }, e.styfn.containerPropertyAsString = function(e) { var t = this.containerProperty(e); return t ? t.strValue : void 0 } }(cytoscape, "undefined" == typeof window ? null : window), function(e) { "use strict"; e.styfn.getRenderedStyle = function(t) { var t = t[0]; if (t) { for (var n = {}, r = t._private.style, i = this._private.cy, a = i.zoom(), o = 0; o < e.style.properties.length; o++) { var s = e.style.properties[o], l = r[s.name]; if (l) { var u = l.unitless ? l.strValue : l.pxValue * a + "px"; n[s.name] = u, n[e.util.dash2camel(s.name)] = u } } return n } }, e.styfn.getRawStyle = function(t) { var t = t[0]; if (t) { for (var n = {}, r = t._private.style, i = 0; i < e.style.properties.length; i++) { var a = e.style.properties[i], o = r[a.name]; o && (n[a.name] = o.strValue, n[e.util.dash2camel(a.name)] = o.strValue) } return n } }, e.styfn.getValueStyle = function(t) { var n, r = {}, i = e.is.element(t); if (n = i ? t._private.style : t) for (var a = 0; a < e.style.properties.length; a++) { var o = e.style.properties[a], s = n[o.name] || n[e.util.dash2camel(o.name)]; void 0 === s || e.is.plainObject(s) || (s = this.parse(o.name, s)), s && (r[o.name] = s, r[e.util.dash2camel(o.name)] = s) } return r }, e.styfn.getPropsList = function(t) { var n = [], r = t, i = e.style.properties; if (r) for (var a in r) { var o = r[a], s = i[a] || i[e.util.camel2dash(a)], l = this.parse(s.name, o); n.push(l) } return n } }(cytoscape), function(e) { "use strict"; e.style.applyFromJson = function(e, t) { for (var n = 0; n < t.length; n++) { var r = t[n], i = r.selector, a = r.style || r.css; e.selector(i); for (var o in a) { var s = a[o]; e.css(o, s) } } return e }, e.style.fromJson = function(t, n) { var r = new e.Style(t); return e.style.applyFromJson(r, n), r }, e.styfn.fromJson = function(t) { var n = this; return n.resetToDefault(), e.style.applyFromJson(n, t), n }, e.styfn.json = function() { for (var e = [], t = this.defaultLength; t < this.length; t++) { for (var n = this[t], r = n.selector, i = n.properties, a = {}, o = 0; o < i.length; o++) { var s = i[o]; a[s.name] = s.strValue } e.push({ selector: r ? r.toString() : "core", style: a }) } return e } }(cytoscape), function(e) { "use strict"; e.style.applyFromString = function(t, n) { function r() { l = l.length > a.length ? l.substr(a.length) : "" } function i() { o = o.length > s.length ? o.substr(s.length) : "" } var a, o, s, l = "" + n; for (l = l.replace(/[/][*](\s|.)+?[*][/]/g, "");;) { var u = l.match(/^\s*$/); if (u) break; var c = l.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/); if (!c) { e.util.error("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: " + l); break } a = c[0]; var d = c[1]; if ("core" !== d) { var h = new e.Selector(d); if (h._private.invalid) { e.util.error("Skipping parsing of block: Invalid selector found in string stylesheet: " + d), r(); continue } } var p = c[2], f = !1; o = p; for (var v = [];;) { var u = o.match(/^\s*$/); if (u) break; var g = o.match(/^\s*(.+?)\s*:\s*(.+?)\s*;/); if (!g) { e.util.error("Skipping parsing of block: Invalid formatting of style property and value definitions found in:" + p), f = !0; break } s = g[0]; var y = g[1], m = g[2], x = e.style.properties[y]; if (x) { var b = t.parse(y, m); b ? (v.push({ name: y, val: m }), i()) : (e.util.error("Skipping property: Invalid property definition in: " + s), i()) } else e.util.error("Skipping property: Invalid property name in: " + s), i() } if (f) { r(); break } t.selector(d); for (var w = 0; w < v.length; w++) { var x = v[w]; t.css(x.name, x.val) } r() } return t }, e.style.fromString = function(t, n) { var r = new e.Style(t); return e.style.applyFromString(r, n), r }, e.styfn.fromString = function(t) { var n = this; return n.resetToDefault(), e.style.applyFromString(n, t), n } }(cytoscape), function(e) { "use strict"; e.stylesheet = e.Stylesheet = function() { return this instanceof e.Stylesheet ? void(this.length = 0) : new e.Stylesheet }, e.sheetfn = e.Stylesheet.prototype, e.sheetfn.selector = function(e) { var t = this.length++; return this[t] = { selector: e, properties: [] }, this }, e.sheetfn.css = function(t, n) { var r = this.length - 1; if (e.is.string(t)) this[r].properties.push({ name: t, value: n }); else if (e.is.plainObject(t)) for (var i = t, a = 0; a < e.style.properties.length; a++) { var o = e.style.properties[a], s = i[o.name]; if (void 0 === s && (s = i[e.util.dash2camel(o.name)]), void 0 !== s) { var t = o.name, n = s; this[r].properties.push({ name: t, value: n }) } } return this }, e.sheetfn.style = e.sheetfn.css, e.sheetfn.generateStyle = function(t) { for (var n = new e.Style(t), r = 0; r < this.length; r++) { var i = this[r], a = i.selector, o = i.properties; n.selector(a); for (var s = 0; s < o.length; s++) { var l = o[s]; n.css(l.name, l.value) } } return n } }(cytoscape), function(e, t) { "use strict"; e.Thread = function(t) { return this instanceof e.Thread ? (this._private = { requires: [], files: [], queue: null, pass: [] }, void(t && this.run(t))) : new e.Thread(t) }, e.thread = e.Thread, e.thdfn = e.Thread.prototype, e.fn.thread = function(t, n) { for (var r in t) { var i = t[r]; e.Thread.prototype[r] = i } }; var n = function(t) { var n = e.is.fn(t) ? t.toString() : 'JSON.parse("' + JSON.stringify(t) + '")'; return n }, r = function(t) { var i, o; e.is.object(t) && t.fn ? (i = a(t.fn, t.name), o = t.name, t = t.fn) : e.is.fn(t) ? (i = t.toString(), o = t.name) : e.is.string(t) ? i = t : e.is.object(t) && (i = t.proto ? "" : t.name + " = {};", o = t.name, t = t.obj), i += "\n"; var s = function(e, t) { if (e.prototype) { var n = !1; for (var a in e.prototype) { n = !0; break } n && (i += r({ name: t, obj: e, proto: !0 }, e)) } }; if (t.prototype && null != o) for (var l in t.prototype) { var u = "", c = t.prototype[l], d = n(c), h = o + ".prototype." + l; u += h + " = " + d + ";\n", u && (i += u), s(c, h) } if (!e.is.string(t)) for (var l in t) { var p = ""; if (t.hasOwnProperty(l)) { var c = t[l], d = n(c), h = o + '["' + l + '"]'; p += h + " = " + d + ";\n" } p && (i += p), s(c, h) } return i }, i = function(t) { return e.is.string(t) && t.match(/\.js$/) }; e.fn.thread({ require: function(t, n) { return i(t) ? (this._private.files.push(t), this) : (n && (e.is.fn(t) ? (n = n || t.name, t = { name: n, fn: t }) : t = { name: n, obj: t }), this._private.requires.push(t), this) }, pass: function(e) { return this._private.pass.push(e), this }, run: function(n, i) { var a = this, o = this._private; if (i = i || o.pass.shift(), o.stopped) return void e.util.error("Attempted to run a stopped thread! Start a new thread or do not stop the existing thread and reuse it."); if (o.running) return o.queue = o.queue.then(function() { return a.run(n, i) }); var s = null != t, l = "undefined" != typeof module; a.trigger("run"); var u = new e.Promise(function(u, c) { o.running = !0; var d = o.ran, h = e.is.string(n) ? n : n.toString(), p = "\n" + o.requires.map(function(e) { return r(e) }).concat(o.files.map(function(e) { if (s) { var n = function(e) { return e.match(/^\.\//) || e.match(/^\.\./) ? t.location.origin + t.location.pathname + e : e.match(/^\//) ? t.location.origin + "/" + e : e }; return 'importScripts("' + n(e) + '");' } return l ? 'eval( require("fs").readFileSync("' + e + '", { encoding: "utf8" }) );' : void 0 })).concat(["( function(){", "var ret = (" + h + ")(" + JSON.stringify(i) + ");", "if( ret !== undefined ){ resolve(ret); }", "} )()\n"]).join("\n"); if (o.requires = [], o.files = [], s) { var f, v; if (!d) { var g = p + ""; p = ["function broadcast(m){ return message(m); };", "function message(m){ postMessage(m); };", "function listen(fn){", ' self.addEventListener("message", function(m){ ', ' if( typeof m === "object" && (m.data.$$eval || m.data === "$$start") ){', " } else { ", " fn( m.data );", " }", " });", "};", 'self.addEventListener("message", function(m){ if( m.data.$$eval ){ eval( m.data.$$eval ); } });', "function resolve(v){ postMessage({ $$resolve: v }); };", "function reject(v){ postMessage({ $$reject: v }); };"].join("\n"), p += g, f = new Blob([p], { type: "application/javascript" }), v = t.URL.createObjectURL(f) } var y = o.webworker = o.webworker || new Worker(v); d && y.postMessage({ $$eval: p }); var m; y.addEventListener("message", m = function(t) { var n = e.is.object(t) && e.is.object(t.data); n && "$$resolve" in t.data ? (y.removeEventListener("message", m), u(t.data.$$resolve)) : n && "$$reject" in t.data ? (y.removeEventListener("message", m), c(t.data.$$reject)) : a.trigger(new e.Event(t, { type: "message", message: t.data })) }, !1), d || y.postMessage("$$start") } else if (l) { var m, x = require("path"), b = require("child_process"), w = o.child = o.child || b.fork(x.join(__dirname, "thread-node-fork")); w.on("message", m = function(t) { e.is.object(t) && "$$resolve" in t ? (w.removeListener("message", m), u(t.$$resolve)) : e.is.object(t) && "$$reject" in t ? (w.removeListener("message", m), c(t.$$reject)) : a.trigger(new e.Event({}, { type: "message", message: t })) }), w.send({ $$eval: p }) } else e.error("Tried to create thread but no underlying tech found!") }).then(function(e) { return o.running = !1, o.ran = !0, a.trigger("ran"), e }); return null == o.queue && (o.queue = u), u }, message: function(e) { var t = this._private; return t.webworker && t.webworker.postMessage(e), t.child && t.child.send(e), this }, stop: function() { var e = this._private; return e.webworker && e.webworker.terminate(), e.child && e.child.kill(), e.stopped = !0, this.trigger("stop") }, stopped: function() { return this._private.stopped } }); var a = function(e, t) { var n = e.toString(); return n = n.replace(/function.*\(/, "function " + t + "(") }, o = function(e) { return e = e || {}, function(t, n) { var r = a(t, "_$_$_" + e.name); return this.require(r), this.run(["function( data ){", " var origResolve = resolve;", " var res = [];", " ", " resolve = function( val ){", " res.push( val );", " };", " ", " var ret = data." + e.name + "( _$_$_" + e.name + (arguments.length > 1 ? ", " + JSON.stringify(n) : "") + " );", " ", " resolve = origResolve;", " resolve( res.length > 0 ? res : ret );", "}"].join("\n")) } }; e.fn.thread({ reduce: o({ name: "reduce" }), reduceRight: o({ name: "reduceRight" }), map: o({ name: "map" }) }); var s = e.thdfn; s.promise = s.run, s.terminate = s.halt = s.stop, s.include = s.require, e.worker = e.Worker = e.Thread, e.fn.thread({ on: e.define.on(), one: e.define.on({ unbindSelfOnTrigger: !0 }), off: e.define.off(), trigger: e.define.trigger() }), e.define.eventAliasesOn(e.thdfn) }(cytoscape, "undefined" == typeof window ? null : window), function(e, t) { "use strict"; e.Fabric = function(t) { if (!(this instanceof e.Fabric)) return new e.Fabric(t); this._private = { pass: [] }; var n = 4; e.is.number(t), t = "undefined" != typeof navigator && null != navigator.hardwareConcurrency ? navigator.hardwareConcurrency : "undefined" != typeof module ? require("os").cpus().length : n; for (var r = 0; t > r; r++) this[r] = e.Thread(); this.length = t }, e.fabric = e.Fabric, e.fabfn = e.Fabric.prototype, e.fn.fabric = function(t, n) { for (var r in t) { var i = t[r]; e.Fabric.prototype[r] = i } }, e.fn.fabric({ require: function(e, t) { for (var n = 0; n < this.length; n++) { var r = this[n]; r.require(e, t) } return this }, random: function() { var e = Math.round((this.length - 1) * Math.random()), t = this[e]; return t }, run: function(e) { var t = this._private.pass.shift(); return this.random().pass(t).run(e) }, message: function(e) { return this.random().message(e) }, broadcast: function(e) { for (var t = 0; t < this.length; t++) { var n = this[t]; n.message(e) } return this }, stop: function() { for (var e = 0; e < this.length; e++) { var t = this[e]; t.stop() } return this }, pass: function(t) { var n = this._private.pass; return e.is.array(t) ? n.push(t) : e.util.error("Only arrays or collections may be used with fabric.pass()"), this }, spreadSize: function() { var e = Math.ceil(this._private.pass[0].length / this.length); return e = Math.max(1, e) }, spread: function(t) { for (var n = this, r = n._private, i = n.spreadSize(), a = r.pass.shift().concat([]), o = [], s = 0; s < this.length; s++) { var l = this[s], u = a.splice(0, i), c = l.pass(u).run(t); o.push(c); var d = 0 === a.length; if (d) break } return e.Promise.all(o).then(function(e) { for (var t = [], n = 0, r = 0; r < e.length; r++) for (var i = e[r], a = 0; a < i.length; a++) { var o = i[a]; t[n++] = o } return t }) }, map: function(e) { var t = this; return t.require(e, "_$_$_fabmap"), t.spread(function(e) { var t = [], n = resolve; resolve = function(e) { t.push(e) }; for (var r = 0; r < e.length; r++) { var i = t.length, a = _$_$_fabmap(e[r]), o = i === t.length; o && t.push(a) } return resolve = n, t }) }, filter: function(e) { var t = this._private, n = t.pass[0]; return this.map(e).then(function(e) { for (var t = [], r = 0; r < n.length; r++) { var i = n[r], a = e[r]; a && t.push(i) } return t }) }, sort: function(e) { var t = this, n = this._private.pass[0].length, r = this.spreadSize(); return e = e || function(e, t) { return t > e ? -1 : e > t ? 1 : 0 }, t.require(e, "_$_$_cmp"), t.spread(function(e) { var t = e.sort(_$_$_cmp); resolve(t) }).then(function(t) { for (var i = function(r, i, a) { i = Math.min(i, n), a = Math.min(a, n); for (var o = r, s = i, l = [], u = o; a > u; u++) { var c = t[r], d = t[i]; s > r && (i >= a || e(c, d) <= 0) ? (l.push(c), r++) : (l.push(d), i++) } for (var u = 0; u < l.length; u++) { var h = o + u; t[h] = l[u] } }, a = r; n > a; a *= 2) for (var o = 0; n > o; o += 2 * a) i(o, o + a, o + 2 * a); return t }) } }); var n = function(e) { return e = e || {}, function(t, n) { var r = this._private.pass.shift(); return this.random().pass(r)[e.threadFn](t, n) } }; e.fn.fabric({ randomMap: n({ threadFn: "map" }), reduce: n({ threadFn: "reduce" }), reduceRight: n({ threadFn: "reduceRight" }) }); var r = e.fabfn; r.promise = r.run, r.terminate = r.halt = r.stop, r.include = r.require, e.fn.fabric({ on: e.define.on(), one: e.define.on({ unbindSelfOnTrigger: !0 }), off: e.define.off(), trigger: e.define.trigger() }), e.define.eventAliasesOn(e.fabfn) }(cytoscape, "undefined" == typeof window ? null : window), function(e, t) { "use strict"; var n = {}, r = e.util.copy(n); e.defaults = function(t) { n = e.util.extend({}, r, t) }, e.fn.core = function(t, n) { for (var r in t) { var i = t[r]; e.Core.prototype[r] = i } }, e.Core = function(r) { if (!(this instanceof e.Core)) return new e.Core(r); var i = this; r = e.util.extend({}, n, r); var a = r.container, o = a ? a._cyreg : null; if (o = o || {}, o && o.cy) { if (a) for (; a.firstChild;) a.removeChild(a.firstChild); o.cy.notify({ type: "destroy" }), o = {} } var s = o.readies = o.readies || []; a && (a._cyreg = o), o.cy = i; var l = void 0 !== t && void 0 !== a && !r.headless, u = r; u.layout = e.util.extend({ name: l ? "grid" : "null" }, u.layout), u.renderer = e.util.extend({ name: l ? "canvas" : "null" }, u.renderer); var c = function(e, t, n) { return void 0 !== t ? t : void 0 !== n ? n : e }, d = this._private = { container: u.container, ready: !1, initrender: !1, options: u, elements: [], id2index: {}, listeners: [], onRenders: [], aniEles: e.Collection(this), scratch: {}, layout: null, renderer: null, notificationsEnabled: !0, minZoom: 1e-50, maxZoom: 1e50, zoomingEnabled: c(!0, u.zoomingEnabled), userZoomingEnabled: c(!0, u.userZoomingEnabled), panningEnabled: c(!0, u.panningEnabled), userPanningEnabled: c(!0, u.userPanningEnabled), boxSelectionEnabled: c(!1, u.boxSelectionEnabled), autolock: c(!1, u.autolock, u.autolockNodes), autoungrabify: c(!1, u.autoungrabify, u.autoungrabifyNodes), autounselectify: c(!1, u.autounselectify), styleEnabled: void 0 === u.styleEnabled ? l : u.styleEnabled, zoom: e.is.number(u.zoom) ? u.zoom : 1, pan: { x: e.is.plainObject(u.pan) && e.is.number(u.pan.x) ? u.pan.x : 0, y: e.is.plainObject(u.pan) && e.is.number(u.pan.y) ? u.pan.y : 0 }, animation: { current: [], queue: [] }, hasCompoundNodes: !1, deferredExecQueue: [] }, h = u.selectionType; void 0 === h || "additive" !== h && "single" !== h ? d.selectionType = "single" : d.selectionType = h, e.is.number(u.minZoom) && e.is.number(u.maxZoom) && u.minZoom < u.maxZoom ? (d.minZoom = u.minZoom, d.maxZoom = u.maxZoom) : e.is.number(u.minZoom) && void 0 === u.maxZoom ? d.minZoom = u.minZoom : e.is.number(u.maxZoom) && void 0 === u.minZoom && (d.maxZoom = u.maxZoom); var p = function(t) { for (var n = !1, r = 0; r < f.length; r++) { var i = f[r]; if (e.is.promise(i)) { n = !0; break } } return n ? e.Promise.all(f).then(t) : void t(f) }, f = [u.style, u.elements]; p(function(t) { var n = t[0], r = t[1]; d.styleEnabled && i.setStyle(n), i.initRenderer(e.util.extend({ hideEdgesOnViewport: u.hideEdgesOnViewport, hideLabelsOnViewport: u.hideLabelsOnViewport, textureOnViewport: u.textureOnViewport, wheelSensitivity: e.is.number(u.wheelSensitivity) && u.wheelSensitivity > 0 ? u.wheelSensitivity : 1, motionBlur: void 0 === u.motionBlur ? !0 : u.motionBlur, motionBlurOpacity: void 0 === u.motionBlurOpacity ? .05 : u.motionBlurOpacity, pixelRatio: e.is.number(u.pixelRatio) && u.pixelRatio > 0 ? u.pixelRatio : "auto" === u.pixelRatio ? void 0 : 1, desktopTapThreshold: void 0 === u.desktopTapThreshold ? 4 : u.desktopTapThreshold, touchTapThreshold: void 0 === u.touchTapThreshold ? 8 : u.touchTapThreshold }, u.renderer)), u.initrender && (i.on("initrender", u.initrender), i.on("initrender", function() { i._private.initrender = !0 })), i.load(r, function() { i.startAnimationLoop(), i._private.ready = !0, e.is.fn(u.ready) && i.on("ready", u.ready); for (var t = 0; t < s.length; t++) { var n = s[t]; i.on("ready", n) } o && (o.readies = []), i.trigger("ready") }, u.done) }) }, e.corefn = e.Core.prototype, e.fn.core({ isReady: function() { return this._private.ready }, ready: function(e) { this.isReady() ? this.trigger("ready", [], e) : this.on("ready", e) }, initrender: function() { return this._private.initrender }, destroy: function() { this.notify({ type: "destroy" }); var e = this.container(), t = e.parentNode; if (t) try { t.removeChild(e) } catch (n) {} return this }, getElementById: function(t) { var n = this._private.id2index[t]; return void 0 !== n ? this._private.elements[n] : new e.Collection(this) }, selectionType: function() { return this._private.selectionType }, hasCompoundNodes: function() { return this._private.hasCompoundNodes }, styleEnabled: function() { return this._private.styleEnabled }, addToPool: function(e) { for (var t = this._private.elements, n = this._private.id2index, r = 0; r < e.length; r++) { var i = e[r], a = i._private.data.id, o = n[a], s = void 0 !== o; s || (o = t.length, t.push(i), n[a] = o, i._private.index = o) } return this }, removeFromPool: function(e) { for (var t = this._private.elements, n = this._private.id2index, r = 0; r < e.length; r++) { var i = e[r], a = i._private.data.id, o = n[a], s = void 0 !== o; if (s) { this._private.id2index[a] = void 0, t.splice(o, 1); for (var l = o; l < t.length; l++) { var u = t[l]._private.data.id; n[u]--, t[l]._private.index-- } } } }, container: function() { return this._private.container }, options: function() { return e.util.copy(this._private.options) }, json: function(e) { var t = {}, n = this; return t.elements = {}, n.elements().each(function(e, n) { var r = n.group(); t.elements[r] || (t.elements[r] = []), t.elements[r].push(n.json()) }), this._private.styleEnabled && (t.style = n.style().json()), t.zoomingEnabled = n._private.zoomingEnabled, t.userZoomingEnabled = n._private.userZoomingEnabled, t.zoom = n._private.zoom, t.minZoom = n._private.minZoom, t.maxZoom = n._private.maxZoom, t.panningEnabled = n._private.panningEnabled, t.userPanningEnabled = n._private.userPanningEnabled, t.pan = n._private.pan, t.boxSelectionEnabled = n._private.boxSelectionEnabled, t.layout = n._private.options.layout, t.renderer = n._private.options.renderer, t.hideEdgesOnViewport = n._private.options.hideEdgesOnViewport, t.hideLabelsOnViewport = n._private.options.hideLabelsOnViewport, t.textureOnViewport = n._private.options.textureOnViewport, t.wheelSensitivity = n._private.options.wheelSensitivity, t.motionBlur = n._private.options.motionBlur, t }, defer: function(e) { var t = this, n = t._private, r = n.deferredExecQueue; r.push(e), n.deferredTimeout || (n.deferredTimeout = setTimeout(function() { for (; r.length > 0;) r.shift()(); n.deferredTimeout = null }, 0)) } }) }(cytoscape, "undefined" == typeof window ? null : window), function(e, t) { "use strict"; function n(e) { var t = !document || "interactive" !== document.readyState && "complete" !== document.readyState ? n : e; setTimeout(t, 9, e) } e.fn.core({ add: function(t) { var n, r = this; if (e.is.elementOrCollection(t)) { var i = t; if (i._private.cy === r) n = i.restore(); else { for (var a = [], o = 0; o < i.length; o++) { var s = i[o]; a.push(s.json()) } n = new e.Collection(r, a) } } else if (e.is.array(t)) { var a = t; n = new e.Collection(r, a) } else if (e.is.plainObject(t) && (e.is.array(t.nodes) || e.is.array(t.edges))) { for (var l = t, a = [], u = ["nodes", "edges"], o = 0, c = u.length; c > o; o++) { var d = u[o], h = l[d]; if (e.is.array(h)) for (var p = 0, f = h.length; f > p; p++) { var v = h[p]; v.group = d, a.push(v) } } n = new e.Collection(r, a) } else { var v = t; n = new e.Element(r, v).collection() } return n }, remove: function(t) { if (e.is.elementOrCollection(t)) t = t; else if (e.is.string(t)) { var n = t; t = this.$(n) } return t.remove() }, load: function(r, i, a) { function o() { s.one("layoutready", function(e) { s.notifications(!0), s.trigger(e), s.notify({ type: "load", collection: s.elements() }), s.one("load", i), s.trigger("load") }).one("layoutstop", function() { s.one("done", a), s.trigger("done") }); var t = e.util.extend({}, s._private.options.layout); t.eles = s.$(), s.layout(t) } var s = this; s.notifications(!1); var l = s.elements(); return l.length > 0 && l.remove(), null != r && (e.is.plainObject(r) || e.is.array(r)) && s.add(r), t ? n(o) : o(), this } }) }(cytoscape, "undefined" == typeof window ? null : window), function(e, t) { "use strict"; e.fn.core({ animated: e.define.animated(), clearQueue: e.define.clearQueue(), delay: e.define.delay(), animate: e.define.animate(), stop: e.define.stop(), addToAnimationPool: function(e) { var t = this; t.styleEnabled() && t._private.aniEles.merge(e) }, startAnimationLoop: function() { function n() { e.util.requestAnimationFrame(function(e) { r(e), n() }) } function r(t) { function n(n, r) { var l = n._private.animation.current, u = n._private.animation.queue, c = !1; if (0 === l.length) { var d = u.length > 0 ? u.shift() : null; d && (d.callTime = t, l.push(d)) } for (var h = [], p = l.length - 1; p >= 0; p--) { var f = l[p]; f.started || (i(n, f), s = !0), a(n, f, t, r), f.done && (h.push(f), l.splice(p, 1)), c = !0 } for (var p = 0; p < h.length; p++) { var f = h[p], v = f.params.complete; e.is.fn(v) && v.apply(n, [t]) } return r || 0 !== l.length || 0 !== u.length || o.push(n), c } t = +new Date; for (var r = l._private.aniEles, o = [], s = !1, u = 0; u < r.length; u++) { var c = r[u]; n(c) } var d = n(l, !0); if (r.length > 0 || d) { var h; if (r.length > 0) { var p = r.updateCompoundBounds(); h = p.length > 0 ? r.add(p) : r } l.notify({ type: s ? "style" : "draw", collection: h }) } r.unmerge(o) } function i(t, n) { var r = e.is.core(t), i = !r, a = t, o = l._private.style; if (i) var s = a._private.position, u = { x: s.x, y: s.y }, c = o.getValueStyle(a); if (r) var d = l._private.pan, h = { x: d.x, y: d.y }, p = l._private.zoom; n.started = !0, n.startTime = Date.now(), n.startPosition = u, n.startStyle = c, n.startPan = h, n.startZoom = p } function a(t, n, r, i) { var a, u = l._private.style, c = n.properties, d = n.params, h = n.startTime, p = !i; if (a = 0 === n.duration ? 1 : Math.min(1, (r - h) / n.duration), 0 > a ? a = 0 : a > 1 && (a = 1), null == c.delay) { var f = n.startPosition, v = c.position, g = t._private.position; v && p && (o(f.x, v.x) && (g.x = s(f.x, v.x, a)), o(f.y, v.y) && (g.y = s(f.y, v.y, a))); var y = n.startPan, m = c.pan, x = t._private.pan, b = null != m && i; b && (o(y.x, m.x) && (x.x = s(y.x, m.x, a)), o(y.y, m.y) && (x.y = s(y.y, m.y, a)), t.trigger("pan")); var w = n.startZoom, _ = c.zoom, E = null != _ && i; E && (o(w, _) && (t._private.zoom = s(w, _, a)), t.trigger("zoom")), (b || E) && t.trigger("viewport"); var T = c.style || c.css; if (T && p) for (var S = 0; S < T.length; S++) { var C = T[S].name, k = T[S], D = k, N = n.startStyle[C], P = s(N, D, a); u.overrideBypass(t, C, P) } } return e.is.fn(d.step) && d.step.apply(t, [r]), a >= 1 && (n.done = !0), a } function o(t, n) { return null == t || null == n ? !1 : e.is.number(t) && e.is.number(n) ? !0 : t && n ? !0 : !1 } function s(t, n, r) { 0 > r ? r = 0 : r > 1 && (r = 1); var i, a; if (i = null != t.pxValue || null != t.value ? null != t.pxValue ? t.pxValue : t.value : t, a = null != n.pxValue || null != n.value ? null != n.pxValue ? n.pxValue : n.value : n, e.is.number(i) && e.is.number(a)) return i + (a - i) * r; if (e.is.number(i[0]) && e.is.number(a[0])) { var o = i, s = a, l = function(e, t) { var n = t - e, i = e; return Math.round(r * n + i) }, u = l(o[0], s[0]), c = l(o[1], s[1]), d = l(o[2], s[2]); return [u, c, d] } return void 0 } var l = this; l.styleEnabled() && t && n() } }) }(cytoscape, "undefined" == typeof window ? null : window), function(e) { "use strict"; e.fn.core({ data: e.define.data({ field: "data", bindingEvent: "data", allowBinding: !0, allowSetting: !0, settingEvent: "data", settingTriggersEvent: !0, triggerFnName: "trigger", allowGetting: !0 }), removeData: e.define.removeData({ field: "data", event: "data", triggerFnName: "trigger", triggerEvent: !0 }), scratch: e.define.data({ field: "scratch", allowBinding: !1, allowSetting: !0, settingTriggersEvent: !1, allowGetting: !0 }), removeScratch: e.define.removeData({ field: "scratch", triggerEvent: !1 }) }) }(cytoscape), function(e) { "use strict"; e.fn.core({ on: e.define.on(), one: e.define.on({ unbindSelfOnTrigger: !0 }), once: e.define.on({ unbindAllBindersOnTrigger: !0 }), off: e.define.off(), trigger: e.define.trigger() }), e.define.eventAliasesOn(e.corefn) }(cytoscape), function(e) { "use strict"; e.fn.core({ png: function(e) { var t = this._private.renderer; return e = e || {}, t.png(e) }, jpg: function(e) { var t = this._private.renderer; return e = e || {}, e.bg = e.bg || "#fff", t.jpg(e) } }), e.corefn.jpeg = e.corefn.jpg }(cytoscape), function(e) { "use strict"; e.fn.core({ layout: function(t) { var n; return null == t && (t = e.util.extend({}, this._private.options.layout), t.eles = this.$()), n = this.initLayout(t), n.run(), this }, makeLayout: function(e) { return this.initLayout(e) }, initLayout: function(t) { if (null == t) return void e.util.error("Layout options must be specified to make a layout"); if (null == t.name) return void e.util.error("A `name` must be specified to make a layout"); var n = t.name, r = e.extension("layout", n); if (null == r) return void e.util.error("Can not apply layout: No such layout `" + n + "` found; did you include its JS file?"); t.eles = null != t.eles ? t.eles : this.$(), e.is.string(t.eles) && (t.eles = this.$(t.eles)); var i = new r(e.util.extend({}, t, { cy: this })); return e.is.plainObject(i._private) || (i._private = {}), i._private.cy = this, i._private.listeners = [], i } }), e.corefn.createLayout = e.corefn.makeLayout }(cytoscape), function(e) { "use strict"; e.fn.core({ notify: function(e) { if (this._private.batchingNotify) { var t = this._private.batchNotifyEles, n = this._private.batchNotifyTypes; if (e.collection) for (var r = 0; r < e.collection.length; r++) { var i = e.collection[r]; t.ids[i._private.id] || t.push(i) } return void(n.ids[e.type] || n.push(e.type)) } if (this._private.notificationsEnabled) { var a = this.renderer(); a.notify(e) } }, notifications: function(e) { var t = this._private; return void 0 === e ? t.notificationsEnabled : void(t.notificationsEnabled = e ? !0 : !1) }, noNotifications: function(e) { this.notifications(!1), e(), this.notifications(!0) }, startBatch: function() { var e = this._private; return e.batchingStyle = e.batchingNotify = !0, e.batchStyleEles = [], e.batchNotifyEles = [], e.batchNotifyTypes = [], e.batchStyleEles.ids = {}, e.batchNotifyEles.ids = {}, e.batchNotifyTypes.ids = {}, this }, endBatch: function() { var t = this._private; return t.batchingStyle = !1, new e.Collection(this, t.batchStyleEles).updateStyle(), t.batchingNotify = !1, this.notify({ type: t.batchNotifyTypes, collection: t.batchNotifyEles }), this }, batch: function(e) { return this.startBatch(), e(), this.endBatch(), this }, batchData: function(e) { var t = this; return this.batch(function() { for (var n in e) { var r = e[n], i = t.getElementById(n); i.data(r) } }) } }) }(cytoscape), function(e) { "use strict"; e.fn.core({ renderTo: function(e, t, n, r) { var i = this._private.renderer; return i.renderTo(e, t, n, r), this }, renderer: function() { return this._private.renderer }, forceRender: function() { return this.notify({ type: "draw" }), this }, resize: function() { return this.notify({ type: "resize" }), this.trigger("resize"), this }, initRenderer: function(t) { var n = this, r = e.extension("renderer", t.name); return null == r ? void e.util.error("Can not initialise: No such renderer `%s` found; did you include its JS file?", t.name) : void(this._private.renderer = new r(e.util.extend({}, t, { cy: n, style: n._private.style }))) }, triggerOnRender: function() { for (var e = this._private.onRenders, t = 0; t < e.length; t++) { var n = e[t]; n() } return this }, onRender: function(e) { return this._private.onRenders.push(e), this }, offRender: function(e) { var t = this._private.onRenders; if (null == e) return this._private.onRenders = [], this; for (var n = 0; n < t.length; n++) { var r = t[n]; if (e === r) { t.splice(n, 1); break } } return this } }) }(cytoscape), function(e) { "use strict"; e.fn.core({ collection: function(t) { return e.is.string(t) ? this.$(t) : e.is.elementOrCollection(t) ? t.collection() : e.is.array(t) ? new e.Collection(this, t) : new e.Collection(this) }, nodes: function(e) { var t = this.$(function() { return this.isNode() }); return e ? t.filter(e) : t }, edges: function(e) { var t = this.$(function() { return this.isEdge() }); return e ? t.filter(e) : t }, $: function(t) { var n = new e.Collection(this, this._private.elements); return t ? n.filter(t) : n } }), e.corefn.elements = e.corefn.filter = e.corefn.$ }(cytoscape), function(e) { "use strict"; e.fn.core({ style: function(e) { if (e) { var t = this.setStyle(e); t.update() } return this._private.style }, setStyle: function(t) { var n = this._private; return e.is.stylesheet(t) ? n.style = t.generateStyle(this) : e.is.array(t) ? n.style = e.style.fromJson(this, t) : e.is.string(t) ? n.style = e.style.fromString(this, t) : n.style = new e.Style(this), n.style } }) }(cytoscape), function(e) { "use strict"; e.fn.core({ autolock: function(e) { return void 0 === e ? this._private.autolock : (this._private.autolock = e ? !0 : !1, this) }, autoungrabify: function(e) { return void 0 === e ? this._private.autoungrabify : (this._private.autoungrabify = e ? !0 : !1, this) }, autounselectify: function(e) { return void 0 === e ? this._private.autounselectify : (this._private.autounselectify = e ? !0 : !1, this) }, panningEnabled: function(e) { return void 0 === e ? this._private.panningEnabled : (this._private.panningEnabled = e ? !0 : !1, this) }, userPanningEnabled: function(e) { return void 0 === e ? this._private.userPanningEnabled : (this._private.userPanningEnabled = e ? !0 : !1, this) }, zoomingEnabled: function(e) { return void 0 === e ? this._private.zoomingEnabled : (this._private.zoomingEnabled = e ? !0 : !1, this) }, userZoomingEnabled: function(e) { return void 0 === e ? this._private.userZoomingEnabled : (this._private.userZoomingEnabled = e ? !0 : !1, this) }, boxSelectionEnabled: function(e) { return void 0 === e ? this._private.boxSelectionEnabled : (this._private.boxSelectionEnabled = e ? !0 : !1, this) }, pan: function() { var t, n, r, i, a, o = arguments, s = this._private.pan; switch (o.length) { case 0: return s; case 1: if (e.is.string(o[0])) return t = o[0], s[t]; if (e.is.plainObject(o[0])) { if (!this._private.panningEnabled) return this; r = o[0], i = r.x, a = r.y, e.is.number(i) && (s.x = i), e.is.number(a) && (s.y = a), this.trigger("pan viewport") } break; case 2: if (!this._private.panningEnabled) return this; t = o[0], n = o[1], "x" !== t && "y" !== t || !e.is.number(n) || (s[t] = n), this.trigger("pan viewport") } return this.notify({ type: "viewport" }), this }, panBy: function(t) { var n, r, i, a, o, s = arguments, l = this._private.pan; if (!this._private.panningEnabled) return this; switch (s.length) { case 1: e.is.plainObject(s[0]) && (i = s[0], a = i.x, o = i.y, e.is.number(a) && (l.x += a), e.is.number(o) && (l.y += o), this.trigger("pan viewport")); break; case 2: n = s[0], r = s[1], "x" !== n && "y" !== n || !e.is.number(r) || (l[n] += r), this.trigger("pan viewport") } return this.notify({ type: "viewport" }), this }, fit: function(e, t) { var n = this.getFitViewport(e, t); if (n) { var r = this._private; r.zoom = n.zoom, r.pan = n.pan, this.trigger("pan zoom viewport"), this.notify({ type: "viewport" }) } return this }, getFitViewport: function(t, n) { if (e.is.number(t) && void 0 === n && (n = t, t = void 0), this._private.panningEnabled && this._private.zoomingEnabled) { var r; if (e.is.string(t)) { var i = t; t = this.$(i) } else if (e.is.boundingBox(t)) { var a = t; r = { x1: a.x1, y1: a.y1, x2: a.x2, y2: a.y2 }, r.w = r.x2 - r.x1, r.h = r.y2 - r.y1 } else e.is.elementOrCollection(t) || (t = this.elements()); r = r || t.boundingBox(); var o, s = this.width(), l = this.height(); if (n = e.is.number(n) ? n : 0, !isNaN(s) && !isNaN(l) && s > 0 && l > 0 && !isNaN(r.w) && !isNaN(r.h) && r.w > 0 && r.h > 0) { o = Math.min((s - 2 * n) / r.w, (l - 2 * n) / r.h), o = o > this._private.maxZoom ? this._private.maxZoom : o, o = o < this._private.minZoom ? this._private.minZoom : o; var u = { x: (s - o * (r.x1 + r.x2)) / 2, y: (l - o * (r.y1 + r.y2)) / 2 }; return { zoom: o, pan: u } } } }, minZoom: function(t) { return void 0 === t ? this._private.minZoom : (e.is.number(t) && (this._private.minZoom = t), this) }, maxZoom: function(t) { return void 0 === t ? this._private.maxZoom : (e.is.number(t) && (this._private.maxZoom = t), this) }, zoom: function(t) { var n, r; if (void 0 === t) return this._private.zoom; if (e.is.number(t)) r = t; else if (e.is.plainObject(t)) { if (r = t.level, t.position) { var i = t.position, a = this._private.pan, o = this._private.zoom; n = { x: i.x * o + a.x, y: i.y * o + a.y } } else t.renderedPosition && (n = t.renderedPosition); if (n && !this._private.panningEnabled) return this } if (!this._private.zoomingEnabled) return this; if (!e.is.number(r) || n && (!e.is.number(n.x) || !e.is.number(n.y))) return this; if (r = r > this._private.maxZoom ? this._private.maxZoom : r, r = r < this._private.minZoom ? this._private.minZoom : r, n) { var s = this._private.pan, l = this._private.zoom, u = r, c = { x: -u / l * (n.x - s.x) + n.x, y: -u / l * (n.y - s.y) + n.y }; this._private.zoom = r, this._private.pan = c; var d = s.x !== c.x || s.y !== c.y; this.trigger(" zoom " + (d ? " pan " : "") + " viewport ") } else this._private.zoom = r, this.trigger("zoom viewport"); return this.notify({ type: "viewport" }), this }, viewport: function(t) { var n = this._private, r = !0, i = !0, a = [], o = !1, s = !1; if (!t) return this; if (e.is.number(t.zoom) || (r = !1), e.is.plainObject(t.pan) || (i = !1), !r && !i) return this; if (r) { var l = t.zoom; l < n.minZoom || l > n.maxZoom || !n.zoomingEnabled ? o = !0 : (n.zoom = l, a.push("zoom")) } if (i && (!o || !t.cancelOnFailedZoom) && n.panningEnabled) { var u = t.pan; e.is.number(u.x) && (n.pan.x = u.x, s = !1), e.is.number(u.y) && (n.pan.y = u.y, s = !1), s || a.push("pan") } return a.length > 0 && (a.push("viewport"), this.trigger(a.join(" ")), this.notify({ type: "viewport" })), this }, center: function(e) { var t = this.getCenterPan(e); return t && (this._private.pan = t, this.trigger("pan viewport"), this.notify({ type: "viewport" })), this }, getCenterPan: function(t, n) { if (this._private.panningEnabled) { if (e.is.string(t)) { var r = t; t = this.elements(r) } else e.is.elementOrCollection(t) || (t = this.elements()); var i = t.boundingBox(), a = this.width(), o = this.height(); n = void 0 === n ? this._private.zoom : n; var s = { x: (a - n * (i.x1 + i.x2)) / 2, y: (o - n * (i.y1 + i.y2)) / 2 }; return s } }, reset: function() { return this._private.panningEnabled && this._private.zoomingEnabled ? (this.viewport({ pan: { x: 0, y: 0 }, zoom: 1 }), this) : this }, width: function() { var e = this._private.container; return e ? e.clientWidth : 1 }, height: function() { var e = this._private.container; return e ? e.clientHeight : 1 }, extent: function() { var e = this._private.pan, t = this._private.zoom, n = this.renderedExtent(), r = { x1: (n.x1 - e.x) / t, x2: (n.x2 - e.x) / t, y1: (n.y1 - e.y) / t, y2: (n.y2 - e.y) / t }; return r.w = r.x2 - r.x1, r.h = r.y2 - r.y1, r }, renderedExtent: function() { var e = this.width(), t = this.height(); return { x1: 0, y1: 0, x2: e, y2: t, w: e, h: t } } }), e.corefn.centre = e.corefn.center, e.corefn.autolockNodes = e.corefn.autolock, e.corefn.autoungrabifyNodes = e.corefn.autoungrabify }(cytoscape), function(e) { "use strict"; e.fn.collection = e.fn.eles = function(t, n) { for (var r in t) { var i = t[r]; e.Collection.prototype[r] = i } }; var t = { prefix: { nodes: "n", edges: "e" }, id: { nodes: 0, edges: 0 }, generate: function(t, n, r) { var i = e.is.element(n) ? n._private : n, a = i.group, o = null != r ? r : this.prefix[a] + this.id[a]; if (t.getElementById(o).empty()) this.id[a]++; else for (; !t.getElementById(o).empty();) o = this.prefix[a] + ++this.id[a]; return o } }; e.Element = function(t, n, r) { if (!(this instanceof e.Element)) return new e.Element(t, n, r); var i = this; if (r = void 0 === r || r ? !0 : !1, void 0 === t || void 0 === n || !e.is.core(t)) return void e.util.error("An element must have a core reference and parameters set"); if ("nodes" !== n.group && "edges" !== n.group) return void e.util.error("An element must be of type `nodes` or `edges`; you specified `" + n.group + "`"); if (this.length = 1, this[0] = this, this._private = { cy: t, single: !0, data: n.data || {}, position: n.position || {}, autoWidth: void 0, autoHeight: void 0, listeners: [], group: n.group, style: {}, rstyle: {}, styleCxts: [], removed: !0, selected: n.selected ? !0 : !1, selectable: void 0 === n.selectable ? !0 : n.selectable ? !0 : !1, locked: n.locked ? !0 : !1, grabbed: !1, grabbable: void 0 === n.grabbable ? !0 : n.grabbable ? !0 : !1, active: !1, classes: {}, animation: { current: [], queue: [] }, rscratch: {}, scratch: n.scratch || {}, edges: [], children: [] }, n.renderedPosition) { var a = n.renderedPosition, o = t.pan(), s = t.zoom(); this._private.position = { x: (a.x - o.x) / s, y: (a.y - o.y) / s } } if (e.is.string(n.classes)) for (var l = n.classes.split(/\s+/), u = 0, c = l.length; c > u; u++) { var d = l[u]; d && "" !== d && (i._private.classes[d] = !0) } n.css && t.style().applyBypass(this, n.css), (void 0 === r || r) && this.restore() }, e.Collection = function(n, r, i) { if (!(this instanceof e.Collection)) return new e.Collection(n, r); if (void 0 === n || !e.is.core(n)) return void e.util.error("A collection must have a reference to the core"); var a = {}, o = {}, s = !1; if (r) { if (r.length > 0 && e.is.plainObject(r[0]) && !e.is.element(r[0])) { s = !0; for (var l = [], u = {}, c = 0, d = r.length; d > c; c++) { var h = r[c]; null == h.data && (h.data = {}); var p = h.data; if (null == p.id) p.id = t.generate(n, h); else if (0 !== n.getElementById(p.id).length || u[p.id]) continue; var f = new e.Element(n, h, !1); l.push(f), u[p.id] = !0 } r = l } } else r = []; this.length = 0; for (var c = 0, d = r.length; d > c; c++) { var v = r[c]; if (v) { var g = v._private.data.id; (!i || i.unique && !a[g]) && (a[g] = v, o[g] = this.length, this[this.length] = v, this.length++) } } this._private = { cy: n, ids: a, indexes: o }, s && this.restore() }, e.elefn = e.elesfn = e.Element.prototype = e.Collection.prototype, e.elesfn.cy = function() { return this._private.cy }, e.elesfn.element = function() { return this[0] }, e.elesfn.collection = function() { return e.is.collection(this) ? this : new e.Collection(this._private.cy, [this]) }, e.elesfn.unique = function() { return new e.Collection(this._private.cy, this, { unique: !0 }) }, e.elesfn.getElementById = function(t) { var n = this._private.cy, r = this._private.ids[t]; return r ? r : e.Collection(n) }, e.elesfn.json = function() { var t = this.element(); if (null == t) return void 0; var n = t._private, r = e.util.copy({ data: n.data, position: n.position, group: n.group, bypass: n.bypass, removed: n.removed, selected: n.selected, selectable: n.selectable, locked: n.locked, grabbed: n.grabbed, grabbable: n.grabbable, classes: "" }), i = []; for (var a in n.classes) n.classes[a] && i.push(a); for (var o = 0; o < i.length; o++) { var a = i[o]; r.classes += a + (o < i.length - 1 ? " " : "") } return r }, e.elesfn.jsons = function() { for (var e = [], t = 0; t < this.length; t++) { var n = this[t], r = n.json(); e.push(r) } return e }, e.elesfn.clone = function() { for (var t = this.cy(), n = [], r = 0; r < this.length; r++) { var i = this[r], a = i.json(), o = new e.Element(t, a, !1); n.push(o) } return new e.Collection(t, n) }, e.elesfn.copy = e.elesfn.clone, e.elesfn.restore = function(n) { var r = this, i = [], a = r.cy(); void 0 === n && (n = !0); for (var o = [], s = [], l = [], u = 0, c = 0, d = 0, h = r.length; h > d; d++) { var p = r[d]; p.isNode() ? (s.push(p), u++) : (l.push(p), c++) } o = s.concat(l); for (var d = 0, h = o.length; h > d; d++) { var p = o[d]; if (p.removed()) { var f = p._private, v = f.data; if (void 0 === v.id) v.id = t.generate(a, p); else { if (e.is.emptyString(v.id) || !e.is.string(v.id)) { e.util.error("Can not create element with invalid string ID `" + v.id + "`"); continue } if (0 !== a.getElementById(v.id).length) { e.util.error("Can not create second element with ID `" + v.id + "`"); continue } } var g = v.id; if (p.isEdge()) { for (var y = p, m = ["source", "target"], x = m.length, b = !1, w = 0; x > w; w++) { var _ = m[w], E = v[_]; null == E || "" === E ? (e.util.error("Can not create edge `" + g + "` with unspecified " + _), b = !0) : a.getElementById(E).empty() && (e.util.error("Can not create edge `" + g + "` with nonexistant " + _ + " `" + E + "`"), b = !0) } if (b) continue; var T = a.getElementById(v.source), S = a.getElementById(v.target); T._private.edges.push(y), S._private.edges.push(y), y._private.source = T, y._private.target = S } f.ids = {}, f.ids[g] = p, f.removed = !1, a.addToPool(p), i.push(p) } } for (var d = 0; u > d; d++) { var C = o[d], v = C._private.data, k = C._private.data.parent, D = null != k; if (D) { var N = a.getElementById(k); if (N.empty()) v.parent = void 0; else { for (var P = !1, M = N; !M.empty();) { if (C.same(M)) { P = !0, v.parent = void 0; break } M = M.parent() } P || (N[0]._private.children.push(C), C._private.parent = N[0], a._private.hasCompoundNodes = !0) } } } if (i = new e.Collection(a, i), i.length > 0) { var B = i.add(i.connectedNodes()).add(i.parent()); B.updateStyle(n), n ? i.rtrigger("add") : i.trigger("add") } return r }, e.elesfn.removed = function() { var e = this[0]; return e && e._private.removed }, e.elesfn.inside = function() { var e = this[0]; return e && !e._private.removed }, e.elesfn.remove = function(t) { function n(e) { for (var t = e._private.edges, n = 0; n < t.length; n++) i(t[n]) } function r(e) { for (var t = e._private.children, n = 0; n < t.length; n++) i(t[n]) } function i(e) { var t = c[e.id()]; t || (c[e.id()] = !0, e.isNode() ? (u.push(e), n(e), r(e)) : u.unshift(e)) } function a(e, t) { for (var n = e._private.edges, r = 0; r < n.length; r++) { var i = n[r]; if (t === i) { n.splice(r, 1); break } } } function o(e, t) { t = t[0], e = e[0]; for (var n = e._private.children, r = 0; r < n.length; r++) if (n[r][0] === t[0]) { n.splice(r, 1); break } } var s = this, l = [], u = [], c = {}, d = s._private.cy; void 0 === t && (t = !0); for (var h = 0, p = s.length; p > h; h++) { var f = s[h]; i(f) } for (var h = 0; h < u.length; h++) { var f = u[h]; if (f._private.removed = !0, d.removeFromPool(f), l.push(f), f.isEdge()) { var v = f.source()[0], g = f.target()[0]; a(v, f), a(g, f) } else { var y = f.parent(); 0 !== y.length && o(y, f) } } var m = d._private.elements; d._private.hasCompoundNodes = !1; for (var h = 0; h < m.length; h++) { var f = m[h]; if (f.isParent()) { d._private.hasCompoundNodes = !0; break } } var x = new e.Collection(this.cy(), l); x.size() > 0 && (t && this.cy().notify({ type: "remove", collection: x }), x.trigger("remove")); for (var b = {}, h = 0; h < u.length; h++) { var f = u[h], w = "nodes" === f._private.group, _ = f._private.data.parent; if (w && void 0 !== _ && !b[_]) { b[_] = !0; var y = d.getElementById(_); y && 0 !== y.length && !y._private.removed && 0 === y.children().length && y.updateStyle() } } return this }, e.elesfn.move = function(e) { var t = this._private.cy; if (void 0 !== e.source || void 0 !== e.target) { var n = e.source, r = e.target, i = t.getElementById(n).length > 0, a = t.getElementById(r).length > 0; if (i || a) { var o = this.jsons(); this.remove(); for (var s = 0; s < o.length; s++) { var l = o[s]; "edges" === l.group && (i && (l.data.source = n), a && (l.data.target = r)) } return t.add(o) } } else if (void 0 !== e.parent) { var u = e.parent, c = null === u || t.getElementById(u).length > 0; if (c) { var o = this.jsons(), d = this.descendants(), h = d.merge(d.add(this).connectedEdges()); this.remove(); for (var s = 0; s < this.length; s++) { var l = o[s]; "nodes" === l.group && (l.data.parent = null === u ? void 0 : u) } } return t.add(o).merge(h.restore()) } return this } }(cytoscape), function(e) { "use strict"; e.fn.eles({ stdBreadthFirstSearch: function(t) { return t = e.util.extend({}, t, { std: !0 }), this.breadthFirstSearch(t) }, breadthFirstSearch: function(t, n, r) { var i, a, o; e.is.plainObject(t) && !e.is.elementOrCollection(t) && (i = t, t = i.roots, n = i.visit, r = i.directed, a = i.std, o = i.thisArg), r = 2 !== arguments.length || e.is.fn(n) ? r : n, n = e.is.fn(n) ? n : function() {}; for (var s, l = this._private.cy, u = e.is.string(t) ? this.filter(t) : t, c = [], d = [], h = {}, p = {}, f = {}, v = 0, g = this.nodes(), y = this.edges(), m = 0; m < u.length; m++) u[m].isNode() && (c.unshift(u[m]), f[u[m].id()] = !0, d.push(u[m]), p[u[m].id()] = 0); for (; 0 !== c.length;) { var x, u = c.shift(), b = p[u.id()], w = h[u.id()], _ = null == w ? void 0 : w.connectedNodes().not(u)[0]; if (x = a ? n.call(o, u, w, _, v++, b) : n.call(u, v++, b, u, w, _), x === !0) { s = u; break } if (x === !1) break; for (var E = u.connectedEdges(r ? function() { return this.data("source") === u.id() } : void 0).intersect(y), m = 0; m < E.length; m++) { var T = E[m], S = T.connectedNodes(function() { return this.id() !== u.id() }).intersect(g); 0 === S.length || f[S.id()] || (S = S[0], c.push(S), f[S.id()] = !0, p[S.id()] = p[u.id()] + 1, d.push(S), h[S.id()] = T) } } for (var C = [], m = 0; m < d.length; m++) { var k = d[m], D = h[k.id()]; D && C.push(D), C.push(k) } return { path: new e.Collection(l, C, { unique: !0 }), found: new e.Collection(l, s, { unique: !0 }) } }, stdDepthFirstSearch: function(t) { return t = e.util.extend({}, t, { std: !0 }), this.depthFirstSearch(t) }, depthFirstSearch: function(t, n, r) { var i, a, o; e.is.plainObject(t) && !e.is.elementOrCollection(t) && (i = t, t = i.roots, n = i.visit, r = i.directed, a = i.std, o = i.thisArg), r = 2 !== arguments.length || e.is.fn(n) ? r : n, n = e.is.fn(n) ? n : function() {}; for (var s, l = this._private.cy, u = e.is.string(t) ? this.filter(t) : t, c = [], d = [], h = {}, p = {}, f = {}, v = 0, g = this.edges(), y = this.nodes(), m = 0; m < u.length; m++) u[m].isNode() && (c.push(u[m]), d.push(u[m]), p[u[m].id()] = 0); for (; 0 !== c.length;) { var u = c.pop(); if (!f[u.id()]) { f[u.id()] = !0; var x, b = p[u.id()], w = h[u.id()], _ = null == w ? void 0 : w.connectedNodes().not(u)[0]; if (x = a ? n.call(o, u, w, _, v++, b) : n.call(u, v++, b, u, w, _), x === !0) { s = u; break } if (x === !1) break; for (var E = u.connectedEdges(r ? function() { return this.data("source") === u.id() } : void 0).intersect(g), m = 0; m < E.length; m++) { var T = E[m], S = T.connectedNodes(function() { return this.id() !== u.id() }).intersect(y); 0 === S.length || f[S.id()] || (S = S[0], c.push(S), p[S.id()] = p[u.id()] + 1, d.push(S), h[S.id()] = T) } } } for (var C = [], m = 0; m < d.length; m++) { var k = d[m], D = h[k.id()]; D && C.push(D), C.push(k) } return { path: new e.Collection(l, C, { unique: !0 }), found: new e.Collection(l, s, { unique: !0 }) } }, kruskal: function(t) { function n(e) { for (var t = 0; t < i.length; t++) { var n = i[t]; if (n.anySame(e)) return { eles: n, index: t } } } t = e.is.fn(t) ? t : function() { return 1 }; for (var r = new e.Collection(this._private.cy, []), i = [], a = this.nodes(), o = 0; o < a.length; o++) i.push(a[o].collection()); for (var s = this.edges(), l = s.toArray().sort(function(e, n) { var r = t.call(e, e), i = t.call(n, n); return r - i }), o = 0; o < l.length; o++) { var u = l[o], c = u.source()[0], d = u.target()[0], h = n(c), p = n(d); h.index !== p.index && (r = r.add(u), i[h.index] = h.eles.add(p.eles), i.splice(p.index, 1)) } return a.add(r) }, dijkstra: function(t, n, r) { var i; e.is.plainObject(t) && !e.is.elementOrCollection(t) && (i = t, t = i.root, n = i.weight, r = i.directed); var a = this._private.cy; n = e.is.fn(n) ? n : function() { return 1 }; for (var o = e.is.string(t) ? this.filter(t)[0] : t[0], s = {}, l = {}, u = {}, c = this.edges().filter(function() { return !this.isLoop() }), d = this.nodes(), h = [], p = 0; p < d.length; p++) s[d[p].id()] = d[p].same(o) ? 0 : 1 / 0, h.push(d[p]); var f = function(e) { return s[e.id()] }; h = new e.Collection(a, h); for (var v = e.Minheap(a, h, f), g = function(e, t) { for (var i, a = (r ? e.edgesTo(t) : e.edgesWith(t)).intersect(c), o = 1 / 0, s = 0; s < a.length; s++) { var l = a[s], u = n.apply(l, [l]); (o > u || !i) && (o = u, i = l) } return { edge: i, dist: o } }; v.size() > 0;) { var y = v.pop(), m = y.value, x = y.id, b = a.getElementById(x); if (u[x] = m, m === Math.Infinite) break; for (var w = b.neighborhood().intersect(d), p = 0; p < w.length; p++) { var _ = w[p], E = _.id(), T = g(b, _), S = m + T.dist; S < v.getValueById(E) && (v.edit(E, S), l[E] = { node: b, edge: T.edge }) } } return { distanceTo: function(t) { var n = e.is.string(t) ? d.filter(t)[0] : t[0]; return u[n.id()] }, pathTo: function(t) { var n = e.is.string(t) ? d.filter(t)[0] : t[0], r = [], i = n; if (n.length > 0) for (r.unshift(n); l[i.id()];) { var o = l[i.id()]; r.unshift(o.edge), r.unshift(o.node), i = o.node } return new e.Collection(a, r) } } } }), e.elesfn.bfs = e.elesfn.breadthFirstSearch, e.elesfn.dfs = e.elesfn.depthFirstSearch, e.elesfn.stdBfs = e.elesfn.stdBreadthFirstSearch, e.elesfn.stdDfs = e.elesfn.stdDepthFirstSearch }(cytoscape), function(e) { "use strict"; e.fn.eles({ aStar: function(t) { t = t || {}; var n = function(e, t, r, a) { if (e == t) return a.push(i.getElementById(t)), a; if (t in r) { var o = r[t], s = p[t]; return a.push(i.getElementById(t)), a.push(i.getElementById(s)), n(e, o, r, a) } return void 0 }, r = function(e, t) { if (0 === e.length) return void 0; for (var n = 0, r = t[e[0]], i = 1; i < e.length; i++) { var a = t[e[i]]; r > a && (r = a, n = i) } return n }, i = this._private.cy; if (null == t || null == t.root) return void 0; var a = e.is.string(t.root) ? this.filter(t.root)[0] : t.root[0]; if (null == t.goal) return void 0; var o = e.is.string(t.goal) ? this.filter(t.goal)[0] : t.goal[0]; if (null != t.heuristic && e.is.fn(t.heuristic)) var s = t.heuristic; else var s = function() { return 0 }; if (null != t.weight && e.is.fn(t.weight)) var l = t.weight; else var l = function(e) { return 1 }; if (null != t.directed) var u = t.directed; else var u = !1; var c = [], d = [a.id()], h = {}, p = {}, f = {}, v = {}; f[a.id()] = 0, v[a.id()] = s(a); for (var g = this.edges().stdFilter(function(e) { return !e.isLoop() }), y = this.nodes(), m = 0; d.length > 0;) { var x = r(d, v), b = i.getElementById(d[x]); if (m++, b.id() == o.id()) { var w = n(a.id(), o.id(), h, []); return w.reverse(), { found: !0, distance: f[b.id()], path: new e.Collection(i, w), steps: m } } c.push(b.id()), d.splice(x, 1); var _ = b.connectedEdges(); u && (_ = _.stdFilter(function(e) { return e.data("source") === b.id() })), _ = _.intersect(g); for (var E = 0; E < _.length; E++) { var T = _[E], S = T.connectedNodes().stdFilter(function(e) { return e.id() !== b.id() }).intersect(y); if (-1 == c.indexOf(S.id())) { var C = f[b.id()] + l.apply(T, [T]); - 1 != d.indexOf(S.id()) ? C < f[S.id()] && (f[S.id()] = C, v[S.id()] = C + s(S), h[S.id()] = b.id()) : (f[S.id()] = C, v[S.id()] = C + s(S), d.push(S.id()), h[S.id()] = b.id(), p[S.id()] = T.id()) } } } return { found: !1, distance: void 0, path: void 0, steps: m } }, floydWarshall: function(t) { t = t || {}; var n = this._private.cy; if (null != t.weight && e.is.fn(t.weight)) var r = t.weight; else var r = function(e) { return 1 }; if (null != t.directed) var i = t.directed; else var i = !1; for (var a = this.edges().stdFilter(function(e) { return !e.isLoop() }), o = this.nodes(), s = o.length, l = {}, u = 0; s > u; u++) l[o[u].id()] = u; for (var c = [], u = 0; s > u; u++) { for (var d = new Array(s), h = 0; s > h; h++) u == h ? d[h] = 0 : d[h] = 1 / 0; c.push(d) } var p = [], f = [], v = function(e) { for (var t = 0; s > t; t++) { for (var n = new Array(s), r = 0; s > r; r++) n[r] = void 0; e.push(n) } }; v(p), v(f); for (var u = 0; u < a.length; u++) { var g = l[a[u].source().id()], y = l[a[u].target().id()], m = r.apply(a[u], [a[u]]); c[g][y] > m && (c[g][y] = m, p[g][y] = y, f[g][y] = a[u]) } if (!i) for (var u = 0; u < a.length; u++) { var g = l[a[u].target().id()], y = l[a[u].source().id()], m = r.apply(a[u], [a[u]]); c[g][y] > m && (c[g][y] = m, p[g][y] = y, f[g][y] = a[u]) } for (var x = 0; s > x; x++) for (var u = 0; s > u; u++) for (var h = 0; s > h; h++) c[u][x] + c[x][h] < c[u][h] && (c[u][h] = c[u][x] + c[x][h], p[u][h] = p[u][x]); for (var b = [], u = 0; s > u; u++) b.push(o[u].id()); var w = { distance: function(t, r) { if (e.is.string(t)) var i = n.filter(t)[0].id(); else var i = t.id(); if (e.is.string(r)) var a = n.filter(r)[0].id(); else var a = r.id(); return c[l[i]][l[a]] }, path: function(t, r) { var i = function(e, t, r, i, a) { if (e === t) return n.getElementById(i[e]); if (void 0 === r[e][t]) return void 0; for (var o = [n.getElementById(i[e])], s = e; e !== t;) { s = e, e = r[e][t]; var l = a[s][e]; o.push(l), o.push(n.getElementById(i[e])) } return o }; if (e.is.string(t)) var a = n.filter(t)[0].id(); else var a = t.id(); if (e.is.string(r)) var o = n.filter(r)[0].id(); else var o = r.id(); var s = i(l[a], l[o], p, b, f); return new e.Collection(n, s) } }; return w }, bellmanFord: function(t) { if (t = t || {}, null != t.weight && e.is.fn(t.weight)) var n = t.weight; else var n = function(e) { return 1 }; if (null != t.directed) var r = t.directed; else var r = !1; if (null == t.root) return void e.util.error("options.root required"); if (e.is.string(t.root)) var i = this.filter(t.root)[0]; else var i = t.root[0]; for (var a = this._private.cy, o = this.edges().stdFilter(function(e) { return !e.isLoop() }), s = this.nodes(), l = s.length, u = {}, c = 0; l > c; c++) u[s[c].id()] = c; for (var d = [], h = [], p = [], c = 0; l > c; c++) s[c].id() === i.id() ? d[c] = 0 : d[c] = 1 / 0, h[c] = void 0; for (var f = !1, c = 1; l > c; c++) { f = !1; for (var v = 0; v < o.length; v++) { var g = u[o[v].source().id()], y = u[o[v].target().id()], m = n.apply(o[v], [o[v]]), x = d[g] + m; if (x < d[y] && (d[y] = x, h[y] = g, p[y] = o[v], f = !0), !r) { var x = d[y] + m; x < d[g] && (d[g] = x, h[g] = y, p[g] = o[v], f = !0) } } if (!f) break } if (f) for (var v = 0; v < o.length; v++) { var g = u[o[v].source().id()], y = u[o[v].target().id()], m = n.apply(o[v], [o[v]]); if (d[g] + m < d[y]) return e.util.error("Error: graph contains a negative weigth cycle!"), { pathTo: void 0, distanceTo: void 0, hasNegativeWeightCycle: !0 } } for (var b = [], c = 0; l > c; c++) b.push(s[c].id()); var w = { distanceTo: function(t) { if (e.is.string(t)) var n = a.filter(t)[0].id(); else var n = t.id(); return d[u[n]] }, pathTo: function(t) { var n = function(e, t, n, r, i, o) { for (;;) { if (i.push(a.getElementById(r[n])), i.push(o[n]), t === n) return i; var s = e[n]; if ("undefined" == typeof s) return void 0; n = s } }; if (e.is.string(t)) var r = a.filter(t)[0].id(); else var r = t.id(); var o = [], s = n(h, u[i.id()], u[r], b, o, p); return null != s && s.reverse(), new e.Collection(a, s) }, hasNegativeWeightCycle: !1 }; return w }, kargerStein: function(t) { t = t || {}; var n = function(e, t, n) { for (var r = n[e], i = r[1], a = r[2], o = t[i], s = t[a], l = n.filter(function(e) { return t[e[1]] === o && t[e[2]] === s ? !1 : t[e[1]] === s && t[e[2]] === o ? !1 : !0 }), u = 0; u < l.length; u++) { var c = l[u]; c[1] === s ? (l[u] = c.slice(0), l[u][1] = o) : c[2] === s && (l[u] = c.slice(0), l[u][2] = o) } for (var u = 0; u < t.length; u++) t[u] === s && (t[u] = o); return l }, r = function(e, t, i, a) { if (a >= i) return t; var o = Math.floor(Math.random() * t.length), s = n(o, e, t); return r(e, s, i - 1, a) }, i = this._private.cy, a = this.edges().stdFilter(function(e) { return !e.isLoop() }), o = this.nodes(), s = o.length, l = a.length, u = Math.ceil(Math.pow(Math.log(s) / Math.LN2, 2)), c = Math.floor(s / Math.sqrt(2)); if (2 > s) return void e.util.error("At least 2 nodes are required for KargerSteing algorithm!"); for (var d = {}, h = 0; s > h; h++) d[o[h].id()] = h; for (var p = [], h = 0; l > h; h++) { var f = a[h]; p.push([h, d[f.source().id()], d[f.target().id()]]) } for (var v, g = 1 / 0, y = [], h = 0; s > h; h++) y.push(h); for (var m = 0; u >= m; m++) { var x = y.slice(0), b = r(x, p, s, c), w = x.slice(0), _ = r(x, b, c, 2), E = r(w, b, c, 2); _.length <= E.length && _.length < g ? (g = _.length, v = [_, x]) : E.length <= _.length && E.length < g && (g = E.length, v = [E, w]) } for (var T = v[0].map(function(e) { return a[e[0]] }), S = [], C = [], k = v[1][0], h = 0; h < v[1].length; h++) { var D = v[1][h]; D === k ? S.push(o[h]) : C.push(o[h]) } var N = { cut: new e.Collection(i, T), partition1: new e.Collection(i, S), partition2: new e.Collection(i, C) }; return N }, pageRank: function(t) { t = t || {}; var n = function(e) { for (var t = e.length, n = 0, r = 0; t > r; r++) n += e[r]; for (var r = 0; t > r; r++) e[r] = e[r] / n }; if (null != t && null != t.dampingfactor) var r = t.dampingFactor; else var r = .8; if (null != t && null != t.precision) var i = t.precision; else var i = 1e-6; if (null != t && null != t.iterations) var a = t.iterations; else var a = 200; if (null != t && null != t.weight && e.is.fn(t.weight)) var o = t.weight; else var o = function(e) { return 1 }; for (var s = this._private.cy, l = this.edges().stdFilter(function(e) { return !e.isLoop() }), u = this.nodes(), c = u.length, d = l.length, h = {}, p = 0; c > p; p++) h[u[p].id()] = p; for (var f = [], v = [], g = (1 - r) / c, p = 0; c > p; p++) { for (var y = [], m = 0; c > m; m++) y.push(0); f.push(y), v.push(0) } for (var p = 0; d > p; p++) { var x = l[p], b = h[x.source().id()], w = h[x.target().id()], _ = o.apply(x, [x]); f[w][b] += _, v[b] += _ } for (var E = 1 / c + g, m = 0; c > m; m++) if (0 === v[m]) for (var p = 0; c > p; p++) f[p][m] = E; else for (var p = 0; c > p; p++) f[p][m] = f[p][m] / v[m] + g; for (var T, S = [], C = [], p = 0; c > p; p++) S.push(1), C.push(0); for (var k = 0; a > k; k++) { for (var D = C.slice(0), p = 0; c > p; p++) for (var m = 0; c > m; m++) D[p] += f[p][m] * S[m]; n(D), T = S, S = D; for (var N = 0, p = 0; c > p; p++) N += Math.pow(T[p] - S[p], 2); if (i > N) break } var P = { rank: function(t) { if (e.is.string(t)) var n = s.filter(t)[0].id(); else var n = t.id(); return S[h[n]] } }; return P }, degreeCentralityNormalized: function(t) { if (t = t || {}, null != t.directed) var n = t.directed; else var n = !1; var r = this.nodes(), i = r.length; if (n) { for (var a = {}, o = {}, s = 0, l = 0, u = 0; i > u; u++) { var c = r[u], d = this.degreeCentrality(e.util.extend({}, t, { root: c })); s < d.indegree && (s = d.indegree), l < d.outdegree && (l = d.outdegree), a[c.id()] = d.indegree, o[c.id()] = d.outdegree } return { indegree: function(t) { if (e.is.string(t)) var t = cy.filter(t)[0].id(); else var t = t.id(); return a[t] / s }, outdegree: function(t) { if (e.is.string(t)) var t = cy.filter(t)[0].id(); else var t = t.id(); return o[t] / l } } } for (var h = {}, p = 0, u = 0; i > u; u++) { var c = r[u], d = this.degreeCentrality(e.util.extend({}, t, { root: c })); p < d.degree && (p = d.degree), h[c.id()] = d.degree } return { degree: function(t) { if (e.is.string(t)) var t = cy.filter(t)[0].id(); else var t = t.id(); return h[t] / p } } }, degreeCentrality: function(t) { t = t || {}; var n = this; if (null == t || null == t.root) return void 0; var r = e.is.string(t.root) ? this.filter(t.root)[0] : t.root[0]; if (null != t.weight && e.is.fn(t.weight)) var i = t.weight; else var i = function(e) { return 1 }; if (null != t.directed) var a = t.directed; else var a = !1; if (null != t.alpha && e.is.number(t.alpha)) var o = t.alpha; else o = 0; if (a) { for (var s = r.connectedEdges('edge[target = "' + r.id() + '"]').intersection(n), l = r.connectedEdges('edge[source = "' + r.id() + '"]').intersection(n), u = s.length, c = l.length, d = 0, h = 0, p = 0; p < s.length; p++) { var f = s[p]; d += i.apply(f, [f]) } for (var p = 0; p < l.length; p++) { var f = l[p]; h += i.apply(f, [f]) } return { indegree: Math.pow(u, 1 - o) * Math.pow(d, o), outdegree: Math.pow(c, 1 - o) * Math.pow(h, o) } } for (var v = r.connectedEdges().intersection(n), g = v.length, y = 0, p = 0; p < v.length; p++) { var f = v[p]; y += i.apply(f, [f]) } return { degree: Math.pow(g, 1 - o) * Math.pow(y, o) } }, closenessCentralityNormalized: function(t) { t = t || {}; var n = t.harmonic; void 0 === n && (n = !0); for (var r = {}, i = 0, a = this.nodes(), o = this.floydWarshall({ weight: t.weight, directed: t.directed }), s = 0; s < a.length; s++) { for (var l = 0, u = 0; u < a.length; u++) if (s != u) { var c = o.distance(a[s], a[u]); l += n ? 1 / c : c } n || (l = 1 / l), l > i && (i = l), r[a[s].id()] = l } return { closeness: function(t) { if (e.is.string(t)) var t = cy.filter(t)[0].id(); else var t = t.id(); return r[t] / i } } }, closenessCentrality: function(t) { if (t = t || {}, null == t.root) return void e.util.error("options.root required"); if (e.is.string(t.root)) var n = this.filter(t.root)[0]; else var n = t.root[0]; if (null != t.weight && e.is.fn(t.weight)) var r = t.weight; else var r = function() { return 1 }; if (null != t.directed && e.is.bool(t.directed)) var i = t.directed; else var i = !1; var a = t.harmonic; void 0 === a && (a = !0); for (var o = this.dijkstra({ root: n, weight: r, directed: i }), s = 0, l = this.nodes(), u = 0; u < l.length; u++) if (l[u].id() != n.id()) { var c = o.distanceTo(l[u]); s += a ? 1 / c : c } return a ? s : 1 / s }, betweennessCentrality: function(t) { if (t = t || {}, null != t.weight && e.is.fn(t.weight)) var n = t.weight, r = !0; else var r = !1; if (null != t.directed && e.is.bool(t.directed)) var i = t.directed; else var i = !1; for (var a = function(e, t) { e.unshift(t); for (var n = 0; v[e[n]] < v[e[n + 1]] && n < e.length - 1; n++) { var r = e[n]; e[n] = e[n + 1], e[n + 1] = r } }, o = this._private.cy, s = this.nodes(), l = {}, u = {}, c = 0; c < s.length; c++) i ? l[s[c].id()] = s[c].outgoers("node") : l[s[c].id()] = s[c].openNeighborhood("node"); for (var c = 0; c < s.length; c++) u[s[c].id()] = 0; for (var d = 0; d < s.length; d++) { for (var h = [], p = {}, f = {}, v = {}, g = [], c = 0; c < s.length; c++) p[s[c].id()] = [], f[s[c].id()] = 0, v[s[c].id()] = Number.POSITIVE_INFINITY; for (f[s[d].id()] = 1, v[s[d].id()] = 0, g.unshift(s[d].id()); g.length > 0;) { var y = g.pop(); h.push(y), r ? l[y].forEach(function(e) { if (o.$("#" + y).edgesTo(e).length > 0) var t = o.$("#" + y).edgesTo(e)[0]; else var t = e.edgesTo("#" + y)[0]; var r = n.apply(t, [t]); v[e.id()] > v[y] + r && (v[e.id()] = v[y] + r, g.indexOf(e.id()) < 0 ? a(g, e.id()) : (g.splice(g.indexOf(e.id()), 1), a(g, e.id())), f[e.id()] = 0, p[e.id()] = []), v[e.id()] == v[y] + r && (f[e.id()] = f[e.id()] + f[y], p[e.id()].push(y)) }) : l[y].forEach(function(e) { v[e.id()] == Number.POSITIVE_INFINITY && (g.unshift(e.id()), v[e.id()] = v[y] + 1), v[e.id()] == v[y] + 1 && (f[e.id()] = f[e.id()] + f[y], p[e.id()].push(y)) }) } for (var m = {}, c = 0; c < s.length; c++) m[s[c].id()] = 0; for (; h.length > 0;) { var x = h.pop(); p[x].forEach(function(e) { m[e] = m[e] + f[e] / f[x] * (1 + m[x]), x != s[d].id() && (u[x] = u[x] + m[x]) }) } } var b = 0; for (var w in u) b < u[w] && (b = u[w]); var _ = { betweenness: function(t) { if (e.is.string(t)) var t = o.filter(t)[0].id(); else var t = t.id(); return u[t] }, betweennessNormalized: function(t) { if (e.is.string(t)) var t = o.filter(t)[0].id(); else var t = t.id(); return u[t] / b } }; return _.betweennessNormalised = _.betweennessNormalized, _ } }), e.elesfn.dc = e.elesfn.degreeCentrality, e.elesfn.dcn = e.elesfn.degreeCentralityNormalised = e.elesfn.degreeCentralityNormalized, e.elesfn.cc = e.elesfn.closenessCentrality, e.elesfn.ccn = e.elesfn.closenessCentralityNormalised = e.elesfn.closenessCentralityNormalized, e.elesfn.bc = e.elesfn.betweennessCentrality }(cytoscape), function(e) { "use strict"; e.fn.eles({ animated: e.define.animated(), clearQueue: e.define.clearQueue(), delay: e.define.delay(), animate: e.define.animate(), stop: e.define.stop() }) }(cytoscape), function(e) { "use strict"; e.fn.eles({ addClass: function(t) { t = t.split(/\s+/); for (var n = this, r = [], i = 0; i < t.length; i++) { var a = t[i]; if (!e.is.emptyString(a)) for (var o = 0; o < n.length; o++) { var s = n[o], l = s._private.classes[a]; s._private.classes[a] = !0, l || r.push(s) } } return r.length > 0 && new e.Collection(this._private.cy, r).updateStyle().trigger("class"), n }, hasClass: function(e) { var t = this[0]; return null != t && t._private.classes[e] ? !0 : !1 }, toggleClass: function(t, n) { for (var r = t.split(/\s+/), i = this, a = [], o = 0, s = i.length; s > o; o++) for (var l = i[o], u = 0; u < r.length; u++) { var c = r[u]; if (!e.is.emptyString(c)) { var d = l._private.classes[c], h = n || void 0 === n && !d; h ? (l._private.classes[c] = !0, d || a.push(l)) : (l._private.classes[c] = !1, d && a.push(l)) } } return a.length > 0 && new e.Collection(this._private.cy, a).updateStyle().trigger("class"), i }, removeClass: function(t) { t = t.split(/\s+/); for (var n = this, r = [], i = 0; i < n.length; i++) for (var a = n[i], o = 0; o < t.length; o++) { var s = t[o]; if (s && "" !== s) { var l = a._private.classes[s]; a._private.classes[s] = void 0, l && r.push(a) } } return r.length > 0 && new e.Collection(n._private.cy, r).updateStyle(), n.trigger("class"), n }, flashClass: function(e, t) { var n = this; if (null == t) t = 250; else if (0 === t) return n; return n.addClass(e), setTimeout(function() { n.removeClass(e) }, t), n } }) }(cytoscape), function(e) { "use strict"; e.fn.eles({ allAre: function(e) { return this.filter(e).length === this.length }, is: function(e) { return this.filter(e).length > 0 }, some: function(e, t) { for (var n = 0; n < this.length; n++) { var r = t ? e.apply(t, [this[n], n, this]) : e(this[n], n, this); if (r) return !0 } return !1 }, every: function(e, t) { for (var n = 0; n < this.length; n++) { var r = t ? e.apply(t, [this[n], n, this]) : e(this[n], n, this); if (!r) return !1 } return !0 }, same: function(e) { return e = this.cy().collection(e), this.length !== e.length ? !1 : this.intersect(e).length === this.length }, anySame: function(e) { return e = this.cy().collection(e), this.intersect(e).length > 0 }, allAreNeighbors: function(e) { return e = this.cy().collection(e), this.neighborhood().intersect(e).length === e.length } }), e.elesfn.allAreNeighbours = e.elesfn.allAreNeighbors }(cytoscape), function(e) { "use strict"; e.fn.eles({ parent: function(t) { for (var n = [], r = this._private.cy, i = 0; i < this.length; i++) { var a = this[i], o = r.getElementById(a._private.data.parent); o.size() > 0 && n.push(o) } return new e.Collection(r, n, { unique: !0 }).filter(t) }, parents: function(t) { for (var n = [], r = this.parent(); r.nonempty();) { for (var i = 0; i < r.length; i++) { var a = r[i]; n.push(a) } r = r.parent() } return new e.Collection(this.cy(), n, { unique: !0 }).filter(t) }, commonAncestors: function(e) { for (var t, n = 0; n < this.length; n++) { var r = this[n], i = r.parents(); t = t || i, t = t.intersect(i) } return t.filter(e) }, orphans: function(e) { return this.stdFilter(function(e) { return e.isNode() && e.parent().empty() }).filter(e) }, nonorphans: function(e) { return this.stdFilter(function(e) { return e.isNode() && e.parent().nonempty() }).filter(e) }, children: function(t) { for (var n = [], r = 0; r < this.length; r++) { var i = this[r]; n = n.concat(i._private.children) } return new e.Collection(this.cy(), n, { unique: !0 }).filter(t) }, siblings: function(e) { return this.parent().children().not(this).filter(e) }, isParent: function() { var e = this[0]; return e ? 0 !== e._private.children.length : void 0 }, isChild: function() { var e = this[0]; return e ? void 0 !== e._private.data.parent && 0 !== e.parent().length : void 0 }, descendants: function(t) { function n(e) { for (var t = 0; t < e.length; t++) { var i = e[t]; r.push(i), i.children().nonempty() && n(i.children()) } } var r = []; return n(this.children()), new e.Collection(this.cy(), r, { unique: !0 }).filter(t) } }), e.elesfn.ancestors = e.elesfn.parents }(cytoscape), function(e) { "use strict"; var t = 1, n = 0; e.fn.eles({ data: e.define.data({ field: "data", bindingEvent: "data", allowBinding: !0, allowSetting: !0, settingEvent: "data", settingTriggersEvent: !0, triggerFnName: "trigger", allowGetting: !0, immutableKeys: { id: !0, source: !0, target: !0, parent: !0 }, updateStyle: !0 }), removeData: e.define.removeData({ field: "data", event: "data", triggerFnName: "trigger", triggerEvent: !0, immutableKeys: { id: !0, source: !0, target: !0, parent: !0 }, updateStyle: !0 }), scratch: e.define.data({ field: "scratch", bindingEvent: "scratch", allowBinding: !0, allowSetting: !0, settingEvent: "scratch", settingTriggersEvent: !0, triggerFnName: "trigger", allowGetting: !0, updateStyle: !0 }), removeScratch: e.define.removeData({ field: "scratch", event: "scratch", triggerFnName: "trigger", triggerEvent: !0, updateStyle: !0 }), rscratch: e.define.data({ field: "rscratch", allowBinding: !1, allowSetting: !0, settingTriggersEvent: !1, allowGetting: !0 }), removeRscratch: e.define.removeData({ field: "rscratch", triggerEvent: !1 }), id: function() { var e = this[0]; return e ? e._private.data.id : void 0 }, position: e.define.data({ field: "position", bindingEvent: "position", allowBinding: !0, allowSetting: !0, settingEvent: "position", settingTriggersEvent: !0, triggerFnName: "rtrigger", allowGetting: !0, validKeys: ["x", "y"], onSet: function(e) { var t = e.updateCompoundBounds(); t.rtrigger("position") }, canSet: function(e) { return !e.locked() } }), silentPosition: e.define.data({ field: "position", bindingEvent: "position", allowBinding: !1, allowSetting: !0, settingEvent: "position", settingTriggersEvent: !1, triggerFnName: "trigger", allowGetting: !0, validKeys: ["x", "y"], onSet: function(e) { e.updateCompoundBounds() }, canSet: function(e) { return !e.locked() } }), positions: function(t, n) { if (e.is.plainObject(t)) this.position(t); else if (e.is.fn(t)) { for (var r = t, i = 0; i < this.length; i++) { var a = this[i], t = r.apply(a, [i, a]); if (t && !a.locked()) { var o = a._private.position; o.x = t.x, o.y = t.y } } var s = this.updateCompoundBounds(), l = s.length > 0 ? this.add(s) : this; n ? l.trigger("position") : l.rtrigger("position") } return this }, silentPositions: function(e) { return this.positions(e, !0) }, updateCompoundBounds: function() { function t(e) { var t = e.children(), n = e._private.style, i = "include" === n["compound-sizing-wrt-labels"].value, a = t.boundingBox({ includeLabels: i, includeEdges: !0 }), o = { top: n["padding-top"].pxValue, bottom: n["padding-bottom"].pxValue, left: n["padding-left"].pxValue, right: n["padding-right"].pxValue }, s = e._private.position, l = !1; "auto" === n.width.value && (e._private.autoWidth = a.w + o.left + o.right, s.x = (a.x1 + a.x2 - o.left + o.right) / 2, l = !0), "auto" === n.height.value && (e._private.autoHeight = a.h + o.top + o.bottom, s.y = (a.y1 + a.y2 - o.top + o.bottom) / 2, l = !0), l && r.push(e) } var n = this.cy(); if (!n.styleEnabled() || !n.hasCompoundNodes()) return n.collection(); for (var r = [], i = this.parent(); i.nonempty();) { for (var a = 0; a < i.length; a++) { var o = i[a]; t(o) } i = i.parent() } return new e.Collection(n, r) }, renderedPosition: function(t, n) { var r = this[0], i = this.cy(), a = i.zoom(), o = i.pan(), s = e.is.plainObject(t) ? t : void 0, l = void 0 !== s || void 0 !== n && e.is.string(t); if (r && r.isNode()) { if (!l) { var u = r._private.position; return s = { x: u.x * a + o.x, y: u.y * a + o.y }, void 0 === t ? s : s[t] } for (var c = 0; c < this.length; c++) { var r = this[c]; void 0 !== n ? r._private.position[t] = (n - o[t]) / a : void 0 !== s && (r._private.position = { x: (s.x - o.x) / a, y: (s.y - o.y) / a }) } this.rtrigger("position") } else if (!l) return void 0; return this }, relativePosition: function(t, n) { var r = this[0], i = this.cy(), a = e.is.plainObject(t) ? t : void 0, o = void 0 !== a || void 0 !== n && e.is.string(t), s = i.hasCompoundNodes(); if (r && r.isNode()) { if (!o) { var l = r._private.position, u = s ? r.parent() : null, c = u && u.length > 0, d = c; c && (u = u[0]); var h = d ? u._private.position : { x: 0, y: 0 }; return a = { x: l.x - h.x, y: l.y - h.y }, void 0 === t ? a : a[t] } for (var p = 0; p < this.length; p++) { var r = this[p], u = s ? r.parent() : null, c = u && u.length > 0, d = c; c && (u = u[0]); var h = d ? u._private.position : { x: 0, y: 0 }; void 0 !== n ? r._private.position[t] = n + h[t] : void 0 !== a && (r._private.position = { x: a.x + h.x, y: a.y + h.y }) } this.rtrigger("position") } else if (!o) return void 0; return this }, width: function() { var e = this[0], t = e._private.cy, n = t._private.styleEnabled; if (e) { if (n) { var r = e._private.style.width; return "auto" === r.strValue ? e._private.autoWidth : r.pxValue } return 1 } }, outerWidth: function() { var e = this[0], r = e._private.cy, i = r._private.styleEnabled; if (e) { if (i) { var a = e._private.style, o = "auto" === a.width.strValue ? e._private.autoWidth : a.width.pxValue, s = a["border-width"] ? a["border-width"].pxValue * t + n : 0; return o + s } return 1 } }, renderedWidth: function() { var e = this[0]; if (e) { var t = e.width(); return t * this.cy().zoom() } }, renderedOuterWidth: function() { var e = this[0]; if (e) { var t = e.outerWidth(); return t * this.cy().zoom() } }, height: function() { var e = this[0], t = e._private.cy, n = t._private.styleEnabled; if (e && "nodes" === e._private.group) { if (n) { var r = e._private.style.height; return "auto" === r.strValue ? e._private.autoHeight : r.pxValue } return 1 } }, outerHeight: function() { var e = this[0], r = e._private.cy, i = r._private.styleEnabled; if (e && "nodes" === e._private.group) { if (!i) return 1; var a = e._private.style, o = "auto" === a.height.strValue ? e._private.autoHeight : a.height.pxValue, s = a["border-width"] ? a["border-width"].pxValue * t + n : 0; return o + s } }, renderedHeight: function() { var e = this[0]; if (e && "nodes" === e._private.group) { var t = e.height(); return t * this.cy().zoom() } }, renderedOuterHeight: function() { var e = this[0]; if (e && "nodes" === e._private.group) { var t = e.outerHeight(); return t * this.cy().zoom() } }, renderedBoundingBox: function(e) { var t = this.boundingBox(e), n = this.cy(), r = n.zoom(), i = n.pan(), a = t.x1 * r + i.x, o = t.x2 * r + i.x, s = t.y1 * r + i.y, l = t.y2 * r + i.y; return { x1: a, x2: o, y1: s, y2: l, w: o - a, h: l - s } }, boundingBox: function(e) { var t = this, n = t._private.cy, r = n._private, i = r.styleEnabled; e = e || {}; var a = void 0 === e.includeNodes ? !0 : e.includeNodes, o = void 0 === e.includeEdges ? !0 : e.includeEdges, s = void 0 === e.includeLabels ? !0 : e.includeLabels; i && r.renderer.recalculateRenderedStyle(this); for (var l = 1 / 0, u = -(1 / 0), c = 1 / 0, d = -(1 / 0), h = 0; h < t.length; h++) { var p, f, v, g, y, m, x = t[h], b = x._private, w = b.style, _ = i ? b.style.display.value : "element", E = "nodes" === b.group, T = !1; if ("none" !== _) { if (E && a) { T = !0; var S = b.position; y = S.x, m = S.y; var C = x.outerWidth(), k = C / 2, D = x.outerHeight(), N = D / 2; p = y - k, f = y + k, v = m - N, g = m + N, l = l > p ? p : l, u = f > u ? f : u, c = c > v ? v : c, d = g > d ? g : d } else if (x.isEdge() && o) { T = !0; var P = b.source, M = P._private, B = M.position, L = b.target, O = L._private, A = O.position, I = b.rstyle || {}; if (p = B.x, f = A.x, v = B.y, g = A.y, p > f) { var z = p; p = f, f = z } if (v > g) { var z = v; v = g, g = z } if (l = l > p ? p : l, u = f > u ? f : u, c = c > v ? v : c, d = g > d ? g : d, i) for (var R = I.bezierPts || [], C = w.width.pxValue, j = C / 2, F = 0; F < R.length; F++) { var q = R[F]; p = q.x - j, f = q.x + j, v = q.y - j, g = q.y + j, l = l > p ? p : l, u = f > u ? f : u, c = c > v ? v : c, d = g > d ? g : d } if (i && "haystack" === w["curve-style"].strValue) { var V = b.rscratch.haystackPts; if (p = V[0], v = V[1], f = V[2], g = V[3], p > f) { var z = p; p = f, f = z } if (v > g) { var z = v; v = g, g = z } l = l > p ? p : l, u = f > u ? f : u, c = c > v ? v : c, d = g > d ? g : d } } if (i) { var w = x._private.style, I = x._private.rstyle, X = w.content.strValue, H = w["font-size"], Y = w["text-halign"], $ = w["text-valign"], W = I.labelWidth, U = I.labelHeight, Z = I.labelX, G = I.labelY; if (T && s && X && H && null != U && null != W && null != Z && null != G && Y && $) { var K, J, Q, ee, te = U, ne = W; if (x.isEdge()) K = Z - ne / 2, J = Z + ne / 2, Q = G - te / 2, ee = G + te / 2; else { switch (Y.value) { case "left": K = Z - ne, J = Z; break; case "center": K = Z - ne / 2, J = Z + ne / 2; break; case "right": K = Z, J = Z + ne } switch ($.value) { case "top": Q = G - te, ee = G; break; case "center": Q = G - te / 2, ee = G + te / 2; break; case "bottom": Q = G, ee = G + te } } l = l > K ? K : l, u = J > u ? J : u, c = c > Q ? Q : c, d = ee > d ? ee : d } } } } var re = function(e) { return e === 1 / 0 || e === -(1 / 0) ? 0 : e }; return l = re(l), u = re(u), c = re(c), d = re(d), { x1: l, x2: u, y1: c, y2: d, w: u - l, h: d - c } } }); var r = e.elesfn; r.attr = r.data, r.removeAttr = r.removeData, r.modelPosition = r.point = r.position, r.modelPositions = r.points = r.positions, r.renderedPoint = r.renderedPosition, r.relativePoint = r.relativePosition, r.boundingbox = r.boundingBox, r.renderedBoundingbox = r.renderedBoundingBox }(cytoscape), function(e) { "use strict"; function t(e) { return function(t) { var n = this; if (void 0 === t && (t = !0), 0 !== n.length && n.isNode() && !n.removed()) { for (var r = 0, i = n[0], a = i._private.edges, o = 0; o < a.length; o++) { var s = a[o]; (t || !s.isLoop()) && (r += e(i, s)) } return r } } } function n(e, t) { return function(n) { for (var r, i = this.nodes(), a = 0; a < i.length; a++) { var o = i[a], s = o[e](n); void 0 === s || void 0 !== r && !t(s, r) || (r = s) } return r } } e.fn.eles({ degree: t(function(e, t) { return t.source().same(t.target()) ? 2 : 1 }), indegree: t(function(e, t) { return t.target().same(e) ? 1 : 0 }), outdegree: t(function(e, t) { return t.source().same(e) ? 1 : 0 }) }), e.fn.eles({ minDegree: n("degree", function(e, t) { return t > e }), maxDegree: n("degree", function(e, t) { return e > t }), minIndegree: n("indegree", function(e, t) { return t > e }), maxIndegree: n("indegree", function(e, t) { return e > t }), minOutdegree: n("outdegree", function(e, t) { return t > e }), maxOutdegree: n("outdegree", function(e, t) { return e > t }) }), e.fn.eles({ totalDegree: function(e) { for (var t = 0, n = this.nodes(), r = 0; r < n.length; r++) t += n[r].degree(e); return t } }) }(cytoscape), function(e) { "use strict"; e.fn.eles({ on: e.define.on(), one: e.define.on({ unbindSelfOnTrigger: !0 }), once: e.define.on({ unbindAllBindersOnTrigger: !0 }), off: e.define.off(), trigger: e.define.trigger(), rtrigger: function(e, t) { return 0 !== this.length ? (this.cy().notify({ type: e, collection: this }), this.trigger(e, t), this) : void 0 } }), e.define.eventAliasesOn(e.elesfn) }(cytoscape), function(e) { "use strict"; e.fn.eles({ nodes: function(e) { return this.filter(function(e, t) { return t.isNode() }).filter(e) }, edges: function(e) { return this.filter(function(e, t) { return t.isEdge() }).filter(e) }, filter: function(t) { var n = this._private.cy; if (e.is.fn(t)) { for (var r = [], i = 0; i < this.length; i++) { var a = this[i]; t.apply(a, [i, a]) && r.push(a) } return new e.Collection(n, r) } return e.is.string(t) || e.is.elementOrCollection(t) ? new e.Selector(t).filter(this) : void 0 === t ? this : new e.Collection(n) }, not: function(t) { var n = this._private.cy; if (t) { e.is.string(t) && (t = this.filter(t)); for (var r = [], i = 0; i < this.length; i++) { var a = this[i], o = t._private.ids[a.id()]; o || r.push(a) } return new e.Collection(n, r) } return this }, absoluteComplement: function() { var e = this._private.cy; return e.elements().not(this) }, intersect: function(t) { var n = this._private.cy; if (e.is.string(t)) { var r = t; return this.filter(r) } for (var i = [], a = this, o = t, s = this.length < t.length, l = s ? o._private.ids : a._private.ids, u = s ? a : o, c = 0; c < u.length; c++) { var d = u[c]._private.data.id, h = l[d]; h && i.push(h) } return new e.Collection(n, i) }, xor: function(t) { var n = this._private.cy; e.is.string(t) && (t = n.$(t)); var r = [], i = this, a = t, o = function(e, t) { for (var n = 0; n < e.length; n++) { var i = e[n], a = i._private.data.id, o = t._private.ids[a]; o || r.push(i) } }; return o(i, a), o(a, i), new e.Collection(n, r) }, diff: function(t) { var n = this._private.cy; e.is.string(t) && (t = n.$(t)); var r = [], i = [], a = [], o = this, s = t, l = function(e, t, n) { for (var r = 0; r < e.length; r++) { var i = e[r], o = i._private.data.id, s = t._private.ids[o]; s ? a.push(i) : n.push(i) } }; return l(o, s, r), l(s, o, i), { left: new e.Collection(n, r, { unique: !0 }), right: new e.Collection(n, i, { unique: !0 }), both: new e.Collection(n, a, { unique: !0 }) } }, add: function(t) { var n = this._private.cy; if (!t) return this; if (e.is.string(t)) { var r = t; t = n.elements(r) } for (var i = [], a = 0; a < this.length; a++) i.push(this[a]); for (var a = 0; a < t.length; a++) { var o = !this._private.ids[t[a].id()]; o && i.push(t[a]) } return new e.Collection(n, i) }, merge: function(t) { var n = this._private, r = n.cy; if (!t) return this; if (e.is.string(t)) { var i = t; t = r.elements(i) } for (var a = 0; a < t.length; a++) { var o = t[a], s = o.id(), l = !n.ids[s]; if (l) { var u = this.length++; this[u] = o, n.ids[s] = o, n.indexes[s] = u } } return this }, unmergeOne: function(e) { e = e[0]; var t = this._private, n = e.id(), r = t.indexes[n]; if (null == r) return this; this[r] = void 0, t.ids[n] = void 0, t.indexes[n] = void 0; var i = r === this.length - 1; if (this.length > 1 && !i) { var a = this.length - 1, o = this[a]; this[a] = void 0, this[r] = o, t.indexes[o.id()] = r } return this.length--, this }, unmerge: function(t) { var n = this._private.cy; if (!t) return this; if (e.is.string(t)) { var r = t; t = n.elements(r) } for (var i = 0; i < t.length; i++) this.unmergeOne(t[i]); return this }, map: function(e, t) { for (var n = [], r = this, i = 0; i < r.length; i++) { var a = r[i], o = t ? e.apply(t, [a, i, r]) : e(a, i, r); n.push(o) } return n }, stdFilter: function(t, n) { for (var r = [], i = this, a = this._private.cy, o = 0; o < i.length; o++) { var s = i[o], l = n ? t.apply(n, [s, o, i]) : t(s, o, i); l && r.push(s) } return new e.Collection(a, r) }, max: function(e, t) { for (var n, r = -(1 / 0), i = this, a = 0; a < i.length; a++) { var o = i[a], s = t ? e.apply(t, [o, a, i]) : e(o, a, i); s > r && (r = s, n = o) } return { value: r, ele: n } }, min: function(e, t) { for (var n, r = 1 / 0, i = this, a = 0; a < i.length; a++) { var o = i[a], s = t ? e.apply(t, [o, a, i]) : e(o, a, i); r > s && (r = s, n = o) } return { value: r, ele: n } } }); var t = e.elesfn; t.u = t["|"] = t["+"] = t.union = t.or = t.add, t["\\"] = t["!"] = t["-"] = t.difference = t.relativeComplement = t.not, t.n = t["&"] = t["."] = t.and = t.intersection = t.intersect, t["^"] = t["(+)"] = t["(-)"] = t.symmetricDifference = t.symdiff = t.xor, t.fnFilter = t.filterFn = t.stdFilter, t.complement = t.abscomp = t.absoluteComplement }(cytoscape), function(e) { "use strict"; e.fn.eles({ isNode: function() { return "nodes" === this.group() }, isEdge: function() { return "edges" === this.group() }, isLoop: function() { return this.isEdge() && this.source().id() === this.target().id() }, isSimple: function() { return this.isEdge() && this.source().id() !== this.target().id() }, group: function() { var e = this[0]; return e ? e._private.group : void 0 } }) }(cytoscape), function(e) { "use strict"; e.fn.eles({ each: function(t) { if (e.is.fn(t)) for (var n = 0; n < this.length; n++) { var r = this[n], i = t.apply(r, [n, r]); if (i === !1) break } return this }, forEach: function(t, n) { if (e.is.fn(t)) for (var r = 0; r < this.length; r++) { var i = this[r], a = n ? t.apply(n, [i, r, this]) : t(i, r, this); if (a === !1) break } return this }, toArray: function() { for (var e = [], t = 0; t < this.length; t++) e.push(this[t]); return e }, slice: function(t, n) { var r = [], i = this.length; null == n && (n = i), null == t && (t = 0), 0 > t && (t = i + t), 0 > n && (n = i + n); for (var a = t; a >= 0 && n > a && i > a; a++) r.push(this[a]); return new e.Collection(this.cy(), r) }, size: function() { return this.length }, eq: function(t) { return this[t] || new e.Collection(this.cy()) }, first: function() { return this[0] || new e.Collection(this.cy()) }, last: function() { return this[this.length - 1] || new e.Collection(this.cy()) }, empty: function() { return 0 === this.length }, nonempty: function() { return !this.empty() }, sort: function(t) { if (!e.is.fn(t)) return this; var n = this.cy(), r = this.toArray().sort(t); return new e.Collection(n, r) }, sortByZIndex: function() { return this.sort(e.Collection.zIndexSort) }, zDepth: function() { var e = this[0]; if (!e) return void 0; var t = e._private, n = t.group; if ("nodes" === n) { var r = t.data.parent ? e.parents().size() : 0; return e.isParent() ? r : Number.MAX_VALUE } var i = t.source, a = t.target, o = i.zDepth(), s = a.zDepth(); return Math.max(o, s, 0) } }), e.Collection.zIndexSort = function(e, t) { var n = e.cy(), r = e._private, i = t._private, a = r.style["z-index"].value - i.style["z-index"].value, o = 0, s = 0, l = n.hasCompoundNodes(), u = "nodes" === r.group, c = "edges" === r.group, d = "nodes" === i.group, h = "edges" === i.group; l && (o = e.zDepth(), s = t.zDepth()); var p = o - s, f = 0 === p; return f ? u && h ? 1 : c && d ? -1 : 0 === a ? r.index - i.index : a : p } }(cytoscape), function(e) { "use strict"; e.fn.eles({ layoutPositions: function(t, n, r) { var i = this.nodes(), a = this.cy(); if (t.trigger({ type: "layoutstart", layout: t }), n.animate) { for (var o = 0; o < i.length; o++) { var s = i[o], l = o === i.length - 1, u = r.call(s, o, s), c = s.position(); e.is.number(c.x) && e.is.number(c.y) || s.silentPosition({ x: 0, y: 0 }), s.animate({ position: u }, { duration: n.animationDuration, step: l ? function() { n.fit && a.fit(n.eles, n.padding) } : void 0, complete: l ? function() { null != n.zoom && a.zoom(n.zoom), n.pan && a.pan(n.pan), n.fit && a.fit(n.eles, n.padding), t.one("layoutstop", n.stop), t.trigger({ type: "layoutstop", layout: t }) } : void 0 }) } t.one("layoutready", n.ready), t.trigger({ type: "layoutready", layout: t }) } else i.positions(r), n.fit && a.fit(n.eles, n.padding), null != n.zoom && a.zoom(n.zoom), n.pan && a.pan(n.pan), t.one("layoutready", n.ready), t.trigger({ type: "layoutready", layout: t }), t.one("layoutstop", n.stop), t.trigger({ type: "layoutstop", layout: t }); return this }, layout: function(t) { var n = this.cy(); return n.layout(e.util.extend({}, t, { eles: this })), this }, makeLayout: function(t) { var n = this.cy(); return n.makeLayout(e.util.extend({}, t, { eles: this })) } }), e.elesfn.createLayout = e.elesfn.makeLayout }(cytoscape), function(e) { "use strict"; e.fn.eles({ updateStyle: function(e) { var t = this._private.cy; if (!t.styleEnabled()) return this; if (t._private.batchingStyle) { for (var n = t._private.batchStyleEles, r = 0; r < this.length; r++) { var i = this[r]; n.ids[i._private.id] || n.push(i) } return this } var a = t.style(); e = e || void 0 === e ? !0 : !1, a.apply(this); var o = this.updateCompoundBounds(), s = o.length > 0 ? this.add(o) : this; return e ? s.rtrigger("style") : s.trigger("style"), this }, updateMappers: function(e) { var t = this._private.cy, n = t.style(); if (e = e || void 0 === e ? !0 : !1, !t.styleEnabled()) return this; n.updateMappers(this); var r = this.updateCompoundBounds(), i = r.length > 0 ? this.add(r) : this; return e ? i.rtrigger("style") : i.trigger("style"), this }, renderedCss: function(e) { var t = this.cy(); if (!t.styleEnabled()) return this; var n = this[0]; if (n) { var r = n.cy().style().getRenderedStyle(n); return void 0 === e ? r : r[e] } }, css: function(t, n) { var r = this.cy(); if (!r.styleEnabled()) return this; var i = !1, a = r.style(); if (e.is.plainObject(t)) { var o = t; a.applyBypass(this, o, i); var s = this.updateCompoundBounds(), l = s.length > 0 ? this.add(s) : this; l.rtrigger("style") } else if (e.is.string(t)) { if (void 0 === n) { var u = this[0]; return u ? u._private.style[t].strValue : void 0 } a.applyBypass(this, t, n, i); var s = this.updateCompoundBounds(), l = s.length > 0 ? this.add(s) : this; l.rtrigger("style") } else if (void 0 === t) { var u = this[0]; return u ? a.getRawStyle(u) : void 0 } return this }, removeCss: function(e) { var t = this.cy(); if (!t.styleEnabled()) return this; var n = !1, r = t.style(), i = this; if (void 0 === e) for (var a = 0; a < i.length; a++) { var o = i[a]; r.removeAllBypasses(o, n) } else { e = e.split(/\s+/); for (var a = 0; a < i.length; a++) { var o = i[a]; r.removeBypasses(o, e, n) } } var s = this.updateCompoundBounds(), l = s.length > 0 ? this.add(s) : this; return l.rtrigger("style"), this }, show: function() { return this.css("display", "element"), this }, hide: function() { return this.css("display", "none"), this }, visible: function() { var e = this.cy(); if (!e.styleEnabled()) return !0; var t = this[0], n = e.hasCompoundNodes(); if (t) { var r = t._private.style; if ("visible" !== r.visibility.value || "element" !== r.display.value) return !1; if ("nodes" === t._private.group) { if (!n) return !0; var i = t._private.data.parent ? t.parents() : null; if (i) for (var a = 0; a < i.length; a++) { var o = i[a], s = o._private.style, l = s.visibility.value, u = s.display.value; if ("visible" !== l || "element" !== u) return !1 } return !0 } var c = t._private.source, d = t._private.target; return c.visible() && d.visible() } }, hidden: function() { var e = this[0]; return e ? !e.visible() : void 0 }, effectiveOpacity: function() { var e = this.cy(); if (!e.styleEnabled()) return 1; var t = e.hasCompoundNodes(), n = this[0]; if (n) { var r = n._private, i = r.style.opacity.value; if (!t) return i; var a = r.data.parent ? n.parents() : null; if (a) for (var o = 0; o < a.length; o++) { var s = a[o], l = s._private.style.opacity.value; i = l * i } return i } }, transparent: function() { var e = this.cy(); if (!e.styleEnabled()) return !1; var t = this[0], n = t.cy().hasCompoundNodes(); return t ? n ? 0 === t.effectiveOpacity() : 0 === t._private.style.opacity.value : void 0 }, isFullAutoParent: function() { var e = this.cy(); if (!e.styleEnabled()) return !1; var t = this[0]; if (t) { var n = "auto" === t._private.style.width.value, r = "auto" === t._private.style.height.value; return t.isParent() && n && r } }, backgrounding: function() { var e = this.cy(); if (!e.styleEnabled()) return !1; var t = this[0]; return t._private.backgrounding ? !0 : !1 } }), e.elesfn.bypass = e.elesfn.style = e.elesfn.css, e.elesfn.renderedStyle = e.elesfn.renderedCss, e.elesfn.removeBypass = e.elesfn.removeStyle = e.elesfn.removeCss }(cytoscape), function(e) { "use strict"; function t(t) { return function() { var n = arguments, r = []; if (2 === n.length) { var i = n[0], a = n[1]; this.bind(t.event, i, a) } else if (1 === n.length) { var a = n[0]; this.bind(t.event, a) } else if (0 === n.length) { for (var o = 0; o < this.length; o++) { var s = this[o], l = !t.ableField || s._private[t.ableField], u = s._private[t.field] != t.value; if (t.overrideAble) { var c = t.overrideAble(s); if (void 0 !== c && (l = c, !c)) return this } l && (s._private[t.field] = t.value, u && r.push(s)) } var d = e.Collection(this.cy(), r); d.updateStyle(), d.trigger(t.event) } return this } } function n(n) { e.elesfn[n.field] = function() { var e = this[0]; if (e) { if (n.overrideField) { var t = n.overrideField(e); if (void 0 !== t) return t } return e._private[n.field] } }, e.elesfn[n.on] = t({ event: n.on, field: n.field, ableField: n.ableField, overrideAble: n.overrideAble, value: !0 }), e.elesfn[n.off] = t({ event: n.off, field: n.field, ableField: n.ableField, overrideAble: n.overrideAble, value: !1 }) } n({ field: "locked", overrideField: function(e) { return e.cy().autolock() ? !0 : void 0 }, on: "lock", off: "unlock" }), n({ field: "grabbable", overrideField: function(e) { return e.cy().autoungrabify() ? !1 : void 0 }, on: "grabify", off: "ungrabify" }), n({ field: "selected", ableField: "selectable", overrideAble: function(e) { return e.cy().autounselectify() ? !1 : void 0 }, on: "select", off: "unselect" }), n({ field: "selectable", overrideField: function(e) { return e.cy().autounselectify() ? !1 : void 0 }, on: "selectify", off: "unselectify" }), e.elesfn.deselect = e.elesfn.unselect, e.elesfn.grabbed = function() { var e = this[0]; return e ? e._private.grabbed : void 0 }, n({ field: "active", on: "activate", off: "unactivate" }), e.elesfn.inactive = function() { var e = this[0]; return e ? !e._private.active : void 0 } }(cytoscape), function(e) { "use strict"; function t(t) { return function(n) { for (var r = [], i = this._private.cy, a = 0; a < this.length; a++) { var o = this[a], s = o._private[t.attr]; s && r.push(s) } return new e.Collection(i, r, { unique: !0 }).filter(n) } } function n(t) { return function(n) { var r = [], i = this._private.cy, a = t || {}; e.is.string(n) && (n = i.$(n)); for (var o = this._private.ids, s = n._private.ids, l = 0; l < n.length; l++) for (var u = n[l]._private.edges, c = 0; c < u.length; c++) { var d = u[c], h = d._private.data, p = o[h.source] && s[h.target], f = s[h.source] && o[h.target], v = p || f; if (v) { if (a.thisIs) { if ("source" === a.thisIs && !p) continue; if ("target" === a.thisIs && !f) continue } r.push(d) } } return new e.Collection(i, r, { unique: !0 }) } } function r(t) { var n = { codirected: !1 }; return t = e.util.extend({}, n, t), function(n) { for (var r = this._private.cy, i = [], a = this.edges(), o = t, s = 0; s < a.length; s++) for (var l = a[s], u = l.source()[0], c = u.id(), d = l.target()[0], h = d.id(), p = u._private.edges, f = 0; f < p.length; f++) { var v = p[f], g = v._private.data, y = g.target, m = g.source, x = y === h && m === c, b = c === y && h === m; (o.codirected && x || !o.codirected && (x || b)) && i.push(v) } return new e.Collection(r, i, { unique: !0 }).filter(n) } } e.fn.eles({ roots: function(t) { for (var n = this, r = [], i = 0; i < n.length; i++) { var a = n[i]; if (a.isNode()) { var o = a.connectedEdges(function() { return this.data("target") === a.id() && this.data("source") !== a.id() }).length > 0; o || r.push(a) } } return new e.Collection(this._private.cy, r, { unique: !0 }).filter(t) }, leaves: function(t) { for (var n = this, r = [], i = 0; i < n.length; i++) { var a = n[i]; if (a.isNode()) { var o = a.connectedEdges(function() { return this.data("source") === a.id() && this.data("target") !== a.id() }).length > 0; o || r.push(a) } } return new e.Collection(this._private.cy, r, { unique: !0 }).filter(t) }, outgoers: function(t) { for (var n = this, r = [], i = 0; i < n.length; i++) { var a = n[i], o = a.id(); if (a.isNode()) for (var s = a._private.edges, l = 0; l < s.length; l++) { var u = s[l], c = u._private.data.source, d = u._private.data.target; c === o && d !== o && (r.push(u), r.push(u.target()[0])) } } return new e.Collection(this._private.cy, r, { unique: !0 }).filter(t) }, successors: function(t) { for (var n = this, r = [], i = {};;) { var a = n.outgoers(); if (0 === a.length) break; for (var o = !1, s = 0; s < a.length; s++) { var l = a[s], u = l.id(); i[u] || (i[u] = !0, r.push(l), o = !0) } if (!o) break; n = a } return new e.Collection(this._private.cy, r, { unique: !0 }).filter(t) }, incomers: function(t) { for (var n = this, r = [], i = 0; i < n.length; i++) { var a = n[i], o = a.id(); if (a.isNode()) for (var s = a._private.edges, l = 0; l < s.length; l++) { var u = s[l], c = u._private.data.source, d = u._private.data.target; d === o && c !== o && (r.push(u), r.push(u.source()[0])) } } return new e.Collection(this._private.cy, r, { unique: !0 }).filter(t) }, predecessors: function(t) { for (var n = this, r = [], i = {};;) { var a = n.incomers(); if (0 === a.length) break; for (var o = !1, s = 0; s < a.length; s++) { var l = a[s], u = l.id(); i[u] || (i[u] = !0, r.push(l), o = !0) } if (!o) break; n = a } return new e.Collection(this._private.cy, r, { unique: !0 }).filter(t) } }), e.fn.eles({ neighborhood: function(t) { for (var n = [], r = this._private.cy, i = this.nodes(), a = 0; a < i.length; a++) for (var o = i[a], s = o.connectedEdges(), l = 0; l < s.length; l++) { var u = s[l], c = u.connectedNodes().not(o); c.length > 0 && n.push(c[0]), n.push(u[0]) } return new e.Collection(r, n, { unique: !0 }).filter(t) }, closedNeighborhood: function(e) { return this.neighborhood().add(this).filter(e) }, openNeighborhood: function(e) { return this.neighborhood(e) } }), e.elesfn.neighbourhood = e.elesfn.neighborhood, e.elesfn.closedNeighbourhood = e.elesfn.closedNeighborhood, e.elesfn.openNeighbourhood = e.elesfn.openNeighborhood, e.fn.eles({ source: function(e) { var t, n = this[0]; return n && (t = n._private.source), t && e ? t.filter(e) : t }, target: function(e) { var t, n = this[0]; return n && (t = n._private.target), t && e ? t.filter(e) : t }, sources: t({ attr: "source" }), targets: t({ attr: "target" }) }), e.fn.eles({ edgesWith: n(), edgesTo: n({ thisIs: "source" }) }), e.fn.eles({ connectedEdges: function(t) { for (var n = [], r = this._private.cy, i = this, a = 0; a < i.length; a++) { var o = i[a]; if (o.isNode()) for (var s = o._private.edges, l = 0; l < s.length; l++) { var u = s[l]; n.push(u) } } return new e.Collection(r, n, { unique: !0 }).filter(t) }, connectedNodes: function(t) { for (var n = [], r = this._private.cy, i = this, a = 0; a < i.length; a++) { var o = i[a]; o.isEdge() && (n.push(o.source()[0]), n.push(o.target()[0])) } return new e.Collection(r, n, { unique: !0 }).filter(t) }, parallelEdges: r(), codirectedEdges: r({ codirected: !0 }) }) }(cytoscape), function(e) { "use strict"; e.fn.eles({ fit: function() {}, center: function() {} }) }(cytoscape), function(e) { "use strict"; e.Minheap = function(t, n, r) { return new e.Heap(t, n, e.Heap.minHeapComparator, r) }, e.Maxheap = function(t, n, r) { return new e.Heap(t, n, e.Heap.maxHeapComparator, r) }, e.Heap = function(t, n, r, i) { if ("undefined" != typeof r && "undefined" != typeof n) { "undefined" == typeof i && (i = e.Heap.idFn); var a, o, s, l = [], u = {}, c = [], d = 0; for (n = this.getArgumentAsCollection(n, t), s = n.length, d = 0; s > d; d += 1) { if (l.push(i.call(t, n[d], d, n)), a = n[d].id(), u.hasOwnProperty(a)) throw "ERROR: Multiple items with the same id found: " + a; u[a] = d, c.push(a) } for (this._private = { cy: t, heap: l, pointers: u, elements: c, comparator: r, extractor: i, length: s }, d = Math.floor(s / 2); d >= 0; d -= 1) o = this.heapify(d); return o } }, e.Heap.idFn = function(e) { return e.id() }, e.Heap.minHeapComparator = function(e, t) { return e >= t }, e.Heap.maxHeapComparator = function(e, t) { return t >= e }, e.fn.heap = function(t, n) { for (var r in t) { var i = t[r]; e.Heap.prototype[r] = i } }, e.heapfn = e.Heap.prototype, e.heapfn.size = function() { return this._private.length }, e.heapfn.getArgumentAsCollection = function(t, n) { var r; if ("undefined" == typeof n && (n = this._private.cy), e.is.elementOrCollection(t)) r = t; else { for (var i = [], a = [].concat.apply([], [t]), o = 0; o < a.length; o++) { var s = a[o], l = n.getElementById(s); l.length > 0 && i.push(l) } r = new e.Collection(n, i) } return r }, e.heapfn.isHeap = function() { var e, t, n, r, i, a = this._private.heap, o = a.length, s = this._private.comparator; for (e = 0; o > e; e += 1) if (t = 2 * e + 1, n = t + 1, r = o > t ? s(a[t], a[e]) : !0, i = o > n ? s(a[n], a[e]) : !0, !r || !i) return !1; return !0 }, e.heapfn.heapSwap = function(e, t) { var n = this._private.heap, r = this._private.pointers, i = this._private.elements, a = n[e], o = i[e], s = i[e], l = i[t]; n[e] = n[t], i[e] = i[t], r[s] = t, r[l] = e, n[t] = a, i[t] = o }, e.heapfn.heapify = function(e, t) { var n, r, i, a, o, s, l, u = 0, c = !1; for ("undefined" == typeof t && (t = !0), n = this._private.heap, u = n.length, s = this._private.comparator, r = e; !c;) t ? (i = 2 * r + 1, a = i + 1, o = r, u > i && !s(n[i], n[o]) && (o = i), u > a && !s(n[a], n[o]) && (o = a), c = o === r, c || (this.heapSwap(o, r), r = o)) : (l = Math.floor((r - 1) / 2), o = r, c = 0 > l || s(n[o], n[l]), c || (this.heapSwap(o, l), r = l)) }, e.heapfn.insert = function(e) { var t, n, r, i, a, o = this.getArgumentAsCollection(e), s = o.length; for (a = 0; s > a; a += 1) { if (t = o[a], n = this._private.heap.length, r = this._private.extractor(t), i = t.id(), this._private.pointers.hasOwnProperty(i)) throw "ERROR: Multiple items with the same id found: " + i; this._private.heap.push(r), this._private.elements.push(i), this._private.pointers[i] = n, this.heapify(n, !1) } this._private.length = this._private.heap.length }, e.heapfn.getValueById = function(e) { if (this._private.pointers.hasOwnProperty(e)) { var t = this._private.pointers[e]; return this._private.heap[t] } }, e.heapfn.contains = function(e) { for (var t = this.getArgumentAsCollection(e), n = 0; n < t.length; n += 1) { var r = t[n].id(); if (!this._private.pointers.hasOwnProperty(r)) return !1 } return !0 }, e.heapfn.top = function() { return this._private.length > 0 ? { value: this._private.heap[0], id: this._private.elements[0] } : void 0 }, e.heapfn.pop = function() { if (this._private.length > 0) { var e, t, n, r = this.top(), i = this._private.length - 1; return this.heapSwap(0, i), e = this._private.elements[i], t = this._private.heap[i], n = e, this._private.heap.pop(), this._private.elements.pop(), this._private.length = this._private.heap.length, this._private.pointers[n] = void 0, this.heapify(0), r } }, e.heapfn.findDirectionHeapify = function(e) { var t = Math.floor((e - 1) / 2), n = this._private.heap, r = 0 > t || this._private.comparator(n[e], n[t]); this.heapify(e, r) }, e.heapfn.edit = function(t, n) { for (var r = this.getArgumentAsCollection(t), i = 0; i < r.length; i += 1) { var a = r[i].id(), o = this._private.pointers[a], s = this._private.heap[o]; e.is.number(n) ? this._private.heap[o] = n : e.is.fn(n) && (this._private.heap[o] = n.call(this._private.cy, s, o)), this.findDirectionHeapify(o) } }, e.heapfn.remove = function(e) { for (var t = this.getArgumentAsCollection(e), n = 0; n < t.length; n += 1) { var r, i, a, o = t[n].id(), s = this._private.pointers[o], l = this._private.length - 1; s !== l && this.heapSwap(s, l), r = this._private.elements[l], i = this._private.heap[l], a = r, this._private.heap.pop(), this._private.elements.pop(), this._private.length = this._private.heap.length, this._private.pointers[a] = void 0, this.findDirectionHeapify(s) } return i } }(cytoscape), function(e) { "use strict"; function t(e) { this.options = e, this.data = { select: [void 0, void 0, void 0, void 0, 0], renderer: this, cy: e.cy, container: e.cy.container(), canvases: new Array(t.CANVAS_LAYERS), contexts: new Array(t.CANVAS_LAYERS), canvasNeedsRedraw: new Array(t.CANVAS_LAYERS), bufferCanvases: new Array(t.BUFFER_COUNT), bufferContexts: new Array(t.CANVAS_LAYERS) }, this.hoverData = { down: null, last: null, downTime: null, triggerMode: null, dragging: !1, initialPan: [null, null], capture: !1 }, this.timeoutData = { panTimeout: null }, this.dragData = { possibleDragElements: [] }, this.touchData = { start: null, capture: !1, startPosition: [null, null, null, null, null, null], singleTouchStartTime: null, singleTouchMoved: !0, now: [null, null, null, null, null, null], earlier: [null, null, null, null, null, null] }, this.zoomData = { freeToZoom: !1, lastPointerX: null }, this.redraws = 0, this.showFps = e.showFps, this.bindings = [], this.data.canvasContainer = document.createElement("div"); var n = this.data.canvasContainer.style; n.position = "absolute", n.zIndex = "0", n.overflow = "hidden", this.data.container.appendChild(this.data.canvasContainer); for (var r = 0; r < t.CANVAS_LAYERS; r++) this.data.canvases[r] = document.createElement("canvas"), this.data.contexts[r] = this.data.canvases[r].getContext("2d"), this.data.canvases[r].style.position = "absolute", this.data.canvases[r].setAttribute("data-id", "layer" + r), this.data.canvases[r].style.zIndex = String(t.CANVAS_LAYERS - r), this.data.canvasContainer.appendChild(this.data.canvases[r]), this.data.canvasNeedsRedraw[r] = !1; this.data.topCanvas = this.data.canvases[0], this.data.canvases[t.NODE].setAttribute("data-id", "layer" + t.NODE + "-node"), this.data.canvases[t.SELECT_BOX].setAttribute("data-id", "layer" + t.SELECT_BOX + "-selectbox"), this.data.canvases[t.DRAG].setAttribute("data-id", "layer" + t.DRAG + "-drag"); for (var r = 0; r < t.BUFFER_COUNT; r++) this.data.bufferCanvases[r] = document.createElement("canvas"), this.data.bufferContexts[r] = this.data.bufferCanvases[r].getContext("2d"), this.data.bufferCanvases[r].style.position = "absolute", this.data.bufferCanvases[r].setAttribute("data-id", "buffer" + r), this.data.bufferCanvases[r].style.zIndex = String(-r - 1), this.data.bufferCanvases[r].style.visibility = "hidden"; this.hideEdgesOnViewport = e.hideEdgesOnViewport, this.hideLabelsOnViewport = e.hideLabelsOnViewport, this.textureOnViewport = e.textureOnViewport, this.wheelSensitivity = e.wheelSensitivity, this.motionBlurEnabled = e.motionBlur, this.forcedPixelRatio = e.pixelRatio, this.motionBlur = !0, this.motionBlurOpacity = e.motionBlurOpacity, this.motionBlurTransparency = 1 - this.motionBlurOpacity, this.motionBlurPxRatio = 1, this.mbPxRBlurry = 1, this.minMbLowQualFrames = 4, this.fullQualityMb = !1, this.clearedForMotionBlur = [], this.desktopTapThreshold = e.desktopTapThreshold, this.desktopTapThreshold2 = e.desktopTapThreshold * e.desktopTapThreshold, this.touchTapThreshold = e.touchTapThreshold, this.touchTapThreshold2 = e.touchTapThreshold * e.touchTapThreshold, this.tapholdDuration = 500, this.load() } t.CANVAS_LAYERS = 3, t.SELECT_BOX = 0, t.DRAG = 1, t.NODE = 2, t.BUFFER_COUNT = 3, t.TEXTURE_BUFFER = 0, t.MOTIONBLUR_BUFFER_NODE = 1, t.MOTIONBLUR_BUFFER_DRAG = 2, t.panOrBoxSelectDelay = 400; var n = "undefined" != typeof Path2D; t.usePaths = function() { return n }, t.prototype.notify = function(n) { var r; r = e.is.array(n.type) ? n.type : [n.type]; for (var i = 0; i < r.length; i++) { var a = r[i]; switch (a) { case "destroy": return void this.destroy(); case "add": case "remove": case "load": this.updateNodesCache(), this.updateEdgesCache(); break; case "viewport": this.data.canvasNeedsRedraw[t.SELECT_BOX] = !0; break; case "style": this.updateCachedZSortedEles() }("load" === a || "resize" === a) && (this.invalidateContainerClientCoordsCache(), this.matchCanvasSize(this.data.container)) } this.data.canvasNeedsRedraw[t.NODE] = !0, this.data.canvasNeedsRedraw[t.DRAG] = !0, this.redraw() }, t.prototype.destroy = function() { this.destroyed = !0; for (var e = 0; e < this.bindings.length; e++) { var t = this.bindings[e], n = t; n.target.removeEventListener(n.event, n.handler, n.useCapture) } if (this.removeObserver && this.removeObserver.disconnect(), this.labelCalcDiv) try { document.body.removeChild(this.labelCalcDiv) } catch (r) {} }; for (var r in e.math) t.prototype[r] = e.math[r]; e("renderer", "canvas", t) }(cytoscape), function(e) { "use strict"; var t = e("renderer", "canvas"), n = t.prototype, r = t.arrowShapes = {}; t.arrowShapeHeight = .3; var i = function(e, t, n, r, i, a, o, s) { var l = n - i / 2, u = n + i / 2, c = r - a / 2, d = r + a / 2; return e >= l && u >= e && t >= c && d >= t }, a = function(e, t, n, r, i) { r = -r; var a = e * Math.cos(r) - t * Math.sin(r), o = e * Math.sin(r) + t * Math.cos(r), s = a * n, l = o * n, u = s + i.x, c = l + i.y; return { x: u, y: c } }; r.arrow = { _points: [-.15, -.3, 0, 0, .15, -.3], collide: function(t, n, i, a, o, s, l, u) { var c = r.arrow._points; return e.math.pointInsidePolygon(t, n, c, i, a, o, s, l, u) }, roughCollide: i, draw: function(e, t, n, i) { for (var o = r.arrow._points, s = 0; s < o.length / 2; s++) { var l = a(o[2 * s], o[2 * s + 1], t, n, i); e.lineTo(l.x, l.y) } }, spacing: function(e) { return 0 }, gap: function(e) { return 2 * e._private.style.width.pxValue } }, r.triangle = r.arrow, r["triangle-backcurve"] = { _ctrlPt: [0, -.15], collide: function(t, n, i, a, o, s, l, u) { var c = r.triangle._points; return e.math.pointInsidePolygon(t, n, c, i, a, o, s, l, u) }, roughCollide: i, draw: function(e, t, n, i) { for (var o, s = r.triangle._points, l = 0; l < s.length / 2; l++) { var u = a(s[2 * l], s[2 * l + 1], t, n, i); 0 === l && (o = u), e.lineTo(u.x, u.y) } var c = this._ctrlPt, d = a(c[0], c[1], t, n, i); e.quadraticCurveTo(d.x, d.y, o.x, o.y) }, spacing: function(e) { return 0 }, gap: function(e) { return 2 * e._private.style.width.pxValue } }, r["triangle-tee"] = { _points: [-.15, -.3, 0, 0, .15, -.3, -.15, -.3], _pointsTee: [-.15, -.4, -.15, -.5, .15, -.5, .15, -.4], collide: function(t, n, i, a, o, s, l, u) { var c = r["triangle-tee"]._points, d = r["triangle-tee"]._pointsTee, h = e.math.pointInsidePolygon(t, n, d, i, a, o, s, l, u) || e.math.pointInsidePolygon(t, n, c, i, a, o, s, l, u); return h }, roughCollide: i, draw: function(e, t, n, i) { for (var o = r["triangle-tee"]._points, s = 0; s < o.length / 2; s++) { var l = a(o[2 * s], o[2 * s + 1], t, n, i); e.lineTo(l.x, l.y) } var u = r["triangle-tee"]._pointsTee, c = a(u[0], u[1], t, n, i); e.moveTo(c.x, c.y); for (var s = 0; s < u.length / 2; s++) { var l = a(u[2 * s], u[2 * s + 1], t, n, i); e.lineTo(l.x, l.y) } }, spacing: function(e) { return 0 }, gap: function(e) { return 2 * e._private.style.width.pxValue } }, r["half-triangle-overshot"] = { _points: [0, -.25, -.5, -.25, .5, .25], leavePathOpen: !0, matchEdgeWidth: !0, collide: function(t, n, r, i, a, o, s, l) { var u = this._points; return e.math.pointInsidePolygon(t, n, u, r, i, a, o, s, l) }, roughCollide: i, draw: function(e, t, n, r) { for (var i = this._points, o = 0; o < i.length / 2; o++) { var s = a(i[2 * o], i[2 * o + 1], t, n, r); e.lineTo(s.x, s.y) } }, spacing: function(e) { return 0 }, gap: function(e) { return 2 * e._private.style.width.pxValue } }, r.none = { collide: function(e, t, n, r, i, a, o, s) { return !1 }, roughCollide: function(e, t, n, r, i, a, o, s) { return !1 }, draw: function(e) {}, spacing: function(e) { return 0 }, gap: function(e) { return 0 } }, r.circle = { _baseRadius: .15, collide: function(e, t, n, i, a, o, s, l) { if (a != o) { var u = (o + l) / (a + l); return t /= u, i /= u, Math.pow(n - e, 2) + Math.pow(i - t, 2) <= Math.pow((a + l) * r.circle._baseRadius, 2) } return Math.pow(n - e, 2) + Math.pow(i - t, 2) <= Math.pow((a + l) * r.circle._baseRadius, 2) }, roughCollide: i, draw: function(e, t, n, i) { e.arc(i.x, i.y, r.circle._baseRadius * t, 0, 2 * Math.PI, !1) }, spacing: function(e) { return n.getArrowWidth(e._private.style.width.pxValue) * r.circle._baseRadius }, gap: function(e) { return 2 * e._private.style.width.pxValue } }, r.inhibitor = { _points: [-.25, 0, -.25, -.1, .25, -.1, .25, 0], collide: function(t, n, i, a, o, s, l, u) { var c = r.inhibitor._points; return e.math.pointInsidePolygon(t, n, c, i, a, o, s, l, u) }, roughCollide: i, draw: function(e, t, n, i) { for (var o = r.inhibitor._points, s = 0; s < o.length / 2; s++) { var l = a(o[2 * s], o[2 * s + 1], t, n, i); e.lineTo(l.x, l.y) } }, spacing: function(e) { return 1 }, gap: function(e) { return 1 } }, r.tee = r.inhibitor, r.square = { _points: [-.15, 0, .15, 0, .15, -.3, -.15, -.3], collide: function(t, n, i, a, o, s, l, u) { var c = r.square._points; return e.math.pointInsidePolygon(t, n, c, i, a, o, s, l, u) }, roughCollide: i, draw: function(e, t, n, i) { for (var o = r.square._points, s = 0; s < o.length / 2; s++) { var l = a(o[2 * s], o[2 * s + 1], t, n, i); e.lineTo(l.x, l.y) } }, spacing: function(e) { return 0 }, gap: function(e) { return 2 * e._private.style.width.pxValue } }, r.diamond = { _points: [-.15, -.15, 0, -.3, .15, -.15, 0, 0], collide: function(t, n, i, a, o, s, l, u) { var c = r.diamond._points; return e.math.pointInsidePolygon(t, n, c, i, a, o, s, l, u) }, roughCollide: i, draw: function(e, t, n, i) { for (var o = r.diamond._points, s = 0; s < o.length / 2; s++) { var l = a(o[2 * s], o[2 * s + 1], t, n, i); e.lineTo(l.x, l.y) } }, spacing: function(e) { return 0 }, gap: function(e) { return e._private.style.width.pxValue } } }(cytoscape), function(e) { "use strict"; var t = e("renderer", "canvas"), n = t.prototype; n.getCachedNodes = function() { var e = this.data, t = this.data.cy; return null == e.cache && (e.cache = {}), null == e.cache.cachedNodes && (e.cache.cachedNodes = t.nodes()), e.cache.cachedNodes }, n.updateNodesCache = function() { var e = this.data, t = this.data.cy; null == e.cache && (e.cache = {}), e.cache.cachedNodes = t.nodes() }, n.getCachedEdges = function() { var e = this.data, t = this.data.cy; return null == e.cache && (e.cache = {}), null == e.cache.cachedEdges && (e.cache.cachedEdges = t.edges()), e.cache.cachedEdges }, n.updateEdgesCache = function() { var e = this.data, t = this.data.cy; null == e.cache && (e.cache = {}), e.cache.cachedEdges = t.edges() } }(cytoscape), function(e) { "use strict"; var t = e("renderer", "canvas"), n = t.prototype; n.projectIntoViewport = function(e, t) { var n = this.findContainerClientCoords(), r = n[0], i = n[1], a = e - r, o = t - i; return a -= this.data.cy.pan().x, o -= this.data.cy.pan().y, a /= this.data.cy.zoom(), o /= this.data.cy.zoom(), [a, o] }, n.findContainerClientCoords = function() { var e = this.data.container, t = this.containerBB = this.containerBB || e.getBoundingClientRect(); return [t.left, t.top, t.right - t.left, t.bottom - t.top] }, n.invalidateContainerClientCoordsCache = function() { this.containerBB = null }, n.findNearestElement = function(n, r, i, a) { function o(e) { var a = e.outerWidth() + 2 * f, o = e.outerHeight() + 2 * f, s = a / 2, u = o / 2, d = e._private.position; if (d.x - s <= n && n <= d.x + s && d.y - u <= r && r <= d.y + u) { var h = !i || e.visible() && !e.transparent(); if (i && !h) return; var p = t.nodeShapes[l.getNodeShape(e)]; e._private.style["border-width"].pxValue / 2; p.checkPoint(n, r, 0, a, o, d.x, d.y) && c.push(e) } } function s(a) { var s, u, d = a._private.rscratch, f = a._private.style, v = f.width.pxValue / 2 + p, g = v * v, y = 2 * v, m = a._private.source, x = a._private.target, b = !1, w = function() { if (void 0 !== u) return u; if (!i) return u = !0, !0; var e = a.visible() && !a.transparent(); return e ? (u = !0, !0) : (u = !1, !1) }; if ("self" === d.edgeType || "compound" === d.edgeType)((b = e.math.inBezierVicinity(n, r, d.startX, d.startY, d.cp2ax, d.cp2ay, d.selfEdgeMidX, d.selfEdgeMidY, g)) && w() && g > (s = e.math.sqDistanceToQuadraticBezier(n, r, d.startX, d.startY, d.cp2ax, d.cp2ay, d.selfEdgeMidX, d.selfEdgeMidY)) || (b = e.math.inBezierVicinity(n, r, d.selfEdgeMidX, d.selfEdgeMidY, d.cp2cx, d.cp2cy, d.endX, d.endY, g)) && w() && g > (s = e.math.sqDistanceToQuadraticBezier(n, r, d.selfEdgeMidX, d.selfEdgeMidY, d.cp2cx, d.cp2cy, d.endX, d.endY))) && c.push(a); else if ("haystack" === d.edgeType) { var _ = f["haystack-radius"].value, E = _ / 2, T = x._private.position, S = x.width(), C = x.height(), k = m._private.position, D = m.width(), N = m.height(), P = k.x + d.source.x * D * E, M = k.y + d.source.y * N * E, B = T.x + d.target.x * S * E, L = T.y + d.target.y * C * E; (b = e.math.inLineVicinity(n, r, P, M, B, L, y)) && w() && g > (s = e.math.sqDistanceToFiniteLine(n, r, P, M, B, L)) && c.push(a) } else "straight" === d.edgeType ? (b = e.math.inLineVicinity(n, r, d.startX, d.startY, d.endX, d.endY, y)) && w() && g > (s = e.math.sqDistanceToFiniteLine(n, r, d.startX, d.startY, d.endX, d.endY)) && c.push(a) : "bezier" === d.edgeType && (b = e.math.inBezierVicinity(n, r, d.startX, d.startY, d.cp2x, d.cp2y, d.endX, d.endY, g)) && w() && g > (s = e.math.sqDistanceToQuadraticBezier(n, r, d.startX, d.startY, d.cp2x, d.cp2y, d.endX, d.endY)) && c.push(a); if (b && w() && 0 === c.length || c[c.length - 1] !== a) { var O = t.arrowShapes[f["source-arrow-shape"].value], A = t.arrowShapes[f["target-arrow-shape"].value], m = m || a._private.source, x = x || a._private.target, T = x._private.position, k = m._private.position, I = l.getArrowWidth(f.width.pxValue), z = l.getArrowHeight(f.width.pxValue), R = I, j = z; (O.roughCollide(n, r, d.arrowStartX, d.arrowStartY, I, z, [d.arrowStartX - k.x, d.arrowStartY - k.y], p) && O.collide(n, r, d.arrowStartX, d.arrowStartY, I, z, [d.arrowStartX - k.x, d.arrowStartY - k.y], p) || A.roughCollide(n, r, d.arrowEndX, d.arrowEndY, R, j, [d.arrowEndX - T.x, d.arrowEndY - T.y], p) && A.collide(n, r, d.arrowEndX, d.arrowEndY, R, j, [d.arrowEndX - T.x, d.arrowEndY - T.y], p)) && c.push(a) } h && c.length > 0 && c[c.length - 1] === a && (o(m), o(x)) } for (var l = this, u = this.getCachedZSortedEles(), c = [], d = this.data.cy.zoom(), h = this.data.cy.hasCompoundNodes(), p = (a ? 24 : 8) / d, f = (a ? 8 : 2) / d, v = u.length - 1; v >= 0; v--) { var g = u[v]; if (c.length > 0) break; "nodes" === g._private.group ? o(u[v]) : s(u[v]) } return c.length > 0 ? c[c.length - 1] : null }, n.getAllInBox = function(n, r, i, a) { var o = this.getCachedNodes(), s = this.getCachedEdges(), l = [], u = Math.min(n, i), c = Math.max(n, i), d = Math.min(r, a), h = Math.max(r, a); n = u, i = c, r = d, a = h; for (var p, f = 0; f < o.length; f++) { var v = o[f]._private.position, g = this.getNodeShape(o[f]), y = this.getNodeWidth(o[f]), m = this.getNodeHeight(o[f]), x = o[f]._private.style["border-width"].pxValue / 2, b = t.nodeShapes[g]; b.intersectBox(n, r, i, a, y, m, v.x, v.y, x) && l.push(o[f]) } for (var f = 0; f < s.length; f++) { var w = s[f]._private.rscratch; if ("self" == s[f]._private.rscratch.edgeType && ((p = e.math.boxInBezierVicinity(n, r, i, a, w.startX, w.startY, w.cp2ax, w.cp2ay, w.endX, w.endY, s[f]._private.style.width.pxValue)) && (2 == p || 1 == p && e.math.checkBezierInBox(n, r, i, a, w.startX, w.startY, w.cp2ax, w.cp2ay, w.endX, w.endY, s[f]._private.style.width.pxValue)) || (p = e.math.boxInBezierVicinity(n, r, i, a, w.startX, w.startY, w.cp2cx, w.cp2cy, w.endX, w.endY, s[f]._private.style.width.pxValue)) && (2 == p || 1 == p && e.math.checkBezierInBox(n, r, i, a, w.startX, w.startY, w.cp2cx, w.cp2cy, w.endX, w.endY, s[f]._private.style.width.pxValue))) && l.push(s[f]), "bezier" == w.edgeType && (p = e.math.boxInBezierVicinity(n, r, i, a, w.startX, w.startY, w.cp2x, w.cp2y, w.endX, w.endY, s[f]._private.style.width.pxValue)) && (2 == p || 1 == p && e.math.checkBezierInBox(n, r, i, a, w.startX, w.startY, w.cp2x, w.cp2y, w.endX, w.endY, s[f]._private.style.width.pxValue)) && l.push(s[f]), "straight" == w.edgeType && (p = e.math.boxInBezierVicinity(n, r, i, a, w.startX, w.startY, .5 * w.startX + .5 * w.endX, .5 * w.startY + .5 * w.endY, w.endX, w.endY, s[f]._private.style.width.pxValue)) && (2 == p || 1 == p && e.math.checkStraightEdgeInBox(n, r, i, a, w.startX, w.startY, w.endX, w.endY, s[f]._private.style.width.pxValue)) && l.push(s[f]), "haystack" == w.edgeType) { var _ = s[f].target()[0], E = _.position(), T = s[f].source()[0], S = T.position(), C = S.x + w.source.x, k = S.y + w.source.y, D = E.x + w.target.x, N = E.y + w.target.y, P = C >= n && i >= C && k >= r && a >= k, M = D >= n && i >= D && N >= r && a >= N; P && M && l.push(s[f]) } } return l }, n.getNodeWidth = function(e) { return e.width() }, n.getNodeHeight = function(e) { return e.height() }, n.getNodeShape = function(e) { var t = e._private.style.shape.value; return e.isParent() ? "rectangle" === t || "roundrectangle" === t ? t : "rectangle" : t }, n.getNodePadding = function(e) { var t = e._private.style["padding-left"].pxValue, n = e._private.style["padding-right"].pxValue, r = e._private.style["padding-top"].pxValue, i = e._private.style["padding-bottom"].pxValue; return isNaN(t) && (t = 0), isNaN(n) && (n = 0), isNaN(r) && (r = 0), isNaN(i) && (i = 0), { left: t, right: n, top: r, bottom: i } }, n.zOrderSort = e.Collection.zIndexSort, n.updateCachedZSortedEles = function() { this.getCachedZSortedEles(!0) }, n.getCachedZSortedEles = function(e) { var t = this.lastZOrderCachedNodes, n = this.lastZOrderCachedEdges, r = this.getCachedNodes(), i = this.getCachedEdges(), a = []; if (!e && t && n && t === r && n === i) a = this.cachedZSortedEles; else { for (var o = 0; o < r.length; o++) { var s = r[o]; (s.animated() || s.visible() && !s.transparent()) && a.push(s) } for (var o = 0; o < i.length; o++) { var l = i[o]; (l.animated() || l.visible() && !l.transparent()) && a.push(l) } a.sort(this.zOrderSort), this.cachedZSortedEles = a } return this.lastZOrderCachedNodes = r, this.lastZOrderCachedEdges = i, a }, n.projectBezier = function(t) { function n(e) { a.push({ x: r(e[0], e[2], e[4], .05), y: r(e[1], e[3], e[5], .05) }), a.push({ x: r(e[0], e[2], e[4], .25), y: r(e[1], e[3], e[5], .25) }), a.push({ x: r(e[0], e[2], e[4], .4), y: r(e[1], e[3], e[5], .4) }); var t = { x: r(e[0], e[2], e[4], .5), y: r(e[1], e[3], e[5], .5) }; a.push(t), "self" === i.edgeType || "compound" === i.edgeType ? (i.midX = i.selfEdgeMidX, i.midY = i.selfEdgeMidY) : (i.midX = t.x, i.midY = t.y), a.push({ x: r(e[0], e[2], e[4], .6), y: r(e[1], e[3], e[5], .6) }), a.push({ x: r(e[0], e[2], e[4], .75), y: r(e[1], e[3], e[5], .75) }), a.push({ x: r(e[0], e[2], e[4], .95), y: r(e[1], e[3], e[5], .95) }) } var r = e.math.qbezierAt, i = t._private.rscratch, a = t._private.rstyle.bezierPts = []; "self" === i.edgeType ? (n([i.startX, i.startY, i.cp2ax, i.cp2ay, i.selfEdgeMidX, i.selfEdgeMidY]), n([i.selfEdgeMidX, i.selfEdgeMidY, i.cp2cx, i.cp2cy, i.endX, i.endY])) : "bezier" === i.edgeType && n([i.startX, i.startY, i.cp2x, i.cp2y, i.endX, i.endY]) }, n.recalculateNodeLabelProjection = function(e) { var t = e._private.style.content.strValue; if (t && !t.match(/^\s+$/)) { var n, r, i = e.outerWidth(), a = e.outerHeight(), o = e._private.position, s = e._private.style["text-halign"].strValue, l = e._private.style["text-valign"].strValue, u = e._private.rscratch, c = e._private.rstyle; switch (s) { case "left": n = o.x - i / 2; break; case "right": n = o.x + i / 2; break; default: n = o.x } switch (l) { case "top": r = o.y - a / 2; break; case "bottom": r = o.y + a / 2; break; default: r = o.y } u.labelX = n, u.labelY = r, c.labelX = n, c.labelY = r, this.applyLabelDimensions(e) } }, n.recalculateEdgeLabelProjection = function(t) { var n = t._private.style.content.strValue; if (n && !n.match(/^\s+$/)) { var r, i, a, o, s = t._private, l = s.rscratch, u = s.rstyle; if ("self" == l.edgeType) a = l.selfEdgeMidX, o = l.selfEdgeMidY; else if ("straight" == l.edgeType) a = (l.startX + l.endX) / 2, o = (l.startY + l.endY) / 2; else if ("bezier" == l.edgeType) a = e.math.qbezierAt(l.startX, l.cp2x, l.endX, .5), o = e.math.qbezierAt(l.startY, l.cp2y, l.endY, .5); else if ("haystack" == l.edgeType) { var c = l.haystackPts; a = (c[0] + c[2]) / 2, o = (c[1] + c[3]) / 2 } r = a, i = o, l.labelX = r, l.labelY = i, u.labelX = r, u.labelY = i, this.applyLabelDimensions(t) } }, n.applyLabelDimensions = function(e) { var t = e._private.rscratch, n = e._private.rstyle, r = this.getLabelText(e), i = this.calculateLabelDimensions(e, r); n.labelWidth = i.width, t.labelWidth = i.width, n.labelHeight = i.height, t.labelHeight = i.height }, n.getLabelText = function(e) { var t = e._private.style, n = e._private.style.content.strValue, r = t["text-transform"].value, i = e._private.rscratch; if ("none" == r || ("uppercase" == r ? n = n.toUpperCase() : "lowercase" == r && (n = n.toLowerCase())), "wrap" === t["text-wrap"].value) { if (i.labelWrapKey === i.labelKey) return i.labelWrapCachedText; for (var a = n.split("\n"), o = t["text-max-width"].pxValue, s = [], l = 0; l < a.length; l++) { var u = a[l], c = this.calculateLabelDimensions(e, u, "line=" + u), d = c.width; if (d > o) { for (var h = u.split(/\s+/), p = "", f = 0; f < h.length; f++) { var v = h[f], g = 0 === p.length ? v : p + " " + v, y = this.calculateLabelDimensions(e, g, "testLine=" + g), m = y.width; o >= m ? p += v + " " : (s.push(p), p = v + " ") } p.match(/^\s+$/) || s.push(p) } else s.push(u) } i.labelWrapCachedLines = s, i.labelWrapCachedText = n = s.join("\n"), i.labelWrapKey = i.labelKey } return n }, n.calculateLabelDimensions = function(e, t, n) { var r = this, i = e._private.style, a = i["font-style"].strValue, o = i["font-size"].pxValue + "px", s = i["font-family"].strValue, l = i["font-weight"].strValue, u = e._private.labelKey; n && (u += "$@$" + n); var c = r.labelDimCache || (r.labelDimCache = {}); if (c[u]) return c[u]; var d = this.labelCalcDiv; d || (d = this.labelCalcDiv = document.createElement("div"), document.body.appendChild(d)); var h = d.style; return h.fontFamily = s, h.fontStyle = a, h.fontSize = o, h.fontWeight = l, h.position = "absolute", h.left = "-9999px", h.top = "-9999px", h.zIndex = "-1", h.visibility = "hidden", h.pointerEvents = "none", h.padding = "0", h.lineHeight = "1", "wrap" === i["text-wrap"].value ? h.whiteSpace = "pre" : h.whiteSpace = "normal", d.textContent = t, c[u] = { width: d.clientWidth, height: d.clientHeight }, c[u] }, n.recalculateRenderedStyle = function(e) { for (var t = [], n = [], r = {}, i = 0; i < e.length; i++) { var a = e[i], o = a._private, s = o.style, l = o.rscratch, u = o.rstyle, c = o.data.id, d = null != l.boundingBoxKey && o.boundingBoxKey === l.boundingBoxKey, h = null != l.labelKey && o.labelKey === l.labelKey, p = d && h; if ("nodes" === a._private.group) { var f = o.position, v = null != u.nodeX && null != u.nodeY && f.x === u.nodeX && f.y === u.nodeY, g = null != u.nodeW && u.nodeW === s.width.pxValue, y = null != u.nodeH && u.nodeH === s.height.pxValue; v && p && g && y || n.push(a), u.nodeX = f.x, u.nodeY = f.y, u.nodeW = s.width.pxValue, u.nodeH = s.height.pxValue } else { var m = a._private.source._private.position, x = a._private.target._private.position, b = null != u.srcX && null != u.srcY && m.x === u.srcX && m.y === u.srcY, w = null != u.tgtX && null != u.tgtY && x.x === u.tgtX && x.y === u.tgtY, _ = b && w; if (!_ || !p) { var E = o.style["curve-style"].value; if ("bezier" === E) { if (!r[c]) { t.push(a), r[c] = !0; for (var T = a.parallelEdges(), i = 0; i < T.length; i++) { var S = T[i], C = S._private.data.id; r[C] || (t.push(S), r[C] = !0) } } } else t.push(a) } u.srcX = m.x, u.srcY = m.y, u.tgtX = x.x, u.tgtY = x.y } l.boundingBoxKey = o.boundingBoxKey, l.labelKey = o.labelKey } this.recalculateEdgeProjections(t), this.recalculateLabelProjections(n, t) }, n.recalculateLabelProjections = function(e, t) { for (var n = 0; n < e.length; n++) this.recalculateNodeLabelProjection(e[n]); for (var n = 0; n < t.length; n++) this.recalculateEdgeLabelProjection(t[n]) }, n.recalculateEdgeProjections = function(e) { this.findEdgeControlPoints(e) }, n.findEdgeControlPoints = function(n) { if (n && 0 !== n.length) { for (var r, i = this.data.cy, a = i.hasCompoundNodes(), o = {}, s = [], l = [], u = 0; u < n.length; u++) { var c = n[u], d = c._private.style, h = "unbundled-bezier" === d["curve-style"].value; if ("none" !== d.display.value) if ("haystack" !== d["curve-style"].value) { var p = c._private.data.source, f = c._private.data.target; r = p > f ? f + "-" + p : p + "-" + f, h && (r = "unbundled" + c._private.data.id), null == o[r] && (o[r] = [], s.push(r)), o[r].push(c), h && (o[r].hasUnbundled = !0) } else l.push(c) } for (var v, g, y, m, x, b, w, _, E, T, S, C, k, D, N = 0; N < s.length; N++) { r = s[N]; var P = o[r]; if (P.sort(function(e, t) { return e._private.index - t._private.index }), v = P[0]._private.source, g = P[0]._private.target, v._private.data.id > g._private.data.id) { var M = v; v = g, g = M } if (y = v._private.position, m = g._private.position, x = this.getNodeWidth(v), b = this.getNodeHeight(v), w = this.getNodeWidth(g), _ = this.getNodeHeight(g), E = t.nodeShapes[this.getNodeShape(v)], T = t.nodeShapes[this.getNodeShape(g)], S = v._private.style["border-width"].pxValue, C = g._private.style["border-width"].pxValue, D = !1, P.length > 1 && v !== g || P.hasUnbundled) { var B = E.intersectLine(y.x, y.y, x, b, m.x, m.y, S / 2), L = T.intersectLine(m.x, m.y, w, _, y.x, y.y, C / 2), O = { x1: B[0], x2: L[0], y1: B[1], y2: L[1] }, A = L[1] - B[1], I = L[0] - B[0], z = Math.sqrt(I * I + A * A), R = { x: I, y: A }, j = { x: R.x / z, y: R.y / z }; k = { x: -j.y, y: j.x }, (T.checkPoint(B[0], B[1], C / 2, w, _, m.x, m.y) || E.checkPoint(L[0], L[1], S / 2, x, b, y.x, y.y)) && (k = {}, D = !0) } for (var c, F, u = 0; u < P.length; u++) { c = P[u], F = c._private.rscratch; var q = F.lastEdgeIndex, V = u, X = F.lastNumEdges, H = P.length, Y = c._private.style, $ = Y["control-point-step-size"].pxValue, W = void 0 !== Y["control-point-distance"] ? Y["control-point-distance"].pxValue : void 0, U = Y["control-point-weight"].value, h = "unbundled-bezier" === Y["curve-style"].value, Z = c._private.source !== v; Z && h && (W *= -1); var G = F.lastSrcCtlPtX, K = y.x, J = F.lastSrcCtlPtY, Q = y.y, ee = F.lastSrcCtlPtW, te = v.outerWidth(), ne = F.lastSrcCtlPtH, re = v.outerHeight(), ie = F.lastTgtCtlPtX, ae = m.x, oe = F.lastTgtCtlPtY, se = m.y, le = F.lastTgtCtlPtW, ue = g.outerWidth(), ce = F.lastTgtCtlPtH, de = g.outerHeight(), he = F.lastW, pe = Y["control-point-step-size"].pxValue; if (D ? F.badBezier = !0 : F.badBezier = !1, G !== K || J !== Q || ee !== te || ne !== re || ie !== ae || oe !== se || le !== ue || ce !== de || he !== pe || !(q === V && X === H || h)) { if (F.lastSrcCtlPtX = K, F.lastSrcCtlPtY = Q, F.lastSrcCtlPtW = te, F.lastSrcCtlPtH = re, F.lastTgtCtlPtX = ae, F.lastTgtCtlPtY = se, F.lastTgtCtlPtW = ue, F.lastTgtCtlPtH = de, F.lastEdgeIndex = V, F.lastNumEdges = H, F.lastWidth = pe, v === g) { F.edgeType = "self"; var fe = u, ve = $; h && (fe = 0, ve = W), F.cp2ax = y.x, F.cp2ay = y.y - (1 + Math.pow(b, 1.12) / 100) * ve * (fe / 3 + 1), F.cp2cx = y.x - (1 + Math.pow(x, 1.12) / 100) * ve * (fe / 3 + 1), F.cp2cy = y.y, F.selfEdgeMidX = (F.cp2ax + F.cp2cx) / 2, F.selfEdgeMidY = (F.cp2ay + F.cp2cy) / 2 } else if (a && (v.isParent() || v.isChild() || g.isParent() || g.isChild()) && (v.parents().anySame(g) || g.parents().anySame(v))) { F.edgeType = "compound", F.badBezier = !1; var fe = u, ve = $; h && (fe = 0, ve = W); var ge = 50, ye = { x: y.x - x / 2, y: y.y - b / 2 }, me = { x: m.x - w / 2, y: m.y - _ / 2 }, xe = 1; F.cp2ax = ye.x, F.compoundStretchA = Math.max(xe, Math.log(.01 * x)), F.cp2ay = ye.y - (1 + Math.pow(ge, 1.12) / 100) * ve * (fe / 3 + 1) * F.compoundStretchA, F.compoundStretchB = Math.max(xe, Math.log(.01 * w)), F.cp2cx = me.x - (1 + Math.pow(ge, 1.12) / 100) * ve * (fe / 3 + 1) * F.compoundStretchB, F.cp2cy = me.y, F.selfEdgeMidX = (F.cp2ax + F.cp2cx) / 2, F.selfEdgeMidY = (F.cp2ay + F.cp2cy) / 2 } else if (P.length % 2 !== 1 || u !== Math.floor(P.length / 2) || h) { var be, we = (.5 - P.length / 2 + u) * $, _e = e.math.signum(we); be = h ? W : void 0 !== W ? _e * W : void 0; var Ee = void 0 !== be ? be : we, Te = 1 - U, Se = U; Z && (Te = U, Se = 1 - U); var Ce = { x: O.x1 * Te + O.x2 * Se, y: O.y1 * Te + O.y2 * Se }; F.edgeType = "bezier", F.cp2x = Ce.x + k.x * Ee, F.cp2y = Ce.y + k.y * Ee } else F.edgeType = "straight"; this.findEndpoints(c); var ke = !e.is.number(F.startX) || !e.is.number(F.startY), De = !e.is.number(F.arrowStartX) || !e.is.number(F.arrowStartY), Ne = !e.is.number(F.endX) || !e.is.number(F.endY), Pe = !e.is.number(F.arrowEndX) || !e.is.number(F.arrowEndY), Me = 3, Be = this.getArrowWidth(c._private.style.width.pxValue) * t.arrowShapeHeight, Le = Me * Be, Oe = e.math.distance({ x: F.cp2x, y: F.cp2y }, { x: F.startX, y: F.startY }), Ae = Le > Oe, Ie = e.math.distance({ x: F.cp2x, y: F.cp2y }, { x: F.endX, y: F.endY }), ze = Le > Ie; if ("bezier" === F.edgeType) { var Re = !1; if (ke || De || Ae) { Re = !0; var je = { x: F.cp2x - y.x, y: F.cp2y - y.y }, Fe = Math.sqrt(je.x * je.x + je.y * je.y), qe = { x: je.x / Fe, y: je.y / Fe }, Ve = Math.max(x, b), Xe = { x: F.cp2x + 2 * qe.x * Ve, y: F.cp2y + 2 * qe.y * Ve }, He = E.intersectLine(y.x, y.y, x, b, Xe.x, Xe.y, S / 2); Ae ? (F.cp2x = F.cp2x + qe.x * (Le - Oe), F.cp2y = F.cp2y + qe.y * (Le - Oe)) : (F.cp2x = He[0] + qe.x * Le, F.cp2y = He[1] + qe.y * Le) } if (Ne || Pe || ze) { Re = !0; var je = { x: F.cp2x - m.x, y: F.cp2y - m.y }, Fe = Math.sqrt(je.x * je.x + je.y * je.y), qe = { x: je.x / Fe, y: je.y / Fe }, Ve = Math.max(x, b), Xe = { x: F.cp2x + 2 * qe.x * Ve, y: F.cp2y + 2 * qe.y * Ve }, Ye = T.intersectLine(m.x, m.y, w, _, Xe.x, Xe.y, C / 2); ze ? (F.cp2x = F.cp2x + qe.x * (Le - Ie), F.cp2y = F.cp2y + qe.y * (Le - Ie)) : (F.cp2x = Ye[0] + qe.x * Le, F.cp2y = Ye[1] + qe.y * Le) } Re && this.findEndpoints(c) } else "straight" === F.edgeType && (F.midX = (K + ae) / 2, F.midY = (Q + se) / 2); this.projectBezier(c), this.recalculateEdgeLabelProjection(c) } } } for (var u = 0; u < l.length; u++) { var c = l[u], $e = c._private, We = $e.rscratch, F = We; if (!We.haystack) { var Ue = 2 * Math.random() * Math.PI; We.source = { x: Math.cos(Ue), y: Math.sin(Ue) }; var Ue = 2 * Math.random() * Math.PI; We.target = { x: Math.cos(Ue), y: Math.sin(Ue) } } var v = $e.source, g = $e.target, y = v._private.position, m = g._private.position, x = v.width(), w = g.width(), b = v.height(), _ = g.height(), Ve = d["haystack-radius"].value, Ze = Ve / 2; F.haystackPts = [F.source.x * x * Ze + y.x, F.source.y * b * Ze + y.y, F.target.x * w * Ze + m.x, F.target.y * _ * Ze + m.y], We.edgeType = "haystack", We.haystack = !0, this.recalculateEdgeLabelProjection(c) } return o } }, n.findEndpoints = function(n) { var r, i = n.source()[0], a = n.target()[0], o = n._private.style["target-arrow-shape"].value, s = n._private.style["source-arrow-shape"].value, l = a._private.style["border-width"].pxValue, u = i._private.style["border-width"].pxValue, c = n._private.rscratch; if ("self" == c.edgeType || "compound" == c.edgeType) { var d = [c.cp2cx, c.cp2cy]; r = t.nodeShapes[this.getNodeShape(a)].intersectLine(a._private.position.x, a._private.position.y, this.getNodeWidth(a), this.getNodeHeight(a), d[0], d[1], l / 2); var h = e.math.shortenIntersection(r, d, t.arrowShapes[o].spacing(n)), p = e.math.shortenIntersection(r, d, t.arrowShapes[o].gap(n)); c.endX = p[0], c.endY = p[1], c.arrowEndX = h[0], c.arrowEndY = h[1]; var d = [c.cp2ax, c.cp2ay]; r = t.nodeShapes[this.getNodeShape(i)].intersectLine(i._private.position.x, i._private.position.y, this.getNodeWidth(i), this.getNodeHeight(i), d[0], d[1], u / 2); var f = e.math.shortenIntersection(r, d, t.arrowShapes[s].spacing(n)), v = e.math.shortenIntersection(r, d, t.arrowShapes[s].gap(n)); c.startX = v[0], c.startY = v[1], c.arrowStartX = f[0], c.arrowStartY = f[1] } else if ("straight" == c.edgeType) { r = t.nodeShapes[this.getNodeShape(a)].intersectLine(a._private.position.x, a._private.position.y, this.getNodeWidth(a), this.getNodeHeight(a), i.position().x, i.position().y, l / 2), 0 === r.length ? c.noArrowPlacement = !0 : c.noArrowPlacement = !1; var h = e.math.shortenIntersection(r, [i.position().x, i.position().y], t.arrowShapes[o].spacing(n)), p = e.math.shortenIntersection(r, [i.position().x, i.position().y], t.arrowShapes[o].gap(n)); c.endX = p[0], c.endY = p[1], c.arrowEndX = h[0], c.arrowEndY = h[1], r = t.nodeShapes[this.getNodeShape(i)].intersectLine(i._private.position.x, i._private.position.y, this.getNodeWidth(i), this.getNodeHeight(i), a.position().x, a.position().y, u / 2), 0 === r.length ? c.noArrowPlacement = !0 : c.noArrowPlacement = !1; var f = e.math.shortenIntersection(r, [a.position().x, a.position().y], t.arrowShapes[s].spacing(n)), v = e.math.shortenIntersection(r, [a.position().x, a.position().y], t.arrowShapes[s].gap(n)); c.startX = v[0], c.startY = v[1], c.arrowStartX = f[0], c.arrowStartY = f[1], e.is.number(c.startX) && e.is.number(c.startY) && e.is.number(c.endX) && e.is.number(c.endY) ? c.badLine = !1 : c.badLine = !0 } else if ("bezier" == c.edgeType) { var d = [c.cp2x, c.cp2y]; r = t.nodeShapes[this.getNodeShape(a)].intersectLine(a._private.position.x, a._private.position.y, this.getNodeWidth(a), this.getNodeHeight(a), d[0], d[1], l / 2); var h = e.math.shortenIntersection(r, d, t.arrowShapes[o].spacing(n)), p = e.math.shortenIntersection(r, d, t.arrowShapes[o].gap(n)); c.endX = p[0], c.endY = p[1], c.arrowEndX = h[0], c.arrowEndY = h[1], r = t.nodeShapes[this.getNodeShape(i)].intersectLine(i._private.position.x, i._private.position.y, this.getNodeWidth(i), this.getNodeHeight(i), d[0], d[1], u / 2); var f = e.math.shortenIntersection(r, d, t.arrowShapes[s].spacing(n)), v = e.math.shortenIntersection(r, d, t.arrowShapes[s].gap(n)); c.startX = v[0], c.startY = v[1], c.arrowStartX = f[0], c.arrowStartY = f[1] } else if (c.isArcEdge) return }, n.findEdges = function(e) { for (var t = this.getCachedEdges(), n = {}, r = [], i = 0; i < e.length; i++) n[e[i]._private.data.id] = e[i]; for (var i = 0; i < t.length; i++)(n[t[i]._private.data.source] || n[t[i]._private.data.target]) && r.push(t[i]); return r }, n.getArrowWidth = n.getArrowHeight = function(e) { var t = this.arrowWidthCache = this.arrowWidthCache || {}, n = t[e]; return n ? n : (n = Math.max(Math.pow(13.37 * e, .9), 29), t[e] = n, n) } }(cytoscape), function(e) { "use strict"; var t = e("renderer", "canvas"), n = t.prototype; n.drawEdge = function(e, n, r) { var i = n._private.rscratch, a = t.usePaths(); if (!i.badBezier && ("bezier" !== i.edgeType && "straight" !== i.edgeType || !isNaN(i.startX))) { var o = n._private.style; if (!(o.width.pxValue <= 0)) { var s = o["overlay-padding"].pxValue, l = o["overlay-opacity"].value, u = o["overlay-color"].value; if (r) { if (0 === l) return; this.strokeStyle(e, u[0], u[1], u[2], l), e.lineCap = "round", "self" != n._private.rscratch.edgeType || a || (e.lineCap = "butt") } else { var c = o["line-color"].value; this.strokeStyle(e, c[0], c[1], c[2], o.opacity.value), e.lineCap = "butt" } var d, h, p, f; p = d = n._private.source, f = h = n._private.target; var v = o.width.pxValue + (r ? 2 * s : 0), g = r ? "solid" : o["line-style"].value; e.lineWidth = v; var y = o["shadow-blur"].pxValue, m = o["shadow-opacity"].value, x = o["shadow-color"].value, b = o["shadow-offset-x"].pxValue, w = o["shadow-offset-y"].pxValue; if (this.shadowStyle(e, x, r ? 0 : m, y, b, w), "haystack" === i.edgeType) this.drawStyledEdge(n, e, i.haystackPts, g, v); else if ("self" === i.edgeType || "compound" === i.edgeType) { var _ = n._private.rscratch, E = [_.startX, _.startY, _.cp2ax, _.cp2ay, _.selfEdgeMidX, _.selfEdgeMidY, _.selfEdgeMidX, _.selfEdgeMidY, _.cp2cx, _.cp2cy, _.endX, _.endY]; this.drawStyledEdge(n, e, E, g, v) } else if ("straight" === i.edgeType) { var T = h._private.position.x - d._private.position.x, S = h._private.position.y - d._private.position.y, C = i.endX - i.startX, k = i.endY - i.startY; if (0 > T * C + S * k) i.straightEdgeTooShort = !0; else { var _ = i; this.drawStyledEdge(n, e, [_.startX, _.startY, _.endX, _.endY], g, v), i.straightEdgeTooShort = !1 } } else { var _ = i; this.drawStyledEdge(n, e, [_.startX, _.startY, _.cp2x, _.cp2y, _.endX, _.endY], g, v) } "haystack" === i.edgeType ? this.drawArrowheads(e, n, r) : i.noArrowPlacement !== !0 && void 0 !== i.startX && this.drawArrowheads(e, n, r), this.shadowStyle(e, "transparent", 0) } } }, n.drawStyledEdge = function(e, n, r, i, a) { var o, s = e._private.rscratch, l = n, u = !1, c = t.usePaths(); if (c) { for (var d = r, h = s.pathCacheKey && d.length === s.pathCacheKey.length, p = h, f = 0; p && f < d.length; f++) s.pathCacheKey[f] !== d[f] && (p = !1); p ? (o = n = s.pathCache, u = !0) : (o = n = new Path2D, s.pathCacheKey = d, s.pathCache = o) } if (l.setLineDash) switch (i) { case "dotted": l.setLineDash([1, 1]); break; case "dashed": l.setLineDash([6, 3]); break; case "solid": l.setLineDash([]) } u || (n.beginPath && n.beginPath(), n.moveTo(r[0], r[1]), 6 !== r.length || s.badBezier ? 12 !== r.length || s.badBezier ? 4 !== r.length || s.badLine || n.lineTo(r[2], r[3]) : (n.quadraticCurveTo(r[2], r[3], r[4], r[5]), n.quadraticCurveTo(r[8], r[9], r[10], r[11])) : n.quadraticCurveTo(r[2], r[3], r[4], r[5])), n = l, c ? n.stroke(o) : n.stroke(), n.setLineDash && n.setLineDash([]) }, n.drawArrowheads = function(e, t, n) { function r(n, r, i, a, o) { var s = v[n + "-arrow-shape"].value; if ("none" !== s) { var l = e.globalCompositeOperation, u = "hollow" === v[n + "-arrow-fill"].value ? "both" : "filled", c = v[n + "-arrow-fill"].value; "half-triangle-overshot" === s && (c = "hollow", u = "hollow"), (1 !== v.opacity.value || "hollow" === c) && (e.globalCompositeOperation = "destination-out", d.fillStyle(e, 255, 255, 255, 1), d.strokeStyle(e, 255, 255, 255, 1), d.drawArrowShape(t, n, e, u, v.width.pxValue, v[n + "-arrow-shape"].value, r, i, a, o), e.globalCompositeOperation = l); var h = v[n + "-arrow-color"].value; d.fillStyle(e, h[0], h[1], h[2], v.opacity.value), d.strokeStyle(e, h[0], h[1], h[2], v.opacity.value), d.drawArrowShape(t, n, e, c, v.width.pxValue, v[n + "-arrow-shape"].value, r, i, a, o) } } if (!n) { var i, a, o, s, l, u, c = t._private.rscratch, d = this, h = "haystack" === c.edgeType, p = t.source().position(), f = t.target().position(); h ? (o = c.haystackPts[0], s = c.haystackPts[1], l = c.haystackPts[2], u = c.haystackPts[3]) : (o = c.arrowStartX, s = c.arrowStartY, l = c.arrowEndX, u = c.arrowEndY); var v = t._private.style; i = o - p.x, a = s - p.y, h || isNaN(o) || isNaN(s) || isNaN(i) || isNaN(a) || r("source", o, s, i, a); var g = c.midX, y = c.midY; h && (g = (o + l) / 2, y = (s + u) / 2), i = o - l, a = s - u, "self" === c.edgeType && (i = 1, a = -1), isNaN(g) || isNaN(y) || r("mid-target", g, y, i, a), i *= -1, a *= -1, isNaN(g) || isNaN(y) || r("mid-source", g, y, i, a), i = l - f.x, a = u - f.y, h || isNaN(l) || isNaN(u) || isNaN(i) || isNaN(a) || r("target", l, u, i, a) } }, n.drawArrowShape = function(e, n, r, i, a, o, s, l, u, c) { var d, h = t.usePaths(), p = e._private.rscratch, f = !1, v = r, g = { x: s, y: l }, y = Math.asin(c / Math.sqrt(u * u + c * c)); 0 > u ? y += Math.PI / 2 : y = -(Math.PI / 2 + y); var m = this.getArrowWidth(a), x = t.arrowShapes[o]; if (h) { var b = m + "$" + o + "$" + y + "$" + s + "$" + l; p.arrowPathCacheKey = p.arrowPathCacheKey || {}, p.arrowPathCache = p.arrowPathCache || {}; var w = p.arrowPathCacheKey[n] === b; w ? (d = r = p.arrowPathCache[n], f = !0) : (d = r = new Path2D, p.arrowPathCacheKey[n] = b, p.arrowPathCache[n] = d) } r.beginPath && r.beginPath(), f || x.draw(r, m, y, g), !x.leavePathOpen && r.closePath && r.closePath(), r = v, ("filled" === i || "both" === i) && (h ? r.fill(d) : r.fill()), ("hollow" === i || "both" === i) && (r.lineWidth = x.matchEdgeWidth ? a : 1, r.lineJoin = "miter", h ? r.stroke(d) : r.stroke()) } }(cytoscape), function(e) { "use strict"; var t = e("renderer", "canvas"), n = t.prototype; n.getCachedImage = function(e, t) { var n = this, r = n.imageCache = n.imageCache || {}; if (r[e] && r[e].image) return r[e].image; var i = r[e] = r[e] || {}, a = i.image = new Image; return a.addEventListener("load", t), a.src = e, a }, n.safeDrawImage = function(e, n, r, i, a, o, s, l, u, c) { var d = this; try { e.drawImage(n, r, i, a, o, s, l, u, c) } catch (h) { d.data.canvasNeedsRedraw[t.NODE] = !0, d.data.canvasNeedsRedraw[t.DRAG] = !0, d.drawingImage = !0, d.redraw() } }, n.drawInscribedImage = function(e, n, r) { var i = this, a = r._private.position.x, o = r._private.position.y, s = r._private.style, l = s["background-fit"].value, u = s["background-position-x"], c = s["background-position-y"], d = s["background-repeat"].value, h = r.width(), p = r.height(), f = r._private.rscratch, v = s["background-clip"].value, g = "node" === v, y = s["background-image-opacity"].value, m = n.width, x = n.height; if (0 !== m && 0 !== x) { var b = s["background-width"]; "auto" !== b.value && (m = "%" === b.units ? b.value / 100 * h : b.pxValue); var w = s["background-height"]; if ("auto" !== w.value && (x = "%" === w.units ? w.value / 100 * p : w.pxValue), 0 !== m && 0 !== x) { if ("contain" === l) { var _ = Math.min(h / m, p / x); m *= _, x *= _ } else if ("cover" === l) { var _ = Math.max(h / m, p / x); m *= _, x *= _ } var E = a - h / 2; E += "%" === u.units ? (h - m) * u.value / 100 : u.pxValue; var T = o - p / 2; T += "%" === c.units ? (p - x) * c.value / 100 : c.pxValue, f.pathCache && (E -= a, T -= o, a = 0, o = 0); var S = e.globalAlpha; if (e.globalAlpha = y, "no-repeat" === d) g && (e.save(), f.pathCache ? e.clip(f.pathCache) : (t.nodeShapes[i.getNodeShape(r)].drawPath(e, a, o, h, p), e.clip())), i.safeDrawImage(e, n, 0, 0, n.width, n.height, E, T, m, x), g && e.restore(); else { var C = e.createPattern(n, d); e.fillStyle = C, t.nodeShapes[i.getNodeShape(r)].drawPath(e, a, o, h, p), e.translate(E, T), e.fill(), e.translate(-E, -T) } e.globalAlpha = S } } } }(cytoscape), function(e) { "use strict"; function t(e, t, n, r, i, a) { var a = a || 5; e.beginPath(), e.moveTo(t + a, n), e.lineTo(t + r - a, n), e.quadraticCurveTo(t + r, n, t + r, n + a), e.lineTo(t + r, n + i - a), e.quadraticCurveTo(t + r, n + i, t + r - a, n + i), e.lineTo(t + a, n + i), e.quadraticCurveTo(t, n + i, t, n + i - a), e.lineTo(t, n + a), e.quadraticCurveTo(t, n, t + a, n), e.closePath(), e.fill() } var n = e("renderer", "canvas"), r = n.prototype; r.drawEdgeText = function(t, n) { var r = n._private.style.content.strValue; if (r && !r.match(/^\s+$/) && (!this.hideEdgesOnViewport || !(this.dragData.didDrag || this.pinching || this.hoverData.dragging || this.data.wheel || this.swipePanning))) { var i = n._private.style["font-size"].pxValue * n.cy().zoom(), a = n._private.style["min-zoomed-font-size"].pxValue; if (!(a > i)) { t.textAlign = "center", t.textBaseline = "middle"; var o = n._private.rscratch; if (e.is.number(o.labelX) && e.is.number(o.labelY)) { var s, l, u, c = n._private.style, d = "autorotate" === c["edge-text-rotation"].strValue; if (d) { switch (o.edgeType) { case "haystack": l = o.haystackPts[2] - o.haystackPts[0], u = o.haystackPts[3] - o.haystackPts[1]; break; default: l = o.endX - o.startX, u = o.endY - o.startY } s = Math.atan(u / l), t.translate(o.labelX, o.labelY), t.rotate(s), this.drawText(t, n, 0, 0), t.rotate(-s), t.translate(-o.labelX, -o.labelY) } else this.drawText(t, n, o.labelX, o.labelY) } } } }, r.drawNodeText = function(t, n) { var r = n._private.style.content.strValue; if (r && !r.match(/^\s+$/)) { var i = n._private.style["font-size"].pxValue * n.cy().zoom(), a = n._private.style["min-zoomed-font-size"].pxValue; if (!(a > i)) { var o = n._private.style["text-halign"].strValue, s = n._private.style["text-valign"].strValue, l = n._private.rscratch; if (e.is.number(l.labelX) && e.is.number(l.labelY)) { switch (o) { case "left": t.textAlign = "right"; break; case "right": t.textAlign = "left"; break; default: t.textAlign = "center" } switch (s) { case "top": t.textBaseline = "bottom"; break; case "bottom": t.textBaseline = "top"; break; default: t.textBaseline = "middle" } this.drawText(t, n, l.labelX, l.labelY) } } } }, r.getFontCache = function(e) { var t; this.fontCaches = this.fontCaches || []; for (var n = 0; n < this.fontCaches.length; n++) if (t = this.fontCaches[n], t.context === e) return t; return t = { context: e }, this.fontCaches.push(t), t }, r.setupTextStyle = function(e, t) { var n = t.effectiveOpacity(), r = t._private.style, i = r["font-style"].strValue, a = r["font-size"].pxValue + "px", o = r["font-family"].strValue, s = r["font-weight"].strValue, l = r["text-opacity"].value * r.opacity.value * n, u = r["text-outline-opacity"].value * l, c = r.color.value, d = r["text-outline-color"].value, h = r["text-shadow-blur"].pxValue, p = r["text-shadow-opacity"].value, f = r["text-shadow-color"].value, v = r["text-shadow-offset-x"].pxValue, g = r["text-shadow-offset-y"].pxValue, y = t._private.fontKey, m = this.getFontCache(e); m.key !== y && (e.font = i + " " + s + " " + a + " " + o, m.key = y); var x = this.getLabelText(t); return e.lineJoin = "round", this.fillStyle(e, c[0], c[1], c[2], l), this.strokeStyle(e, d[0], d[1], d[2], u), this.shadowStyle(e, f, p, h, v, g), x }, r.drawText = function(e, n, r, i) { var a = n._private, o = a.style, s = a.rstyle, l = a.rscratch, u = n.effectiveOpacity(); if (0 !== u && 0 !== o["text-opacity"].value) { var c = this.setupTextStyle(e, n), d = o["text-halign"].value, h = o["text-valign"].value; if (n.isEdge() && (d = "center", h = "center"), null != c && !isNaN(r) && !isNaN(i)) { var p = o["text-background-opacity"].value, f = o["text-border-opacity"].value, v = o["text-border-width"].pxValue; if (p > 0 || v > 0 && f > 0) { var g = 4 + v / 2; n.isNode() && ("top" === h ? i -= g : "bottom" === h && (i += g), "left" === d ? r -= g : "right" === d && (r += g)); var y = s.labelWidth, m = s.labelHeight, x = r; d && ("center" == d ? x -= y / 2 : "left" == d && (x -= y)); var b = i; if (n.isNode() ? "top" == h ? b -= m : "center" == h && (b -= m / 2) : b -= m / 2, "autorotate" === o["edge-text-rotation"].strValue ? (i = 0, y += 4, x = r - y / 2, b = i - m / 2) : (x -= g, b -= g, m += 2 * g, y += 2 * g), p > 0) { var w = e.fillStyle, _ = o["text-background-color"].value; e.fillStyle = "rgba(" + _[0] + "," + _[1] + "," + _[2] + "," + p * u + ")"; var E = o["text-background-shape"].strValue; "roundrectangle" == E ? t(e, x, b, y, m, 2) : e.fillRect(x, b, y, m), e.fillStyle = w } if (v > 0 && f > 0) { var T = e.strokeStyle, S = e.lineWidth, C = o["text-border-color"].value, k = o["text-border-style"].value; if (e.strokeStyle = "rgba(" + C[0] + "," + C[1] + "," + C[2] + "," + f * u + ")", e.lineWidth = v, e.setLineDash) switch (k) { case "dotted": e.setLineDash([1, 1]); break; case "dashed": e.setLineDash([4, 2]); break; case "double": e.lineWidth = v / 4, e.setLineDash([]); break; case "solid": e.setLineDash([]) } if (e.strokeRect(x, b, y, m), "double" === k) { var D = v / 2; e.strokeRect(x + D, b + D, y - 2 * D, m - 2 * D) } e.setLineDash && e.setLineDash([]), e.lineWidth = S, e.strokeStyle = T } } var N = 2 * o["text-outline-width"].pxValue; if (N > 0 && (e.lineWidth = N), "wrap" === o["text-wrap"].value) { var P = l.labelWrapCachedLines, M = s.labelHeight / P.length; switch (h) { case "top": i -= (P.length - 1) * M; break; case "bottom": break; default: case "center": i -= (P.length - 1) * M / 2 } for (var B = 0; B < P.length; B++) N > 0 && e.strokeText(P[B], r, i), e.fillText(P[B], r, i), i += M } else N > 0 && e.strokeText(c, r, i), e.fillText(c, r, i); this.shadowStyle(e, "transparent", 0) } } } }(cytoscape), function(e) { "use strict"; var t = e("renderer", "canvas"), n = t.prototype; n.drawNode = function(e, n, r) { var i, a, o = this, s = n._private.style, l = n._private.rscratch, u = n._private, c = u.position; if (void 0 !== c.x && void 0 !== c.y) { var d, h = t.usePaths(), p = e, f = !1, v = s["overlay-padding"].pxValue, g = s["overlay-opacity"].value, y = s["overlay-color"].value; if (!r || 0 !== g) { var m = n.effectiveOpacity(); if (0 !== m) if (i = this.getNodeWidth(n), a = this.getNodeHeight(n), e.lineWidth = s["border-width"].pxValue, void 0 !== r && r) g > 0 && (this.fillStyle(e, y[0], y[1], y[2], g), t.nodeShapes.roundrectangle.drawPath(e, n._private.position.x, n._private.position.y, i + 2 * v, a + 2 * v), e.fill()); else { var x, b = s["background-image"].value[2] || s["background-image"].value[1]; if (void 0 !== b) { x = this.getCachedImage(b, function() { o.data.canvasNeedsRedraw[t.NODE] = !0, o.data.canvasNeedsRedraw[t.DRAG] = !0, o.drawingImage = !0, o.redraw() }); var w = u.backgrounding; u.backgrounding = !x.complete, w !== u.backgrounding && n.updateStyle(!1) } var _ = s["background-color"].value, E = s["border-color"].value, T = s["border-style"].value; this.fillStyle(e, _[0], _[1], _[2], s["background-opacity"].value * m), this.strokeStyle(e, E[0], E[1], E[2], s["border-opacity"].value * m); var S = s["shadow-blur"].pxValue, C = s["shadow-opacity"].value, k = s["shadow-color"].value, D = s["shadow-offset-x"].pxValue, N = s["shadow-offset-y"].pxValue; if (this.shadowStyle(e, k, C, S, D, N), e.lineJoin = "miter", e.setLineDash) switch (T) { case "dotted": e.setLineDash([1, 1]); break; case "dashed": e.setLineDash([4, 2]); break; case "solid": case "double": e.setLineDash([]) } var P = s.shape.strValue; if (h) { var M = P + "$" + i + "$" + a; e.translate(c.x, c.y), l.pathCacheKey === M ? (d = e = l.pathCache, f = !0) : (d = e = new Path2D, l.pathCacheKey = M, l.pathCache = d) } if (!f) { var B = c; h && (B = { x: 0, y: 0 }), t.nodeShapes[this.getNodeShape(n)].drawPath(e, B.x, B.y, i, a) } e = p, h ? e.fill(d) : e.fill(), this.shadowStyle(e, "transparent", 0), void 0 !== b && x.complete && this.drawInscribedImage(e, x, n); var L = s["background-blacken"].value, O = s["border-width"].pxValue; if (this.hasPie(n) && (this.drawPie(e, n, m), (0 !== L || 0 !== O) && (h || t.nodeShapes[this.getNodeShape(n)].drawPath(e, c.x, c.y, i, a))), L > 0 ? (this.fillStyle(e, 0, 0, 0, L), h ? e.fill(d) : e.fill()) : 0 > L && (this.fillStyle(e, 255, 255, 255, -L), h ? e.fill(d) : e.fill()), O > 0 && (h ? e.stroke(d) : e.stroke(), "double" === T)) { e.lineWidth = s["border-width"].pxValue / 3; var A = e.globalCompositeOperation; e.globalCompositeOperation = "destination-out", h ? e.stroke(d) : e.stroke(), e.globalCompositeOperation = A } h && e.translate(-c.x, -c.y), e.setLineDash && e.setLineDash([]) } } } }, n.hasPie = function(e) { return e = e[0], e._private.hasPie }, n.drawPie = function(n, r, i) { r = r[0]; var a = r._private, o = a.style, s = o["pie-size"], l = this.getNodeWidth(r), u = this.getNodeHeight(r), c = a.position.x, d = a.position.y, h = Math.min(l, u) / 2, p = 0, f = t.usePaths(); f && (c = 0, d = 0), "%" === s.units ? h = h * s.value / 100 : void 0 !== s.pxValue && (h = s.pxValue / 2); for (var v = 1; v <= e.style.pieBackgroundN; v++) { var g = o["pie-" + v + "-background-size"].value, y = o["pie-" + v + "-background-color"].value, m = o["pie-" + v + "-background-opacity"].value * i, x = g / 100; x + p > 1 && (x = 1 - p); var b = 1.5 * Math.PI + 2 * Math.PI * p, w = 2 * Math.PI * x, _ = b + w; 0 === g || p >= 1 || p + x > 1 || (n.beginPath(), n.moveTo(c, d), n.arc(c, d, h, b, _), n.closePath(), this.fillStyle(n, y[0], y[1], y[2], m), n.fill(), p += x) } } }(cytoscape), function(e) { "use strict"; var t = e("renderer", "canvas"), n = t, r = t.prototype; r.getPixelRatio = function() { var e = this.data.contexts[0]; if (null != this.forcedPixelRatio) return this.forcedPixelRatio; var t = e.backingStorePixelRatio || e.webkitBackingStorePixelRatio || e.mozBackingStorePixelRatio || e.msBackingStorePixelRatio || e.oBackingStorePixelRatio || e.backingStorePixelRatio || 1; return (window.devicePixelRatio || 1) / t }, r.paintCache = function(e) { for (var t, n = this.paintCaches = this.paintCaches || [], r = !0, i = 0; i < n.length; i++) if (t = n[i], t.context === e) { r = !1; break } return r && (t = { context: e }, n.push(t)), t }, r.fillStyle = function(e, t, n, r, i) { e.fillStyle = "rgba(" + t + "," + n + "," + r + "," + i + ")" }, r.strokeStyle = function(e, t, n, r, i) { e.strokeStyle = "rgba(" + t + "," + n + "," + r + "," + i + ")" }, r.shadowStyle = function(e, t, n, r, i, a) { var o = this.data.cy.zoom(), s = this.paintCache(e); (0 !== s.shadowOpacity || 0 !== n) && (s.shadowOpacity = n, n > 0 ? (e.shadowBlur = r * o, e.shadowColor = "rgba(" + t[0] + "," + t[1] + "," + t[2] + "," + n + ")", e.shadowOffsetX = i * o, e.shadowOffsetY = a * o) : (e.shadowBlur = 0, e.shadowColor = "transparent")) }, r.matchCanvasSize = function(e) { var r = this.data, i = e.clientWidth, a = e.clientHeight, o = this.getPixelRatio(), s = this.motionBlurPxRatio; (e === this.data.bufferCanvases[n.MOTIONBLUR_BUFFER_NODE] || e === this.data.bufferCanvases[n.MOTIONBLUR_BUFFER_DRAG]) && (o = s); var l, u = i * o, c = a * o; if (u !== this.canvasWidth || c !== this.canvasHeight) { this.fontCaches = null; var d = r.canvasContainer; d.style.width = i + "px", d.style.height = a + "px"; for (var h = 0; h < t.CANVAS_LAYERS; h++) l = r.canvases[h], (l.width !== u || l.height !== c) && (l.width = u, l.height = c, l.style.width = i + "px", l.style.height = a + "px"); for (var h = 0; h < t.BUFFER_COUNT; h++) l = r.bufferCanvases[h], (l.width !== u || l.height !== c) && (l.width = u, l.height = c, l.style.width = i + "px", l.style.height = a + "px"); this.textureMult = 1, 1 >= o && (l = r.bufferCanvases[t.TEXTURE_BUFFER], this.textureMult = 2, l.width = u * this.textureMult, l.height = c * this.textureMult), this.canvasWidth = u, this.canvasHeight = c } }, r.renderTo = function(e, t, n, r) { this.redraw({ forcedContext: e, forcedZoom: t, forcedPan: n, drawAllLayers: !0, forcedPxRatio: r }) }, r.timeToRender = function() { return this.redrawTotalTime / this.redrawCount }, t.minRedrawLimit = 1e3 / 60, t.maxRedrawLimit = 1e3, t.motionBlurDelay = 100, r.redraw = function(r) { function i() { function r(e, t, n, r, i) { var a = e.globalCompositeOperation; e.globalCompositeOperation = "destination-out", c.fillStyle(e, 255, 255, 255, c.motionBlurTransparency), e.fillRect(t, n, r, i), e.globalCompositeOperation = a } function i(e, t) { var i, s, d, h; c.clearingMotionBlur || e !== p.bufferContexts[n.MOTIONBLUR_BUFFER_NODE] && e !== p.bufferContexts[n.MOTIONBLUR_BUFFER_DRAG] ? (i = k, s = S, d = c.canvasWidth, h = c.canvasHeight) : (i = { x: C.x * y, y: C.y * y }, s = T * y, d = c.canvasWidth * y, h = c.canvasHeight * y), e.setTransform(1, 0, 0, 1, 0, 0), "motionBlur" === t ? r(e, 0, 0, d, h) : a || void 0 !== t && !t || e.clearRect(0, 0, d, h), o || (e.translate(i.x, i.y), e.scale(s, s)), u && e.translate(u.x, u.y), l && e.scale(l, l) } function b(e, t) { for (var n = e.eles, r = 0; r < n.length; r++) { var i = n[r]; i.isNode() ? (c.drawNode(t, i), q || c.drawNodeText(t, i), c.drawNode(t, i, !0)) : F || (c.drawEdge(t, i), q || c.drawEdgeText(t, i), c.drawEdge(t, i, !0)) } } c.textureDrawLastFrame && !v && (f[n.NODE] = !0, f[n.SELECT_BOX] = !0); var _ = c.getCachedEdges(), E = h.style()._private.coreStyle, T = h.zoom(), S = void 0 !== l ? l : T, C = h.pan(), k = { x: C.x, y: C.y }, N = { zoom: T, pan: { x: C.x, y: C.y } }, P = c.prevViewport, M = void 0 === P || N.zoom !== P.zoom || N.pan.x !== P.pan.x || N.pan.y !== P.pan.y; M || x && !m || (c.motionBlurPxRatio = 1), u && (k = u), S *= d, k.x *= d, k.y *= d; var B = { drag: { nodes: [], edges: [], eles: [] }, nondrag: { nodes: [], edges: [], eles: [] } }; if (v || (c.textureDrawLastFrame = !1), v) { c.textureDrawLastFrame = !0; var L; if (!c.textureCache) { c.textureCache = {}, L = c.textureCache.bb = h.elements().boundingBox(), c.textureCache.texture = c.data.bufferCanvases[t.TEXTURE_BUFFER]; var O = c.data.bufferContexts[t.TEXTURE_BUFFER]; O.setTransform(1, 0, 0, 1, 0, 0), O.clearRect(0, 0, c.canvasWidth * c.textureMult, c.canvasHeight * c.textureMult), c.redraw({ forcedContext: O, drawOnlyNodeLayer: !0, forcedPxRatio: d * c.textureMult }); var N = c.textureCache.viewport = { zoom: h.zoom(), pan: h.pan(), width: c.canvasWidth, height: c.canvasHeight }; N.mpan = { x: (0 - N.pan.x) / N.zoom, y: (0 - N.pan.y) / N.zoom } } f[n.DRAG] = !1, f[n.NODE] = !1; var A = p.contexts[n.NODE], I = c.textureCache.texture, N = c.textureCache.viewport; L = c.textureCache.bb, A.setTransform(1, 0, 0, 1, 0, 0), g ? r(A, 0, 0, N.width, N.height) : A.clearRect(0, 0, N.width, N.height); var z = E["outside-texture-bg-color"].value, R = E["outside-texture-bg-opacity"].value; c.fillStyle(A, z[0], z[1], z[2], R), A.fillRect(0, 0, N.width, N.height); var T = h.zoom(); i(A, !1), A.clearRect(N.mpan.x, N.mpan.y, N.width / N.zoom / d, N.height / N.zoom / d), A.drawImage(I, N.mpan.x, N.mpan.y, N.width / N.zoom / d, N.height / N.zoom / d) } else c.textureOnViewport && !a && (c.textureCache = null); var j = c.pinching || c.hoverData.dragging || c.swipePanning || c.data.wheelZooming || c.hoverData.draggingEles, F = c.hideEdgesOnViewport && j, q = c.hideLabelsOnViewport && j; if (f[n.DRAG] || f[n.NODE] || o || s) { F || c.findEdgeControlPoints(_); for (var V = c.getCachedZSortedEles(), X = h.extent(), H = 0; H < V.length; H++) { var Y, $ = V[H], L = a ? null : $.boundingBox(), W = a ? !0 : e.math.boundingBoxesIntersect(X, L); W && (Y = $._private.rscratch.inDragLayer ? B.drag : B.nondrag, Y.eles.push($)) } } var U = []; if (U[n.NODE] = !f[n.NODE] && g && !c.clearedForMotionBlur[n.NODE] || c.clearingMotionBlur, U[n.NODE] && (c.clearedForMotionBlur[n.NODE] = !0), U[n.DRAG] = !f[n.DRAG] && g && !c.clearedForMotionBlur[n.DRAG] || c.clearingMotionBlur, U[n.DRAG] && (c.clearedForMotionBlur[n.DRAG] = !0), f[n.NODE] || o || s || U[n.NODE]) { var Z = g && !U[n.NODE] && 1 !== y, A = a || (Z ? c.data.bufferContexts[n.MOTIONBLUR_BUFFER_NODE] : p.contexts[n.NODE]), G = g && !Z ? "motionBlur" : void 0; i(A, G), b(B.nondrag, A), o || g || (f[n.NODE] = !1) } if (!s && (f[n.DRAG] || o || U[n.DRAG])) { var Z = g && !U[n.DRAG] && 1 !== y, A = a || (Z ? c.data.bufferContexts[n.MOTIONBLUR_BUFFER_DRAG] : p.contexts[n.DRAG]); i(A, g && !Z ? "motionBlur" : void 0), b(B.drag, A), o || g || (f[n.DRAG] = !1) } if (c.showFps || !s && f[n.SELECT_BOX] && !o) { var A = a || p.contexts[n.SELECT_BOX]; if (i(A), 1 == p.select[4] && (c.hoverData.selecting || c.touchData.selecting)) { var T = p.cy.zoom(), K = E["selection-box-border-width"].value / T; A.lineWidth = K, A.fillStyle = "rgba(" + E["selection-box-color"].value[0] + "," + E["selection-box-color"].value[1] + "," + E["selection-box-color"].value[2] + "," + E["selection-box-opacity"].value + ")", A.fillRect(p.select[0], p.select[1], p.select[2] - p.select[0], p.select[3] - p.select[1]), K > 0 && (A.strokeStyle = "rgba(" + E["selection-box-border-color"].value[0] + "," + E["selection-box-border-color"].value[1] + "," + E["selection-box-border-color"].value[2] + "," + E["selection-box-opacity"].value + ")", A.strokeRect(p.select[0], p.select[1], p.select[2] - p.select[0], p.select[3] - p.select[1])) } if (p.bgActivePosistion && !c.hoverData.selecting) { var T = p.cy.zoom(), J = p.bgActivePosistion; A.fillStyle = "rgba(" + E["active-bg-color"].value[0] + "," + E["active-bg-color"].value[1] + "," + E["active-bg-color"].value[2] + "," + E["active-bg-opacity"].value + ")", A.beginPath(), A.arc(J.x, J.y, E["active-bg-size"].pxValue / T, 0, 2 * Math.PI), A.fill() } var Q = c.averageRedrawTime; if (c.showFps && Q) { Q = Math.round(Q); var ee = Math.round(1e3 / Q); A.setTransform(1, 0, 0, 1, 0, 0), A.fillStyle = "rgba(255, 0, 0, 0.75)", A.strokeStyle = "rgba(255, 0, 0, 0.75)", A.lineWidth = 1, A.fillText("1 frame = " + Q + " ms = " + ee + " fps", 0, 20); var te = 60; A.strokeRect(0, 30, 250, 20), A.fillRect(0, 30, 250 * Math.min(ee / te, 1), 20) } o || (f[n.SELECT_BOX] = !1) } if (g && 1 !== y) { var ne = p.contexts[n.NODE], re = c.data.bufferCanvases[n.MOTIONBLUR_BUFFER_NODE], ie = p.contexts[n.DRAG], ae = c.data.bufferCanvases[n.MOTIONBLUR_BUFFER_DRAG], oe = function(e, t, n) { e.setTransform(1, 0, 0, 1, 0, 0), n || !w ? e.clearRect(0, 0, c.canvasWidth, c.canvasHeight) : r(e, 0, 0, c.canvasWidth, c.canvasHeight); var i = y; e.drawImage(t, 0, 0, c.canvasWidth * i, c.canvasHeight * i, 0, 0, c.canvasWidth, c.canvasHeight) }; (f[n.NODE] || U[n.NODE]) && (oe(ne, re, U[n.NODE]), f[n.NODE] = !1), (f[n.DRAG] || U[n.DRAG]) && (oe(ie, ae, U[n.DRAG]), f[n.DRAG] = !1) } var se = Date.now(); void 0 === c.averageRedrawTime && (c.averageRedrawTime = se - D), void 0 === c.redrawCount && (c.redrawCount = 0), c.redrawCount++, void 0 === c.redrawTotalTime && (c.redrawTotalTime = 0), c.redrawTotalTime += se - D, c.lastRedrawTime = se - D, c.averageRedrawTime = c.averageRedrawTime / 2 + (se - D) / 2, c.currentlyDrawing = !1, c.prevViewport = N, c.clearingMotionBlur && (c.clearingMotionBlur = !1, c.motionBlurCleared = !0, c.motionBlur = !0), g && (c.motionBlurTimeout = setTimeout(function() { c.motionBlurTimeout = null, c.clearedForMotionBlur[n.NODE] = !1, c.clearedForMotionBlur[n.DRAG] = !1, c.motionBlur = !1, c.clearingMotionBlur = !v, c.mbFrames = 0, f[n.NODE] = !0, f[n.DRAG] = !0, c.redraw() }, t.motionBlurDelay)), c.drawingImage = !1 } r = r || {}; var a = r.forcedContext, o = r.drawAllLayers, s = r.drawOnlyNodeLayer, l = r.forcedZoom, u = r.forcedPan, c = this, d = void 0 === r.forcedPxRatio ? this.getPixelRatio() : r.forcedPxRatio, h = c.data.cy, p = c.data, f = p.canvasNeedsRedraw, v = c.textureOnViewport && !a && (c.pinching || c.hoverData.dragging || c.swipePanning || c.data.wheelZooming), g = void 0 !== r.motionBlur ? r.motionBlur : c.motionBlur, y = c.motionBlurPxRatio, m = h.hasCompoundNodes(), x = c.hoverData.draggingEles, b = c.hoverData.selecting || c.touchData.selecting ? !0 : !1; g = g && !a && c.motionBlurEnabled && !b; var w = g; !a && c.motionBlurTimeout && clearTimeout(c.motionBlurTimeout), !a && this.redrawTimeout && clearTimeout(this.redrawTimeout), this.redrawTimeout = null, void 0 === this.averageRedrawTime && (this.averageRedrawTime = 0); var _ = t.minRedrawLimit, E = t.maxRedrawLimit, T = this.averageRedrawTime; T = _ > T ? _ : T, T = E > T ? T : E, void 0 === this.lastDrawTime && (this.lastDrawTime = 0); var S = Date.now(), C = S - this.lastDrawTime, k = C >= T; if (!a && !c.clearingMotionBlur) { if (!k || this.currentlyDrawing) return void(this.redrawTimeout = setTimeout(function() { c.redraw() }, T)); this.lastDrawTime = S, this.currentlyDrawing = !0 } g && (null == c.mbFrames && (c.mbFrames = 0), c.drawingImage || c.mbFrames++, c.mbFrames < 3 && (w = !1), c.mbFrames > c.minMbLowQualFrames && (c.motionBlurPxRatio = c.mbPxRBlurry)), c.clearingMotionBlur && (c.motionBlurPxRatio = 1); var D = Date.now(); a ? i() : e.util.requestAnimationFrame(i), a || c.initrender || (c.initrender = !0, h.trigger("initrender")), a || h.triggerOnRender() } }(cytoscape), function(e) { "use strict"; var t = e("renderer", "canvas"), n = t.prototype; n.drawPolygonPath = function(e, t, n, r, i, a) { var o = r / 2, s = i / 2; e.beginPath && e.beginPath(), e.moveTo(t + o * a[0], n + s * a[1]); for (var l = 1; l < a.length / 2; l++) e.lineTo(t + o * a[2 * l], n + s * a[2 * l + 1]); e.closePath() }, n.drawPolygon = function(e, t, n, r, i, a) { this.drawPolygonPath(e, t, n, r, i, a), e.fill() }, n.drawRoundRectanglePath = function(t, n, r, i, a, o) { var s = i / 2, l = a / 2, u = e.math.getRoundRectangleRadius(i, a); t.beginPath && t.beginPath(), t.moveTo(n, r - l), t.arcTo(n + s, r - l, n + s, r, u), t.arcTo(n + s, r + l, n, r + l, u), t.arcTo(n - s, r + l, n - s, r, u), t.arcTo(n - s, r - l, n, r - l, u), t.lineTo(n, r - l), t.closePath() }, n.drawRoundRectangle = function(e, t, n, r, i, a) { this.drawRoundRectanglePath(e, t, n, r, i, a), e.fill() } }(cytoscape), function(e) { "use strict"; var t = e("renderer", "canvas"), n = t.prototype; n.createBuffer = function(e, t) { var n = document.createElement("canvas"); return n.width = e, n.height = t, [n, n.getContext("2d")] }, n.bufferCanvasImage = function(t) { var n = this.data, r = n.cy, i = r.elements().boundingBox(), a = t.full ? Math.ceil(i.w) : this.data.container.clientWidth, o = t.full ? Math.ceil(i.h) : this.data.container.clientHeight, s = 1; if (void 0 !== t.scale) a *= t.scale, o *= t.scale, s = t.scale; else if (e.is.number(t.maxWidth) || e.is.number(t.maxHeight)) { var l = 1 / 0, u = 1 / 0; e.is.number(t.maxWidth) && (l = s * t.maxWidth / a), e.is.number(t.maxHeight) && (u = s * t.maxHeight / o), s = Math.min(l, u), a *= s, o *= s } var c = document.createElement("canvas"); c.width = a, c.height = o, c.style.width = a + "px", c.style.height = o + "px"; var d = c.getContext("2d"); if (a > 0 && o > 0) if (d.clearRect(0, 0, a, o), t.bg && (d.fillStyle = t.bg, d.rect(0, 0, a, o), d.fill()), d.globalCompositeOperation = "source-over", t.full) this.redraw({ forcedContext: d, drawAllLayers: !0, forcedZoom: s, forcedPan: { x: -i.x1 * s, y: -i.y1 * s }, forcedPxRatio: 1 }); else { var h = r.pan(), p = { x: h.x * s, y: h.y * s }, f = r.zoom() * s; this.redraw({ forcedContext: d, drawAllLayers: !0, forcedZoom: f, forcedPan: p, forcedPxRatio: 1 }) } return c }, n.png = function(e) { return this.bufferCanvasImage(e).toDataURL("image/png") }, n.jpg = function(e) { return this.bufferCanvasImage(e).toDataURL("image/jpeg") } }(cytoscape), function(e) { "use strict"; var t = e("renderer", "canvas"), n = t, r = n.prototype; r.registerBinding = function(e, t, n, r) { this.bindings.push({ target: e, event: t, handler: n, useCapture: r }), e.addEventListener(t, n, r) }, r.nodeIsDraggable = function(e) { return 0 !== e._private.style.opacity.value && "visible" == e._private.style.visibility.value && "element" == e._private.style.display.value && !e.locked() && e.grabbable() ? !0 : !1 }, r.load = function() { var t = this, r = function(e) { var n; if (e.addToList && t.data.cy.hasCompoundNodes()) { if (!e.addToList.hasId) { e.addToList.hasId = {}; for (var r = 0; r < e.addToList.length; r++) { var i = e.addToList[r]; e.addToList.hasId[i.id()] = !0 } } n = e.addToList.hasId } return n || {} }, i = function(e, t) { if (e._private.cy.hasCompoundNodes() && (null != t.inDragLayer || null != t.addToList)) for (var n = r(t), i = e.descendants(), a = 0; a < i.size(); a++) { var o = i[a], s = o._private; t.inDragLayer && (s.rscratch.inDragLayer = !0), t.addToList && !n[o.id()] && (t.addToList.push(o), n[o.id()] = !0, s.grabbed = !0); for (var l = s.edges, u = 0; t.inDragLayer && u < l.length; u++) l[u]._private.rscratch.inDragLayer = !0 } }, a = function(e, t) { var n = e._private, a = r(t); t.inDragLayer && (n.rscratch.inDragLayer = !0), t.addToList && !a[e.id()] && (t.addToList.push(e), a[e.id()] = !0, n.grabbed = !0); for (var o = n.edges, l = 0; t.inDragLayer && l < o.length; l++) o[l]._private.rscratch.inDragLayer = !0; i(e, t), s(e, { inDragLayer: t.inDragLayer }) }, o = function(e) { if (e) for (var t = 0; t < e.length; t++) { var n = e[t]._private; if ("nodes" === n.group) { n.rscratch.inDragLayer = !1, n.grabbed = !1; for (var r = n.edges, i = 0; i < r.length; i++) r[i]._private.rscratch.inDragLayer = !1; s(e[t], { inDragLayer: !1 }) } else "edges" === n.group && (n.rscratch.inDragLayer = !1) } }, s = function(e, t) { if (null != t.inDragLayer || null != t.addToList) { var n = e; if (e._private.cy.hasCompoundNodes()) { for (; n.parent().nonempty();) n = n.parent()[0]; if (n != e) { for (var i = n.descendants().merge(n).unmerge(e).unmerge(e.descendants()), a = i.connectedEdges(), o = r(t), s = 0; s < i.size(); s++) void 0 !== t.inDragLayer && (i[s]._private.rscratch.inDragLayer = t.inDragLayer), t.addToList && !o[i[s].id()] && (t.addToList.push(i[s]), o[i[s].id()] = !0, i[s]._private.grabbed = !0); for (var l = 0; void 0 !== t.inDragLayer && l < a.length; l++) a[l]._private.rscratch.inDragLayer = t.inDragLayer } } } }; "undefined" != typeof MutationObserver ? (t.removeObserver = new MutationObserver(function(e) { for (var n = 0; n < e.length; n++) { var r = e[n], i = r.removedNodes; if (i) for (var a = 0; a < i.length; a++) { var o = i[a]; if (o === t.data.container) { t.destroy(); break } } } }), t.removeObserver.observe(t.data.container.parentNode, { childList: !0 })) : t.registerBinding(t.data.container, "DOMNodeRemoved", function(e) { t.destroy() }), t.registerBinding(window, "resize", e.util.debounce(function(e) { t.invalidateContainerClientCoordsCache(), t.matchCanvasSize(t.data.container), t.data.canvasNeedsRedraw[n.NODE] = !0, t.redraw() }, 100)); for (var l = function(e) { t.registerBinding(e, "scroll", function(e) { t.invalidateContainerClientCoordsCache() }) }, u = t.data.cy.container(); l(u), u.parentNode;) u = u.parentNode; t.registerBinding(t.data.container, "contextmenu", function(e) { e.preventDefault() }); var c = function() { return 0 !== t.data.select[4] }; t.registerBinding(t.data.container, "mousedown", function(r) { r.preventDefault(), t.hoverData.capture = !0, t.hoverData.which = r.which; var i = t.data.cy, o = t.projectIntoViewport(r.clientX, r.clientY), s = t.data.select, l = t.findNearestElement(o[0], o[1], !0, !1), u = t.dragData.possibleDragElements; t.hoverData.mdownPos = o; var c = t.data.canvasNeedsRedraw, d = function() { t.hoverData.tapholdCancelled = !1, clearTimeout(t.hoverData.tapholdTimeout), t.hoverData.tapholdTimeout = setTimeout(function() { if (!t.hoverData.tapholdCancelled) { var n = t.hoverData.down; n ? n.trigger(new e.Event(r, { type: "taphold", cyPosition: { x: o[0], y: o[1] } })) : i.trigger(new e.Event(r, { type: "taphold", cyPosition: { x: o[0], y: o[1] } })) } }, t.tapholdDuration) }; if (3 == r.which) { t.hoverData.cxtStarted = !0; var h = new e.Event(r, { type: "cxttapstart", cyPosition: { x: o[0], y: o[1] } }); l ? (l.activate(), l.trigger(h), t.hoverData.down = l) : i.trigger(h), t.hoverData.downTime = (new Date).getTime(), t.hoverData.cxtDragged = !1 } else if (1 == r.which) { if (l && l.activate(), null != l) { if (t.nodeIsDraggable(l)) { var p = new e.Event(r, { type: "grab", cyPosition: { x: o[0], y: o[1] } }); if (l.isNode() && !l.selected()) u = t.dragData.possibleDragElements = [], a(l, { addToList: u }), l.trigger(p); else if (l.isNode() && l.selected()) { u = t.dragData.possibleDragElements = []; for (var f = i.$(function() { return this.isNode() && this.selected() }), v = 0; v < f.length; v++) t.nodeIsDraggable(f[v]) && a(f[v], { addToList: u }); l.trigger(p) } c[n.NODE] = !0, c[n.DRAG] = !0 } l.trigger(new e.Event(r, { type: "mousedown", cyPosition: { x: o[0], y: o[1] } })).trigger(new e.Event(r, { type: "tapstart", cyPosition: { x: o[0], y: o[1] } })).trigger(new e.Event(r, { type: "vmousedown", cyPosition: { x: o[0], y: o[1] } })) } else null == l && i.trigger(new e.Event(r, { type: "mousedown", cyPosition: { x: o[0], y: o[1] } })).trigger(new e.Event(r, { type: "tapstart", cyPosition: { x: o[0], y: o[1] } })).trigger(new e.Event(r, { type: "vmousedown", cyPosition: { x: o[0], y: o[1] } })); if (t.hoverData.down = l, t.hoverData.downTime = (new Date).getTime(), null == l || l.isEdge()) { s[4] = 1; var g = Math.max(0, n.panOrBoxSelectDelay - (+new Date - t.hoverData.downTime)); clearTimeout(t.bgActiveTimeout), i.boxSelectionEnabled() || l && l.isEdge() ? t.bgActiveTimeout = setTimeout(function() { l && l.unactivate(), t.data.bgActivePosistion = { x: o[0], y: o[1] }, t.hoverData.dragging = !0, c[n.SELECT_BOX] = !0, t.redraw() }, g) : (t.data.bgActivePosistion = { x: o[0], y: o[1] }, c[n.SELECT_BOX] = !0, t.redraw()) } d() } s[0] = s[2] = o[0], s[1] = s[3] = o[1] }, !1), t.registerBinding(window, "mousemove", e.util.throttle(function(r) { var i = !1, o = t.hoverData.capture; if (!o) { var s = t.findContainerClientCoords(); if (!(r.clientX > s[0] && r.clientX < s[0] + t.canvasWidth && r.clientY > s[1] && r.clientY < s[1] + t.canvasHeight)) return; for (var l = t.data.container, u = r.target, c = u.parentNode, d = !1; c;) { if (c === l) { d = !0; break } c = c.parentNode } if (!d) return } var h = t.data.cy, p = h.zoom(), f = t.projectIntoViewport(r.clientX, r.clientY), v = t.data.select, g = t.data.canvasNeedsRedraw, y = null; t.hoverData.draggingEles || (y = t.findNearestElement(f[0], f[1], !0, !1)); var m = t.hoverData.last, x = t.hoverData.down, b = [f[0] - v[2], f[1] - v[3]], w = t.dragData.possibleDragElements, _ = v[2] - v[0], E = _ * _, T = v[3] - v[1], S = T * T, C = E + S, k = C * p * p; t.hoverData.tapholdCancelled = !0; var D = function() { var e = t.hoverData.dragDelta = t.hoverData.dragDelta || []; 0 === e.length ? (e.push(b[0]), e.push(b[1])) : (e[0] += b[0], e[1] += b[1]) }; if (i = !0, null != y ? y.trigger(new e.Event(r, { type: "mousemove", cyPosition: { x: f[0], y: f[1] } })).trigger(new e.Event(r, { type: "vmousemove", cyPosition: { x: f[0], y: f[1] } })).trigger(new e.Event(r, { type: "tapdrag", cyPosition: { x: f[0], y: f[1] } })) : null == y && h.trigger(new e.Event(r, { type: "mousemove", cyPosition: { x: f[0], y: f[1] } })).trigger(new e.Event(r, { type: "vmousemove", cyPosition: { x: f[0], y: f[1] } })).trigger(new e.Event(r, { type: "tapdrag", cyPosition: { x: f[0], y: f[1] } })), 3 === t.hoverData.which) { var N = new e.Event(r, { type: "cxtdrag", cyPosition: { x: f[0], y: f[1] } }); x ? x.trigger(N) : h.trigger(N), t.hoverData.cxtDragged = !0, t.hoverData.cxtOver && y === t.hoverData.cxtOver || (t.hoverData.cxtOver && t.hoverData.cxtOver.trigger(new e.Event(r, { type: "cxtdragout", cyPosition: { x: f[0], y: f[1] } })), t.hoverData.cxtOver = y, y && y.trigger(new e.Event(r, { type: "cxtdragover", cyPosition: { x: f[0], y: f[1] } }))) } else if (t.hoverData.dragging) { if (i = !0, h.panningEnabled() && h.userPanningEnabled()) { var P; if (t.hoverData.justStartedPan) { var M = t.hoverData.mdownPos; P = { x: (f[0] - M[0]) * p, y: (f[1] - M[1]) * p }, t.hoverData.justStartedPan = !1 } else P = { x: b[0] * p, y: b[1] * p }; h.panBy(P), t.hoverData.dragged = !0 } f = t.projectIntoViewport(r.clientX, r.clientY) } else if (1 == v[4] && (null == x || x.isEdge()) && (!h.boxSelectionEnabled() || +new Date - t.hoverData.downTime >= n.panOrBoxSelectDelay) && !t.hoverData.selecting && k >= t.desktopTapThreshold2 && h.panningEnabled() && h.userPanningEnabled()) t.hoverData.dragging = !0, t.hoverData.selecting = !1, t.hoverData.justStartedPan = !0, v[4] = 0; else { if (h.boxSelectionEnabled() && !t.hoverData.dragging && Math.pow(v[2] - v[0], 2) + Math.pow(v[3] - v[1], 2) > 7 && v[4] && (clearTimeout(t.bgActiveTimeout), t.data.bgActivePosistion = void 0, t.hoverData.selecting = !0, g[n.SELECT_BOX] = !0, t.redraw()), x && x.isEdge() && x.active() && x.unactivate(), y != m && (m && (m.trigger(new e.Event(r, { type: "mouseout", cyPosition: { x: f[0], y: f[1] } })), m.trigger(new e.Event(r, { type: "tapdragout", cyPosition: { x: f[0], y: f[1] } }))), y && (y.trigger(new e.Event(r, { type: "mouseover", cyPosition: { x: f[0], y: f[1] } })), y.trigger(new e.Event(r, { type: "tapdragover", cyPosition: { x: f[0], y: f[1] } }))), t.hoverData.last = y), x && x.isNode() && t.nodeIsDraggable(x)) if (k >= t.desktopTapThreshold2) { var B = !t.dragData.didDrag; B && (g[n.NODE] = !0), t.dragData.didDrag = !0; for (var L = [], O = 0; O < w.length; O++) { var A = w[O]; if (t.hoverData.draggingEles || a(A, { inDragLayer: !0 }), A.isNode() && t.nodeIsDraggable(A) && A.grabbed()) { var I = A._private.position; if (L.push(A), e.is.number(b[0]) && e.is.number(b[1]) && (I.x += b[0], I.y += b[1], B)) { var z = t.hoverData.dragDelta; e.is.number(z[0]) && e.is.number(z[1]) && (I.x += z[0], I.y += z[1]) } } } t.hoverData.draggingEles = !0; var R = new e.Collection(h, L); R.updateCompoundBounds(), R.trigger("position drag"), g[n.DRAG] = !0, t.redraw() } else D(); i = !0 } return v[2] = f[0], v[3] = f[1], i ? (r.stopPropagation && r.stopPropagation(), r.preventDefault && r.preventDefault(), !1) : void 0 }, 1e3 / 30, { trailing: !0 }), !1), t.registerBinding(window, "mouseup", function(r) { var i = t.hoverData.capture; if (i) { t.hoverData.capture = !1; var a = t.data.cy, s = t.projectIntoViewport(r.clientX, r.clientY), l = t.data.select, u = t.findNearestElement(s[0], s[1], !0, !1), c = t.dragData.possibleDragElements, d = t.hoverData.down, h = r.shiftKey, p = t.data.canvasNeedsRedraw; if (t.data.bgActivePosistion && (p[n.SELECT_BOX] = !0, t.redraw()), t.hoverData.tapholdCancelled = !0, t.data.bgActivePosistion = void 0, clearTimeout(t.bgActiveTimeout), d && d.unactivate(), 3 === t.hoverData.which) { var f = new e.Event(r, { type: "cxttapend", cyPosition: { x: s[0], y: s[1] } }); if (d ? d.trigger(f) : a.trigger(f), !t.hoverData.cxtDragged) { var v = new e.Event(r, { type: "cxttap", cyPosition: { x: s[0], y: s[1] } }); d ? d.trigger(v) : a.trigger(v) } t.hoverData.cxtDragged = !1, t.hoverData.which = null } else { if (null != d || t.dragData.didDrag || t.hoverData.dragged || (a.$(function() { return this.selected() }).unselect(), c.length > 0 && (p[n.NODE] = !0), t.dragData.possibleDragElements = c = []), null != u ? u.trigger(new e.Event(r, { type: "mouseup", cyPosition: { x: s[0], y: s[1] } })).trigger(new e.Event(r, { type: "tapend", cyPosition: { x: s[0], y: s[1] } })).trigger(new e.Event(r, { type: "vmouseup", cyPosition: { x: s[0], y: s[1] } })) : null == u && a.trigger(new e.Event(r, { type: "mouseup", cyPosition: { x: s[0], y: s[1] } })).trigger(new e.Event(r, { type: "tapend", cyPosition: { x: s[0], y: s[1] } })).trigger(new e.Event(r, { type: "vmouseup", cyPosition: { x: s[0], y: s[1] } })), t.dragData.didDrag || t.hoverData.dragged || (null != u ? u.trigger(new e.Event(r, { type: "click", cyPosition: { x: s[0], y: s[1] } })).trigger(new e.Event(r, { type: "tap", cyPosition: { x: s[0], y: s[1] } })).trigger(new e.Event(r, { type: "vclick", cyPosition: { x: s[0], y: s[1] } })) : null == u && a.trigger(new e.Event(r, { type: "click", cyPosition: { x: s[0], y: s[1] } })).trigger(new e.Event(r, { type: "tap", cyPosition: { x: s[0], y: s[1] } })).trigger(new e.Event(r, { type: "vclick", cyPosition: { x: s[0], y: s[1] } }))), u != d || t.dragData.didDrag || null != u && u._private.selectable && (t.hoverData.dragging || ("additive" === a.selectionType() || h ? u.selected() ? u.unselect() : u.select() : h || (a.$(":selected").unmerge(u).unselect(), u.select())), p[n.NODE] = !0), t.hoverData.selecting && a.boxSelectionEnabled() && Math.pow(l[2] - l[0], 2) + Math.pow(l[3] - l[1], 2) > 7 && l[4]) { var g = [], y = t.getAllInBox(l[0], l[1], l[2], l[3]); p[n.SELECT_BOX] = !0, y.length > 0 && (p[n.NODE] = !0); for (var m = 0; m < y.length; m++) y[m]._private.selectable && g.push(y[m]); var x = new e.Collection(a, g); "additive" === a.selectionType() ? x.select() : (h || a.$(":selected").unmerge(x).unselect(), x.select()), t.redraw() } t.hoverData.dragging && (t.hoverData.dragging = !1, p[n.SELECT_BOX] = !0, p[n.NODE] = !0, t.redraw()), l[4] || (p[n.DRAG] = !0, p[n.NODE] = !0, o(c), d && d.trigger("free")) } l[4] = 0, t.hoverData.down = null, t.hoverData.cxtStarted = !1, t.hoverData.draggingEles = !1, t.hoverData.selecting = !1, t.dragData.didDrag = !1, t.hoverData.dragged = !1, t.hoverData.dragDelta = [] } }, !1); var d = function(e) { if (!t.scrollingPage) { var r = t.data.cy, i = t.projectIntoViewport(e.clientX, e.clientY), a = [i[0] * r.zoom() + r.pan().x, i[1] * r.zoom() + r.pan().y]; if (t.hoverData.draggingEles || t.hoverData.dragging || t.hoverData.cxtStarted || c()) return void e.preventDefault(); if (r.panningEnabled() && r.userPanningEnabled() && r.zoomingEnabled() && r.userZoomingEnabled()) { e.preventDefault(), t.data.wheelZooming = !0, clearTimeout(t.data.wheelTimeout), t.data.wheelTimeout = setTimeout(function() { t.data.wheelZooming = !1, t.data.canvasNeedsRedraw[n.NODE] = !0, t.redraw() }, 150); var o = e.deltaY / -250 || e.wheelDeltaY / 1e3 || e.wheelDelta / 1e3; o *= t.wheelSensitivity; var s = 1 === e.deltaMode; s && (o *= 33), r.zoom({ level: r.zoom() * Math.pow(10, o), renderedPosition: { x: a[0], y: a[1] } }) } } }; t.registerBinding(t.data.container, "wheel", d, !0), t.registerBinding(window, "scroll", function(e) { t.scrollingPage = !0, clearTimeout(t.scrollingPageTimeout), t.scrollingPageTimeout = setTimeout(function() { t.scrollingPage = !1 }, 250) }, !0), t.registerBinding(t.data.container, "mouseout", function(n) { var r = t.projectIntoViewport(n.clientX, n.clientY); t.data.cy.trigger(new e.Event(n, { type: "mouseout", cyPosition: { x: r[0], y: r[1] } })) }, !1), t.registerBinding(t.data.container, "mouseover", function(n) { var r = t.projectIntoViewport(n.clientX, n.clientY); t.data.cy.trigger(new e.Event(n, { type: "mouseover", cyPosition: { x: r[0], y: r[1] } })) }, !1); var h, p, f, v, g, y, m, x, b, w, _, E, T, S = function(e, t, n, r) { return Math.sqrt((n - e) * (n - e) + (r - t) * (r - t)) }, C = function(e, t, n, r) { return (n - e) * (n - e) + (r - t) * (r - t) }; t.registerBinding(t.data.container, "touchstart", function(r) { clearTimeout(this.threeFingerSelectTimeout), r.target !== t.data.link && r.preventDefault(), t.touchData.capture = !0, t.data.bgActivePosistion = void 0; var i = t.data.cy, o = t.getCachedNodes(), s = t.getCachedEdges(), l = t.touchData.now, u = t.touchData.earlier, c = t.data.canvasNeedsRedraw; if (r.touches[0]) { var d = t.projectIntoViewport(r.touches[0].clientX, r.touches[0].clientY); l[0] = d[0], l[1] = d[1] } if (r.touches[1]) { var d = t.projectIntoViewport(r.touches[1].clientX, r.touches[1].clientY); l[2] = d[0], l[3] = d[1] } if (r.touches[2]) { var d = t.projectIntoViewport(r.touches[2].clientX, r.touches[2].clientY); l[4] = d[0], l[5] = d[1] } if (r.touches[1]) { var k = function(e) { for (var t = 0; t < e.length; t++) e[t]._private.grabbed = !1, e[t]._private.rscratch.inDragLayer = !1, e[t].active() && e[t].unactivate() }; k(o), k(s); var D = t.findContainerClientCoords(); b = D[0], w = D[1], _ = D[2], E = D[3], h = r.touches[0].clientX - b, p = r.touches[0].clientY - w, f = r.touches[1].clientX - b, v = r.touches[1].clientY - w, T = h >= 0 && _ >= h && f >= 0 && _ >= f && p >= 0 && E >= p && v >= 0 && E >= v; var N = i.pan(), P = i.zoom(); g = S(h, p, f, v), y = C(h, p, f, v), m = [(h + f) / 2, (p + v) / 2], x = [(m[0] - N.x) / P, (m[1] - N.y) / P]; var M = 200, B = M * M; if (B > y && !r.touches[2]) { var L = t.findNearestElement(l[0], l[1], !0, !0), O = t.findNearestElement(l[2], l[3], !0, !0); return L && L.isNode() ? (L.activate().trigger(new e.Event(r, { type: "cxttapstart", cyPosition: { x: l[0], y: l[1] } })), t.touchData.start = L) : O && O.isNode() ? (O.activate().trigger(new e.Event(r, { type: "cxttapstart", cyPosition: { x: l[0], y: l[1] } })), t.touchData.start = O) : (i.trigger(new e.Event(r, { type: "cxttapstart", cyPosition: { x: l[0], y: l[1] } })), t.touchData.start = null), t.touchData.start && (t.touchData.start._private.grabbed = !1), t.touchData.cxt = !0, t.touchData.cxtDragged = !1, t.data.bgActivePosistion = void 0, void t.redraw() } } if (r.touches[2]); else if (r.touches[1]); else if (r.touches[0]) { var A = t.findNearestElement(l[0], l[1], !0, !0); if (null != A) { if (A.activate(), t.touchData.start = A, A.isNode() && t.nodeIsDraggable(A)) { var I = t.dragData.touchDragEles = []; if (c[n.NODE] = !0, c[n.DRAG] = !0, A.selected()) for (var z = i.$(function() { return this.isNode() && this.selected() }), R = 0; R < z.length; R++) { var j = z[R]; t.nodeIsDraggable(j) && a(j, { addToList: I }) } else a(A, { addToList: I }); A.trigger(new e.Event(r, { type: "grab", cyPosition: { x: l[0], y: l[1] } })) } A.trigger(new e.Event(r, { type: "touchstart", cyPosition: { x: l[0], y: l[1] } })).trigger(new e.Event(r, { type: "tapstart", cyPosition: { x: l[0], y: l[1] } })).trigger(new e.Event(r, { type: "vmousdown", cyPosition: { x: l[0], y: l[1] } })) } null == A && (i.trigger(new e.Event(r, { type: "touchstart", cyPosition: { x: l[0], y: l[1] } })).trigger(new e.Event(r, { type: "tapstart", cyPosition: { x: l[0], y: l[1] } })).trigger(new e.Event(r, { type: "vmousedown", cyPosition: { x: l[0], y: l[1] } })), t.data.bgActivePosistion = { x: d[0], y: d[1] }, c[n.SELECT_BOX] = !0, t.redraw()); for (var F = 0; F < l.length; F++) u[F] = l[F], t.touchData.startPosition[F] = l[F]; t.touchData.singleTouchMoved = !1, t.touchData.singleTouchStartTime = +new Date, clearTimeout(t.touchData.tapholdTimeout), t.touchData.tapholdTimeout = setTimeout(function() { t.touchData.singleTouchMoved !== !1 || t.pinching || (t.touchData.start ? t.touchData.start.trigger(new e.Event(r, { type: "taphold", cyPosition: { x: l[0], y: l[1] } })) : (t.data.cy.trigger(new e.Event(r, { type: "taphold", cyPosition: { x: l[0], y: l[1] } })), i.$(":selected").unselect())) }, t.tapholdDuration) } }, !1), t.registerBinding(window, "touchmove", e.util.throttle(function(r) { var i = t.data.select, o = t.touchData.capture; o && r.preventDefault(); var s = t.data.cy, l = t.touchData.now, u = t.touchData.earlier, c = s.zoom(), d = t.data.canvasNeedsRedraw; if (r.touches[0]) { var m = t.projectIntoViewport(r.touches[0].clientX, r.touches[0].clientY); l[0] = m[0], l[1] = m[1] } if (r.touches[1]) { var m = t.projectIntoViewport(r.touches[1].clientX, r.touches[1].clientY); l[2] = m[0], l[3] = m[1] } if (r.touches[2]) { var m = t.projectIntoViewport(r.touches[2].clientX, r.touches[2].clientY); l[4] = m[0], l[5] = m[1] } for (var _ = [], E = 0; E < l.length; E++) _[E] = l[E] - u[E]; var k = t.touchData.startPosition, D = l[0] - k[0], N = D * D, P = l[1] - k[1], M = P * P, B = N + M, L = B * c * c; if (o && t.touchData.cxt) { var O = r.touches[0].clientX - b, A = r.touches[0].clientY - w, I = r.touches[1].clientX - b, z = r.touches[1].clientY - w, R = C(O, A, I, z), j = R / y, F = 150, q = F * F, V = 1.5, X = V * V; if (j >= X || R >= q) { t.touchData.cxt = !1, t.touchData.start && (t.touchData.start.unactivate(), t.touchData.start = null), t.data.bgActivePosistion = void 0, d[n.SELECT_BOX] = !0; var H = new e.Event(r, { type: "cxttapend", cyPosition: { x: l[0], y: l[1] } }); t.touchData.start ? t.touchData.start.trigger(H) : s.trigger(H) } } if (o && t.touchData.cxt) { var H = new e.Event(r, { type: "cxtdrag", cyPosition: { x: l[0], y: l[1] } }); t.data.bgActivePosistion = void 0, d[n.SELECT_BOX] = !0, t.touchData.start ? t.touchData.start.trigger(H) : s.trigger(H), t.touchData.start && (t.touchData.start._private.grabbed = !1), t.touchData.cxtDragged = !0; var Y = t.findNearestElement(l[0], l[1], !0, !0); t.touchData.cxtOver && Y === t.touchData.cxtOver || (t.touchData.cxtOver && t.touchData.cxtOver.trigger(new e.Event(r, { type: "cxtdragout", cyPosition: { x: l[0], y: l[1] } })), t.touchData.cxtOver = Y, Y && Y.trigger(new e.Event(r, { type: "cxtdragover", cyPosition: { x: l[0], y: l[1] } }))) } else if (o && r.touches[2] && s.boxSelectionEnabled()) t.data.bgActivePosistion = void 0, clearTimeout(this.threeFingerSelectTimeout), this.lastThreeTouch = +new Date, t.touchData.selecting = !0, d[n.SELECT_BOX] = !0, i && 0 !== i.length && void 0 !== i[0] ? (i[2] = (l[0] + l[2] + l[4]) / 3, i[3] = (l[1] + l[3] + l[5]) / 3) : (i[0] = (l[0] + l[2] + l[4]) / 3, i[1] = (l[1] + l[3] + l[5]) / 3, i[2] = (l[0] + l[2] + l[4]) / 3 + 1, i[3] = (l[1] + l[3] + l[5]) / 3 + 1), i[4] = 1, t.touchData.selecting = !0, t.redraw(); else if (o && r.touches[1] && s.zoomingEnabled() && s.panningEnabled() && s.userZoomingEnabled() && s.userPanningEnabled()) { t.data.bgActivePosistion = void 0, d[n.SELECT_BOX] = !0; var $ = t.dragData.touchDragEles; if ($) { d[n.DRAG] = !0; for (var W = 0; W < $.length; W++) $[W]._private.grabbed = !1, $[W]._private.rscratch.inDragLayer = !1 } var O = r.touches[0].clientX - b, A = r.touches[0].clientY - w, I = r.touches[1].clientX - b, z = r.touches[1].clientY - w, U = S(O, A, I, z), Z = U / g; if (1 != Z && T) { var G = O - h, K = A - p, J = I - f, Q = z - v, ee = (G + J) / 2, te = (K + Q) / 2, ne = s.zoom(), re = ne * Z, ie = s.pan(), ae = x[0] * ne + ie.x, oe = x[1] * ne + ie.y, se = { x: -re / ne * (ae - ie.x - ee) + ae, y: -re / ne * (oe - ie.y - te) + oe }; if (t.touchData.start) { var $ = t.dragData.touchDragEles; if ($) for (var W = 0; W < $.length; W++) { var le = $[W]._private; le.grabbed = !1, le.rscratch.inDragLayer = !1 } var ue = t.touchData.start._private; ue.active = !1, ue.grabbed = !1, ue.rscratch.inDragLayer = !1, d[n.DRAG] = !0, t.touchData.start.trigger("free").trigger("unactivate") } s.viewport({ zoom: re, pan: se, cancelOnFailedZoom: !0 }), g = U, h = O, p = A, f = I, v = z, t.pinching = !0 } if (r.touches[0]) { var m = t.projectIntoViewport(r.touches[0].clientX, r.touches[0].clientY); l[0] = m[0], l[1] = m[1] } if (r.touches[1]) { var m = t.projectIntoViewport(r.touches[1].clientX, r.touches[1].clientY); l[2] = m[0], l[3] = m[1] } if (r.touches[2]) { var m = t.projectIntoViewport(r.touches[2].clientX, r.touches[2].clientY); l[4] = m[0], l[5] = m[1] } } else if (r.touches[0]) { var ce = t.touchData.start, de = t.touchData.last, Y = Y || t.findNearestElement(l[0], l[1], !0, !0); if (null != ce && "nodes" == ce._private.group && t.nodeIsDraggable(ce)) if (L >= t.touchTapThreshold2) { for (var $ = t.dragData.touchDragEles, he = 0; he < $.length; he++) { var pe = $[he]; if (t.nodeIsDraggable(pe) && pe.isNode() && pe.grabbed()) { t.dragData.didDrag = !0; var fe = pe._private.position, ve = !t.hoverData.draggingEles; if (e.is.number(_[0]) && e.is.number(_[1]) && (fe.x += _[0], fe.y += _[1]), ve) { a(pe, { inDragLayer: !0 }), d[n.NODE] = !0; var ge = t.touchData.dragDelta; e.is.number(ge[0]) && e.is.number(ge[1]) && (fe.x += ge[0], fe.y += ge[1]) } } } var ye = new e.Collection(s, pe); ye.updateCompoundBounds(), ye.trigger("position drag"), t.hoverData.draggingEles = !0, d[n.DRAG] = !0, t.touchData.startPosition[0] == u[0] && t.touchData.startPosition[1] == u[1] && (d[n.NODE] = !0), t.redraw() } else { var ge = t.touchData.dragDelta = t.touchData.dragDelta || []; 0 === ge.length ? (ge.push(_[0]), ge.push(_[1])) : (ge[0] += _[0], ge[1] += _[1]) } null != ce && (ce.trigger(new e.Event(r, { type: "touchmove", cyPosition: { x: l[0], y: l[1] } })), ce.trigger(new e.Event(r, { type: "tapdrag", cyPosition: { x: l[0], y: l[1] } })), ce.trigger(new e.Event(r, { type: "vmousemove", cyPosition: { x: l[0], y: l[1] } }))), null == ce && (null != Y && (Y.trigger(new e.Event(r, { type: "touchmove", cyPosition: { x: l[0], y: l[1] } })), Y.trigger(new e.Event(r, { type: "tapdrag", cyPosition: { x: l[0], y: l[1] } })), Y.trigger(new e.Event(r, { type: "vmousemove", cyPosition: { x: l[0], y: l[1] } }))), null == Y && (s.trigger(new e.Event(r, { type: "touchmove", cyPosition: { x: l[0], y: l[1] } })), s.trigger(new e.Event(r, { type: "tapdrag", cyPosition: { x: l[0], y: l[1] } })), s.trigger(new e.Event(r, { type: "vmousemove", cyPosition: { x: l[0], y: l[1] } })))), Y != de && (de && de.trigger(new e.Event(r, { type: "tapdragout", cyPosition: { x: l[0], y: l[1] } })), Y && Y.trigger(new e.Event(r, { type: "tapdragover", cyPosition: { x: l[0], y: l[1] } }))), t.touchData.last = Y; for (var W = 0; W < l.length; W++) l[W] && t.touchData.startPosition[W] && Math.abs(l[W] - t.touchData.startPosition[W]) > 4 && (t.touchData.singleTouchMoved = !0); if (o && (null == ce || ce.isEdge()) && s.panningEnabled() && s.userPanningEnabled()) { t.swipePanning ? s.panBy({ x: _[0] * c, y: _[1] * c }) : L >= t.touchTapThreshold2 && (t.swipePanning = !0, s.panBy({ x: D * c, y: P * c })), ce && (ce.unactivate(), t.data.bgActivePosistion || (t.data.bgActivePosistion = { x: l[0], y: l[1] }), d[n.SELECT_BOX] = !0, t.touchData.start = null); var m = t.projectIntoViewport(r.touches[0].clientX, r.touches[0].clientY); l[0] = m[0], l[1] = m[1] } } for (var E = 0; E < l.length; E++) u[E] = l[E] }, 1e3 / 30, { trailing: !0 }), !1), t.registerBinding(window, "touchcancel", function(e) { var n = t.touchData.start; t.touchData.capture = !1, n && n.unactivate() }), t.registerBinding(window, "touchend", function(r) { var i = t.touchData.start, a = t.touchData.capture; if (a) { t.touchData.capture = !1, r.preventDefault(); var s = t.data.select; t.swipePanning = !1, t.hoverData.draggingEles = !1; var l = t.data.cy, u = l.zoom(), c = t.touchData.now, d = t.touchData.earlier, h = t.data.canvasNeedsRedraw; if (r.touches[0]) { var p = t.projectIntoViewport(r.touches[0].clientX, r.touches[0].clientY); c[0] = p[0], c[1] = p[1] } if (r.touches[1]) { var p = t.projectIntoViewport(r.touches[1].clientX, r.touches[1].clientY); c[2] = p[0], c[3] = p[1] } if (r.touches[2]) { var p = t.projectIntoViewport(r.touches[2].clientX, r.touches[2].clientY); c[4] = p[0], c[5] = p[1] } i && i.unactivate(); var f; if (t.touchData.cxt) { if (f = new e.Event(r, { type: "cxttapend", cyPosition: { x: c[0], y: c[1] } }), i ? i.trigger(f) : l.trigger(f), !t.touchData.cxtDragged) { var v = new e.Event(r, { type: "cxttap", cyPosition: { x: c[0], y: c[1] } }); i ? i.trigger(v) : l.trigger(v) } return t.touchData.start && (t.touchData.start._private.grabbed = !1), t.touchData.cxt = !1, t.touchData.start = null, void t.redraw() } if (!r.touches[2] && l.boxSelectionEnabled() && t.touchData.selecting) { t.touchData.selecting = !1, clearTimeout(this.threeFingerSelectTimeout); var g = [], y = t.getAllInBox(s[0], s[1], s[2], s[3]); s[0] = void 0, s[1] = void 0, s[2] = void 0, s[3] = void 0, s[4] = 0, h[n.SELECT_BOX] = !0; for (var m = 0; m < y.length; m++) y[m]._private.selectable && g.push(y[m]); var x = new e.Collection(l, g); "single" === l.selectionType() && l.$(":selected").unmerge(x).unselect(), x.select(), x.length > 0 ? h[n.NODE] = !0 : t.redraw() } var b = !1; if (null != i && (i._private.active = !1, b = !0, i.unactivate()), r.touches[2]) t.data.bgActivePosistion = void 0, h[n.SELECT_BOX] = !0; else if (r.touches[1]); else if (r.touches[0]); else if (!r.touches[0]) { t.data.bgActivePosistion = void 0, h[n.SELECT_BOX] = !0; var w = t.dragData.touchDragEles; if (null != i) { var _ = i._private.grabbed; o(w), h[n.DRAG] = !0, h[n.NODE] = !0, _ && i.trigger("free"), i.trigger(new e.Event(r, { type: "touchend", cyPosition: { x: c[0], y: c[1] } })).trigger(new e.Event(r, { type: "tapend", cyPosition: { x: c[0], y: c[1] } })).trigger(new e.Event(r, { type: "vmouseup", cyPosition: { x: c[0], y: c[1] } })), i.unactivate(), t.touchData.start = null } else { var E = t.findNearestElement(c[0], c[1], !0, !0); null != E && E.trigger(new e.Event(r, { type: "touchend", cyPosition: { x: c[0], y: c[1] } })).trigger(new e.Event(r, { type: "tapend", cyPosition: { x: c[0], y: c[1] } })).trigger(new e.Event(r, { type: "vmouseup", cyPosition: { x: c[0], y: c[1] } })), null == E && l.trigger(new e.Event(r, { type: "touchend", cyPosition: { x: c[0], y: c[1] } })).trigger(new e.Event(r, { type: "tapend", cyPosition: { x: c[0], y: c[1] } })).trigger(new e.Event(r, { type: "vmouseup", cyPosition: { x: c[0], y: c[1] } })) } var T = t.touchData.startPosition[0] - c[0], S = T * T, C = t.touchData.startPosition[1] - c[1], k = C * C, D = S + k, N = D * u * u; null != i && !t.dragData.didDrag && i._private.selectable && N < t.touchTapThreshold2 && !t.pinching && ("single" === l.selectionType() ? (l.$(":selected").unmerge(i).unselect(), i.select()) : i.selected() ? i.unselect() : i.select(), b = !0, h[n.NODE] = !0), t.touchData.singleTouchMoved === !1 && (i ? i.trigger(new e.Event(r, { type: "tap", cyPosition: { x: c[0], y: c[1] } })).trigger(new e.Event(r, { type: "vclick", cyPosition: { x: c[0], y: c[1] } })) : l.trigger(new e.Event(r, { type: "tap", cyPosition: { x: c[0], y: c[1] } })).trigger(new e.Event(r, { type: "vclick", cyPosition: { x: c[0], y: c[1] } }))), t.touchData.singleTouchMoved = !0 } for (var P = 0; P < c.length; P++) d[P] = c[P]; t.dragData.didDrag = !1, 0 === r.touches.length && (t.touchData.dragDelta = []), b && i && i.updateStyle(!1), r.touches.length < 2 && (t.pinching = !1, h[n.NODE] = !0, t.redraw()) } }, !1) } }(cytoscape), function(e) { "use strict"; function t(t, n) { a[t] = { points: n, draw: function(e, n, i, o, s) { r.drawPolygon(e, n, i, o, s, a[t].points) }, drawPath: function(e, n, i, o, s) { r.drawPolygonPath(e, n, i, o, s, a[t].points) }, intersectLine: function(n, r, i, o, s, l, u) { return e.math.polygonIntersectLine(s, l, a[t].points, n, r, i / 2, o / 2, u) }, intersectBox: function(n, r, i, o, s, l, u, c, d) { var h = a[t].points; return e.math.boxIntersectPolygon(n, r, i, o, h, s, l, u, c, [0, -1], d) }, checkPoint: function(n, r, i, o, s, l, u) { return e.math.pointInsidePolygon(n, r, a[t].points, l, u, o, s, [0, -1], i) } } } for (var n = e("renderer", "canvas"), r = n.prototype, i = n.usePaths(), a = n.nodeShapes = {}, o = Math.sin(0), s = Math.cos(0), l = {}, u = {}, c = .1, d = 0 * Math.PI; d < 2 * Math.PI; d += c) l[d] = Math.sin(d), u[d] = Math.cos(d); a.ellipse = { draw: function(e, t, n, r, i) { a.ellipse.drawPath(e, t, n, r, i), e.fill() }, drawPath: function(e, t, n, r, a) { if (i) { e.beginPath && e.beginPath(); for (var d, h, p = r / 2, f = a / 2, v = 0 * Math.PI; v < 2 * Math.PI; v += c) d = t - p * l[v] * o + p * u[v] * s, h = n + f * u[v] * o + f * l[v] * s, 0 === v ? e.moveTo(d, h) : e.lineTo(d, h); e.closePath() } else e.beginPath && e.beginPath(), e.translate(t, n), e.scale(r / 2, a / 2), e.arc(0, 0, 1, 0, 2 * Math.PI * .999, !1), e.closePath(), e.scale(2 / r, 2 / a), e.translate(-t, -n) }, intersectLine: function(t, n, r, i, a, o, s) { var l = e.math.intersectLineEllipse(a, o, t, n, r / 2 + s, i / 2 + s); return l }, intersectBox: function(t, n, r, i, a, o, s, l, u) { return e.math.boxIntersectEllipse(t, n, r, i, u, a, o, s, l) }, checkPoint: function(e, t, n, r, i, a, o) { return e -= a, t -= o, e /= r / 2 + n, t /= i / 2 + n, Math.pow(e, 2) + Math.pow(t, 2) <= 1 } }, t("triangle", e.math.generateUnitNgonPointsFitToSquare(3, 0)), t("square", e.math.generateUnitNgonPointsFitToSquare(4, 0)), a.rectangle = a.square, a.roundrectangle = { points: e.math.generateUnitNgonPointsFitToSquare(4, 0), draw: function(e, t, n, i, a) { r.drawRoundRectangle(e, t, n, i, a, 10) }, drawPath: function(e, t, n, i, a) { r.drawRoundRectanglePath(e, t, n, i, a, 10) }, intersectLine: function(t, n, r, i, a, o, s) { return e.math.roundRectangleIntersectLine(a, o, t, n, r, i, s) }, intersectBox: function(t, n, r, i, a, o, s, l, u) { return e.math.roundRectangleIntersectBox(t, n, r, i, a, o, s, l, u) }, checkPoint: function(t, n, r, i, o, s, l) { var u = e.math.getRoundRectangleRadius(i, o); if (e.math.pointInsidePolygon(t, n, a.roundrectangle.points, s, l, i, o - 2 * u, [0, -1], r)) return !0; if (e.math.pointInsidePolygon(t, n, a.roundrectangle.points, s, l, i - 2 * u, o, [0, -1], r)) return !0; var c = function(e, t, n, r, i, a, o) { return e -= n, t -= r, e /= i / 2 + o, t /= a / 2 + o, Math.pow(e, 2) + Math.pow(t, 2) <= 1 }; return c(t, n, s - i / 2 + u, l - o / 2 + u, 2 * u, 2 * u, r) ? !0 : c(t, n, s + i / 2 - u, l - o / 2 + u, 2 * u, 2 * u, r) ? !0 : c(t, n, s + i / 2 - u, l + o / 2 - u, 2 * u, 2 * u, r) ? !0 : c(t, n, s - i / 2 + u, l + o / 2 - u, 2 * u, 2 * u, r) ? !0 : !1 } }, t("diamond", [0, 1, 1, 0, 0, -1, -1, 0]), t("pentagon", e.math.generateUnitNgonPointsFitToSquare(5, 0)), t("hexagon", e.math.generateUnitNgonPointsFitToSquare(6, 0)), t("heptagon", e.math.generateUnitNgonPointsFitToSquare(7, 0)), t("octagon", e.math.generateUnitNgonPointsFitToSquare(8, 0)); var h = new Array(20), p = e.math.generateUnitNgonPoints(5, 0), f = e.math.generateUnitNgonPoints(5, Math.PI / 5), v = .5 * (3 - Math.sqrt(5)); v *= 1.57; for (var d = 0; d < f.length / 2; d++) f[2 * d] *= v, f[2 * d + 1] *= v; for (var d = 0; 5 > d; d++) h[4 * d] = p[2 * d], h[4 * d + 1] = p[2 * d + 1], h[4 * d + 2] = f[2 * d], h[4 * d + 3] = f[2 * d + 1]; h = e.math.fitPolygonToSquare(h), t("star", h), t("vee", [-1, -1, 0, -.333, 1, -1, 0, 1]), t("rhomboid", [-1, -1, .333, -1, 1, 1, -.333, 1]) }(cytoscape), function(e) { "use strict"; function t(t) { this._private = {}, this._private.options = e.util.extend({}, n, t) } var n = { animate: !0, maxSimulationTime: 4e3, fit: !0, padding: 30, boundingBox: void 0, ungrabifyWhileSimulating: !1, ready: void 0, stop: void 0, repulsion: void 0, stiffness: void 0, friction: void 0, gravity: !0, fps: void 0, precision: void 0, nodeMass: void 0, edgeLength: void 0, stepSize: .1, stableEnergy: function(e) { var t = e; return t.max <= .5 || t.mean <= .3 }, infinite: !1 }; t.prototype.run = function() { var t = this, n = this._private.options; return e.util.require("arbor", function(r) { function i(e, t) { return null == t ? void 0 : "function" == typeof t ? t.apply(e, [e._private.data, { nodes: u.length, edges: c.length, element: e }]) : t } function a(e) { if (!e.isFullAutoParent()) { var t = e._private.data.id, r = i(e, n.nodeMass), a = e._private.locked, o = e.position(), s = p.fromScreen({ x: o.x, y: o.y }); e.scratch().arbor = p.addNode(t, { element: e, mass: r, fixed: a, x: a && s ? s.x : void 0, y: a && s ? s.y : void 0 }) } } function o(e) { var t = e.source().id(), r = e.target().id(), a = i(e, n.edgeLength); e.scratch().arbor = p.addEdge(t, r, { length: a }) } var s = n.cy, l = n.eles, u = l.nodes().not(":parent"), c = l.edges(), d = e.util.makeBoundingBox(n.boundingBox ? n.boundingBox : { x1: 0, y1: 0, w: s.width(), h: s.height() }), h = !1; if (t.trigger({ type: "layoutstart", layout: t }), void 0 !== n.liveUpdate && (n.animate = n.liveUpdate), l.nodes().size() <= 1) return n.fit && s.reset(), l.nodes().position({ x: Math.round((d.x1 + d.x2) / 2), y: Math.round((d.y1 + d.y2) / 2) }), t.one("layoutready", n.ready), t.trigger({ type: "layoutready", layout: t }), t.one("layoutstop", n.stop), void t.trigger({ type: "layoutstop", layout: t }); var p = t._private.system = r.ParticleSystem(); p.parameters({ repulsion: n.repulsion, stiffness: n.stiffness, friction: n.friction, gravity: n.gravity, fps: n.fps, dt: n.dt, precision: n.precision }), n.animate && n.fit && s.fit(d, n.padding); var f, v = 250, g = !1, y = +new Date, m = { init: function(e) {}, redraw: function() { var e = p.energy(); if (!n.infinite && null != n.stableEnergy && null != e && e.n > 0 && n.stableEnergy(e)) return void t.stop(); n.infinite || v == 1 / 0 || (clearTimeout(f), f = setTimeout(S, v)); var r = s.collection(); p.eachNode(function(e, t) { var n = e.data, i = n.element; null != i && (i.locked() || i.grabbed() || (i.silentPosition({ x: d.x1 + t.x, y: d.y1 + t.y }), r.merge(i))) }), n.animate && r.length > 0 && (h = !0, r.rtrigger("position"), n.fit && s.fit(n.padding), y = +new Date, h = !1), g || (g = !0, t.one("layoutready", n.ready), t.trigger({ type: "layoutready", layout: t })) } }; p.renderer = m, p.screenSize(d.w, d.h), p.screenPadding(n.padding, n.padding, n.padding, n.padding), p.screenStep(n.stepSize); var x; u.on("grab free position", x = function(e) { if (!h) { var t = this.position(), i = p.fromScreen(t); if (i) { var a = r.Point(i.x, i.y), o = n.padding; switch (d.x1 + o <= t.x && t.x <= d.x2 - o && d.y1 + o <= t.y && t.y <= d.y2 - o && (this.scratch().arbor.p = a), e.type) { case "grab": this.scratch().arbor.fixed = !0; break; case "free": this.scratch().arbor.fixed = !1 } } } }); var b; u.on("lock unlock", b = function(e) { node.scratch().arbor.fixed = node.locked() }); var w; l.on("remove", w = function(e) {}); var _; s.on("add", "*", _ = function() {}); var E; s.on("resize", E = function() { if (null == n.boundingBox && null != t._private.system) { var e = s.width(), r = s.height(); p.screenSize(e, r) } }), u.each(function(e, t) { a(t) }), c.each(function(e, t) { o(t) }); var T = u.filter(":grabbable"); n.ungrabifyWhileSimulating && T.ungrabify(); var S = t._private.doneHandler = function() { t._private.doneHandler = null, n.animate || (n.fit && s.reset(), u.rtrigger("position")), u.off("grab free position", x), u.off("lock unlock", b), l.off("remove", w), s.off("add", "*", _), s.off("resize", E), n.ungrabifyWhileSimulating && T.grabify(), t.one("layoutstop", n.stop), t.trigger({ type: "layoutstop", layout: t }) }; p.start(), !n.infinite && null != n.maxSimulationTime && n.maxSimulationTime > 0 && n.maxSimulationTime !== 1 / 0 && setTimeout(function() { t.stop() }, n.maxSimulationTime) }), this }, t.prototype.stop = function() { return null != this._private.system && this._private.system.stop(), this._private.doneHandler && this._private.doneHandler(), this }, e("layout", "arbor", t) }(cytoscape), function(e) { "use strict"; function t(t) { this.options = e.util.extend({}, n, t) } var n = { fit: !0, directed: !1, padding: 30, circle: !1, spacingFactor: 1.75, boundingBox: void 0, avoidOverlap: !0, roots: void 0, maximalAdjustments: 0, animate: !1, animationDuration: 500, ready: void 0, stop: void 0 }; t.prototype.run = function() { var t, n = this.options, r = n, i = n.cy, a = r.eles, o = a.nodes().not(":parent"), s = a, l = e.util.makeBoundingBox(r.boundingBox ? r.boundingBox : { x1: 0, y1: 0, w: i.width(), h: i.height() }); if (e.is.elementOrCollection(r.roots)) t = r.roots; else if (e.is.array(r.roots)) { for (var u = [], c = 0; c < r.roots.length; c++) { var d = r.roots[c], h = i.getElementById(d); u.push(h) } t = new e.Collection(i, u) } else if (e.is.string(r.roots)) t = i.$(r.roots); else if (r.directed) t = o.roots(); else { for (var p = [], f = o; f.length > 0;) { var v = i.collection(); a.bfs({ roots: f[0], visit: function(e, t, n, r, i) { v = v.add(n) }, directed: !1 }), f = f.not(v), p.push(v) } t = i.collection(); for (var c = 0; c < p.length; c++) { var g = p[c], y = g.maxDegree(!1), m = g.filter(function() { return this.degree(!1) === y }); t = t.add(m) } } var x = [], b = {}, w = {}, _ = {}, E = {}, T = {}; s.bfs({ roots: t, directed: r.directed, visit: function(e, t, n, r, i) { var a = this[0], o = a.id(); if (x[t] || (x[t] = []), x[t].push(a), b[o] = !0, w[o] = t, _[o] = i, E[o] = r, i) { var s = i.id(), l = T[s] = T[s] || []; l.push(n) } } }); for (var S = [], c = 0; c < o.length; c++) { var h = o[c]; b[h.id()] || S.push(h) } for (var C = 3 * S.length, k = 0; 0 !== S.length && C > k;) { for (var D = S.shift(), N = D.neighborhood().nodes(), P = !1, c = 0; c < N.length; c++) { var M = w[N[c].id()]; if (void 0 !== M) { x[M].push(D), P = !0; break } } P || S.push(D), k++ } for (; 0 !== S.length;) { var D = S.shift(), P = !1; P || (0 === x.length && x.push([]), x[0].push(D)) } var B = function() { for (var e = 0; e < x.length; e++) for (var t = x[e], n = 0; n < t.length; n++) { var r = t[n]; r._private.scratch.breadthfirst = { depth: e, index: n } } }; B(); for (var L = function(e) { for (var t, n = e.connectedEdges(function() { return this.data("target") === e.id() }), r = e._private.scratch.breadthfirst, i = 0, a = 0; a < n.length; a++) { var o = n[a], s = o.source()[0], l = s._private.scratch.breadthfirst; r.depth <= l.depth && i < l.depth && (i = l.depth, t = s) } return t }, O = 0; O < r.maximalAdjustments; O++) { for (var A = x.length, I = [], c = 0; A > c; c++) for (var M = x[c], z = M.length, R = 0; z > R; R++) { var h = M[R], j = h._private.scratch.breadthfirst, F = L(h); F && (j.intEle = F, I.push(h)) } for (var c = 0; c < I.length; c++) { var h = I[c], j = h._private.scratch.breadthfirst, F = j.intEle, q = F._private.scratch.breadthfirst; x[j.depth].splice(j.index, 1); for (var V = q.depth + 1; V > x.length - 1;) x.push([]); x[V].push(h), j.depth = V, j.index = x[V].length - 1 } B() } var X = 0; if (r.avoidOverlap) { for (var c = 0; c < o.length; c++) { var H = o[c].outerWidth(), Y = o[c].outerHeight(); X = Math.max(X, H, Y) } X *= r.spacingFactor } for (var $ = {}, W = function(e) { if ($[e.id()]) return $[e.id()]; for (var t = e._private.scratch.breadthfirst.depth, n = e.neighborhood().nodes().not(":parent"), r = 0, i = 0, a = 0; a < n.length; a++) { var o = n[a], s = o._private.scratch.breadthfirst, l = s.index, u = s.depth, c = x[u].length; (t > u || 0 === t) && (r += l / c, i++) } return i = Math.max(1, i), r /= i, 0 === i && (r = void 0), $[e.id()] = r, r }, U = function(e, t) { var n = W(e), r = W(t); return n - r }, Z = 0; 3 > Z; Z++) { for (var c = 0; c < x.length; c++) x[c] = x[c].sort(U); B() } for (var G = 0, c = 0; c < x.length; c++) G = Math.max(x[c].length, G); for (var K = { x: l.x1 + l.w / 2, y: l.x1 + l.h / 2 }, J = function(e, t) { var n = e._private.scratch.breadthfirst, i = n.depth, a = n.index, o = x[i].length, s = Math.max(l.w / (o + 1), X), u = Math.max(l.h / (x.length + 1), X), c = Math.min(l.w / 2 / x.length, l.h / 2 / x.length); if (c = Math.max(c, X), r.circle) { if (r.circle) { var d = c * i + c - (x.length > 0 && x[0].length <= 3 ? c / 2 : 0), h = 2 * Math.PI / x[i].length * a; return 0 === i && 1 === x[0].length && (d = 1), { x: K.x + d * Math.cos(h), y: K.y + d * Math.sin(h) } } return { x: K.x + (a + 1 - (o + 1) / 2) * s, y: (i + 1) * u } } var p = { x: K.x + (a + 1 - (o + 1) / 2) * s, y: (i + 1) * u }; return t ? p : p }, Q = {}, c = x.length - 1; c >= 0; c--) for (var M = x[c], R = 0; R < M.length; R++) { var D = M[R]; Q[D.id()] = J(D, c === x.length - 1) } return o.layoutPositions(this, r, function() { return Q[this.id()] }), this }, e("layout", "breadthfirst", t) }(cytoscape), function(e) { "use strict"; function t(t) { this.options = e.util.extend({}, n, t) } var n = { fit: !0, padding: 30, boundingBox: void 0, avoidOverlap: !0, radius: void 0, startAngle: 1.5 * Math.PI, counterclockwise: !1, sort: void 0, animate: !1, animationDuration: 500, ready: void 0, stop: void 0 }; t.prototype.run = function() { var t = this.options, n = t, r = t.cy, i = n.eles, a = i.nodes().not(":parent"); n.sort && (a = a.sort(n.sort)); for (var o, s = e.util.makeBoundingBox(n.boundingBox ? n.boundingBox : { x1: 0, y1: 0, w: r.width(), h: r.height() }), l = { x: s.x1 + s.w / 2, y: s.y1 + s.h / 2 }, u = n.startAngle, c = 2 * Math.PI / a.length, d = 0, h = 0; h < a.length; h++) { var p = a[h].outerWidth(), f = a[h].outerHeight(); d = Math.max(d, p, f) } if (o = e.is.number(n.radius) ? n.radius : a.length <= 1 ? 0 : Math.min(s.h, s.w) / 2 - d, a.length > 1 && n.avoidOverlap) { d *= 1.75; var c = 2 * Math.PI / a.length, v = Math.cos(c) - Math.cos(0), g = Math.sin(c) - Math.sin(0), y = Math.sqrt(d * d / (v * v + g * g)); o = Math.max(y, o) } var m = function(e, t) { var r = o * Math.cos(u), i = o * Math.sin(u), a = { x: l.x + r, y: l.y + i }; return u = n.counterclockwise ? u - c : u + c, a }; return a.layoutPositions(this, n, m), this }, e("layout", "circle", t) }(cytoscape), function(e) { "use strict"; function t(t) { this.options = e.util.extend(!0, {}, n, t) } var n = { animate: !0, refresh: 1, maxSimulationTime: 4e3, ungrabifyWhileSimulating: !1, fit: !0, padding: 30, boundingBox: void 0, ready: function() {}, stop: function() {}, randomize: !1, avoidOverlap: !0, handleDisconnected: !0, nodeSpacing: function(e) { return 10 }, flow: void 0, alignment: void 0, edgeLength: void 0, edgeSymDiffLength: void 0, edgeJaccardLength: void 0, unconstrIter: void 0, userConstIter: void 0, allConstIter: void 0, infinite: !1 }; t.prototype.run = function() { var t = this, n = this.options; return t.manuallyStopped = !1, e.util.require("cola", function(r) { var i = n.cy, a = n.eles, o = a.nodes(), s = a.edges(), l = !1, u = e.util.makeBoundingBox(n.boundingBox ? n.boundingBox : { x1: 0, y1: 0, w: i.width(), h: i.height() }), c = function(t, n) { if (e.is.fn(t)) { var r = t; return r.apply(n, [n]) } return t }, d = function() { for (var t = { min: 1 / 0, max: -(1 / 0) }, r = { min: 1 / 0, max: -(1 / 0) }, a = 0; a < o.length; a++) { var s = o[a], d = s._private.scratch.cola; if (t.min = Math.min(t.min, d.x || 0), t.max = Math.max(t.max, d.x || 0), r.min = Math.min(r.min, d.y || 0), r.max = Math.max(r.max, d.y || 0), !d.updatedDims) { var h = s.boundingBox(), f = c(n.nodeSpacing, s); d.width = h.w + 2 * f, d.height = h.h + 2 * f } } o.positions(function(n, i) { var a, o = i._private.scratch.cola; return i.grabbed() || i.isParent() || (a = { x: u.x1 + o.x - t.min, y: u.y1 + o.y - r.min }, e.is.number(a.x) && e.is.number(a.y) || (a = void 0)), a }), o.updateCompoundBounds(), l || (p(), l = !0), n.fit && i.fit(n.padding) }, h = function() { n.ungrabifyWhileSimulating && y.grabify(), o.off("grab free position", m), o.off("lock unlock", x), t.one("layoutstop", n.stop), t.trigger({ type: "layoutstop", layout: t }) }, p = function() { t.one("layoutready", n.ready), t.trigger({ type: "layoutready", layout: t }) }, f = n.refresh, v = 1; n.refresh < 0 ? (v = Math.abs(n.refresh), f = 1) : f = Math.max(1, f); var g = t.adaptor = r.adaptor({ trigger: function(e) { var t = r.EventType ? r.EventType.tick : null, i = r.EventType ? r.EventType.end : null; switch (e.type) { case "tick": case t: n.animate && d(); break; case "end": case i: d(), n.infinite || h() } }, kick: function() { var r = function() { if (t.manuallyStopped) return h(), !0; var e = g.tick(); return e && n.infinite && g.resume(), e }, i = function() { for (var e, t = 0; f > t && !e; t++) e = e || r(); return e }; if (n.animate) { var a = function() { i() || e.util.requestAnimationFrame(a) }; e.util.requestAnimationFrame(a) } else for (; !r();); }, on: function(e, t) {}, drag: function() {} }); t.adaptor = g; var y = o.filter(":grabbable"); n.ungrabifyWhileSimulating && y.ungrabify(); var m; o.on("grab free position", m = function(t) { var n = this, r = n._private.scratch.cola, i = n._private.position; switch (n.grabbed() ? (r.x = i.x - u.x1, r.y = i.y - u.y1, g.dragstart(r)) : e.is.number(r.x) && e.is.number(r.y) && (i.x = r.x + u.x1, i.y = r.y + u.y1), t.type) { case "grab": g.dragstart(r), g.resume(); break; case "free": g.dragend(r) } }); var x; o.on("lock unlock", x = function(e) { var t = this, n = t._private.scratch.cola; t.locked() ? g.dragstart(n) : g.dragend(n) }); var b = o.stdFilter(function(e) { return !e.isParent() }); if (g.nodes(b.map(function(e, t) { var r = c(n.nodeSpacing, e), i = e.position(), a = e.boundingBox(), o = e._private.scratch.cola = { x: n.randomize || void 0 === i.x ? Math.round(Math.random() * u.w) : i.x, y: n.randomize || void 0 === i.y ? Math.round(Math.random() * u.h) : i.y, width: a.w + 2 * r, height: a.h + 2 * r, index: t }; return o })), n.alignment) { var w = [], _ = []; b.forEach(function(e) { var t = c(n.alignment, e), r = e._private.scratch.cola, i = r.index; t && (null != t.x && w.push({ node: i, offset: t.x }), null != t.y && _.push({ node: i, offset: t.y })) }); var E = []; w.length > 0 && E.push({ type: "alignment", axis: "x", offsets: w }), _.length > 0 && E.push({ type: "alignment", axis: "y", offsets: _ }), g.constraints(E) } g.groups(o.stdFilter(function(e) { return e.isParent() }).map(function(e, t) { var r = e._private.style, i = c(n.nodeSpacing, e), a = r["padding-left"].pxValue + i, o = r["padding-right"].pxValue + i, s = r["padding-top"].pxValue + i, l = r["padding-bottom"].pxValue + i; return e._private.scratch.cola = { index: t, padding: Math.max(a, o, s, l), leaves: e.descendants().stdFilter(function(e) { return !e.isParent() }).map(function(e) { return e[0]._private.scratch.cola.index }) }, e }).map(function(e) { return e._private.scratch.cola.groups = e.descendants().stdFilter(function(e) { return e.isParent() }).map(function(e) { return e._private.scratch.cola.index }), e._private.scratch.cola })); var T, S; null != n.edgeLength ? (T = n.edgeLength, S = "linkDistance") : null != n.edgeSymDiffLength ? (T = n.edgeSymDiffLength, S = "symmetricDiffLinkLengths") : null != n.edgeJaccardLength ? (T = n.edgeJaccardLength, S = "jaccardLinkLengths") : (T = 100, S = "linkDistance"); var C = function(e) { return e.calcLength }; if (g.links(s.stdFilter(function(e) { return !e.source().isParent() && !e.target().isParent() }).map(function(e, t) { var n = e._private.scratch.cola = { source: e.source()[0]._private.scratch.cola.index, target: e.target()[0]._private.scratch.cola.index }; return null != T && (n.calcLength = c(T, e)), n })), g.size([u.w, u.h]), null != T && g[S](C), n.flow) { var k, D = "y", N = 50; e.is.string(n.flow) ? k = { axis: n.flow, minSeparation: N } : e.is.number(n.flow) ? k = { axis: D, minSeparation: n.flow } : e.is.plainObject(n.flow) ? (k = n.flow, k.axis = k.axis || D, k.minSeparation = null != k.minSeparation ? k.minSeparation : N) : k = { axis: D, minSeparation: N }, g.flowLayout(k.axis, k.minSeparation) } t.trigger({ type: "layoutstart", layout: t }), g.avoidOverlaps(n.avoidOverlap).handleDisconnected(n.handleDisconnected).start(n.unconstrIter, n.userConstIter, n.allConstIter), n.infinite || setTimeout(function() { t.manuallyStopped || g.stop() }, n.maxSimulationTime) }), this }, t.prototype.stop = function() { return this.adaptor && (this.manuallyStopped = !0, this.adaptor.stop()), this }, e("layout", "cola", t) }(cytoscape), function(e) { "use strict"; function t(t) { this.options = e.util.extend({}, n, t) } var n = { fit: !0, padding: 30, startAngle: 1.5 * Math.PI, counterclockwise: !1, minNodeSpacing: 10, boundingBox: void 0, avoidOverlap: !0, height: void 0, width: void 0, concentric: function(e) { return e.degree() }, levelWidth: function(e) { return e.maxDegree() / 4 }, animate: !1, animationDuration: 500, ready: void 0, stop: void 0 }; t.prototype.run = function() { for (var t = this.options, n = t, r = t.cy, i = n.eles, a = i.nodes().not(":parent"), o = e.util.makeBoundingBox(n.boundingBox ? n.boundingBox : { x1: 0, y1: 0, w: r.width(), h: r.height() }), s = { x: o.x1 + o.w / 2, y: o.y1 + o.h / 2 }, l = [], u = n.startAngle, c = 0, d = 0; d < a.length; d++) { var h, p = a[d]; h = n.concentric.apply(p, [p]), l.push({ value: h, node: p }), p._private.scratch.concentric = h } a.updateStyle(); for (var d = 0; d < a.length; d++) { var p = a[d]; c = Math.max(c, p.outerWidth(), p.outerHeight()) } l.sort(function(e, t) { return t.value - e.value }); for (var f = n.levelWidth(a), v = [ [] ], g = v[0], d = 0; d < l.length; d++) { var y = l[d]; if (g.length > 0) { var m = Math.abs(g[0].value - y.value); m >= f && (g = [], v.push(g)) } g.push(y) } var x = {}, b = 0, w = c + n.minNodeSpacing; if (!n.avoidOverlap) { var _ = v.length > 0 && v[0].length > 1, E = Math.min(o.w, o.h) / 2 - w, T = E / (v.length + _ ? 1 : 0); w = Math.min(w, T) } for (var d = 0; d < v.length; d++) { var S = v[d], C = 2 * Math.PI / S.length; if (S.length > 1 && n.avoidOverlap) { var k = Math.cos(C) - Math.cos(0), D = Math.sin(C) - Math.sin(0), N = Math.sqrt(w * w / (k * k + D * D)); b = Math.max(N, b) } for (var P = 0; P < S.length; P++) { var y = S[P], u = n.startAngle + (n.counterclockwise ? -1 : 1) * C * P, M = { x: s.x + b * Math.cos(u), y: s.y + b * Math.sin(u) }; x[y.node.id()] = M } b += w } return a.layoutPositions(this, n, function() { var e = this.id(); return x[e] }), this }, e("layout", "concentric", t) }(cytoscape), function(e) { "use strict"; function t(t) { this.options = e.util.extend({}, r, t) } var n, r = { ready: function() {}, stop: function() {}, animate: !0, refresh: 4, fit: !0, padding: 30, boundingBox: void 0, randomize: !0, debug: !1, nodeRepulsion: 4e5, nodeOverlap: 10, idealEdgeLength: 10, edgeElasticity: 100, nestingFactor: 5, gravity: 250, numIter: 100, initialTemp: 200, coolingFactor: .95, minTemp: 1 }; t.prototype.run = function() { var t = this.options, r = t.cy, a = this; a.stopped = !1, a.trigger({ type: "layoutstart", layout: a }), n = !0 === t.debug ? !0 : !1; var o = new Date, d = i(r, a, t); n && s(d), !0 === t.randomize && l(d, r), m(d, r, t); var h = function(e) { return a.stopped ? !1 : (c(d, r, t, e), d.temperature = d.temperature * t.coolingFactor, d.temperature < t.minTemp ? !1 : !0) }, p = function() { u(d, r, t), !0 === t.fit && r.fit(t.padding); var e = new Date; console.info("Layout took " + (e - o) + " ms"), a.one("layoutstop", t.stop), a.trigger({ type: "layoutstop", layout: a }) }; if (t.animate) { var f = 0, v = function() { for (var n, i = 0; i < t.refresh && f < t.numIter;) { var n = h(f); if (n === !1) break; i++, f++ } u(d, r, t), t.fit && r.fit(t.padding), n !== !1 && f + 1 < t.numIter ? e.util.requestAnimationFrame(v) : p() }; e.util.requestAnimationFrame(v) } else { for (var f = 0; f < t.numIter && h(f) !== !1; f++); p() } return this }, t.prototype.stop = function() { return this.stopped = !0, this }; var i = function(t, n, r) { for (var i = r.eles.edges(), o = r.eles.nodes(), s = { layout: n, layoutNodes: [], idToIndex: {}, nodeSize: o.size(), graphSet: [], indexToGraph: [], layoutEdges: [], edgeSize: i.size(), temperature: r.initialTemp, clientWidth: t.width(), clientHeight: t.width(), boundingBox: e.util.makeBoundingBox(r.boundingBox ? r.boundingBox : { x1: 0, y1: 0, w: t.width(), h: t.height() }) }, l = 0; l < s.nodeSize; l++) { var u = {}; u.id = o[l].data("id"), u.parentId = o[l].data("parent"), u.children = [], u.positionX = o[l].position("x"), u.positionY = o[l].position("y"), u.offsetX = 0, u.offsetY = 0, u.height = o[l].height(), u.width = o[l].width(), u.maxX = u.positionX + u.width / 2, u.minX = u.positionX - u.width / 2, u.maxY = u.positionY + u.height / 2, u.minY = u.positionY - u.height / 2, u.padLeft = o[l]._private.style["padding-left"].pxValue, u.padRight = o[l]._private.style["padding-right"].pxValue, u.padTop = o[l]._private.style["padding-top"].pxValue, u.padBottom = o[l]._private.style["padding-bottom"].pxValue, s.layoutNodes.push(u), s.idToIndex[u.id] = l } for (var c = [], d = 0, h = -1, p = [], l = 0; l < s.nodeSize; l++) { var f = s.layoutNodes[l], v = f.parentId; null != v ? s.layoutNodes[s.idToIndex[v]].children.push(f.id) : (c[++h] = f.id, p.push(f.id)) } for (s.graphSet.push(p); h >= d;) { var g = c[d++], y = s.idToIndex[g], m = s.layoutNodes[y], x = m.children; if (x.length > 0) { s.graphSet.push(x); for (var l = 0; l < x.length; l++) c[++h] = x[l] } } for (var l = 0; l < s.graphSet.length; l++) for (var b = s.graphSet[l], w = 0; w < b.length; w++) { var _ = s.idToIndex[b[w]]; s.indexToGraph[_] = l } for (var l = 0; l < s.edgeSize; l++) { var E = i[l], T = {}; T.id = E.data("id"), T.sourceId = E.data("source"), T.targetId = E.data("target"); var S = r.idealEdgeLength, C = s.idToIndex[T.sourceId], k = s.idToIndex[T.targetId], D = s.indexToGraph[C], N = s.indexToGraph[k]; if (D != N) { for (var P = a(T.sourceId, T.targetId, s), M = s.graphSet[P], B = 0, u = s.layoutNodes[C]; - 1 === $.inArray(u.id, M);) u = s.layoutNodes[s.idToIndex[u.parentId]], B++; for (u = s.layoutNodes[k]; - 1 === $.inArray(u.id, M);) u = s.layoutNodes[s.idToIndex[u.parentId]], B++; S *= B * r.nestingFactor } T.idealLength = S, s.layoutEdges.push(T) } return s }, a = function(e, t, n) { var r = o(e, t, 0, n); return 2 > r.count ? 0 : r.graph }, o = function(e, t, n, r) { var i = r.graphSet[n]; if (-1 < $.inArray(e, i) && -1 < $.inArray(t, i)) return { count: 2, graph: n }; for (var a = 0, s = 0; s < i.length; s++) { var l = i[s], u = r.idToIndex[l], c = r.layoutNodes[u].children; if (0 !== c.length) { var d = r.indexToGraph[r.idToIndex[c[0]]], h = o(e, t, d, r); if (0 !== h.count) { if (1 !== h.count) return h; if (a++, 2 === a) break } } } return { count: a, graph: n } }, s = function(e) { if (n) { console.debug("layoutNodes:"); for (var t = 0; t < e.nodeSize; t++) { var r = e.layoutNodes[t], i = "\nindex: " + t + "\nId: " + r.id + "\nChildren: " + r.children.toString() + "\nparentId: " + r.parentId + "\npositionX: " + r.positionX + "\npositionY: " + r.positionY + "\nOffsetX: " + r.offsetX + "\nOffsetY: " + r.offsetY + "\npadLeft: " + r.padLeft + "\npadRight: " + r.padRight + "\npadTop: " + r.padTop + "\npadBottom: " + r.padBottom; console.debug(i) } console.debug("idToIndex"); for (var t in e.idToIndex) console.debug("Id: " + t + "\nIndex: " + e.idToIndex[t]); console.debug("Graph Set"); for (var a = e.graphSet, t = 0; t < a.length; t++) console.debug("Set : " + t + ": " + a[t].toString()); for (var i = "IndexToGraph", t = 0; t < e.indexToGraph.length; t++) i += "\nIndex : " + t + " Graph: " + e.indexToGraph[t]; console.debug(i), i = "Layout Edges"; for (var t = 0; t < e.layoutEdges.length; t++) { var o = e.layoutEdges[t]; i += "\nEdge Index: " + t + " ID: " + o.id + " SouceID: " + o.sourceId + " TargetId: " + o.targetId + " Ideal Length: " + o.idealLength } console.debug(i), i = "nodeSize: " + e.nodeSize, i += "\nedgeSize: " + e.edgeSize, i += "\ntemperature: " + e.temperature, console.debug(i) } }, l = function(e, t) { for (var n = e.clientWidth, r = e.clientHeight, i = 0; i < e.nodeSize; i++) { var a = e.layoutNodes[i]; a.positionX = Math.random() * n, a.positionY = Math.random() * r } }, u = function(e, t, n) { var r = e.layout, i = n.eles.nodes(), a = e.boundingBox, o = { x1: 1 / 0, x2: -(1 / 0), y1: 1 / 0, y2: -(1 / 0) }; n.boundingBox && (i.forEach(function(t) { var n = e.layoutNodes[e.idToIndex[t.data("id")]]; o.x1 = Math.min(o.x1, n.positionX), o.x2 = Math.max(o.x2, n.positionX), o.y1 = Math.min(o.y1, n.positionY), o.y2 = Math.max(o.y2, n.positionY) }), o.w = o.x2 - o.x1, o.h = o.y2 - o.y1), i.positions(function(t, r) { var i = e.layoutNodes[e.idToIndex[r.data("id")]]; if (n.boundingBox) { var s = (i.positionX - o.x1) / o.w, l = (i.positionY - o.y1) / o.h; return { x: a.x1 + s * a.w, y: a.y1 + l * a.h } } return { x: i.positionX, y: i.positionY } }), !0 !== e.ready && (e.ready = !0, r.one("layoutready", n.ready), r.trigger({ type: "layoutready", layout: this })) }, c = function(e, t, n, r) { d(e, t, n), v(e, t, n), g(e, t, n), y(e, t, n), m(e, t, n) }, d = function(e, t, n) { for (var r = 0; r < e.graphSet.length; r++) for (var i = e.graphSet[r], a = i.length, o = 0; a > o; o++) for (var s = e.layoutNodes[e.idToIndex[i[o]]], l = o + 1; a > l; l++) { var u = e.layoutNodes[e.idToIndex[i[l]]]; h(s, u, e, t, n) } }, h = function(e, t, n, r, i) { var a = t.positionX - e.positionX, o = t.positionY - e.positionY; if (0 !== a || 0 !== o) { var s = f(e, t, a, o); if (s > 0) var l = i.nodeOverlap * s, u = Math.sqrt(a * a + o * o), c = l * a / u, d = l * o / u; else var h = p(e, a, o), v = p(t, -1 * a, -1 * o), g = v.x - h.x, y = v.y - h.y, m = g * g + y * y, u = Math.sqrt(m), l = i.nodeRepulsion / m, c = l * g / u, d = l * y / u; e.offsetX -= c, e.offsetY -= d, t.offsetX += c, t.offsetY += d } }, p = function(e, t, n) { var r = e.positionX, i = e.positionY, a = e.height, o = e.width, s = n / t, l = a / o, u = {}; do { if (0 === t && n > 0) { u.x = r, u.y = i + a / 2; break } if (0 === t && 0 > n) { u.x = r, u.y = i + a / 2; break } if (t > 0 && s >= -1 * l && l >= s) { u.x = r + o / 2, u.y = i + o * n / 2 / t; break } if (0 > t && s >= -1 * l && l >= s) { u.x = r - o / 2, u.y = i - o * n / 2 / t; break } if (n > 0 && (-1 * l >= s || s >= l)) { u.x = r + a * t / 2 / n, u.y = i + a / 2; break } if (0 > n && (-1 * l >= s || s >= l)) { u.x = r - a * t / 2 / n, u.y = i - a / 2; break } } while (!1); return u }, f = function(e, t, n, r) { if (n > 0) var i = e.maxX - t.minX; else var i = t.maxX - e.minX; if (r > 0) var a = e.maxY - t.minY; else var a = t.maxY - e.minY; return i >= 0 && a >= 0 ? Math.sqrt(i * i + a * a) : 0 }, v = function(e, t, n) { for (var r = 0; r < e.edgeSize; r++) { var i = e.layoutEdges[r], a = e.idToIndex[i.sourceId], o = e.layoutNodes[a], s = e.idToIndex[i.targetId], l = e.layoutNodes[s], u = l.positionX - o.positionX, c = l.positionY - o.positionY; if (0 === u && 0 === c) return; var d = p(o, u, c), h = p(l, -1 * u, -1 * c), f = h.x - d.x, v = h.y - d.y, g = Math.sqrt(f * f + v * v), y = Math.pow(i.idealLength - g, 2) / n.edgeElasticity; if (0 !== g) var m = y * f / g, x = y * v / g; else var m = 0, x = 0; o.offsetX += m, o.offsetY += x, l.offsetX -= m, l.offsetY -= x } }, g = function(e, t, n) { for (var r = 0; r < e.graphSet.length; r++) { var i = e.graphSet[r], a = i.length; if (0 === r) var o = e.clientHeight / 2, s = e.clientWidth / 2; else var l = e.layoutNodes[e.idToIndex[i[0]]], u = e.layoutNodes[e.idToIndex[l.parentId]], o = u.positionX, s = u.positionY; for (var c = 0; a > c; c++) { var d = e.layoutNodes[e.idToIndex[i[c]]], h = o - d.positionX, p = s - d.positionY, f = Math.sqrt(h * h + p * p); if (f > 1) { var v = n.gravity * h / f, g = n.gravity * p / f; d.offsetX += v, d.offsetY += g } } } }, y = function(e, t, n) { var r = [], i = 0, a = -1; for (r.push.apply(r, e.graphSet[0]), a += e.graphSet[0].length; a >= i;) { var o = r[i++], s = e.idToIndex[o], l = e.layoutNodes[s], u = l.children; if (0 < u.length) { for (var c = l.offsetX, d = l.offsetY, h = 0; h < u.length; h++) { var p = e.layoutNodes[e.idToIndex[u[h]]]; p.offsetX += c, p.offsetY += d, r[++a] = u[h] } l.offsetX = 0, l.offsetY = 0 } } }, m = function(e, t, n) { for (var r = 0; r < e.nodeSize; r++) { var i = e.layoutNodes[r]; 0 < i.children.length && (i.maxX = void 0, i.minX = void 0, i.maxY = void 0, i.minY = void 0) } for (var r = 0; r < e.nodeSize; r++) { var i = e.layoutNodes[r]; if (!(0 < i.children.length)) { var a = x(i.offsetX, i.offsetY, e.temperature); i.positionX += a.x, i.positionY += a.y, i.offsetX = 0, i.offsetY = 0, i.minX = i.positionX - i.width, i.maxX = i.positionX + i.width, i.minY = i.positionY - i.height, i.maxY = i.positionY + i.height, b(i, e) } } for (var r = 0; r < e.nodeSize; r++) { var i = e.layoutNodes[r]; 0 < i.children.length && (i.positionX = (i.maxX + i.minX) / 2, i.positionY = (i.maxY + i.minY) / 2, i.width = i.maxX - i.minX, i.height = i.maxY - i.minY) } }, x = function(e, t, n) { var r = Math.sqrt(e * e + t * t); if (r > n) var i = { x: n * e / r, y: n * t / r }; else var i = { x: e, y: t }; return i }, b = function(e, t) { var n = e.parentId; if (null != n) { var r = t.layoutNodes[t.idToIndex[n]], i = !1; return (null == r.maxX || e.maxX + r.padRight > r.maxX) && (r.maxX = e.maxX + r.padRight, i = !0), (null == r.minX || e.minX - r.padLeft < r.minX) && (r.minX = e.minX - r.padLeft, i = !0), (null == r.maxY || e.maxY + r.padBottom > r.maxY) && (r.maxY = e.maxY + r.padBottom, i = !0), (null == r.minY || e.minY - r.padTop < r.minY) && (r.minY = e.minY - r.padTop, i = !0), i ? b(r, t) : void 0 } }; e("layout", "cose", t) }(cytoscape), function(e) { "use strict"; function t(t) { this.options = e.util.extend(!0, {}, n, t) } var n = { nodeSep: void 0, edgeSep: void 0, rankSep: void 0, rankDir: void 0, minLen: function(e) { return 1 }, edgeWeight: function(e) { return 1 }, fit: !0, padding: 30, animate: !1, animationDuration: 500, boundingBox: void 0, ready: function() {}, stop: function() {} }; t.prototype.run = function() { var t = this.options, n = this; return e.util.require("dagre", function(r) { var i = t.cy, a = t.eles, o = function(t, n) { return e.is.fn(n) ? n.apply(t, [t]) : n }, s = e.util.makeBoundingBox(t.boundingBox ? t.boundingBox : { x1: 0, y1: 0, w: i.width(), h: i.height() }), l = new r.graphlib.Graph({ multigraph: !0, compound: !0 }), u = {}, c = function(e, t) { null != t && (u[e] = t) }; c("nodesep", t.nodeSep), c("edgesep", t.edgeSep), c("ranksep", t.rankSep), c("rankdir", t.rankDir), l.setGraph(u), l.setDefaultEdgeLabel(function() { return {} }), l.setDefaultNodeLabel(function() { return {} }); for (var d = a.nodes(), h = 0; h < d.length; h++) { var p = d[h]; l.setNode(p.id(), { width: p.width(), height: p.height(), name: p.id() }) } for (var h = 0; h < d.length; h++) { var p = d[h]; p.isChild() && l.setParent(p.id(), p.parent().id()) } for (var f = a.edges().stdFilter(function(e) { return !e.source().isParent() && !e.target().isParent() }), h = 0; h < f.length; h++) { var v = f[h]; l.setEdge(v.source().id(), v.target().id(), { minlen: o(v, t.minLen), weight: o(v, t.edgeWeight), name: v.id() }, v.id()) } r.layout(l); for (var g = l.nodes(), h = 0; h < g.length; h++) { var y = g[h], m = l.node(y); i.getElementById(y).scratch().dagre = m } var x; t.boundingBox ? (x = { x1: 1 / 0, x2: -(1 / 0), y1: 1 / 0, y2: -(1 / 0) }, d.forEach(function(e) { var t = e.scratch().dagre; x.x1 = Math.min(x.x1, t.x), x.x2 = Math.max(x.x2, t.x), x.y1 = Math.min(x.y1, t.y), x.y2 = Math.max(x.y2, t.y) }), x.w = x.x2 - x.x1, x.h = x.y2 - x.y1) : x = s; var b = function(e) { if (t.boundingBox) { var n = (e.x - x.x1) / x.w, r = (e.y - x.y1) / x.h; return { x: s.x1 + n * s.w, y: s.y1 + r * s.h } } return e }; d.layoutPositions(n, t, function() { var e = this.scratch().dagre; return b({ x: e.x, y: e.y }) }) }), this }, e("layout", "dagre", t) }(cytoscape), function(e) { "use strict"; function t(t) { this.options = e.util.extend({}, n, t) } var n = { fit: !0, padding: 30, boundingBox: void 0, avoidOverlap: !0, rows: void 0, columns: void 0, position: function(e) {}, sort: void 0, animate: !1, animationDuration: 500, ready: void 0, stop: void 0 }; t.prototype.run = function() { var t = this.options, n = t, r = t.cy, i = n.eles, a = i.nodes().not(":parent"); n.sort && (a = a.sort(n.sort)); var o = e.util.makeBoundingBox(n.boundingBox ? n.boundingBox : { x1: 0, y1: 0, w: r.width(), h: r.height() }); if (0 === o.h || 0 === o.w) a.layoutPositions(this, n, function() { return { x: o.x1, y: o.y1 } }); else { var s = a.size(), l = Math.sqrt(s * o.h / o.w), u = Math.round(l), c = Math.round(o.w / o.h * l), d = function(e) { if (null == e) return Math.min(u, c); var t = Math.min(u, c); t == u ? u = e : c = e }, h = function(e) { if (null == e) return Math.max(u, c); var t = Math.max(u, c); t == u ? u = e : c = e }; if (null != n.rows && null != n.columns) u = n.rows, c = n.columns; else if (null != n.rows && null == n.columns) u = n.rows, c = Math.ceil(s / u); else if (null == n.rows && null != n.columns) c = n.columns, u = Math.ceil(s / c); else if (c * u > s) { var p = d(), f = h(); (p - 1) * f >= s ? d(p - 1) : (f - 1) * p >= s && h(f - 1) } else for (; s > c * u;) { var p = d(), f = h(); (f + 1) * p >= s ? h(f + 1) : d(p + 1) } var v = o.w / c, g = o.h / u; if (n.avoidOverlap) for (var y = 0; y < a.length; y++) { var m = a[y], x = m.outerWidth(), b = m.outerHeight(); v = Math.max(v, x), g = Math.max(g, b) } for (var w = {}, _ = function(e, t) { return w["c-" + e + "-" + t] ? !0 : !1 }, E = function(e, t) { w["c-" + e + "-" + t] = !0 }, T = 0, S = 0, C = function() { S++, S >= c && (S = 0, T++) }, k = {}, y = 0; y < a.length; y++) { var m = a[y], D = n.position(m); if (D && (void 0 !== D.row || void 0 !== D.col)) { var N = { row: D.row, col: D.col }; if (void 0 === N.col) for (N.col = 0; _(N.row, N.col);) N.col++; else if (void 0 === N.row) for (N.row = 0; _(N.row, N.col);) N.row++; k[m.id()] = N, E(N.row, N.col) } } var P = function(e, t) { var n, r; if (t.locked() || t.isFullAutoParent()) return !1; var i = k[t.id()]; if (i) n = i.col * v + v / 2 + o.x1, r = i.row * g + g / 2 + o.y1; else { for (; _(T, S);) C(); n = S * v + v / 2 + o.x1, r = T * g + g / 2 + o.y1, E(T, S), C() } return { x: n, y: r } }; a.layoutPositions(this, n, P) } return this }, e("layout", "grid", t) }(cytoscape), function(e) { "use strict"; function t(t) { this.options = e.util.extend(!0, {}, n, t) } var n = { ready: function() {}, stop: function() {} }; t.prototype.run = function() { var e = this.options, t = e.eles, n = this; e.cy; return n.trigger("layoutstart"), t.nodes().positions(function() { return { x: 0, y: 0 } }), n.one("layoutready", e.ready), n.trigger("layoutready"), n.one("layoutstop", e.stop), n.trigger("layoutstop"), this }, t.prototype.stop = function() { return this }, e("layout", "null", t) }(cytoscape), function(e) { "use strict"; function t(t) { this.options = e.util.extend(!0, {}, n, t) } var n = { positions: void 0, zoom: void 0, pan: void 0, fit: !0, padding: 30, animate: !1, animationDuration: 500, ready: void 0, stop: void 0 }; t.prototype.run = function() { function t(e) { if (null == n.positions) return null; if (a) return n.positions.apply(e, [e]); var t = n.positions[e._private.data.id]; return null == t ? null : t } var n = this.options, r = n.eles, i = r.nodes(), a = e.is.fn(n.positions); return i.layoutPositions(this, n, function(e, n) { var r = t(n); return n.locked() || null == r ? !1 : r }), this }, e("layout", "preset", t) }(cytoscape), function(e) { "use strict"; function t(t) { this.options = e.util.extend(!0, {}, n, t) } var n = { fit: !0, padding: 30, boundingBox: void 0, animate: !1, animationDuration: 500, ready: void 0, stop: void 0 }; t.prototype.run = function() { var t = this.options, n = t.cy, r = t.eles, i = r.nodes().not(":parent"), a = e.util.makeBoundingBox(t.boundingBox ? t.boundingBox : { x1: 0, y1: 0, w: n.width(), h: n.height() }), o = function(e, t) { return { x: a.x1 + Math.round(Math.random() * a.w), y: a.y1 + Math.round(Math.random() * a.h) } }; return i.layoutPositions(this, t, o), this }, e("layout", "random", t) }(cytoscape), function($$) { "use strict"; function SpreadLayout(e) { this.options = $$.util.extend({}, defaults, e) } function cellCentroid(e) { for (var t, n, r, i = e.halfedges, a = 0, o = 0, s = 0, l = 0; l < i.length; ++l) t = i[l].getEndpoint(), n = i[l].getStartpoint(), a += t.x * n.y, a -= t.y * n.x, r = t.x * n.y - n.x * t.y, o += (t.x + n.x) * r, s += (t.y + n.y) * r; return a /= 2, r = 6 * a, { x: o / r, y: s / r } } function sitesDistance(e, t) { var n = e.x - t.x, r = e.y - t.y; return Math.sqrt(n * n + r * r) } var defaults = { animate: !0, ready: void 0, stop: void 0, fit: !0, minDist: 20, padding: 20, expandingFactor: -1, maxFruchtermanReingoldIterations: 50, maxExpandIterations: 4, boundingBox: void 0 }; SpreadLayout.prototype.run = function() { var layout = this, options = this.options; return $$.util.requires(["foograph", "Voronoi"], function(foograph, Voronoi) { function setPositions(e) { for (var t = e.vertices, n = [], r = 0; r < t.length; ++r) { var i = t[r]; n[i.id] = { x: i.x, y: i.y } } nodes.positions(function(e, t) { var r = t._private.data.id, i = n[r]; return { x: Math.round(simBB.x1 + i.x), y: Math.round(simBB.y1 + i.y) } }), options.fit && cy.fit(options.padding), cy.nodes().rtrigger("position") } var cy = options.cy, nodes = cy.nodes(), edges = cy.edges(), cWidth = cy.width(), cHeight = cy.height(), simulationBounds = options.boundingBox ? $$.util.makeBoundingBox(options.boundingBox) : null, padding = options.padding, simBBFactor = Math.max(1, .8 * Math.log(nodes.length)); nodes.length < 100 && (simBBFactor /= 2), layout.trigger({ type: "layoutstart", layout: layout }); var simBB = { x1: 0, y1: 0, x2: cWidth * simBBFactor, y2: cHeight * simBBFactor }; simulationBounds && (simBB.x1 = simulationBounds.x1, simBB.y1 = simulationBounds.y1, simBB.x2 = simulationBounds.x2, simBB.y2 = simulationBounds.y2), simBB.x1 += padding, simBB.y1 += padding, simBB.x2 -= padding, simBB.y2 -= padding; var width = simBB.x2 - simBB.x1, height = simBB.y2 - simBB.y1, startTime = Date.now(); if (nodes.size() <= 1) { nodes.positions({ x: Math.round((simBB.x1 + simBB.x2) / 2), y: Math.round((simBB.y1 + simBB.y2) / 2) }), options.fit && cy.fit(options.padding); var endTime = Date.now(); return console.info("Layout on " + nodes.size() + " nodes took " + (endTime - startTime) + " ms"), layout.one("layoutready", options.ready), layout.trigger("layoutready"), layout.one("layoutstop", options.stop), void layout.trigger("layoutstop") } var pData = { width: width, height: height, minDist: options.minDist, expFact: options.expandingFactor, expIt: 0, maxExpIt: options.maxExpandIterations, vertices: [], edges: [], startTime: startTime, maxFruchtermanReingoldIterations: options.maxFruchtermanReingoldIterations }; nodes.each(function(e, t) { var n = this._private.data.id; pData.vertices.push({ id: n, x: 0, y: 0 }) }), edges.each(function() { var e = this.source().id(), t = this.target().id(); pData.edges.push({ src: e, tgt: t }) }); var t1 = $$.Thread(); t1.require(foograph, "foograph"), t1.require(Voronoi), t1.require(sitesDistance), t1.require(cellCentroid); var didLayoutReady = !1; t1.on("message", function(e) { var t = e.message; options.animate && (setPositions(t), didLayoutReady || (layout.trigger("layoutready"), didLayoutReady = !0)) }), layout.one("layoutready", options.ready), t1.pass(pData).run(function(pData) { function checkMinDist(e) { for (var t = 0, n = 0; n < e.length; ++n) { var r = e[n]; null != r.lSite && null != r.rSite && sitesDistance(r.lSite, r.rSite) < lMinDist && ++t } return t } foograph = eval("foograph"), Voronoi = eval("Voronoi"); for (var lWidth = pData.width, lHeight = pData.height, lMinDist = pData.minDist, lExpFact = pData.expFact, lMaxExpIt = pData.maxExpIt, lMaxFruchtermanReingoldIterations = pData.maxFruchtermanReingoldIterations, savePositions = function() { pData.width = lWidth, pData.height = lHeight, pData.expIt = expandIteration, pData.expFact = lExpFact, pData.vertices = []; for (var e = 0; e < fv.length; ++e) pData.vertices.push({ id: fv[e].label, x: fv[e].x, y: fv[e].y }) }, messagePositions = function() { broadcast(pData) }, frg = new foograph.Graph("FRgraph", !1), frgNodes = {}, dataVertices = pData.vertices, ni = 0; ni < dataVertices.length; ++ni) { var id = dataVertices[ni].id, v = new foograph.Vertex(id, Math.round(Math.random() * lHeight), Math.round(Math.random() * lHeight)); frgNodes[id] = v, frg.insertVertex(v) } for (var dataEdges = pData.edges, ei = 0; ei < dataEdges.length; ++ei) { var srcNodeId = dataEdges[ei].src, tgtNodeId = dataEdges[ei].tgt; frg.insertEdge("", 1, frgNodes[srcNodeId], frgNodes[tgtNodeId]) } var fv = frg.vertices, iterations = lMaxFruchtermanReingoldIterations, frLayoutManager = new foograph.ForceDirectedVertexLayout(lWidth, lHeight, iterations, !1, lMinDist); frLayoutManager.callback = function() { savePositions(), messagePositions() }, frLayoutManager.layout(frg), savePositions(), messagePositions(); for (var voronoi = new Voronoi, bbox = { xl: 0, xr: lWidth, yt: 0, yb: lHeight }, vSites = [], i = 0; i < fv.length; ++i) vSites[fv[i].label] = fv[i]; for (var diagram = voronoi.compute(fv, bbox), cells = diagram.cells, i = 0; i < cells.length; ++i) { var cell = cells[i], site = cell.site, centroid = cellCentroid(cell), currv = vSites[site.label]; currv.x = centroid.x, currv.y = centroid.y } 0 > lExpFact && (lExpFact = Math.max(.05, Math.min(.1, lMinDist / Math.sqrt(lWidth * lHeight / fv.length) * .5))); for (var prevInfractions = checkMinDist(diagram.edges), bStop = 0 >= prevInfractions, voronoiIteration = 0, expandIteration = 0; !bStop;) { ++voronoiIteration; for (var it = 0; 4 >= it; ++it) { voronoi.recycle(diagram), diagram = voronoi.compute(fv, bbox), cells = diagram.cells; for (var i = 0; i < cells.length; ++i) { var cell = cells[i], site = cell.site, centroid = cellCentroid(cell), currv = vSites[site.label]; currv.x = centroid.x, currv.y = centroid.y } } var currInfractions = checkMinDist(diagram.edges); 0 >= currInfractions ? bStop = !0 : (currInfractions >= prevInfractions || voronoiIteration >= 4) && (expandIteration >= lMaxExpIt ? bStop = !0 : (lWidth += lWidth * lExpFact, lHeight += lHeight * lExpFact, bbox = { xl: 0, xr: lWidth, yt: 0, yb: lHeight }, ++expandIteration, voronoiIteration = 0)), prevInfractions = currInfractions, savePositions(), messagePositions() } return savePositions(), pData }).then(function(e) { var t = e.vertices; setPositions(e); var n = e.startTime, r = new Date; console.info("Layout on " + t.length + " nodes took " + (r - n) + " ms"), layout.one("layoutstop", options.stop), options.animate || layout.trigger("layoutready"), layout.trigger("layoutstop"), t1.stop() }) }), this }, SpreadLayout.prototype.stop = function() {}, $$("layout", "spread", SpreadLayout) }(cytoscape), function(e) { "use strict"; function t(t) { this.options = e.util.extend(!0, {}, n, t) } var n = { animate: !0, maxSimulationTime: 4e3, ungrabifyWhileSimulating: !1, fit: !0, padding: 30, boundingBox: void 0, random: !1, infinite: !1, ready: void 0, stop: void 0, stiffness: 400, repulsion: 400, damping: .5 }; t.prototype.run = function() { var t = this, n = this, r = this.options; return e.util.require("Springy", function(i) { function a(e) { var t = e.scratch("springy").model.id, n = w.layout.nodePoints[t].p, r = e.position(), i = null != r.x && null != r.y ? y(e.position()) : { x: 4 * Math.random() - 2, y: 4 * Math.random() - 2 }; n.x = i.x, n.y = i.y } function o() { n.stopped = !1, r.ungrabifyWhileSimulating && E.ungrabify(), w.start() } var s = !1, l = r.cy; t.trigger({ type: "layoutstart", layout: t }); var u = r.eles, c = u.nodes().not(":parent"), d = u.edges(), h = e.util.makeBoundingBox(r.boundingBox ? r.boundingBox : { x1: 0, y1: 0, w: l.width(), h: l.height() }), p = new i.Graph; c.each(function(e, t) { t.scratch("springy", { model: p.newNode({ element: t }) }) }), d.each(function(e, t) { var n = t.source().scratch("springy").model, r = t.target().scratch("springy").model; t.scratch("springy", { model: p.newEdge(n, r, { element: t }) }) }); var f = window.sim = new i.Layout.ForceDirected(p, r.stiffness, r.repulsion, r.damping); r.infinite && (f.minEnergyThreshold = -(1 / 0)); var v = f.getBoundingBox(), g = function(e) { v = f.getBoundingBox(); var t = v.topright.subtract(v.bottomleft), n = e.subtract(v.bottomleft).divide(t.x).x * h.w + h.x1, r = e.subtract(v.bottomleft).divide(t.y).y * h.h + h.x1; return new i.Vector(n, r) }, y = function(e) { v = f.getBoundingBox(); var t = v.topright.subtract(v.bottomleft), n = (e.x - h.x1) / h.w * t.x + v.bottomleft.x, r = (e.y - h.y1) / h.h * t.y + v.bottomleft.y; return new i.Vector(n, r) }, m = l.collection(), x = l.nodes().size(), b = 1, w = new i.Renderer(f, function() { n.stopped || m.length > 0 && r.animate && (s = !0, m.rtrigger("position"), r.fit && l.fit(r.padding), m = l.collection(), s = !1) }, function(e, t, n) {}, function(e, i) { if (!n.stopped) { var a = g(i), o = e.data.element; o.locked() || o.grabbed() || (o._private.position = { x: a.x, y: a.y }, m.merge(o)), b == x && (t.one("layoutready", r.ready), t.trigger({ type: "layoutready", layout: t })), b++ } }); c.each(function(e, t) { r.random || a(t) }); var _; c.on("position", _ = function() { s || a(this) }); var E = c.filter(":grabbable"); n.stopSystem = function() { n.stopped = !0, p.filterNodes(function() { return !1 }), r.ungrabifyWhileSimulating && E.grabify(), r.fit && l.fit(r.padding), c.off("drag position", _), t.one("layoutstop", r.stop), t.trigger({ type: "layoutstop", layout: t }), n.stopSystem = null }, o(), r.infinite || setTimeout(function() { n.stop() }, r.maxSimulationTime) }), this }, t.prototype.stop = function() { return null != this.stopSystem && this.stopSystem(), this }, e("layout", "springy", t) }(cytoscape), function(e) { "use strict"; function t(e) { this.options = e } t.prototype.recalculateRenderedStyle = function() {}, t.prototype.notify = function() {}, e("renderer", "null", t) }(cytoscape);