﻿/*
* Raphael 1.5.2 - JavaScript Vector Library
*
* Copyright (c) 2010 Dmitry Baranovskiy (http://raphaeljs.com)
* Licensed under the MIT (http://raphaeljs.com/license.html) license.
*/
(function() { function cC(a, b, c, d, e, f) { function o(a, b) { var c, d, e, f, j, k; for (e = a, k = 0; k < 8; k++) { f = m(e) - a; if (B(f) < b) return e; j = (3 * i * e + 2 * h) * e + g; if (B(j) < 1e-6) break; e = e - f / j } c = 0, d = 1, e = a; if (e < c) return c; if (e > d) return d; while (c < d) { f = m(e); if (B(f - a) < b) return e; a > f ? c = e : d = e, e = (d - c) / 2 + c } return e } function n(a, b) { var c = o(a, b); return ((l * c + k) * c + j) * c } function m(a) { return ((i * a + h) * a + g) * a } var g = 3 * b, h = 3 * (d - b) - g, i = 1 - g - h, j = 3 * c, k = 3 * (e - c) - j, l = 1 - j - k; return n(a, 1 / (200 * f)) } function cB(b) { return function(c, d, e, f) { var g = { back: b }; a.is(e, "function") ? f = e : g.rot = e, c && c.constructor == bN && (c = c.attrs.path), c && (g.along = c); return this.animate(g, d, f) } } function cp() { return this.x + q + this.y } function bm(a, b, c) { function d() { var g = Array[e].slice.call(arguments, 0), h = g[v]("►"), i = d.cache = d.cache || {}, j = d.count = d.count || []; if (i[f](h)) return c ? c(i[h]) : i[h]; j[w] >= 1e3 && delete i[j.shift()], j[L](h), i[h] = a[m](b, g); return c ? c(i[h]) : i[h] } return d } function bh() { var a = [], b = 0; for (; b < 32; b++) a[b] = (~ ~(y.random() * 16))[H](16); a[12] = 4, a[16] = (a[16] & 3 | 8)[H](16); return "r-" + a[v]("") } function a() { if (a.is(arguments[0], G)) { var b = arguments[0], d = bV[m](a, b.splice(0, 3 + a.is(b[0], E))), e = d.set(); for (var g = 0, h = b[w]; g < h; g++) { var i = b[g] || {}; c[f](i.type) && e[L](d[i.type]().attr(i)) } return e } return bV[m](a, arguments) } a.version = "1.5.2"; var b = /[, ]+/, c = { circle: 1, rect: 1, path: 1, ellipse: 1, text: 1, image: 1 }, d = /\{(\d+)\}/g, e = "prototype", f = "hasOwnProperty", g = document, h = window, i = { was: Object[e][f].call(h, "Raphael"), is: h.Raphael }, j = function() { this.customAttributes = {} }, k, l = "appendChild", m = "apply", n = "concat", o = "createTouch" in g, p = "", q = " ", r = String, s = "split", t = "click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend orientationchange touchcancel gesturestart gesturechange gestureend"[s](q), u = { mousedown: "touchstart", mousemove: "touchmove", mouseup: "touchend" }, v = "join", w = "length", x = r[e].toLowerCase, y = Math, z = y.max, A = y.min, B = y.abs, C = y.pow, D = y.PI, E = "number", F = "string", G = "array", H = "toString", I = "fill", J = Object[e][H], K = {}, L = "push", M = /^url\(['"]?([^\)]+?)['"]?\)$/i, N = /^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i, O = { NaN: 1, Infinity: 1, "-Infinity": 1 }, P = /^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/, Q = y.round, R = "setAttribute", S = parseFloat, T = parseInt, U = " progid:DXImageTransform.Microsoft", V = r[e].toUpperCase, W = { blur: 0, "clip-rect": "0 0 1e9 1e9", cursor: "default", cx: 0, cy: 0, fill: "#fff", "fill-opacity": 1, font: '10px "Arial"', "font-family": '"Arial"', "font-size": "10", "font-style": "normal", "font-weight": 400, gradient: 0, height: 0, href: "http://raphaeljs.com/", opacity: 1, path: "M0,0", r: 0, rotation: 0, rx: 0, ry: 0, scale: "1 1", src: "", stroke: "#000", "stroke-dasharray": "", "stroke-linecap": "butt", "stroke-linejoin": "butt", "stroke-miterlimit": 0, "stroke-opacity": 1, "stroke-width": 1, target: "_blank", "text-anchor": "middle", title: "Raphael", translation: "0 0", width: 0, x: 0, y: 0 }, X = { along: "along", blur: E, "clip-rect": "csv", cx: E, cy: E, fill: "colour", "fill-opacity": E, "font-size": E, height: E, opacity: E, path: "path", r: E, rotation: "csv", rx: E, ry: E, scale: "csv", stroke: "colour", "stroke-opacity": E, "stroke-width": E, translation: "csv", width: E, x: E, y: E }, Y = "replace", Z = /^(from|to|\d+%?)$/, $ = /\s*,\s*/, _ = { hs: 1, rg: 1 }, ba = /,?([achlmqrstvxz]),?/gi, bb = /([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig, bc = /(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig, bd = /^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/, be = function(a, b) { return a.key - b.key }; a.type = h.SVGAngle || g.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") ? "SVG" : "VML"; if (a.type == "VML") { var bf = g.createElement("div"), bg; bf.innerHTML = '<v:shape adj="1"/>', bg = bf.firstChild, bg.style.behavior = "url(#default#VML)"; if (!bg || typeof bg.adj != "object") return a.type = null; bf = null } a.svg = !(a.vml = a.type == "VML"), j[e] = a[e], k = j[e], a._id = 0, a._oid = 0, a.fn = {}, a.is = function(a, b) { b = x.call(b); if (b == "finite") return !O[f](+a); return b == "null" && a === null || b == typeof a || b == "object" && a === Object(a) || b == "array" && Array.isArray && Array.isArray(a) || J.call(a).slice(8, -1).toLowerCase() == b }, a.angle = function(b, c, d, e, f, g) { if (f == null) { var h = b - d, i = c - e; if (!h && !i) return 0; return ((h < 0) * 180 + y.atan(-i / -h) * 180 / D + 360) % 360 } return a.angle(b, c, f, g) - a.angle(d, e, f, g) }, a.rad = function(a) { return a % 360 * D / 180 }, a.deg = function(a) { return a * 180 / D % 360 }, a.snapTo = function(b, c, d) { d = a.is(d, "finite") ? d : 10; if (a.is(b, G)) { var e = b.length; while (e--) if (B(b[e] - c) <= d) return b[e] } else { b = +b; var f = c % b; if (f < d) return c - f; if (f > b - d) return c - f + b } return c }, a.setWindow = function(a) { h = a, g = h.document }; var bi = function(b) { if (a.vml) { var c = /^\s+|\s+$/g, d; try { var e = new ActiveXObject("htmlfile"); e.write("<body>"), e.close(), d = e.body } catch (f) { d = createPopup().document.body } var h = d.createTextRange(); bi = bm(function(a) { try { d.style.color = r(a)[Y](c, p); var b = h.queryCommandValue("ForeColor"); b = (b & 255) << 16 | b & 65280 | (b & 16711680) >>> 16; return "#" + ("000000" + b[H](16)).slice(-6) } catch (e) { return "none" } }) } else { var i = g.createElement("i"); i.title = "Raphaël Colour Picker", i.style.display = "none", g.body[l](i), bi = bm(function(a) { i.style.color = a; return g.defaultView.getComputedStyle(i, p).getPropertyValue("color") }) } return bi(b) }, bj = function() { return "hsb(" + [this.h, this.s, this.b] + ")" }, bk = function() { return "hsl(" + [this.h, this.s, this.l] + ")" }, bl = function() { return this.hex }; a.hsb2rgb = function(b, c, d, e) { a.is(b, "object") && "h" in b && "s" in b && "b" in b && (d = b.b, c = b.s, b = b.h, e = b.o); return a.hsl2rgb(b, c, d / 2, e) }, a.hsl2rgb = function(b, c, d, e) { a.is(b, "object") && "h" in b && "s" in b && "l" in b && (d = b.l, c = b.s, b = b.h); if (b > 1 || c > 1 || d > 1) b /= 360, c /= 100, d /= 100; var f = {}, g = ["r", "g", "b"], h, i, j, k, l, m; if (!c) f = { r: d, g: d, b: d }; else { d < .5 ? h = d * (1 + c) : h = d + c - d * c, i = 2 * d - h; for (var n = 0; n < 3; n++) j = b + 1 / 3 * -(n - 1), j < 0 && j++, j > 1 && j--, j * 6 < 1 ? f[g[n]] = i + (h - i) * 6 * j : j * 2 < 1 ? f[g[n]] = h : j * 3 < 2 ? f[g[n]] = i + (h - i) * (2 / 3 - j) * 6 : f[g[n]] = i } f.r *= 255, f.g *= 255, f.b *= 255, f.hex = "#" + (16777216 | f.b | f.g << 8 | f.r << 16).toString(16).slice(1), a.is(e, "finite") && (f.opacity = e), f.toString = bl; return f }, a.rgb2hsb = function(b, c, d) { c == null && a.is(b, "object") && "r" in b && "g" in b && "b" in b && (d = b.b, c = b.g, b = b.r); if (c == null && a.is(b, F)) { var e = a.getRGB(b); b = e.r, c = e.g, d = e.b } if (b > 1 || c > 1 || d > 1) b /= 255, c /= 255, d /= 255; var f = z(b, c, d), g = A(b, c, d), h, i, j = f; if (g == f) return { h: 0, s: 0, b: f, toString: bj }; var k = f - g; i = k / f, b == f ? h = (c - d) / k : c == f ? h = 2 + (d - b) / k : h = 4 + (b - c) / k, h /= 6, h < 0 && h++, h > 1 && h--; return { h: h, s: i, b: j, toString: bj} }, a.rgb2hsl = function(b, c, d) { c == null && a.is(b, "object") && "r" in b && "g" in b && "b" in b && (d = b.b, c = b.g, b = b.r); if (c == null && a.is(b, F)) { var e = a.getRGB(b); b = e.r, c = e.g, d = e.b } if (b > 1 || c > 1 || d > 1) b /= 255, c /= 255, d /= 255; var f = z(b, c, d), g = A(b, c, d), h, i, j = (f + g) / 2, k; if (g == f) k = { h: 0, s: 0, l: j }; else { var l = f - g; i = j < .5 ? l / (f + g) : l / (2 - f - g), b == f ? h = (c - d) / l : c == f ? h = 2 + (d - b) / l : h = 4 + (b - c) / l, h /= 6, h < 0 && h++, h > 1 && h--, k = { h: h, s: i, l: j} } k.toString = bk; return k }, a._path2string = function() { return this.join(",")[Y](ba, "$1") }, a.getRGB = bm(function(b) { if (!b || !!((b = r(b)).indexOf("-") + 1)) return { r: -1, g: -1, b: -1, hex: "none", error: 1 }; if (b == "none") return { r: -1, g: -1, b: -1, hex: "none" }; !_[f](b.toLowerCase().substring(0, 2)) && b.charAt() != "#" && (b = bi(b)); var c, d, e, g, h, i, j, k = b.match(N); if (k) { k[2] && (g = T(k[2].substring(5), 16), e = T(k[2].substring(3, 5), 16), d = T(k[2].substring(1, 3), 16)), k[3] && (g = T((i = k[3].charAt(3)) + i, 16), e = T((i = k[3].charAt(2)) + i, 16), d = T((i = k[3].charAt(1)) + i, 16)), k[4] && (j = k[4][s]($), d = S(j[0]), j[0].slice(-1) == "%" && (d *= 2.55), e = S(j[1]), j[1].slice(-1) == "%" && (e *= 2.55), g = S(j[2]), j[2].slice(-1) == "%" && (g *= 2.55), k[1].toLowerCase().slice(0, 4) == "rgba" && (h = S(j[3])), j[3] && j[3].slice(-1) == "%" && (h /= 100)); if (k[5]) { j = k[5][s]($), d = S(j[0]), j[0].slice(-1) == "%" && (d *= 2.55), e = S(j[1]), j[1].slice(-1) == "%" && (e *= 2.55), g = S(j[2]), j[2].slice(-1) == "%" && (g *= 2.55), (j[0].slice(-3) == "deg" || j[0].slice(-1) == "°") && (d /= 360), k[1].toLowerCase().slice(0, 4) == "hsba" && (h = S(j[3])), j[3] && j[3].slice(-1) == "%" && (h /= 100); return a.hsb2rgb(d, e, g, h) } if (k[6]) { j = k[6][s]($), d = S(j[0]), j[0].slice(-1) == "%" && (d *= 2.55), e = S(j[1]), j[1].slice(-1) == "%" && (e *= 2.55), g = S(j[2]), j[2].slice(-1) == "%" && (g *= 2.55), (j[0].slice(-3) == "deg" || j[0].slice(-1) == "°") && (d /= 360), k[1].toLowerCase().slice(0, 4) == "hsla" && (h = S(j[3])), j[3] && j[3].slice(-1) == "%" && (h /= 100); return a.hsl2rgb(d, e, g, h) } k = { r: d, g: e, b: g }, k.hex = "#" + (16777216 | g | e << 8 | d << 16).toString(16).slice(1), a.is(h, "finite") && (k.opacity = h); return k } return { r: -1, g: -1, b: -1, hex: "none", error: 1} }, a), a.getColor = function(a) { var b = this.getColor.start = this.getColor.start || { h: 0, s: 1, b: a || .75 }, c = this.hsb2rgb(b.h, b.s, b.b); b.h += .075, b.h > 1 && (b.h = 0, b.s -= .2, b.s <= 0 && (this.getColor.start = { h: 0, s: 1, b: b.b })); return c.hex }, a.getColor.reset = function() { delete this.start }, a.parsePathString = bm(function(b) { if (!b) return null; var c = { a: 7, c: 6, h: 1, l: 2, m: 2, q: 4, s: 4, t: 2, v: 1, z: 0 }, d = []; a.is(b, G) && a.is(b[0], G) && (d = bo(b)), d[w] || r(b)[Y](bb, function(a, b, e) { var f = [], g = x.call(b); e[Y](bc, function(a, b) { b && f[L](+b) }), g == "m" && f[w] > 2 && (d[L]([b][n](f.splice(0, 2))), g = "l", b = b == "m" ? "l" : "L"); while (f[w] >= c[g]) { d[L]([b][n](f.splice(0, c[g]))); if (!c[g]) break } }), d[H] = a._path2string; return d }), a.findDotsAtSegment = function(a, b, c, d, e, f, g, h, i) { var j = 1 - i, k = C(j, 3) * a + C(j, 2) * 3 * i * c + j * 3 * i * i * e + C(i, 3) * g, l = C(j, 3) * b + C(j, 2) * 3 * i * d + j * 3 * i * i * f + C(i, 3) * h, m = a + 2 * i * (c - a) + i * i * (e - 2 * c + a), n = b + 2 * i * (d - b) + i * i * (f - 2 * d + b), o = c + 2 * i * (e - c) + i * i * (g - 2 * e + c), p = d + 2 * i * (f - d) + i * i * (h - 2 * f + d), q = (1 - i) * a + i * c, r = (1 - i) * b + i * d, s = (1 - i) * e + i * g, t = (1 - i) * f + i * h, u = 90 - y.atan((m - o) / (n - p)) * 180 / D; (m > o || n < p) && (u += 180); return { x: k, y: l, m: { x: m, y: n }, n: { x: o, y: p }, start: { x: q, y: r }, end: { x: s, y: t }, alpha: u} }; var bn = bm(function(a) { if (!a) return { x: 0, y: 0, width: 0, height: 0 }; a = bw(a); var b = 0, c = 0, d = [], e = [], f; for (var g = 0, h = a[w]; g < h; g++) { f = a[g]; if (f[0] == "M") b = f[1], c = f[2], d[L](b), e[L](c); else { var i = bv(b, c, f[1], f[2], f[3], f[4], f[5], f[6]); d = d[n](i.min.x, i.max.x), e = e[n](i.min.y, i.max.y), b = f[5], c = f[6] } } var j = A[m](0, d), k = A[m](0, e); return { x: j, y: k, width: z[m](0, d) - j, height: z[m](0, e) - k} }), bo = function(b) { var c = []; if (!a.is(b, G) || !a.is(b && b[0], G)) b = a.parsePathString(b); for (var d = 0, e = b[w]; d < e; d++) { c[d] = []; for (var f = 0, g = b[d][w]; f < g; f++) c[d][f] = b[d][f] } c[H] = a._path2string; return c }, bp = bm(function(b) { if (!a.is(b, G) || !a.is(b && b[0], G)) b = a.parsePathString(b); var c = [], d = 0, e = 0, f = 0, g = 0, h = 0; b[0][0] == "M" && (d = b[0][1], e = b[0][2], f = d, g = e, h++, c[L](["M", d, e])); for (var i = h, j = b[w]; i < j; i++) { var k = c[i] = [], l = b[i]; if (l[0] != x.call(l[0])) { k[0] = x.call(l[0]); switch (k[0]) { case "a": k[1] = l[1], k[2] = l[2], k[3] = l[3], k[4] = l[4], k[5] = l[5], k[6] = +(l[6] - d).toFixed(3), k[7] = +(l[7] - e).toFixed(3); break; case "v": k[1] = +(l[1] - e).toFixed(3); break; case "m": f = l[1], g = l[2]; default: for (var m = 1, n = l[w]; m < n; m++) k[m] = +(l[m] - (m % 2 ? d : e)).toFixed(3) } } else { k = c[i] = [], l[0] == "m" && (f = l[1] + d, g = l[2] + e); for (var o = 0, p = l[w]; o < p; o++) c[i][o] = l[o] } var q = c[i][w]; switch (c[i][0]) { case "z": d = f, e = g; break; case "h": d += +c[i][q - 1]; break; case "v": e += +c[i][q - 1]; break; default: d += +c[i][q - 2], e += +c[i][q - 1] } } c[H] = a._path2string; return c }, 0, bo), bq = bm(function(b) { if (!a.is(b, G) || !a.is(b && b[0], G)) b = a.parsePathString(b); var c = [], d = 0, e = 0, f = 0, g = 0, h = 0; b[0][0] == "M" && (d = +b[0][1], e = +b[0][2], f = d, g = e, h++, c[0] = ["M", d, e]); for (var i = h, j = b[w]; i < j; i++) { var k = c[i] = [], l = b[i]; if (l[0] != V.call(l[0])) { k[0] = V.call(l[0]); switch (k[0]) { case "A": k[1] = l[1], k[2] = l[2], k[3] = l[3], k[4] = l[4], k[5] = l[5], k[6] = +(l[6] + d), k[7] = +(l[7] + e); break; case "V": k[1] = +l[1] + e; break; case "H": k[1] = +l[1] + d; break; case "M": f = +l[1] + d, g = +l[2] + e; default: for (var m = 1, n = l[w]; m < n; m++) k[m] = +l[m] + (m % 2 ? d : e) } } else for (var o = 0, p = l[w]; o < p; o++) c[i][o] = l[o]; switch (k[0]) { case "Z": d = f, e = g; break; case "H": d = k[1]; break; case "V": e = k[1]; break; case "M": f = c[i][c[i][w] - 2], g = c[i][c[i][w] - 1]; default: d = c[i][c[i][w] - 2], e = c[i][c[i][w] - 1] } } c[H] = a._path2string; return c }, null, bo), br = function(a, b, c, d) { return [a, b, c, d, c, d] }, bs = function(a, b, c, d, e, f) { var g = 1 / 3, h = 2 / 3; return [g * a + h * c, g * b + h * d, g * e + h * c, g * f + h * d, e, f] }, bt = function(a, b, c, d, e, f, g, h, i, j) { var k = D * 120 / 180, l = D / 180 * (+e || 0), m = [], o, p = bm(function(a, b, c) { var d = a * y.cos(c) - b * y.sin(c), e = a * y.sin(c) + b * y.cos(c); return { x: d, y: e} }); if (!j) { o = p(a, b, -l), a = o.x, b = o.y, o = p(h, i, -l), h = o.x, i = o.y; var q = y.cos(D / 180 * e), r = y.sin(D / 180 * e), t = (a - h) / 2, u = (b - i) / 2, x = t * t / (c * c) + u * u / (d * d); x > 1 && (x = y.sqrt(x), c = x * c, d = x * d); var z = c * c, A = d * d, C = (f == g ? -1 : 1) * y.sqrt(B((z * A - z * u * u - A * t * t) / (z * u * u + A * t * t))), E = C * c * u / d + (a + h) / 2, F = C * -d * t / c + (b + i) / 2, G = y.asin(((b - F) / d).toFixed(9)), H = y.asin(((i - F) / d).toFixed(9)); G = a < E ? D - G : G, H = h < E ? D - H : H, G < 0 && (G = D * 2 + G), H < 0 && (H = D * 2 + H), g && G > H && (G = G - D * 2), !g && H > G && (H = H - D * 2) } else G = j[0], H = j[1], E = j[2], F = j[3]; var I = H - G; if (B(I) > k) { var J = H, K = h, L = i; H = G + k * (g && H > G ? 1 : -1), h = E + c * y.cos(H), i = F + d * y.sin(H), m = bt(h, i, c, d, e, 0, g, K, L, [H, J, E, F]) } I = H - G; var M = y.cos(G), N = y.sin(G), O = y.cos(H), P = y.sin(H), Q = y.tan(I / 4), R = 4 / 3 * c * Q, S = 4 / 3 * d * Q, T = [a, b], U = [a + R * N, b - S * M], V = [h + R * P, i - S * O], W = [h, i]; U[0] = 2 * T[0] - U[0], U[1] = 2 * T[1] - U[1]; if (j) return [U, V, W][n](m); m = [U, V, W][n](m)[v]()[s](","); var X = []; for (var Y = 0, Z = m[w]; Y < Z; Y++) X[Y] = Y % 2 ? p(m[Y - 1], m[Y], l).y : p(m[Y], m[Y + 1], l).x; return X }, bu = function(a, b, c, d, e, f, g, h, i) { var j = 1 - i; return { x: C(j, 3) * a + C(j, 2) * 3 * i * c + j * 3 * i * i * e + C(i, 3) * g, y: C(j, 3) * b + C(j, 2) * 3 * i * d + j * 3 * i * i * f + C(i, 3) * h} }, bv = bm(function(a, b, c, d, e, f, g, h) { var i = e - 2 * c + a - (g - 2 * e + c), j = 2 * (c - a) - 2 * (e - c), k = a - c, l = (-j + y.sqrt(j * j - 4 * i * k)) / 2 / i, n = (-j - y.sqrt(j * j - 4 * i * k)) / 2 / i, o = [b, h], p = [a, g], q; B(l) > "1e12" && (l = .5), B(n) > "1e12" && (n = .5), l > 0 && l < 1 && (q = bu(a, b, c, d, e, f, g, h, l), p[L](q.x), o[L](q.y)), n > 0 && n < 1 && (q = bu(a, b, c, d, e, f, g, h, n), p[L](q.x), o[L](q.y)), i = f - 2 * d + b - (h - 2 * f + d), j = 2 * (d - b) - 2 * (f - d), k = b - d, l = (-j + y.sqrt(j * j - 4 * i * k)) / 2 / i, n = (-j - y.sqrt(j * j - 4 * i * k)) / 2 / i, B(l) > "1e12" && (l = .5), B(n) > "1e12" && (n = .5), l > 0 && l < 1 && (q = bu(a, b, c, d, e, f, g, h, l), p[L](q.x), o[L](q.y)), n > 0 && n < 1 && (q = bu(a, b, c, d, e, f, g, h, n), p[L](q.x), o[L](q.y)); return { min: { x: A[m](0, p), y: A[m](0, o) }, max: { x: z[m](0, p), y: z[m](0, o)}} }), bw = bm(function(a, b) { var c = bq(a), d = b && bq(b), e = { x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null }, f = { x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null }, g = function(a, b) { var c, d; if (!a) return ["C", b.x, b.y, b.x, b.y, b.x, b.y]; !(a[0] in { T: 1, Q: 1 }) && (b.qx = b.qy = null); switch (a[0]) { case "M": b.X = a[1], b.Y = a[2]; break; case "A": a = ["C"][n](bt[m](0, [b.x, b.y][n](a.slice(1)))); break; case "S": c = b.x + (b.x - (b.bx || b.x)), d = b.y + (b.y - (b.by || b.y)), a = ["C", c, d][n](a.slice(1)); break; case "T": b.qx = b.x + (b.x - (b.qx || b.x)), b.qy = b.y + (b.y - (b.qy || b.y)), a = ["C"][n](bs(b.x, b.y, b.qx, b.qy, a[1], a[2])); break; case "Q": b.qx = a[1], b.qy = a[2], a = ["C"][n](bs(b.x, b.y, a[1], a[2], a[3], a[4])); break; case "L": a = ["C"][n](br(b.x, b.y, a[1], a[2])); break; case "H": a = ["C"][n](br(b.x, b.y, a[1], b.y)); break; case "V": a = ["C"][n](br(b.x, b.y, b.x, a[1])); break; case "Z": a = ["C"][n](br(b.x, b.y, b.X, b.Y)) } return a }, h = function(a, b) { if (a[b][w] > 7) { a[b].shift(); var e = a[b]; while (e[w]) a.splice(b++, 0, ["C"][n](e.splice(0, 6))); a.splice(b, 1), k = z(c[w], d && d[w] || 0) } }, i = function(a, b, e, f, g) { a && b && a[g][0] == "M" && b[g][0] != "M" && (b.splice(g, 0, ["M", f.x, f.y]), e.bx = 0, e.by = 0, e.x = a[g][1], e.y = a[g][2], k = z(c[w], d && d[w] || 0)) }; for (var j = 0, k = z(c[w], d && d[w] || 0); j < k; j++) { c[j] = g(c[j], e), h(c, j), d && (d[j] = g(d[j], f)), d && h(d, j), i(c, d, e, f, j), i(d, c, f, e, j); var l = c[j], o = d && d[j], p = l[w], q = d && o[w]; e.x = l[p - 2], e.y = l[p - 1], e.bx = S(l[p - 4]) || e.x, e.by = S(l[p - 3]) || e.y, f.bx = d && (S(o[q - 4]) || f.x), f.by = d && (S(o[q - 3]) || f.y), f.x = d && o[q - 2], f.y = d && o[q - 1] } return d ? [c, d] : c }, null, bo), bx = bm(function(b) { var c = []; for (var d = 0, e = b[w]; d < e; d++) { var f = {}, g = b[d].match(/^([^:]*):?([\d\.]*)/); f.color = a.getRGB(g[1]); if (f.color.error) return null; f.color = f.color.hex, g[2] && (f.offset = g[2] + "%"), c[L](f) } for (d = 1, e = c[w] - 1; d < e; d++) if (!c[d].offset) { var h = S(c[d - 1].offset || 0), i = 0; for (var j = d + 1; j < e; j++) if (c[j].offset) { i = c[j].offset; break } i || (i = 100, j = e), i = S(i); var k = (i - h) / (j - d + 1); for (; d < j; d++) h += k, c[d].offset = h + "%" } return c }), by = function(b, c, d, e) { var f; if (!a.is(b, F) && !a.is(b, "object")) return { container: 1, x: b, y: c, width: d, height: e }; f = a.is(b, F) ? g.getElementById(b) : b; if (f.tagName) return c == null ? { container: f, width: f.style.pixelWidth || f.offsetWidth, height: f.style.pixelHeight || f.offsetHeight} : { container: f, width: c, height: d} }, bz = function(a, b) { var c = this; for (var d in b) if (b[f](d) && !(d in a)) switch (typeof b[d]) { case "function": (function(b) { a[d] = a === c ? b : function() { return b[m](c, arguments) } })(b[d]); break; case "object": a[d] = a[d] || {}, bz.call(this, a[d], b[d]); break; default: a[d] = b[d] } }, bA = function(a, b) { a == b.top && (b.top = a.prev), a == b.bottom && (b.bottom = a.next), a.next && (a.next.prev = a.prev), a.prev && (a.prev.next = a.next) }, bB = function(a, b) { b.top !== a && (bA(a, b), a.next = null, a.prev = b.top, b.top.next = a, b.top = a) }, bC = function(a, b) { b.bottom !== a && (bA(a, b), a.next = b.bottom, a.prev = null, b.bottom.prev = a, b.bottom = a) }, bD = function(a, b, c) { bA(a, c), b == c.top && (c.top = a), b.next && (b.next.prev = a), a.next = b.next, a.prev = b, b.next = a }, bE = function(a, b, c) { bA(a, c), b == c.bottom && (c.bottom = a), b.prev && (b.prev.next = a), a.prev = b.prev, b.prev = a, a.next = b }, bF = function(a) { return function() { throw new Error("Raphaël: you are calling to method “" + a + "” of removed object") } }; a.pathToRelative = bp; if (a.svg) { k.svgns = "http://www.w3.org/2000/svg", k.xlink = "http://www.w3.org/1999/xlink", Q = function(a) { return +a + (~ ~a === a) * .5 }; var bG = function(a, b) { if (!b) { a = g.createElementNS(k.svgns, a), a.style.webkitTapHighlightColor = "rgba(0,0,0,0)"; return a } for (var c in b) b[f](c) && a[R](c, r(b[c])) }; a[H] = function() { return "Your browser supports SVG.\nYou are running Raphaël " + this.version }; var bH = function(a, b) { var c = bG("path"); b.canvas && b.canvas[l](c); var d = new bN(c, b); d.type = "path", bK(d, { fill: "none", stroke: "#000", path: a }); return d }, bI = function(a, b, c) { var d = "linear", e = .5, f = .5, h = a.style; b = r(b)[Y](bd, function(a, b, c) { d = "radial"; if (b && c) { e = S(b), f = S(c); var g = (f > .5) * 2 - 1; C(e - .5, 2) + C(f - .5, 2) > .25 && (f = y.sqrt(.25 - C(e - .5, 2)) * g + .5) && f != .5 && (f = f.toFixed(5) - 1e-5 * g) } return p }), b = b[s](/\s*\-\s*/); if (d == "linear") { var i = b.shift(); i = -S(i); if (isNaN(i)) return null; var j = [0, 0, y.cos(i * D / 180), y.sin(i * D / 180)], k = 1 / (z(B(j[2]), B(j[3])) || 1); j[2] *= k, j[3] *= k, j[2] < 0 && (j[0] = -j[2], j[2] = 0), j[3] < 0 && (j[1] = -j[3], j[3] = 0) } var m = bx(b); if (!m) return null; var n = a.getAttribute(I); n = n.match(/^url\(#(.*)\)$/), n && c.defs.removeChild(g.getElementById(n[1])); var o = bG(d + "Gradient"); o.id = bh(), bG(o, d == "radial" ? { fx: e, fy: f} : { x1: j[0], y1: j[1], x2: j[2], y2: j[3] }), c.defs[l](o); for (var q = 0, t = m[w]; q < t; q++) { var u = bG("stop"); bG(u, { offset: m[q].offset ? m[q].offset : q ? "100%" : "0%", "stop-color": m[q].color || "#fff" }), o[l](u) } bG(a, { fill: "url(#" + o.id + ")", opacity: 1, "fill-opacity": 1 }), h.fill = p, h.opacity = 1, h.fillOpacity = 1; return 1 }, bJ = function(b) { var c = b.getBBox(); bG(b.pattern, { patternTransform: a.format("translate({0},{1})", c.x, c.y) }) }, bK = function(c, d) { var e = { "": [0], none: [0], "-": [3, 1], ".": [1, 1], "-.": [3, 1, 1, 1], "-..": [3, 1, 1, 1, 1, 1], ". ": [1, 3], "- ": [4, 3], "--": [8, 3], "- .": [4, 3, 1, 3], "--.": [8, 3, 1, 3], "--..": [8, 3, 1, 3, 1, 3] }, h = c.node, i = c.attrs, j = c.rotate(), k = function(a, b) { b = e[x.call(b)]; if (b) { var c = a.attrs["stroke-width"] || "1", f = ({ round: c, square: c, butt: 0 })[a.attrs["stroke-linecap"] || d["stroke-linecap"]] || 0, g = [], i = b[w]; while (i--) g[i] = b[i] * c + (i % 2 ? 1 : -1) * f; bG(h, { "stroke-dasharray": g[v](",") }) } }; d[f]("rotation") && (j = d.rotation); var m = r(j)[s](b); m.length - 1 ? (m[1] = +m[1], m[2] = +m[2]) : m = null, S(j) && c.rotate(0, !0); for (var n in d) if (d[f](n)) { if (!W[f](n)) continue; var o = d[n]; i[n] = o; switch (n) { case "blur": c.blur(o); break; case "rotation": c.rotate(o, !0); break; case "href": case "title": case "target": var t = h.parentNode; if (x.call(t.tagName) != "a") { var u = bG("a"); t.insertBefore(u, h), u[l](h), t = u } n == "target" && o == "blank" ? t.setAttributeNS(c.paper.xlink, "show", "new") : t.setAttributeNS(c.paper.xlink, n, o); break; case "cursor": h.style.cursor = o; break; case "clip-rect": var y = r(o)[s](b); if (y[w] == 4) { c.clip && c.clip.parentNode.parentNode.removeChild(c.clip.parentNode); var z = bG("clipPath"), A = bG("rect"); z.id = bh(), bG(A, { x: y[0], y: y[1], width: y[2], height: y[3] }), z[l](A), c.paper.defs[l](z), bG(h, { "clip-path": "url(#" + z.id + ")" }), c.clip = A } if (!o) { var B = g.getElementById(h.getAttribute("clip-path")[Y](/(^url\(#|\)$)/g, p)); B && B.parentNode.removeChild(B), bG(h, { "clip-path": p }), delete c.clip } break; case "path": c.type == "path" && bG(h, { d: o ? i.path = bq(o) : "M0,0" }); break; case "width": h[R](n, o); if (i.fx) n = "x", o = i.x; else break; case "x": i.fx && (o = -i.x - (i.width || 0)); case "rx": if (n == "rx" && c.type == "rect") break; case "cx": m && (n == "x" || n == "cx") && (m[1] += o - i[n]), h[R](n, o), c.pattern && bJ(c); break; case "height": h[R](n, o); if (i.fy) n = "y", o = i.y; else break; case "y": i.fy && (o = -i.y - (i.height || 0)); case "ry": if (n == "ry" && c.type == "rect") break; case "cy": m && (n == "y" || n == "cy") && (m[2] += o - i[n]), h[R](n, o), c.pattern && bJ(c); break; case "r": c.type == "rect" ? bG(h, { rx: o, ry: o }) : h[R](n, o); break; case "src": c.type == "image" && h.setAttributeNS(c.paper.xlink, "href", o); break; case "stroke-width": h.style.strokeWidth = o, h[R](n, o), i["stroke-dasharray"] && k(c, i["stroke-dasharray"]); break; case "stroke-dasharray": k(c, o); break; case "translation": var C = r(o)[s](b); C[0] = +C[0] || 0, C[1] = +C[1] || 0, m && (m[1] += C[0], m[2] += C[1]), cA.call(c, C[0], C[1]); break; case "scale": C = r(o)[s](b), c.scale(+C[0] || 1, +C[1] || +C[0] || 1, isNaN(S(C[2])) ? null : +C[2], isNaN(S(C[3])) ? null : +C[3]); break; case I: var D = r(o).match(M); if (D) { z = bG("pattern"); var E = bG("image"); z.id = bh(), bG(z, { x: 0, y: 0, patternUnits: "userSpaceOnUse", height: 1, width: 1 }), bG(E, { x: 0, y: 0 }), E.setAttributeNS(c.paper.xlink, "href", D[1]), z[l](E); var F = g.createElement("img"); F.style.cssText = "position:absolute;left:-9999em;top-9999em", F.onload = function() { bG(z, { width: this.offsetWidth, height: this.offsetHeight }), bG(E, { width: this.offsetWidth, height: this.offsetHeight }), g.body.removeChild(this), c.paper.safari() }, g.body[l](F), F.src = D[1], c.paper.defs[l](z), h.style.fill = "url(#" + z.id + ")", bG(h, { fill: "url(#" + z.id + ")" }), c.pattern = z, c.pattern && bJ(c); break } var G = a.getRGB(o); if (!G.error) delete d.gradient, delete i.gradient, !a.is(i.opacity, "undefined") && a.is(d.opacity, "undefined") && bG(h, { opacity: i.opacity }), !a.is(i["fill-opacity"], "undefined") && a.is(d["fill-opacity"], "undefined") && bG(h, { "fill-opacity": i["fill-opacity"] }); else if ((({ circle: 1, ellipse: 1 })[f](c.type) || r(o).charAt() != "r") && bI(h, o, c.paper)) { i.gradient = o, i.fill = "none"; break } G[f]("opacity") && bG(h, { "fill-opacity": G.opacity > 1 ? G.opacity / 100 : G.opacity }); case "stroke": G = a.getRGB(o), h[R](n, G.hex), n == "stroke" && G[f]("opacity") && bG(h, { "stroke-opacity": G.opacity > 1 ? G.opacity / 100 : G.opacity }); break; case "gradient": (({ circle: 1, ellipse: 1 })[f](c.type) || r(o).charAt() != "r") && bI(h, o, c.paper); break; case "opacity": i.gradient && !i[f]("stroke-opacity") && bG(h, { "stroke-opacity": o > 1 ? o / 100 : o }); case "fill-opacity": if (i.gradient) { var H = g.getElementById(h.getAttribute(I)[Y](/^url\(#|\)$/g, p)); if (H) { var J = H.getElementsByTagName("stop"); J[J[w] - 1][R]("stop-opacity", o) } break }; default: n == "font-size" && (o = T(o, 10) + "px"); var K = n[Y](/(\-.)/g, function(a) { return V.call(a.substring(1)) }); h.style[K] = o, h[R](n, o) } } bM(c, d), m ? c.rotate(m.join(q)) : S(j) && c.rotate(j, !0) }, bL = 1.2, bM = function(b, c) { if (b.type == "text" && !!(c[f]("text") || c[f]("font") || c[f]("font-size") || c[f]("x") || c[f]("y"))) { var d = b.attrs, e = b.node, h = e.firstChild ? T(g.defaultView.getComputedStyle(e.firstChild, p).getPropertyValue("font-size"), 10) : 10; if (c[f]("text")) { d.text = c.text; while (e.firstChild) e.removeChild(e.firstChild); var i = r(c.text)[s]("\n"); for (var j = 0, k = i[w]; j < k; j++) if (i[j]) { var m = bG("tspan"); j && bG(m, { dy: h * bL, x: d.x }), m[l](g.createTextNode(i[j])), e[l](m) } } else { i = e.getElementsByTagName("tspan"); for (j = 0, k = i[w]; j < k; j++) j && bG(i[j], { dy: h * bL, x: d.x }) } bG(e, { y: d.y }); var n = b.getBBox(), o = d.y - (n.y + n.height / 2); o && a.is(o, "finite") && bG(e, { y: d.y + o }) } }, bN = function(b, c) { var d = 0, e = 0; this[0] = b, this.id = a._oid++, this.node = b, b.raphael = this, this.paper = c, this.attrs = this.attrs || {}, this.transformations = [], this._ = { tx: 0, ty: 0, rt: { deg: 0, cx: 0, cy: 0 }, sx: 1, sy: 1 }, !c.bottom && (c.bottom = this), this.prev = c.top, c.top && (c.top.next = this), c.top = this, this.next = null }, bO = bN[e]; bN[e].rotate = function(c, d, e) { if (this.removed) return this; if (c == null) { if (this._.rt.cx) return [this._.rt.deg, this._.rt.cx, this._.rt.cy][v](q); return this._.rt.deg } var f = this.getBBox(); c = r(c)[s](b), c[w] - 1 && (d = S(c[1]), e = S(c[2])), c = S(c[0]), d != null && d !== !1 ? this._.rt.deg = c : this._.rt.deg += c, e == null && (d = null), this._.rt.cx = d, this._.rt.cy = e, d = d == null ? f.x + f.width / 2 : d, e = e == null ? f.y + f.height / 2 : e, this._.rt.deg ? (this.transformations[0] = a.format("rotate({0} {1} {2})", this._.rt.deg, d, e), this.clip && bG(this.clip, { transform: a.format("rotate({0} {1} {2})", -this._.rt.deg, d, e) })) : (this.transformations[0] = p, this.clip && bG(this.clip, { transform: p })), bG(this.node, { transform: this.transformations[v](q) }); return this }, bN[e].hide = function() { !this.removed && (this.node.style.display = "none"); return this }, bN[e].show = function() { !this.removed && (this.node.style.display = ""); return this }, bN[e].remove = function() { if (!this.removed) { bA(this, this.paper), this.node.parentNode.removeChild(this.node); for (var a in this) delete this[a]; this.removed = !0 } }, bN[e].getBBox = function() { if (this.removed) return this; if (this.type == "path") return bn(this.attrs.path); if (this.node.style.display == "none") { this.show(); var a = !0 } var b = {}; try { b = this.node.getBBox() } catch (c) { } finally { b = b || {} } if (this.type == "text") { b = { x: b.x, y: Infinity, width: 0, height: 0 }; for (var d = 0, e = this.node.getNumberOfChars(); d < e; d++) { var f = this.node.getExtentOfChar(d); f.y < b.y && (b.y = f.y), f.y + f.height - b.y > b.height && (b.height = f.y + f.height - b.y), f.x + f.width - b.x > b.width && (b.width = f.x + f.width - b.x) } } a && this.hide(); return b }, bN[e].attr = function(b, c) { if (this.removed) return this; if (b == null) { var d = {}; for (var e in this.attrs) this.attrs[f](e) && (d[e] = this.attrs[e]); this._.rt.deg && (d.rotation = this.rotate()), (this._.sx != 1 || this._.sy != 1) && (d.scale = this.scale()), d.gradient && d.fill == "none" && (d.fill = d.gradient) && delete d.gradient; return d } if (c == null && a.is(b, F)) { if (b == "translation") return cA.call(this); if (b == "rotation") return this.rotate(); if (b == "scale") return this.scale(); if (b == I && this.attrs.fill == "none" && this.attrs.gradient) return this.attrs.gradient; return this.attrs[b] } if (c == null && a.is(b, G)) { var g = {}; for (var h = 0, i = b.length; h < i; h++) g[b[h]] = this.attr(b[h]); return g } if (c != null) { var j = {}; j[b] = c } else b != null && a.is(b, "object") && (j = b); for (var k in this.paper.customAttributes) if (this.paper.customAttributes[f](k) && j[f](k) && a.is(this.paper.customAttributes[k], "function")) { var l = this.paper.customAttributes[k].apply(this, [][n](j[k])); this.attrs[k] = j[k]; for (var m in l) l[f](m) && (j[m] = l[m]) } bK(this, j); return this }, bN[e].toFront = function() { if (this.removed) return this; this.node.parentNode[l](this.node); var a = this.paper; a.top != this && bB(this, a); return this }, bN[e].toBack = function() { if (this.removed) return this; if (this.node.parentNode.firstChild != this.node) { this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild), bC(this, this.paper); var a = this.paper } return this }, bN[e].insertAfter = function(a) { if (this.removed) return this; var b = a.node || a[a.length - 1].node; b.nextSibling ? b.parentNode.insertBefore(this.node, b.nextSibling) : b.parentNode[l](this.node), bD(this, a, this.paper); return this }, bN[e].insertBefore = function(a) { if (this.removed) return this; var b = a.node || a[0].node; b.parentNode.insertBefore(this.node, b), bE(this, a, this.paper); return this }, bN[e].blur = function(a) { var b = this; if (+a !== 0) { var c = bG("filter"), d = bG("feGaussianBlur"); b.attrs.blur = a, c.id = bh(), bG(d, { stdDeviation: +a || 1.5 }), c.appendChild(d), b.paper.defs.appendChild(c), b._blur = c, bG(b.node, { filter: "url(#" + c.id + ")" }) } else b._blur && (b._blur.parentNode.removeChild(b._blur), delete b._blur, delete b.attrs.blur), b.node.removeAttribute("filter") }; var bP = function(a, b, c, d) { var e = bG("circle"); a.canvas && a.canvas[l](e); var f = new bN(e, a); f.attrs = { cx: b, cy: c, r: d, fill: "none", stroke: "#000" }, f.type = "circle", bG(e, f.attrs); return f }, bQ = function(a, b, c, d, e, f) { var g = bG("rect"); a.canvas && a.canvas[l](g); var h = new bN(g, a); h.attrs = { x: b, y: c, width: d, height: e, r: f || 0, rx: f || 0, ry: f || 0, fill: "none", stroke: "#000" }, h.type = "rect", bG(g, h.attrs); return h }, bR = function(a, b, c, d, e) { var f = bG("ellipse"); a.canvas && a.canvas[l](f); var g = new bN(f, a); g.attrs = { cx: b, cy: c, rx: d, ry: e, fill: "none", stroke: "#000" }, g.type = "ellipse", bG(f, g.attrs); return g }, bS = function(a, b, c, d, e, f) { var g = bG("image"); bG(g, { x: c, y: d, width: e, height: f, preserveAspectRatio: "none" }), g.setAttributeNS(a.xlink, "href", b), a.canvas && a.canvas[l](g); var h = new bN(g, a); h.attrs = { x: c, y: d, width: e, height: f, src: b }, h.type = "image"; return h }, bT = function(a, b, c, d) { var e = bG("text"); bG(e, { x: b, y: c, "text-anchor": "middle" }), a.canvas && a.canvas[l](e); var f = new bN(e, a); f.attrs = { x: b, y: c, "text-anchor": "middle", text: d, font: W.font, stroke: "none", fill: "#000" }, f.type = "text", bK(f, f.attrs); return f }, bU = function(a, b) { this.width = a || this.width, this.height = b || this.height, this.canvas[R]("width", this.width), this.canvas[R]("height", this.height); return this }, bV = function() { var b = by[m](0, arguments), c = b && b.container, d = b.x, e = b.y, f = b.width, h = b.height; if (!c) throw new Error("SVG container not found."); var i = bG("svg"); d = d || 0, e = e || 0, f = f || 512, h = h || 342, bG(i, { xmlns: "http://www.w3.org/2000/svg", version: 1.1, width: f, height: h }), c == 1 ? (i.style.cssText = "position:absolute;left:" + d + "px;top:" + e + "px", g.body[l](i)) : c.firstChild ? c.insertBefore(i, c.firstChild) : c[l](i), c = new j, c.width = f, c.height = h, c.canvas = i, bz.call(c, c, a.fn), c.clear(); return c }; k.clear = function() { var a = this.canvas; while (a.firstChild) a.removeChild(a.firstChild); this.bottom = this.top = null, (this.desc = bG("desc"))[l](g.createTextNode("Created with Raphaël")), a[l](this.desc), a[l](this.defs = bG("defs")) }, k.remove = function() { this.canvas.parentNode && this.canvas.parentNode.removeChild(this.canvas); for (var a in this) this[a] = bF(a) } } if (a.vml) { var bW = { M: "m", L: "l", C: "c", Z: "x", m: "t", l: "r", c: "v", z: "x" }, bX = /([clmz]),?([^clmz]*)/gi, bY = / progid:\S+Blur\([^\)]+\)/g, bZ = /-?[^,\s-]+/g, b$ = 1e3 + q + 1e3, b_ = 10, ca = { path: 1, rect: 1 }, cb = function(a) { var b = /[ahqstv]/ig, c = bq; r(a).match(b) && (c = bw), b = /[clmz]/g; if (c == bq && !r(a).match(b)) { var d = r(a)[Y](bX, function(a, b, c) { var d = [], e = x.call(b) == "m", f = bW[b]; c[Y](bZ, function(a) { e && d[w] == 2 && (f += d + bW[b == "m" ? "l" : "L"], d = []), d[L](Q(a * b_)) }); return f + d }); return d } var e = c(a), f, g; d = []; for (var h = 0, i = e[w]; h < i; h++) { f = e[h], g = x.call(e[h][0]), g == "z" && (g = "x"); for (var j = 1, k = f[w]; j < k; j++) g += Q(f[j] * b_) + (j != k - 1 ? "," : p); d[L](g) } return d[v](q) }; a[H] = function() { return "Your browser doesn’t support SVG. Falling down to VML.\nYou are running Raphaël " + this.version }, bH = function(a, b) { var c = cd("group"); c.style.cssText = "position:absolute;left:0;top:0;width:" + b.width + "px;height:" + b.height + "px", c.coordsize = b.coordsize, c.coordorigin = b.coordorigin; var d = cd("shape"), e = d.style; e.width = b.width + "px", e.height = b.height + "px", d.coordsize = b$, d.coordorigin = b.coordorigin, c[l](d); var f = new bN(d, c, b), g = { fill: "none", stroke: "#000" }; a && (g.path = a), f.type = "path", f.path = [], f.Path = p, bK(f, g), b.canvas[l](c); var h = cd("skew"); h.on = !0, d.appendChild(h), f.skew = h; return f }, bK = function(c, d) { c.attrs = c.attrs || {}; var e = c.node, h = c.attrs, i = e.style, j, k = (d.x != h.x || d.y != h.y || d.width != h.width || d.height != h.height || d.r != h.r) && c.type == "rect", m = c; for (var n in d) d[f](n) && (h[n] = d[n]); k && (h.path = cc(h.x, h.y, h.width, h.height, h.r), c.X = h.x, c.Y = h.y, c.W = h.width, c.H = h.height), d.href && (e.href = d.href), d.title && (e.title = d.title), d.target && (e.target = d.target), d.cursor && (i.cursor = d.cursor), "blur" in d && c.blur(d.blur); if (d.path && c.type == "path" || k) e.path = cb(h.path); d.rotation != null && c.rotate(d.rotation, !0), d.translation && (j = r(d.translation)[s](b), cA.call(c, j[0], j[1]), c._.rt.cx != null && (c._.rt.cx += +j[0], c._.rt.cy += +j[1], c.setBox(c.attrs, j[0], j[1]))), d.scale && (j = r(d.scale)[s](b), c.scale(+j[0] || 1, +j[1] || +j[0] || 1, +j[2] || null, +j[3] || null)); if ("clip-rect" in d) { var o = r(d["clip-rect"])[s](b); if (o[w] == 4) { o[2] = +o[2] + +o[0], o[3] = +o[3] + +o[1]; var q = e.clipRect || g.createElement("div"), t = q.style, u = e.parentNode; t.clip = a.format("rect({1}px {2}px {3}px {0}px)", o), e.clipRect || (t.position = "absolute", t.top = 0, t.left = 0, t.width = c.paper.width + "px", t.height = c.paper.height + "px", u.parentNode.insertBefore(q, u), q[l](u), e.clipRect = q) } d["clip-rect"] || e.clipRect && (e.clipRect.style.clip = p) } c.type == "image" && d.src && (e.src = d.src), c.type == "image" && d.opacity && (e.filterOpacity = U + ".Alpha(opacity=" + d.opacity * 100 + ")", i.filter = (e.filterMatrix || p) + (e.filterOpacity || p)), d.font && (i.font = d.font), d["font-family"] && (i.fontFamily = '"' + d["font-family"][s](",")[0][Y](/^['"]+|['"]+$/g, p) + '"'), d["font-size"] && (i.fontSize = d["font-size"]), d["font-weight"] && (i.fontWeight = d["font-weight"]), d["font-style"] && (i.fontStyle = d["font-style"]); if (d.opacity != null || d["stroke-width"] != null || d.fill != null || d.stroke != null || d["stroke-width"] != null || d["stroke-opacity"] != null || d["fill-opacity"] != null || d["stroke-dasharray"] != null || d["stroke-miterlimit"] != null || d["stroke-linejoin"] != null || d["stroke-linecap"] != null) { e = c.shape || e; var v = e.getElementsByTagName(I) && e.getElementsByTagName(I)[0], x = !1; !v && (x = v = cd(I)); if ("fill-opacity" in d || "opacity" in d) { var y = ((+h["fill-opacity"] + 1 || 2) - 1) * ((+h.opacity + 1 || 2) - 1) * ((+a.getRGB(d.fill).o + 1 || 2) - 1); y = A(z(y, 0), 1), v.opacity = y } d.fill && (v.on = !0); if (v.on == null || d.fill == "none") v.on = !1; if (v.on && d.fill) { var B = d.fill.match(M); B ? (v.src = B[1], v.type = "tile") : (v.color = a.getRGB(d.fill).hex, v.src = p, v.type = "solid", a.getRGB(d.fill).error && (m.type in { circle: 1, ellipse: 1} || r(d.fill).charAt() != "r") && bI(m, d.fill) && (h.fill = "none", h.gradient = d.fill)) } x && e[l](v); var C = e.getElementsByTagName("stroke") && e.getElementsByTagName("stroke")[0], D = !1; !C && (D = C = cd("stroke")); if (d.stroke && d.stroke != "none" || d["stroke-width"] || d["stroke-opacity"] != null || d["stroke-dasharray"] || d["stroke-miterlimit"] || d["stroke-linejoin"] || d["stroke-linecap"]) C.on = !0; (d.stroke == "none" || C.on == null || d.stroke == 0 || d["stroke-width"] == 0) && (C.on = !1); var E = a.getRGB(d.stroke); C.on && d.stroke && (C.color = E.hex), y = ((+h["stroke-opacity"] + 1 || 2) - 1) * ((+h.opacity + 1 || 2) - 1) * ((+E.o + 1 || 2) - 1); var F = (S(d["stroke-width"]) || 1) * .75; y = A(z(y, 0), 1), d["stroke-width"] == null && (F = h["stroke-width"]), d["stroke-width"] && (C.weight = F), F && F < 1 && (y *= F) && (C.weight = 1), C.opacity = y, d["stroke-linejoin"] && (C.joinstyle = d["stroke-linejoin"] || "miter"), C.miterlimit = d["stroke-miterlimit"] || 8, d["stroke-linecap"] && (C.endcap = d["stroke-linecap"] == "butt" ? "flat" : d["stroke-linecap"] == "square" ? "square" : "round"); if (d["stroke-dasharray"]) { var G = { "-": "shortdash", ".": "shortdot", "-.": "shortdashdot", "-..": "shortdashdotdot", ". ": "dot", "- ": "dash", "--": "longdash", "- .": "dashdot", "--.": "longdashdot", "--..": "longdashdotdot" }; C.dashstyle = G[f](d["stroke-dasharray"]) ? G[d["stroke-dasharray"]] : p } D && e[l](C) } if (m.type == "text") { i = m.paper.span.style, h.font && (i.font = h.font), h["font-family"] && (i.fontFamily = h["font-family"]), h["font-size"] && (i.fontSize = h["font-size"]), h["font-weight"] && (i.fontWeight = h["font-weight"]), h["font-style"] && (i.fontStyle = h["font-style"]), m.node.string && (m.paper.span.innerHTML = r(m.node.string)[Y](/</g, "&#60;")[Y](/&/g, "&#38;")[Y](/\n/g, "<br>")), m.W = h.w = m.paper.span.offsetWidth, m.H = h.h = m.paper.span.offsetHeight, m.X = h.x, m.Y = h.y + Q(m.H / 2); switch (h["text-anchor"]) { case "start": m.node.style["v-text-align"] = "left", m.bbx = Q(m.W / 2); break; case "end": m.node.style["v-text-align"] = "right", m.bbx = -Q(m.W / 2); break; default: m.node.style["v-text-align"] = "center" } } }, bI = function(a, b) { a.attrs = a.attrs || {}; var c = a.attrs, d, e = "linear", f = ".5 .5"; a.attrs.gradient = b, b = r(b)[Y](bd, function(a, b, c) { e = "radial", b && c && (b = S(b), c = S(c), C(b - .5, 2) + C(c - .5, 2) > .25 && (c = y.sqrt(.25 - C(b - .5, 2)) * ((c > .5) * 2 - 1) + .5), f = b + q + c); return p }), b = b[s](/\s*\-\s*/); if (e == "linear") { var g = b.shift(); g = -S(g); if (isNaN(g)) return null } var h = bx(b); if (!h) return null; a = a.shape || a.node, d = a.getElementsByTagName(I)[0] || cd(I), !d.parentNode && a.appendChild(d); if (h[w]) { d.on = !0, d.method = "none", d.color = h[0].color, d.color2 = h[h[w] - 1].color; var i = []; for (var j = 0, k = h[w]; j < k; j++) h[j].offset && i[L](h[j].offset + q + h[j].color); d.colors && (d.colors.value = i[w] ? i[v]() : "0% " + d.color), e == "radial" ? (d.type = "gradientradial", d.focus = "100%", d.focussize = f, d.focusposition = f) : (d.type = "gradient", d.angle = (270 - g) % 360) } return 1 }, bN = function(b, c, d) { var e = 0, f = 0, g = 0, h = 1; this[0] = b, this.id = a._oid++, this.node = b, b.raphael = this, this.X = 0, this.Y = 0, this.attrs = {}, this.Group = c, this.paper = d, this._ = { tx: 0, ty: 0, rt: { deg: 0 }, sx: 1, sy: 1 }, !d.bottom && (d.bottom = this), this.prev = d.top, d.top && (d.top.next = this), d.top = this, this.next = null }, bO = bN[e], bO.rotate = function(a, c, d) { if (this.removed) return this; if (a == null) { if (this._.rt.cx) return [this._.rt.deg, this._.rt.cx, this._.rt.cy][v](q); return this._.rt.deg } a = r(a)[s](b), a[w] - 1 && (c = S(a[1]), d = S(a[2])), a = S(a[0]), c != null ? this._.rt.deg = a : this._.rt.deg += a, d == null && (c = null), this._.rt.cx = c, this._.rt.cy = d, this.setBox(this.attrs, c, d), this.Group.style.rotation = this._.rt.deg; return this }, bO.setBox = function(a, b, c) { if (this.removed) return this; var d = this.Group.style, e = this.shape && this.shape.style || this.node.style; a = a || {}; for (var g in a) a[f](g) && (this.attrs[g] = a[g]); b = b || this._.rt.cx, c = c || this._.rt.cy; var h = this.attrs, i, j, k, l; switch (this.type) { case "circle": i = h.cx - h.r, j = h.cy - h.r, k = l = h.r * 2; break; case "ellipse": i = h.cx - h.rx, j = h.cy - h.ry, k = h.rx * 2, l = h.ry * 2; break; case "image": i = +h.x, j = +h.y, k = h.width || 0, l = h.height || 0; break; case "text": this.textpath.v = ["m", Q(h.x), ", ", Q(h.y - 2), "l", Q(h.x) + 1, ", ", Q(h.y - 2)][v](p), i = h.x - Q(this.W / 2), j = h.y - this.H / 2, k = this.W, l = this.H; break; case "rect": case "path": if (!this.attrs.path) i = 0, j = 0, k = this.paper.width, l = this.paper.height; else { var m = bn(this.attrs.path); i = m.x, j = m.y, k = m.width, l = m.height } break; default: i = 0, j = 0, k = this.paper.width, l = this.paper.height } b = b == null ? i + k / 2 : b, c = c == null ? j + l / 2 : c; var n = b - this.paper.width / 2, o = c - this.paper.height / 2, q; d.left != (q = n + "px") && (d.left = q), d.top != (q = o + "px") && (d.top = q), this.X = ca[f](this.type) ? -n : i, this.Y = ca[f](this.type) ? -o : j, this.W = k, this.H = l, ca[f](this.type) ? (e.left != (q = -n * b_ + "px") && (e.left = q), e.top != (q = -o * b_ + "px") && (e.top = q)) : this.type == "text" ? (e.left != (q = -n + "px") && (e.left = q), e.top != (q = -o + "px") && (e.top = q)) : (d.width != (q = this.paper.width + "px") && (d.width = q), d.height != (q = this.paper.height + "px") && (d.height = q), e.left != (q = i - n + "px") && (e.left = q), e.top != (q = j - o + "px") && (e.top = q), e.width != (q = k + "px") && (e.width = q), e.height != (q = l + "px") && (e.height = q)) }, bO.hide = function() { !this.removed && (this.Group.style.display = "none"); return this }, bO.show = function() { !this.removed && (this.Group.style.display = "block"); return this }, bO.getBBox = function() { if (this.removed) return this; if (ca[f](this.type)) return bn(this.attrs.path); return { x: this.X + (this.bbx || 0), y: this.Y, width: this.W, height: this.H} }, bO.remove = function() { if (!this.removed) { bA(this, this.paper), this.node.parentNode.removeChild(this.node), this.Group.parentNode.removeChild(this.Group), this.shape && this.shape.parentNode.removeChild(this.shape); for (var a in this) delete this[a]; this.removed = !0 } }, bO.attr = function(b, c) { if (this.removed) return this; if (b == null) { var d = {}; for (var e in this.attrs) this.attrs[f](e) && (d[e] = this.attrs[e]); this._.rt.deg && (d.rotation = this.rotate()), (this._.sx != 1 || this._.sy != 1) && (d.scale = this.scale()), d.gradient && d.fill == "none" && (d.fill = d.gradient) && delete d.gradient; return d } if (c == null && a.is(b, "string")) { if (b == "translation") return cA.call(this); if (b == "rotation") return this.rotate(); if (b == "scale") return this.scale(); if (b == I && this.attrs.fill == "none" && this.attrs.gradient) return this.attrs.gradient; return this.attrs[b] } if (this.attrs && c == null && a.is(b, G)) { var g, h = {}; for (e = 0, g = b[w]; e < g; e++) h[b[e]] = this.attr(b[e]); return h } var i; c != null && (i = {}, i[b] = c), c == null && a.is(b, "object") && (i = b); if (i) { for (var j in this.paper.customAttributes) if (this.paper.customAttributes[f](j) && i[f](j) && a.is(this.paper.customAttributes[j], "function")) { var k = this.paper.customAttributes[j].apply(this, [][n](i[j])); this.attrs[j] = i[j]; for (var l in k) k[f](l) && (i[l] = k[l]) } i.text && this.type == "text" && (this.node.string = i.text), bK(this, i), i.gradient && (({ circle: 1, ellipse: 1 })[f](this.type) || r(i.gradient).charAt() != "r") && bI(this, i.gradient), (!ca[f](this.type) || this._.rt.deg) && this.setBox(this.attrs) } return this }, bO.toFront = function() { !this.removed && this.Group.parentNode[l](this.Group), this.paper.top != this && bB(this, this.paper); return this }, bO.toBack = function() { if (this.removed) return this; this.Group.parentNode.firstChild != this.Group && (this.Group.parentNode.insertBefore(this.Group, this.Group.parentNode.firstChild), bC(this, this.paper)); return this }, bO.insertAfter = function(a) { if (this.removed) return this; a.constructor == cD && (a = a[a.length - 1]), a.Group.nextSibling ? a.Group.parentNode.insertBefore(this.Group, a.Group.nextSibling) : a.Group.parentNode[l](this.Group), bD(this, a, this.paper); return this }, bO.insertBefore = function(a) { if (this.removed) return this; a.constructor == cD && (a = a[0]), a.Group.parentNode.insertBefore(this.Group, a.Group), bE(this, a, this.paper); return this }, bO.blur = function(b) { var c = this.node.runtimeStyle, d = c.filter; d = d.replace(bY, p), +b !== 0 ? (this.attrs.blur = b, c.filter = d + q + U + ".Blur(pixelradius=" + (+b || 1.5) + ")", c.margin = a.format("-{0}px 0 0 -{0}px", Q(+b || 1.5))) : (c.filter = d, c.margin = 0, delete this.attrs.blur) }, bP = function(a, b, c, d) { var e = cd("group"), f = cd("oval"), g = f.style; e.style.cssText = "position:absolute;left:0;top:0;width:" + a.width + "px;height:" + a.height + "px", e.coordsize = b$, e.coordorigin = a.coordorigin, e[l](f); var h = new bN(f, e, a); h.type = "circle", bK(h, { stroke: "#000", fill: "none" }), h.attrs.cx = b, h.attrs.cy = c, h.attrs.r = d, h.setBox({ x: b - d, y: c - d, width: d * 2, height: d * 2 }), a.canvas[l](e); return h }; function cc(b, c, d, e, f) { return f ? a.format("M{0},{1}l{2},0a{3},{3},0,0,1,{3},{3}l0,{5}a{3},{3},0,0,1,{4},{3}l{6},0a{3},{3},0,0,1,{4},{4}l0,{7}a{3},{3},0,0,1,{3},{4}z", b + f, c, d - f * 2, f, -f, e - f * 2, f * 2 - d, f * 2 - e) : a.format("M{0},{1}l{2},0,0,{3},{4},0z", b, c, d, e, -d) } bQ = function(a, b, c, d, e, f) { var g = cc(b, c, d, e, f), h = a.path(g), i = h.attrs; h.X = i.x = b, h.Y = i.y = c, h.W = i.width = d, h.H = i.height = e, i.r = f, i.path = g, h.type = "rect"; return h }, bR = function(a, b, c, d, e) { var f = cd("group"), g = cd("oval"), h = g.style; f.style.cssText = "position:absolute;left:0;top:0;width:" + a.width + "px;height:" + a.height + "px", f.coordsize = b$, f.coordorigin = a.coordorigin, f[l](g); var i = new bN(g, f, a); i.type = "ellipse", bK(i, { stroke: "#000" }), i.attrs.cx = b, i.attrs.cy = c, i.attrs.rx = d, i.attrs.ry = e, i.setBox({ x: b - d, y: c - e, width: d * 2, height: e * 2 }), a.canvas[l](f); return i }, bS = function(a, b, c, d, e, f) { var g = cd("group"), h = cd("image"); g.style.cssText = "position:absolute;left:0;top:0;width:" + a.width + "px;height:" + a.height + "px", g.coordsize = b$, g.coordorigin = a.coordorigin, h.src = b, g[l](h); var i = new bN(h, g, a); i.type = "image", i.attrs.src = b, i.attrs.x = c, i.attrs.y = d, i.attrs.w = e, i.attrs.h = f, i.setBox({ x: c, y: d, width: e, height: f }), a.canvas[l](g); var j = cd("skew"); j.on = !0, h.appendChild(j), i.skew = j; return i }, bT = function(b, c, d, e) { var f = cd("group"), g = cd("shape"), h = g.style, i = cd("path"), j = i.style, k = cd("textpath"); f.style.cssText = "position:absolute;left:0;top:0;width:" + b.width + "px;height:" + b.height + "px", f.coordsize = b$, f.coordorigin = b.coordorigin, i.v = a.format("m{0},{1}l{2},{1}", Q(c * 10), Q(d * 10), Q(c * 10) + 1), i.textpathok = !0, h.width = b.width, h.height = b.height, k.string = r(e), k.on = !0, g[l](k), g[l](i), f[l](g); var m = new bN(k, f, b); m.shape = g, m.textpath = i, m.type = "text", m.attrs.text = e, m.attrs.x = c, m.attrs.y = d, m.attrs.w = 1, m.attrs.h = 1, bK(m, { font: W.font, stroke: "none", fill: "#000" }), m.setBox(), b.canvas[l](f); return m }, bU = function(a, b) { var c = this.canvas.style; a == +a && (a += "px"), b == +b && (b += "px"), c.width = a, c.height = b, c.clip = "rect(0 " + a + " " + b + " 0)"; return this }; var cd; g.createStyleSheet().addRule(".rvml", "behavior:url(#default#VML)"); try { !g.namespaces.rvml && g.namespaces.add("rvml", "urn:schemas-microsoft-com:vml"), cd = function(a) { return g.createElement("<rvml:" + a + ' class="rvml">') } } catch (ce) { cd = function(a) { return g.createElement("<" + a + ' xmlns="urn:schemas-microsoft.com:vml" class="rvml">') } } bV = function() { var b = by[m](0, arguments), c = b.container, d = b.height, e, f = b.width, h = b.x, i = b.y; if (!c) throw new Error("VML container not found."); var k = new j, n = k.canvas = g.createElement("div"), o = n.style; h = h || 0, i = i || 0, f = f || 512, d = d || 342, f == +f && (f += "px"), d == +d && (d += "px"), k.width = 1e3, k.height = 1e3, k.coordsize = b_ * 1e3 + q + b_ * 1e3, k.coordorigin = "0 0", k.span = g.createElement("span"), k.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;", n[l](k.span), o.cssText = a.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden", f, d), c == 1 ? (g.body[l](n), o.left = h + "px", o.top = i + "px", o.position = "absolute") : c.firstChild ? c.insertBefore(n, c.firstChild) : c[l](n), bz.call(k, k, a.fn); return k }, k.clear = function() { this.canvas.innerHTML = p, this.span = g.createElement("span"), this.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;", this.canvas[l](this.span), this.bottom = this.top = null }, k.remove = function() { this.canvas.parentNode.removeChild(this.canvas); for (var a in this) this[a] = bF(a); return !0 } } var cf = navigator.userAgent.match(/Version\/(.*?)\s/); navigator.vendor == "Apple Computer, Inc." && (cf && cf[1] < 4 || navigator.platform.slice(0, 2) == "iP") ? k.safari = function() { var a = this.rect(-99, -99, this.width + 99, this.height + 99).attr({ stroke: "none" }); h.setTimeout(function() { a.remove() }) } : k.safari = function() { }; var cg = function() { this.returnValue = !1 }, ch = function() { return this.originalEvent.preventDefault() }, ci = function() { this.cancelBubble = !0 }, cj = function() { return this.originalEvent.stopPropagation() }, ck = function() { if (g.addEventListener) return function(a, b, c, d) { var e = o && u[b] ? u[b] : b, g = function(e) { if (o && u[f](b)) for (var g = 0, h = e.targetTouches && e.targetTouches.length; g < h; g++) if (e.targetTouches[g].target == a) { var i = e; e = e.targetTouches[g], e.originalEvent = i, e.preventDefault = ch, e.stopPropagation = cj; break } return c.call(d, e) }; a.addEventListener(e, g, !1); return function() { a.removeEventListener(e, g, !1); return !0 } }; if (g.attachEvent) return function(a, b, c, d) { var e = function(a) { a = a || h.event, a.preventDefault = a.preventDefault || cg, a.stopPropagation = a.stopPropagation || ci; return c.call(d, a) }; a.attachEvent("on" + b, e); var f = function() { a.detachEvent("on" + b, e); return !0 }; return f } } (), cl = [], cm = function(a) { var b = a.clientX, c = a.clientY, d = g.documentElement.scrollTop || g.body.scrollTop, e = g.documentElement.scrollLeft || g.body.scrollLeft, f, h = cl.length; while (h--) { f = cl[h]; if (o) { var i = a.touches.length, j; while (i--) { j = a.touches[i]; if (j.identifier == f.el._drag.id) { b = j.clientX, c = j.clientY, (a.originalEvent ? a.originalEvent : a).preventDefault(); break } } } else a.preventDefault(); b += e, c += d, f.move && f.move.call(f.move_scope || f.el, b - f.el._drag.x, c - f.el._drag.y, b, c, a) } }, cn = function(b) { a.unmousemove(cm).unmouseup(cn); var c = cl.length, d; while (c--) d = cl[c], d.el._drag = {}, d.end && d.end.call(d.end_scope || d.start_scope || d.move_scope || d.el, b); cl = [] }; for (var co = t[w]; co--; ) (function(b) { a[b] = bN[e][b] = function(c, d) { a.is(c, "function") && (this.events = this.events || [], this.events.push({ name: b, f: c, unbind: ck(this.shape || this.node || g, b, c, d || this) })); return this }, a["un" + b] = bN[e]["un" + b] = function(a) { var c = this.events, d = c[w]; while (d--) if (c[d].name == b && c[d].f == a) { c[d].unbind(), c.splice(d, 1), !c.length && delete this.events; return this } return this } })(t[co]); bO.hover = function(a, b, c, d) { return this.mouseover(a, c).mouseout(b, d || c) }, bO.unhover = function(a, b) { return this.unmouseover(a).unmouseout(b) }, bO.drag = function(b, c, d, e, f, h) { this._drag = {}, this.mousedown(function(i) { (i.originalEvent || i).preventDefault(); var j = g.documentElement.scrollTop || g.body.scrollTop, k = g.documentElement.scrollLeft || g.body.scrollLeft; this._drag.x = i.clientX + k, this._drag.y = i.clientY + j, this._drag.id = i.identifier, c && c.call(f || e || this, i.clientX + k, i.clientY + j, i), !cl.length && a.mousemove(cm).mouseup(cn), cl.push({ el: this, move: b, end: d, move_scope: e, start_scope: f, end_scope: h }) }); return this }, bO.undrag = function(b, c, d) { var e = cl.length; while (e--) cl[e].el == this && cl[e].move == b && cl[e].end == d && cl.splice(e++, 1); !cl.length && a.unmousemove(cm).unmouseup(cn) }, k.circle = function(a, b, c) { return bP(this, a || 0, b || 0, c || 0) }, k.rect = function(a, b, c, d, e) { return bQ(this, a || 0, b || 0, c || 0, d || 0, e || 0) }, k.ellipse = function(a, b, c, d) { return bR(this, a || 0, b || 0, c || 0, d || 0) }, k.path = function(b) { b && !a.is(b, F) && !a.is(b[0], G) && (b += p); return bH(a.format[m](a, arguments), this) }, k.image = function(a, b, c, d, e) { return bS(this, a || "about:blank", b || 0, c || 0, d || 0, e || 0) }, k.text = function(a, b, c) { return bT(this, a || 0, b || 0, r(c)) }, k.set = function(a) { arguments[w] > 1 && (a = Array[e].splice.call(arguments, 0, arguments[w])); return new cD(a) }, k.setSize = bU, k.top = k.bottom = null, k.raphael = a, bO.resetScale = function() { if (this.removed) return this; this._.sx = 1, this._.sy = 1, this.attrs.scale = "1 1" }, bO.scale = function(a, b, c, d) { if (this.removed) return this; if (a == null && b == null) return { x: this._.sx, y: this._.sy, toString: cp }; b = b || a, ! +b && (b = a); var e, f, g, h, i = this.attrs; if (a != 0) { var j = this.getBBox(), k = j.x + j.width / 2, l = j.y + j.height / 2, m = B(a / this._.sx), o = B(b / this._.sy); c = +c || c == 0 ? c : k, d = +d || d == 0 ? d : l; var r = this._.sx > 0, s = this._.sy > 0, t = ~ ~(a / B(a)), u = ~ ~(b / B(b)), x = m * t, y = o * u, z = this.node.style, A = c + B(k - c) * x * (k > c == r ? 1 : -1), C = d + B(l - d) * y * (l > d == s ? 1 : -1), D = a * t > b * u ? o : m; switch (this.type) { case "rect": case "image": var E = i.width * m, F = i.height * o; this.attr({ height: F, r: i.r * D, width: E, x: A - E / 2, y: C - F / 2 }); break; case "circle": case "ellipse": this.attr({ rx: i.rx * m, ry: i.ry * o, r: i.r * D, cx: A, cy: C }); break; case "text": this.attr({ x: A, y: C }); break; case "path": var G = bp(i.path), H = !0, I = r ? x : m, J = s ? y : o; for (var K = 0, L = G[w]; K < L; K++) { var M = G[K], N = V.call(M[0]); if (N == "M" && H) continue; H = !1; if (N == "A") M[G[K][w] - 2] *= I, M[G[K][w] - 1] *= J, M[1] *= m, M[2] *= o, M[5] = +(t + u ? !! +M[5] : ! +M[5]); else if (N == "H") for (var O = 1, P = M[w]; O < P; O++) M[O] *= I; else if (N == "V") for (O = 1, P = M[w]; O < P; O++) M[O] *= J; else for (O = 1, P = M[w]; O < P; O++) M[O] *= O % 2 ? I : J } var Q = bn(G); e = A - Q.x - Q.width / 2, f = C - Q.y - Q.height / 2, G[0][1] += e, G[0][2] += f, this.attr({ path: G }) } this.type in { text: 1, image: 1} && (t != 1 || u != 1) ? this.transformations ? (this.transformations[2] = "scale("[n](t, ",", u, ")"), this.node[R]("transform", this.transformations[v](q)), e = t == -1 ? -i.x - (E || 0) : i.x, f = u == -1 ? -i.y - (F || 0) : i.y, this.attr({ x: e, y: f }), i.fx = t - 1, i.fy = u - 1) : (this.node.filterMatrix = U + ".Matrix(M11="[n](t, ", M12=0, M21=0, M22=", u, ", Dx=0, Dy=0, sizingmethod='auto expand', filtertype='bilinear')"), z.filter = (this.node.filterMatrix || p) + (this.node.filterOpacity || p)) : this.transformations ? (this.transformations[2] = p, this.node[R]("transform", this.transformations[v](q)), i.fx = 0, i.fy = 0) : (this.node.filterMatrix = p, z.filter = (this.node.filterMatrix || p) + (this.node.filterOpacity || p)), i.scale = [a, b, c, d][v](q), this._.sx = a, this._.sy = b } return this }, bO.clone = function() { if (this.removed) return null; var a = this.attr(); delete a.scale, delete a.translation; return this.paper[this.type]().attr(a) }; var cq = {}, cr = function(b, c, d, e, f, g, h, i, j) { var k = 0, l = 100, m = [b, c, d, e, f, g, h, i].join(), n = cq[m], o, p; !n && (cq[m] = n = { data: [] }), n.timer && clearTimeout(n.timer), n.timer = setTimeout(function() { delete cq[m] }, 2e3); if (j != null) { var q = cr(b, c, d, e, f, g, h, i); l = ~ ~q * 10 } for (var r = 0; r < l + 1; r++) { n.data[j] > r ? p = n.data[r * l] : (p = a.findDotsAtSegment(b, c, d, e, f, g, h, i, r / l), n.data[r] = p), r && (k += C(C(o.x - p.x, 2) + C(o.y - p.y, 2), .5)); if (j != null && k >= j) return p; o = p } if (j == null) return k }, cs = function(b, c) { return function(d, e, f) { d = bw(d); var g, h, i, j, k = "", l = {}, m, n = 0; for (var o = 0, p = d.length; o < p; o++) { i = d[o]; if (i[0] == "M") g = +i[1], h = +i[2]; else { j = cr(g, h, i[1], i[2], i[3], i[4], i[5], i[6]); if (n + j > e) { if (c && !l.start) { m = cr(g, h, i[1], i[2], i[3], i[4], i[5], i[6], e - n), k += ["C", m.start.x, m.start.y, m.m.x, m.m.y, m.x, m.y]; if (f) return k; l.start = k, k = ["M", m.x, m.y + "C", m.n.x, m.n.y, m.end.x, m.end.y, i[5], i[6]][v](), n += j, g = +i[5], h = +i[6]; continue } if (!b && !c) { m = cr(g, h, i[1], i[2], i[3], i[4], i[5], i[6], e - n); return { x: m.x, y: m.y, alpha: m.alpha} } } n += j, g = +i[5], h = +i[6] } k += i } l.end = k, m = b ? n : c ? l : a.findDotsAtSegment(g, h, i[1], i[2], i[3], i[4], i[5], i[6], 1), m.alpha && (m = { x: m.x, y: m.y, alpha: m.alpha }); return m } }, ct = cs(1), cu = cs(), cv = cs(0, 1); bO.getTotalLength = function() { if (this.type == "path") { if (this.node.getTotalLength) return this.node.getTotalLength(); return ct(this.attrs.path) } }, bO.getPointAtLength = function(a) { if (this.type == "path") return cu(this.attrs.path, a) }, bO.getSubpath = function(a, b) { if (this.type == "path") { if (B(this.getTotalLength() - b) < "1e-6") return cv(this.attrs.path, a).end; var c = cv(this.attrs.path, b, 1); return a ? cv(c, a).end : c } }, a.easing_formulas = { linear: function(a) { return a }, "<": function(a) { return C(a, 3) }, ">": function(a) { return C(a - 1, 3) + 1 }, "<>": function(a) { a = a * 2; if (a < 1) return C(a, 3) / 2; a -= 2; return (C(a, 3) + 2) / 2 }, backIn: function(a) { var b = 1.70158; return a * a * ((b + 1) * a - b) }, backOut: function(a) { a = a - 1; var b = 1.70158; return a * a * ((b + 1) * a + b) + 1 }, elastic: function(a) { if (a == 0 || a == 1) return a; var b = .3, c = b / 4; return C(2, -10 * a) * y.sin((a - c) * 2 * D / b) + 1 }, bounce: function(a) { var b = 7.5625, c = 2.75, d; a < 1 / c ? d = b * a * a : a < 2 / c ? (a -= 1.5 / c, d = b * a * a + .75) : a < 2.5 / c ? (a -= 2.25 / c, d = b * a * a + .9375) : (a -= 2.625 / c, d = b * a * a + .984375); return d } }; var cw = [], cx = function() { var b = +(new Date); for (var c = 0; c < cw[w]; c++) { var d = cw[c]; if (d.stop || d.el.removed) continue; var e = b - d.start, g = d.ms, h = d.easing, i = d.from, j = d.diff, k = d.to, l = d.t, m = d.el, n = {}, o; if (e < g) { var r = h(e / g); for (var s in i) if (i[f](s)) { switch (X[s]) { case "along": o = r * g * j[s], k.back && (o = k.len - o); var t = cu(k[s], o); m.translate(j.sx - j.x || 0, j.sy - j.y || 0), j.x = t.x, j.y = t.y, m.translate(t.x - j.sx, t.y - j.sy), k.rot && m.rotate(j.r + t.alpha, t.x, t.y); break; case E: o = +i[s] + r * g * j[s]; break; case "colour": o = "rgb(" + [cz(Q(i[s].r + r * g * j[s].r)), cz(Q(i[s].g + r * g * j[s].g)), cz(Q(i[s].b + r * g * j[s].b))][v](",") + ")"; break; case "path": o = []; for (var u = 0, x = i[s][w]; u < x; u++) { o[u] = [i[s][u][0]]; for (var y = 1, z = i[s][u][w]; y < z; y++) o[u][y] = +i[s][u][y] + r * g * j[s][u][y]; o[u] = o[u][v](q) } o = o[v](q); break; case "csv": switch (s) { case "translation": var A = r * g * j[s][0] - l.x, B = r * g * j[s][1] - l.y; l.x += A, l.y += B, o = A + q + B; break; case "rotation": o = +i[s][0] + r * g * j[s][0], i[s][1] && (o += "," + i[s][1] + "," + i[s][2]); break; case "scale": o = [+i[s][0] + r * g * j[s][0], +i[s][1] + r * g * j[s][1], 2 in k[s] ? k[s][2] : p, 3 in k[s] ? k[s][3] : p][v](q); break; case "clip-rect": o = [], u = 4; while (u--) o[u] = +i[s][u] + r * g * j[s][u] } break; default: var C = [].concat(i[s]); o = [], u = m.paper.customAttributes[s].length; while (u--) o[u] = +C[u] + r * g * j[s][u] } n[s] = o } m.attr(n), m._run && m._run.call(m) } else k.along && (t = cu(k.along, k.len * !k.back), m.translate(j.sx - (j.x || 0) + t.x - j.sx, j.sy - (j.y || 0) + t.y - j.sy), k.rot && m.rotate(j.r + t.alpha, t.x, t.y)), (l.x || l.y) && m.translate(-l.x, -l.y), k.scale && (k.scale += p), m.attr(k), cw.splice(c--, 1) } a.svg && m && m.paper && m.paper.safari(), cw[w] && setTimeout(cx) }, cy = function(b, c, d, e, f) { var g = d - e; c.timeouts.push(setTimeout(function() { a.is(f, "function") && f.call(c), c.animate(b, g, b.easing) }, e)) }, cz = function(a) { return z(A(a, 255), 0) }, cA = function(a, b) { if (a == null) return { x: this._.tx, y: this._.ty, toString: cp }; this._.tx += +a, this._.ty += +b; switch (this.type) { case "circle": case "ellipse": this.attr({ cx: +a + this.attrs.cx, cy: +b + this.attrs.cy }); break; case "rect": case "image": case "text": this.attr({ x: +a + this.attrs.x, y: +b + this.attrs.y }); break; case "path": var c = bp(this.attrs.path); c[0][1] += +a, c[0][2] += +b, this.attr({ path: c }) } return this }; bO.animateWith = function(a, b, c, d, e) { for (var f = 0, g = cw.length; f < g; f++) cw[f].el.id == a.id && (b.start = cw[f].start); return this.animate(b, c, d, e) }, bO.animateAlong = cB(), bO.animateAlongBack = cB(1), bO.onAnimation = function(a) { this._run = a || 0; return this }, bO.animate = function(c, d, e, g) { var h = this; h.timeouts = h.timeouts || []; if (a.is(e, "function") || !e) g = e || null; if (h.removed) { g && g.call(h); return h } var i = {}, j = {}, k = !1, l = {}; for (var m in c) if (c[f](m)) if (X[f](m) || h.paper.customAttributes[f](m)) { k = !0, i[m] = h.attr(m), i[m] == null && (i[m] = W[m]), j[m] = c[m]; switch (X[m]) { case "along": var n = ct(c[m]), o = cu(c[m], n * !!c.back), p = h.getBBox(); l[m] = n / d, l.tx = p.x, l.ty = p.y, l.sx = o.x, l.sy = o.y, j.rot = c.rot, j.back = c.back, j.len = n, c.rot && (l.r = S(h.rotate()) || 0); break; case E: l[m] = (j[m] - i[m]) / d; break; case "colour": i[m] = a.getRGB(i[m]); var q = a.getRGB(j[m]); l[m] = { r: (q.r - i[m].r) / d, g: (q.g - i[m].g) / d, b: (q.b - i[m].b) / d }; break; case "path": var t = bw(i[m], j[m]); i[m] = t[0]; var u = t[1]; l[m] = []; for (var v = 0, x = i[m][w]; v < x; v++) { l[m][v] = [0]; for (var y = 1, z = i[m][v][w]; y < z; y++) l[m][v][y] = (u[v][y] - i[m][v][y]) / d } break; case "csv": var A = r(c[m])[s](b), B = r(i[m])[s](b); switch (m) { case "translation": i[m] = [0, 0], l[m] = [A[0] / d, A[1] / d]; break; case "rotation": i[m] = B[1] == A[1] && B[2] == A[2] ? B : [0, A[1], A[2]], l[m] = [(A[0] - i[m][0]) / d, 0, 0]; break; case "scale": c[m] = A, i[m] = r(i[m])[s](b), l[m] = [(A[0] - i[m][0]) / d, (A[1] - i[m][1]) / d, 0, 0]; break; case "clip-rect": i[m] = r(i[m])[s](b), l[m] = [], v = 4; while (v--) l[m][v] = (A[v] - i[m][v]) / d } j[m] = A; break; default: A = [].concat(c[m]), B = [].concat(i[m]), l[m] = [], v = h.paper.customAttributes[m][w]; while (v--) l[m][v] = ((A[v] || 0) - (B[v] || 0)) / d } } if (!k) { var C = [], D; for (var F in c) c[f](F) && Z.test(F) && (m = { value: c[F] }, F == "from" && (F = 0), F == "to" && (F = 100), m.key = T(F, 10), C.push(m)); C.sort(be), C[0].key && C.unshift({ key: 0, value: h.attrs }); for (v = 0, x = C[w]; v < x; v++) cy(C[v].value, h, d / 100 * C[v].key, d / 100 * (C[v - 1] && C[v - 1].key || 0), C[v - 1] && C[v - 1].value.callback); D = C[C[w] - 1].value.callback, D && h.timeouts.push(setTimeout(function() { D.call(h) }, d)) } else { var G = a.easing_formulas[e]; if (!G) { G = r(e).match(P); if (G && G[w] == 5) { var H = G; G = function(a) { return cC(a, +H[1], +H[2], +H[3], +H[4], d) } } else G = function(a) { return a } } cw.push({ start: c.start || +(new Date), ms: d, easing: G, from: i, diff: l, to: j, el: h, t: { x: 0, y: 0} }), a.is(g, "function") && (h._ac = setTimeout(function() { g.call(h) }, d)), cw[w] == 1 && setTimeout(cx) } return this }, bO.stop = function() { for (var a = 0; a < cw.length; a++) cw[a].el.id == this.id && cw.splice(a--, 1); for (a = 0, ii = this.timeouts && this.timeouts.length; a < ii; a++) clearTimeout(this.timeouts[a]); this.timeouts = [], clearTimeout(this._ac), delete this._ac; return this }, bO.translate = function(a, b) { return this.attr({ translation: a + " " + b }) }, bO[H] = function() { return "Raphaël’s object" }, a.ae = cw; var cD = function(a) { this.items = [], this[w] = 0, this.type = "set"; if (a) for (var b = 0, c = a[w]; b < c; b++) a[b] && (a[b].constructor == bN || a[b].constructor == cD) && (this[this.items[w]] = this.items[this.items[w]] = a[b], this[w]++) }; cD[e][L] = function() { var a, b; for (var c = 0, d = arguments[w]; c < d; c++) a = arguments[c], a && (a.constructor == bN || a.constructor == cD) && (b = this.items[w], this[b] = this.items[b] = a, this[w]++); return this }, cD[e].pop = function() { delete this[this[w]--]; return this.items.pop() }; for (var cE in bO) bO[f](cE) && (cD[e][cE] = function(a) { return function() { for (var b = 0, c = this.items[w]; b < c; b++) this.items[b][a][m](this.items[b], arguments); return this } } (cE)); cD[e].attr = function(b, c) { if (b && a.is(b, G) && a.is(b[0], "object")) for (var d = 0, e = b[w]; d < e; d++) this.items[d].attr(b[d]); else for (var f = 0, g = this.items[w]; f < g; f++) this.items[f].attr(b, c); return this }, cD[e].animate = function(b, c, d, e) { (a.is(d, "function") || !d) && (e = d || null); var f = this.items[w], g = f, h, i = this, j; e && (j = function() { ! --f && e.call(i) }), d = a.is(d, F) ? d : j, h = this.items[--g].animate(b, c, d, j); while (g--) this.items[g] && !this.items[g].removed && this.items[g].animateWith(h, b, c, d, j); return this }, cD[e].insertAfter = function(a) { var b = this.items[w]; while (b--) this.items[b].insertAfter(a); return this }, cD[e].getBBox = function() { var a = [], b = [], c = [], d = []; for (var e = this.items[w]; e--; ) { var f = this.items[e].getBBox(); a[L](f.x), b[L](f.y), c[L](f.x + f.width), d[L](f.y + f.height) } a = A[m](0, a), b = A[m](0, b); return { x: a, y: b, width: z[m](0, c) - a, height: z[m](0, d) - b} }, cD[e].clone = function(a) { a = new cD; for (var b = 0, c = this.items[w]; b < c; b++) a[L](this.items[b].clone()); return a }, a.registerFont = function(a) { if (!a.face) return a; this.fonts = this.fonts || {}; var b = { w: a.w, face: {}, glyphs: {} }, c = a.face["font-family"]; for (var d in a.face) a.face[f](d) && (b.face[d] = a.face[d]); this.fonts[c] ? this.fonts[c][L](b) : this.fonts[c] = [b]; if (!a.svg) { b.face["units-per-em"] = T(a.face["units-per-em"], 10); for (var e in a.glyphs) if (a.glyphs[f](e)) { var g = a.glyphs[e]; b.glyphs[e] = { w: g.w, k: {}, d: g.d && "M" + g.d[Y](/[mlcxtrv]/g, function(a) { return ({ l: "L", c: "C", x: "z", t: "m", r: "l", v: "c" })[a] || "M" }) + "z" }; if (g.k) for (var h in g.k) g[f](h) && (b.glyphs[e].k[h] = g.k[h]) } } return a }, k.getFont = function(b, c, d, e) { e = e || "normal", d = d || "normal", c = +c || ({ normal: 400, bold: 700, lighter: 300, bolder: 800 })[c] || 400; if (!!a.fonts) { var g = a.fonts[b]; if (!g) { var h = new RegExp("(^|\\s)" + b[Y](/[^\w\d\s+!~.:_-]/g, p) + "(\\s|$)", "i"); for (var i in a.fonts) if (a.fonts[f](i) && h.test(i)) { g = a.fonts[i]; break } } var j; if (g) for (var k = 0, l = g[w]; k < l; k++) { j = g[k]; if (j.face["font-weight"] == c && (j.face["font-style"] == d || !j.face["font-style"]) && j.face["font-stretch"] == e) break } return j } }, k.print = function(c, d, e, f, g, h, i) { h = h || "middle", i = z(A(i || 0, 1), -1); var j = this.set(), k = r(e)[s](p), l = 0, m = p, n; a.is(f, e) && (f = this.getFont(f)); if (f) { n = (g || 16) / f.face["units-per-em"]; var o = f.face.bbox.split(b), q = +o[0], t = +o[1] + (h == "baseline" ? o[3] - o[1] + +f.face.descent : (o[3] - o[1]) / 2); for (var u = 0, v = k[w]; u < v; u++) { var x = u && f.glyphs[k[u - 1]] || {}, y = f.glyphs[k[u]]; l += u ? (x.w || f.w) + (x.k && x.k[k[u]] || 0) + f.w * i : 0, y && y.d && j[L](this.path(y.d).attr({ fill: "#000", stroke: "none", translation: [l, 0] })) } j.scale(n, n, q, t).translate(c - q, d - t) } return j }, a.format = function(b, c) { var e = a.is(c, G) ? [0][n](c) : arguments; b && a.is(b, F) && e[w] - 1 && (b = b[Y](d, function(a, b) { return e[++b] == null ? p : e[b] })); return b || p }, a.ninja = function() { i.was ? h.Raphael = i.is : delete Raphael; return a }, a.el = bO, a.st = cD[e], i.was ? h.Raphael = a : Raphael = a })()
