(function() {
	var d;
	window.AmCharts ? d = window.AmCharts : (d = {}, window.AmCharts = d, d.themes = {}, d.maps = {}, d.inheriting = {}, d.charts = [], d.onReadyArray = [], d.useUTC = !1, d.updateRate = 60, d.uid = 0, d.lang = {}, d.translations = {}, d.mapTranslations = {}, d.windows = {}, d.initHandlers = [], d.amString = "am", d.pmString = "pm");
	d.Class = function(a) {
		var b = function() {
			arguments[0] !== d.inheriting && (this.events = {}, this.construct.apply(this, arguments))
		};
		a.inherits ? (b.prototype = new a.inherits(d.inheriting), b.base = a.inherits.prototype, delete a.inherits) : (b.prototype.createEvents = function() {
			for (var a = 0; a < arguments.length; a++) this.events[arguments[a]] = []
		}, b.prototype.listenTo = function(a, b, c) {
			this.removeListener(a, b, c);
			a.events[b].push({
				handler: c,
				scope: this
			})
		}, b.prototype.addListener = function(a, b, c) {
			this.removeListener(this, a, b);
			a && this.events[a] && this.events[a].push({
				handler: b,
				scope: c
			})
		}, b.prototype.removeListener = function(a, b, c) {
			if (a && a.events && (a = a.events[b]))
				for (b = a.length - 1; 0 <= b; b--) a[b].handler === c && a.splice(b, 1)
		}, b.prototype.fire = function(a) {
			for (var b = this.events[a.type], c = 0; c < b.length; c++) {
				var d = b[c];
				d.handler.call(d.scope, a)
			}
		});
		for (var c in a) b.prototype[c] = a[c];
		return b
	};
	d.addChart = function(a) {
		window.requestAnimationFrame ? d.animationRequested || (d.animationRequested = !0, window.requestAnimationFrame(d.update)) : d.updateInt || (d.updateInt = setInterval(function() {
			d.update()
		}, Math.round(1E3 / d.updateRate)));
		d.charts.push(a)
	};
	d.removeChart = function(a) {
		for (var b = d.charts, c = b.length - 1; 0 <= c; c--) b[c] == a && b.splice(c, 1);
		0 === b.length && (d.requestAnimation && (window.cancelAnimationFrame(d.requestAnimation), d.animationRequested = !1), d.updateInt && (clearInterval(d.updateInt), d.updateInt = NaN))
	};
	d.isModern = !0;
	d.getIEVersion = function() {
		var a = 0,
			b, c;
		"Microsoft Internet Explorer" == navigator.appName && (b = navigator.userAgent, c = /MSIE ([0-9]{1,}[.0-9]{0,})/, null !== c.exec(b) && (a = parseFloat(RegExp.$1)));
		return a
	};
	d.applyLang = function(a, b) {
		var c = d.translations;
		b.dayNames = d.extend({}, d.dayNames);
		b.shortDayNames = d.extend({}, d.shortDayNames);
		b.monthNames = d.extend({}, d.monthNames);
		b.shortMonthNames = d.extend({}, d.shortMonthNames);
		b.amString = "am";
		b.pmString = "pm";
		c && (c = c[a]) && (d.lang = c, b.langObj = c, c.monthNames && (b.dayNames = d.extend({}, c.dayNames), b.shortDayNames = d.extend({}, c.shortDayNames), b.monthNames = d.extend({}, c.monthNames), b.shortMonthNames = d.extend({}, c.shortMonthNames)), c.am && (b.amString = c.am), c.pm && (b.pmString = c.pm));
		d.amString = b.amString;
		d.pmString = b.pmString
	};
	d.IEversion = d.getIEVersion();
	9 > d.IEversion && 0 < d.IEversion && (d.isModern = !1, d.isIE = !0);
	d.dx = 0;
	d.dy = 0;
	if (document.addEventListener || window.opera) d.isNN = !0, d.isIE = !1, d.dx = .5, d.dy = .5;
	document.attachEvent && (d.isNN = !1, d.isIE = !0, d.isModern || (d.dx = 0, d.dy = 0));
	window.chrome && (d.chrome = !0);
	d.handleMouseUp = function(a) {
		for (var b = d.charts, c = 0; c < b.length; c++) {
			var e = b[c];
			e && e.handleReleaseOutside && e.handleReleaseOutside(a)
		}
	};
	d.handleMouseMove = function(a) {
		for (var b = d.charts, c = 0; c < b.length; c++) {
			var e = b[c];
			e && e.handleMouseMove && e.handleMouseMove(a)
		}
	};
	d.handleWheel = function(a) {
		for (var b = d.charts, c = 0; c < b.length; c++) {
			var e = b[c];
			if (e && e.mouseIsOver) {
				(e.mouseWheelScrollEnabled || e.mouseWheelZoomEnabled) && e.handleWheel && e.handleWheel(a);
				break
			}
		}
	};
	d.resetMouseOver = function() {
		for (var a = d.charts, b = 0; b < a.length; b++) {
			var c = a[b];
			c && (c.mouseIsOver = !1)
		}
	};
	d.ready = function(a) {
		d.onReadyArray.push(a)
	};
	d.handleLoad = function() {
		d.isReady = !0;
		for (var a = d.onReadyArray, b = 0; b < a.length; b++) {
			var c = a[b];
			isNaN(d.processDelay) ? c() : setTimeout(c, d.processDelay * b)
		}
		d.onReadyArray = []
	};
	d.addInitHandler = function(a, b) {
		d.initHandlers.push({
			method: a,
			types: b
		})
	};
	d.callInitHandler = function(a) {
		var b = d.initHandlers;
		if (d.initHandlers)
			for (var c = 0; c < b.length; c++) {
				var e = b[c];
				e.types ? d.isInArray(e.types, a.type) && e.method(a) : e.method(a)
			}
	};
	d.getUniqueId = function() {
		d.uid++;
		return "AmChartsEl-" + d.uid
	};
	d.isNN && (document.addEventListener("mousemove", d.handleMouseMove), document.addEventListener("mouseup", d.handleMouseUp, !0), window.addEventListener("load", d.handleLoad, !0));
	d.isIE && (document.attachEvent("onmousemove", d.handleMouseMove), document.attachEvent("onmouseup", d.handleMouseUp), window.attachEvent("onload", d.handleLoad));
	d.addWheelListeners = function() {
		d.wheelIsListened || (d.isNN && (window.addEventListener("DOMMouseScroll", d.handleWheel, !0), document.addEventListener("mousewheel", d.handleWheel, !0)), d.isIE && document.attachEvent("onmousewheel", d.handleWheel));
		d.wheelIsListened = !0
	};
	d.clear = function() {
		var a = d.charts;
		if (a)
			for (var b = a.length - 1; 0 <= b; b--) a[b].clear();
		d.updateInt && clearInterval(d.updateInt);
		d.requestAnimation && window.cancelAnimationFrame(d.requestAnimation);
		d.charts = [];
		d.isNN && (document.removeEventListener("mousemove", d.handleMouseMove, !0), document.removeEventListener("mouseup", d.handleMouseUp, !0), window.removeEventListener("load", d.handleLoad, !0), window.removeEventListener("DOMMouseScroll", d.handleWheel, !0), document.removeEventListener("mousewheel", d.handleWheel, !0));
		d.isIE && (document.detachEvent("onmousemove", d.handleMouseMove), document.detachEvent("onmouseup", d.handleMouseUp), window.detachEvent("onload", d.handleLoad))
	};
	d.makeChart = function(a, b, c) {
		var e = b.type,
			f = b.theme;
		d.isString(f) && (f = d.themes[f], b.theme = f);
		var g;
		switch (e) {
			case "serial":
				g = new d.AmSerialChart(f);
				break;
			case "xy":
				g = new d.AmXYChart(f);
				break;
			case "pie":
				g = new d.AmPieChart(f);
				break;
			case "radar":
				g = new d.AmRadarChart(f);
				break;
			case "gauge":
				g = new d.AmAngularGauge(f);
				break;
			case "funnel":
				g = new d.AmFunnelChart(f);
				break;
			case "map":
				g = new d.AmMap(f);
				break;
			case "stock":
				g = new d.AmStockChart(f);
				break;
			case "gantt":
				g = new d.AmGanttChart(f)
		}
		d.extend(g, b);
		d.isReady ? isNaN(c) ? g.write(a) : setTimeout(function() {
			d.realWrite(g, a)
		}, c) : d.ready(function() {
			isNaN(c) ? g.write(a) : setTimeout(function() {
				d.realWrite(g, a)
			}, c)
		});
		return g
	};
	d.realWrite = function(a, b) {
		a.write(b)
	};
	d.updateCount = 0;
	d.validateAt = Math.round(d.updateRate / 10);
	d.update = function() {
		var a = d.charts;
		d.updateCount++;
		var b = !1;
		d.updateCount == d.validateAt && (b = !0, d.updateCount = 0);
		if (a)
			for (var c = a.length - 1; 0 <= c; c--) a[c].update && a[c].update(), b && (a[c].autoResize ? a[c].validateSize && a[c].validateSize() : a[c].premeasure && a[c].premeasure());
		window.requestAnimationFrame && (d.requestAnimation = window.requestAnimationFrame(d.update))
	};
	"complete" == document.readyState && d.handleLoad()
})();
(function() {
	var d = window.AmCharts;
	d.toBoolean = function(a, b) {
		if (void 0 === a) return b;
		switch (String(a).toLowerCase()) {
			case "true":
			case "yes":
			case "1":
				return !0;
			case "false":
			case "no":
			case "0":
			case null:
				return !1;
			default:
				return !!a
		}
	};
	d.removeFromArray = function(a, b) {
		var c;
		if (void 0 !== b && void 0 !== a)
			for (c = a.length - 1; 0 <= c; c--) a[c] == b && a.splice(c, 1)
	};
	d.getPath = function() {
		var a = document.getElementsByTagName("script");
		if (a)
			for (var b = 0; b < a.length; b++) {
				var c = a[b].src;
				if (-1 !== c.search(/\/(amcharts|ammap)\.js/)) return c.replace(/\/(amcharts|ammap)\.js.*/, "/")
			}
	};
	d.normalizeUrl = function(a) {
		return "" !== a && -1 === a.search(/\/$/) ? a + "/" : a
	};
	d.isAbsolute = function(a) {
		return 0 === a.search(/^http[s]?:|^\//)
	};
	d.isInArray = function(a, b) {
		for (var c = 0; c < a.length; c++)
			if (a[c] == b) return !0;
		return !1
	};
	d.getDecimals = function(a) {
		var b = 0;
		isNaN(a) || (a = String(a), -1 != a.indexOf("e-") ? b = Number(a.split("-")[1]) : -1 != a.indexOf(".") && (b = a.split(".")[1].length));
		return b
	};
	d.wordwrap = function(a, b, c, e) {
		var f, g, h, k;
		a += "";
		if (1 > b) return a;
		f = -1;
		for (a = (k = a.split(/\r\n|\n|\r/)).length; ++f < a; k[f] += h) {
			h = k[f];
			for (k[f] = ""; h.length > b; k[f] += d.trim(h.slice(0, g)) + ((h = h.slice(g)).length ? c : "")) g = 2 == e || (g = h.slice(0, b + 1).match(/\S*(\s)?$/))[1] ? b : g.input.length - g[0].length || 1 == e && b || g.input.length + (g = h.slice(b).match(/^\S*/))[0].length;
			h = d.trim(h)
		}
		return k.join(c)
	};
	d.trim = function(a) {
		return a.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "")
	};
	d.wrappedText = function(a, b, c, e, f, g, h, k) {
		var l = d.text(a, b, c, e, f, g, h);
		if (l) {
			var m = l.getBBox();
			if (m.width > k) {
				var n = "\n";
				d.isModern || (n = "<br>");
				k = Math.floor(k / (m.width /
					b.length));
				2 < k && (k -= 2);
				b = d.wordwrap(b, k, n, !0);
				l.remove();
				l = d.text(a, b, c, e, f, g, h)
			}
		}
		return l
	};
	d.getStyle = function(a, b) {
		var c = "";
		if (document.defaultView && document.defaultView.getComputedStyle) try {
			c = document.defaultView.getComputedStyle(a, "").getPropertyValue(b)
		} catch (e) {} else a.currentStyle && (b = b.replace(/\-(\w)/g, function(a, b) {
			return b.toUpperCase()
		}), c = a.currentStyle[b]);
		return c
	};
	d.removePx = function(a) {
		if (void 0 !== a) return Number(a.substring(0, a.length - 2))
	};
	d.getURL = function(a, b) {
		if (a)
			if ("_self" != b && b)
				if ("_top" == b && window.top) window.top.location.href = a;
				else if ("_parent" == b && window.parent) window.parent.location.href = a;
		else if ("_blank" == b) window.open(a);
		else {
			var c = document.getElementsByName(b)[0];
			c ? c.src = a : (c = d.windows[b]) ? c.opener && !c.opener.closed ? c.location.href = a : d.windows[b] = window.open(a) : d.windows[b] = window.open(a)
		} else window.location.href = a
	};
	d.ifArray = function(a) {
		return a && "object" == typeof a && 0 < a.length ? !0 : !1
	};
	d.callMethod = function(a, b) {
		var c;
		for (c = 0; c < b.length; c++) {
			var e = b[c];
			if (e) {
				if (e[a]) e[a]();
				var d = e.length;
				if (0 < d) {
					var g;
					for (g = 0; g < d; g++) {
						var h = e[g];
						if (h && h[a]) h[a]()
					}
				}
			}
		}
	};
	d.toNumber = function(a) {
		return "number" == typeof a ? a : Number(String(a).replace(/[^0-9\-.]+/g, ""))
	};
	d.toColor = function(a) {
		if ("" !== a && void 0 !== a)
			if (-1 != a.indexOf(",")) {
				a = a.split(",");
				var b;
				for (b = 0; b < a.length; b++) {
					var c = a[b].substring(a[b].length - 6, a[b].length);
					a[b] = "#" + c
				}
			} else a = a.substring(a.length - 6, a.length), a = "#" + a;
		return a
	};
	d.toCoordinate = function(a, b, c) {
		var e;
		void 0 !== a && (a = String(a), c && c < b && (b = c), e = Number(a), -1 != a.indexOf("!") && (e = b - Number(a.substr(1))), -1 != a.indexOf("%") && (e = b * Number(a.substr(0, a.length - 1)) / 100));
		return e
	};
	d.fitToBounds = function(a, b, c) {
		a < b && (a = b);
		a > c && (a = c);
		return a
	};
	d.isDefined = function(a) {
		return void 0 === a ? !1 : !0
	};
	d.stripNumbers = function(a) {
		return a.replace(/[0-9]+/g, "")
	};
	d.roundTo = function(a, b) {
		if (0 > b) return a;
		var c = Math.pow(10, b);
		return Math.round(a * c) / c
	};
	d.toFixed = function(a, b) {
		var c = !1;
		0 > a && (c = !0, a = Math.abs(a));
		var e = String(Math.round(a * Math.pow(10, b)));
		if (0 < b) {
			var d = e.length;
			if (d < b) {
				var g;
				for (g = 0; g <
					b - d; g++) e = "0" + e
			}
			d = e.substring(0, e.length - b);
			"" === d && (d = 0);
			e = d + "." + e.substring(e.length - b, e.length);
			return c ? "-" + e : e
		}
		return String(e)
	};
	d.formatDuration = function(a, b, c, e, f, g) {
		var h = d.intervals,
			k = g.decimalSeparator;
		if (a >= h[b].contains) {
			var l = a - Math.floor(a / h[b].contains) * h[b].contains;
			"ss" == b ? (l = d.formatNumber(l, g), 1 == l.split(k)[0].length && (l = "0" + l)) : l = d.roundTo(l, g.precision);
			("mm" == b || "hh" == b) && 10 > l && (l = "0" + l);
			c = l + "" + e[b] + "" + c;
			a = Math.floor(a / h[b].contains);
			b = h[b].nextInterval;
			return d.formatDuration(a, b, c, e, f, g)
		}
		"ss" == b && (a = d.formatNumber(a, g), 1 == a.split(k)[0].length && (a = "0" + a));
		"mm" == b && (a = d.roundTo(a, g.precision));
		("mm" == b || "hh" == b) && 10 > a && (a = "0" + a);
		c = a + "" + e[b] + "" + c;
		if (h[f].count > h[b].count)
			for (a = h[b].count; a < h[f].count; a++) b = h[b].nextInterval, "ss" == b || "mm" == b || "hh" == b ? c = "00" + e[b] + "" + c : "DD" == b && (c = "0" + e[b] + "" + c);
		":" == c.charAt(c.length - 1) && (c = c.substring(0, c.length - 1));
		return c
	};
	d.formatNumber = function(a, b, c, e, f) {
		a = d.roundTo(a, b.precision);
		isNaN(c) && (c = b.precision);
		var g = b.decimalSeparator;
		b = b.thousandsSeparator;
		var h;
		h = 0 > a ? "-" : "";
		a = Math.abs(a);
		var k = String(a),
			l = !1; - 1 != k.indexOf("e") && (l = !0);
		0 <= c && !l && (k = d.toFixed(a, c));
		var m = "";
		if (l) m = k;
		else {
			var k = k.split("."),
				l = String(k[0]),
				n;
			for (n = l.length; 0 <= n; n -= 3) m = n != l.length ? 0 !== n ? l.substring(n - 3, n) + b + m : l.substring(n - 3, n) + m : l.substring(n - 3, n);
			void 0 !== k[1] && (m = m + g + k[1]);
			void 0 !== c && 0 < c && "0" != m && (m = d.addZeroes(m, g, c))
		}
		m = h + m;
		"" === h && !0 === e && 0 !== a && (m = "+" + m);
		!0 === f && (m += "%");
		return m
	};
	d.addZeroes = function(a, b, c) {
		a = a.split(b);
		void 0 === a[1] && 0 < c && (a[1] = "0");
		return a[1].length < c ? (a[1] += "0", d.addZeroes(a[0] + b + a[1], b, c)) : void 0 !== a[1] ? a[0] + b + a[1] : a[0]
	};
	d.scientificToNormal = function(a) {
		var b;
		a = String(a).split("e");
		var c;
		if ("-" == a[1].substr(0, 1)) {
			b = "0.";
			for (c = 0; c < Math.abs(Number(a[1])) - 1; c++) b += "0";
			b += a[0].split(".").join("")
		} else {
			var e = 0;
			b = a[0].split(".");
			b[1] && (e = b[1].length);
			b = a[0].split(".").join("");
			for (c = 0; c < Math.abs(Number(a[1])) - e; c++) b += "0"
		}
		return b
	};
	d.toScientific = function(a, b) {
		if (0 === a) return "0";
		var c = Math.floor(Math.log(Math.abs(a)) * Math.LOG10E),
			e = String(e).split(".").join(b);
		return String(e) + "e" + c
	};
	d.randomColor = function() {
		return "#" + ("00000" + (16777216 * Math.random() << 0).toString(16)).substr(-6)
	};
	d.hitTest = function(a, b, c) {
		var e = !1,
			f = a.x,
			g = a.x + a.width,
			h = a.y,
			k = a.y + a.height,
			l = d.isInRectangle;
		e || (e = l(f, h, b));
		e || (e = l(f, k, b));
		e || (e = l(g, h, b));
		e || (e = l(g, k, b));
		e || !0 === c || (e = d.hitTest(b, a, !0));
		return e
	};
	d.isInRectangle = function(a, b, c) {
		return a >= c.x - 5 && a <= c.x + c.width + 5 && b >= c.y - 5 && b <= c.y + c.height + 5 ? !0 : !1
	};
	d.isPercents = function(a) {
		if (-1 != String(a).indexOf("%")) return !0
	};
	d.formatValue = function(a, b, c, e, f, g, h, k) {
		if (b) {
			void 0 === f && (f = "");
			var l;
			for (l = 0; l < c.length; l++) {
				var m = c[l],
					n = b[m];
				void 0 !== n && (n = g ? d.addPrefix(n, k, h, e) : d.formatNumber(n, e), a = a.replace(new RegExp("\\[\\[" + f + "" + m + "\\]\\]", "g"), n))
			}
		}
		return a
	};
	d.formatDataContextValue = function(a, b) {
		if (a) {
			var c = a.match(/\[\[.*?\]\]/g),
				e;
			for (e = 0; e < c.length; e++) {
				var d = c[e],
					d = d.substr(2, d.length - 4);
				void 0 !== b[d] && (a = a.replace(new RegExp("\\[\\[" + d + "\\]\\]", "g"), b[d]))
			}
		}
		return a
	};
	d.massReplace = function(a, b) {
		for (var c in b)
			if (b.hasOwnProperty(c)) {
				var e = b[c];
				void 0 === e && (e = "");
				a = a.replace(c, e)
			}
		return a
	};
	d.cleanFromEmpty = function(a) {
		return a.replace(/\[\[[^\]]*\]\]/g, "")
	};
	d.addPrefix = function(a, b, c, e, f) {
		var g = d.formatNumber(a, e),
			h = "",
			k, l, m;
		if (0 === a) return "0";
		0 > a && (h = "-");
		a = Math.abs(a);
		if (1 < a)
			for (k = b.length - 1; - 1 < k; k--) {
				if (a >= b[k].number && (l = a / b[k].number, m = Number(e.precision), 1 > m && (m = 1), c = d.roundTo(l, m), m = d.formatNumber(c, {
						precision: -1,
						decimalSeparator: e.decimalSeparator,
						thousandsSeparator: e.thousandsSeparator
					}), !f || l == c)) {
					g = h + "" + m + "" + b[k].prefix;
					break
				}
			} else
				for (k = 0; k < c.length; k++)
					if (a <= c[k].number) {
						l = a / c[k].number;
						m = Math.abs(Math.floor(Math.log(l) * Math.LOG10E));
						l = d.roundTo(l, m);
						g = h + "" + l + "" + c[k].prefix;
						break
					}
		return g
	};
	d.remove = function(a) {
		a && a.remove()
	};
	d.getEffect = function(a) {
		">" == a && (a = "easeOutSine");
		"<" == a && (a = "easeInSine");
		"elastic" == a && (a = "easeOutElastic");
		return a
	};
	d.getObjById = function(a, b) {
		var c, e;
		for (e = 0; e < a.length; e++) {
			var d = a[e];
			if (d.id == b) {
				c = d;
				break
			}
		}
		return c
	};
	d.applyTheme = function(a, b, c) {
		b || (b = d.theme);
		try {
			b = JSON.parse(JSON.stringify(b))
		} catch (e) {}
		b && b[c] && d.extend(a, b[c])
	};
	d.isString = function(a) {
		return "string" == typeof a ? !0 : !1
	};
	d.extend = function(a, b, c) {
		var e;
		a || (a = {});
		for (e in b) c ? a.hasOwnProperty(e) || (a[e] = b[e]) : a[e] = b[e];
		return a
	};
	d.copyProperties = function(a, b) {
		for (var c in a) a.hasOwnProperty(c) && "events" != c && void 0 !== a[c] && "function" != typeof a[c] && "cname" != c && (b[c] = a[c])
	};
	d.processObject = function(a, b, c, e) {
		if (!1 === a instanceof b && (a = e ? d.extend(new b(c), a) : d.extend(a, new b(c), !0), a.listeners))
			for (var f in a.listeners) b = a.listeners[f], a.addListener(b.event, b.method);
		return a
	};
	d.fixNewLines = function(a) {
		var b = RegExp("\\n", "g");
		a && (a = a.replace(b, "<br />"));
		return a
	};
	d.fixBrakes = function(a) {
		if (d.isModern) {
			var b = RegExp("<br>", "g");
			a && (a = a.replace(b, "\n"))
		} else a = d.fixNewLines(a);
		return a
	};
	d.deleteObject = function(a, b) {
		if (a) {
			if (void 0 === b || null === b) b = 20;
			if (0 !== b)
				if ("[object Array]" === Object.prototype.toString.call(a))
					for (var c = 0; c < a.length; c++) d.deleteObject(a[c], b - 1), a[c] = null;
				else if (a && !a.tagName) try {
				for (c in a.theme = null, a) a[c] && ("object" == typeof a[c] && d.deleteObject(a[c], b - 1), "function" != typeof a[c] && (a[c] = null))
			} catch (e) {}
		}
	};
	d.bounce = function(a, b, c, e, d) {
		return (b /= d) < 1 / 2.75 ? 7.5625 * e * b * b + c : b < 2 / 2.75 ? e * (7.5625 * (b -= 1.5 / 2.75) * b + .75) + c : b < 2.5 / 2.75 ? e * (7.5625 * (b -= 2.25 / 2.75) * b + .9375) + c : e * (7.5625 * (b -= 2.625 / 2.75) * b + .984375) + c
	};
	d.easeInOutQuad = function(a, b, c, e, d) {
		b /= d / 2;
		if (1 > b) return e / 2 * b * b + c;
		b--;
		return -e / 2 * (b * (b - 2) - 1) + c
	};
	d.easeInSine = function(a, b, c, e, d) {
		return -e * Math.cos(b / d * (Math.PI / 2)) + e + c
	};
	d.easeOutSine = function(a, b, c, e, d) {
		return e * Math.sin(b / d * (Math.PI / 2)) + c
	};
	d.easeOutElastic = function(a, b, c, e, d) {
		a = 1.70158;
		var g = 0,
			h = e;
		if (0 === b) return c;
		if (1 == (b /= d)) return c + e;
		g || (g = .3 * d);
		h < Math.abs(e) ? (h = e, a = g / 4) : a = g / (2 * Math.PI) * Math.asin(e / h);
		return h * Math.pow(2, -10 * b) * Math.sin(2 * (b * d - a) * Math.PI / g) + e + c
	};
	d.fixStepE = function(a) {
		a = a.toExponential(0).split("e");
		var b = Number(a[1]);
		9 == Number(a[0]) && b++;
		return d.generateNumber(1, b)
	};
	d.generateNumber = function(a, b) {
		var c = "",
			e;
		e = 0 > b ? Math.abs(b) - 1 : Math.abs(b);
		var d;
		for (d = 0; d < e; d++) c += "0";
		return 0 > b ? Number("0." + c + String(a)) : Number(String(a) + c)
	};
	d.setCN = function(a, b, c, e) {
		if (a.addClassNames && b && (b = b.node) && c) {
			var d = b.getAttribute("class");
			a = a.classNamePrefix + "-";
			e && (a = "");
			d ? b.setAttribute("class", d + " " + a + c) : b.setAttribute("class", a + c)
		}
	};
	d.removeCN = function(a, b, c) {
		b && (b = b.node) && c && (b = b.classList) && b.remove(a.classNamePrefix + "-" + c)
	};
	d.parseDefs = function(a, b) {
		for (var c in a) {
			var e = typeof a[c];
			if (0 < a[c].length && "object" == e)
				for (var f = 0; f < a[c].length; f++) e = document.createElementNS(d.SVG_NS, c), b.appendChild(e), d.parseDefs(a[c][f], e);
			else "object" == e ? (e = document.createElementNS(d.SVG_NS, c), b.appendChild(e), d.parseDefs(a[c], e)) : b.setAttribute(c, a[c])
		}
	}
})();
(function() {
	var d = window.AmCharts;
	d.AmDraw = d.Class({
		construct: function(a, b, c, e) {
			d.SVG_NS = "http://www.w3.org/2000/svg";
			d.SVG_XLINK = "http://www.w3.org/1999/xlink";
			d.hasSVG = !!document.createElementNS && !!document.createElementNS(d.SVG_NS, "svg").createSVGRect;
			1 > b && (b = 10);
			1 > c && (c = 10);
			this.div = a;
			this.width = b;
			this.height = c;
			this.rBin = document.createElement("div");
			d.hasSVG ? (d.SVG = !0, b = this.createSvgElement("svg"), a.appendChild(b), this.container = b, this.addDefs(e), this.R = new d.SVGRenderer(this)) : d.isIE && d.VMLRenderer && (d.VML = !0, d.vmlStyleSheet || (document.namespaces.add("amvml", "urn:schemas-microsoft-com:vml"), 31 > document.styleSheets.length ? (b = document.createStyleSheet(), b.addRule(".amvml", "behavior:url(#default#VML); display:inline-block; antialias:true"), d.vmlStyleSheet = b) : document.styleSheets[0].addRule(".amvml", "behavior:url(#default#VML); display:inline-block; antialias:true")), this.container = a, this.R = new d.VMLRenderer(this, e), this.R.disableSelection(a))
		},
		createSvgElement: function(a) {
			return document.createElementNS(d.SVG_NS, a)
		},
		circle: function(a, b, c, e) {
			var f = new d.AmDObject("circle", this);
			f.attr({
				r: c,
				cx: a,
				cy: b
			});
			this.addToContainer(f.node, e);
			return f
		},
		ellipse: function(a, b, c, e, f) {
			var g = new d.AmDObject("ellipse", this);
			g.attr({
				rx: c,
				ry: e,
				cx: a,
				cy: b
			});
			this.addToContainer(g.node, f);
			return g
		},
		setSize: function(a, b) {
			0 < a && 0 < b && (this.container.style.width = a + "px", this.container.style.height = b + "px")
		},
		rect: function(a, b, c, e, f, g, h) {
			var k = new d.AmDObject("rect", this);
			d.VML && (f = Math.round(100 * f / Math.min(c, e)), c += 2 * g, e += 2 * g, k.bw = g, k.node.style.marginLeft = -g, k.node.style.marginTop = -g);
			1 > c && (c = 1);
			1 > e && (e = 1);
			k.attr({
				x: a,
				y: b,
				width: c,
				height: e,
				rx: f,
				ry: f,
				"stroke-width": g
			});
			this.addToContainer(k.node, h);
			return k
		},
		image: function(a, b, c, e, f, g) {
			var h = new d.AmDObject("image", this);
			h.attr({
				x: b,
				y: c,
				width: e,
				height: f
			});
			this.R.path(h, a);
			this.addToContainer(h.node, g);
			return h
		},
		addToContainer: function(a, b) {
			b || (b = this.container);
			b.appendChild(a)
		},
		text: function(a, b, c) {
			return this.R.text(a, b, c)
		},
		path: function(a, b, c, e) {
			var f = new d.AmDObject("path", this);
			e || (e = "100,100");
			f.attr({
				cs: e
			});
			c ? f.attr({
				dd: a
			}) : f.attr({
				d: a
			});
			this.addToContainer(f.node, b);
			return f
		},
		set: function(a) {
			return this.R.set(a)
		},
		remove: function(a) {
			if (a) {
				var b = this.rBin;
				b.appendChild(a);
				b.innerHTML = ""
			}
		},
		renderFix: function() {
			var a = this.container,
				b = a.style;
			b.top = "0px";
			b.left = "0px";
			try {
				var c = a.getBoundingClientRect(),
					e = c.left - Math.round(c.left),
					d = c.top - Math.round(c.top);
				e && (b.left = e + "px");
				d && (b.top = d + "px")
			} catch (g) {}
		},
		update: function() {
			this.R.update()
		},
		addDefs: function(a) {
			if (d.hasSVG) {
				var b = this.createSvgElement("desc"),
					c = this.container;
				c.setAttribute("version", "1.1");
				c.style.position = "absolute";
				this.setSize(this.width, this.height);
				if (a.accessibleTitle) {
					var e = this.createSvgElement("text");
					c.appendChild(e);
					e.innerHTML = a.accessibleTitle;
					e.style.opacity = 0
				}
				d.rtl && (c.setAttribute("direction", "rtl"), c.style.left = "auto", c.style.right = "0px");
				a && (a.addCodeCredits && b.appendChild(document.createTextNode("JavaScript chart by amCharts " + a.version)), c.appendChild(b), a.defs && (b = this.createSvgElement("defs"), c.appendChild(b), d.parseDefs(a.defs, b), this.defs = b))
			}
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.AmDObject = d.Class({
		construct: function(a, b) {
			this.D = b;
			this.R = b.R;
			this.node = this.R.create(this, a);
			this.y = this.x = 0;
			this.scale = 1
		},
		attr: function(a) {
			this.R.attr(this, a);
			return this
		},
		getAttr: function(a) {
			return this.node.getAttribute(a)
		},
		setAttr: function(a, b) {
			this.R.setAttr(this, a, b);
			return this
		},
		clipRect: function(a, b, c, e) {
			this.R.clipRect(this, a, b, c, e)
		},
		translate: function(a, b, c, e) {
			e || (a = Math.round(a), b = Math.round(b));
			this.R.move(this, a, b, c);
			this.x = a;
			this.y = b;
			this.scale = c;
			this.angle && this.rotate(this.angle)
		},
		rotate: function(a, b) {
			this.R.rotate(this, a, b);
			this.angle = a
		},
		animate: function(a, b, c) {
			for (var e in a)
				if (a.hasOwnProperty(e)) {
					var f = e,
						g = a[e];
					c = d.getEffect(c);
					this.R.animate(this, f, g, b, c)
				}
		},
		push: function(a) {
			if (a) {
				var b = this.node;
				b.appendChild(a.node);
				var c = a.clipPath;
				c && b.appendChild(c);
				(a = a.grad) && b.appendChild(a)
			}
		},
		text: function(a) {
			this.R.setText(this, a)
		},
		remove: function() {
			this.stop();
			this.R.remove(this)
		},
		clear: function() {
			var a = this.node;
			if (a.hasChildNodes())
				for (; 1 <= a.childNodes.length;) a.removeChild(a.firstChild)
		},
		hide: function() {
			this.setAttr("visibility", "hidden")
		},
		show: function() {
			this.setAttr("visibility", "visible")
		},
		getBBox: function() {
			return this.R.getBBox(this)
		},
		toFront: function() {
			var a = this.node;
			if (a) {
				this.prevNextNode = a.nextSibling;
				var b = a.parentNode;
				b && b.appendChild(a)
			}
		},
		toPrevious: function() {
			var a = this.node;
			a && this.prevNextNode && (a = a.parentNode) && a.insertBefore(this.prevNextNode, null)
		},
		toBack: function() {
			var a = this.node;
			if (a) {
				this.prevNextNode = a.nextSibling;
				var b = a.parentNode;
				if (b) {
					var c = b.firstChild;
					c && b.insertBefore(a, c)
				}
			}
		},
		mouseover: function(a) {
			this.R.addListener(this, "mouseover", a);
			return this
		},
		mouseout: function(a) {
			this.R.addListener(this, "mouseout", a);
			return this
		},
		click: function(a) {
			this.R.addListener(this, "click", a);
			return this
		},
		dblclick: function(a) {
			this.R.addListener(this, "dblclick", a);
			return this
		},
		mousedown: function(a) {
			this.R.addListener(this, "mousedown", a);
			return this
		},
		mouseup: function(a) {
			this.R.addListener(this, "mouseup", a);
			return this
		},
		touchmove: function(a) {
			this.R.addListener(this, "touchmove", a);
			return this
		},
		touchstart: function(a) {
			this.R.addListener(this, "touchstart", a);
			return this
		},
		touchend: function(a) {
			this.R.addListener(this, "touchend", a);
			return this
		},
		keyup: function(a) {
			this.R.addListener(this, "keyup", a);
			return this
		},
		focus: function(a) {
			this.R.addListener(this, "focus", a);
			return this
		},
		blur: function(a) {
			this.R.addListener(this, "blur", a);
			return this
		},
		contextmenu: function(a) {
			this.node.addEventListener ? this.node.addEventListener("contextmenu", a, !0) : this.R.addListener(this, "contextmenu", a);
			return this
		},
		stop: function() {
			d.removeFromArray(this.R.animations, this.an_translate);
			d.removeFromArray(this.R.animations, this.an_y);
			d.removeFromArray(this.R.animations, this.an_x)
		},
		length: function() {
			return this.node.childNodes.length
		},
		gradient: function(a, b, c) {
			this.R.gradient(this, a, b, c)
		},
		pattern: function(a, b, c) {
			a && this.R.pattern(this, a, b, c)
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.SVGRenderer = d.Class({
		construct: function(a) {
			this.D = a;
			this.animations = []
		},
		create: function(a, b) {
			return document.createElementNS(d.SVG_NS, b)
		},
		attr: function(a, b) {
			for (var c in b) b.hasOwnProperty(c) && this.setAttr(a, c, b[c])
		},
		setAttr: function(a, b, c) {
			void 0 !== c && a.node.setAttribute(b, c)
		},
		animate: function(a, b, c, e, f) {
			a.animationFinished = !1;
			var g = a.node;
			a["an_" + b] && d.removeFromArray(this.animations, a["an_" + b]);
			"translate" == b ? (g = (g = g.getAttribute("transform")) ? String(g).substring(10, g.length - 1) : "0,0", g = g.split(", ").join(" "), g = g.split(" ").join(","), 0 === g && (g = "0,0")) : g = Number(g.getAttribute(b));
			c = {
				obj: a,
				frame: 0,
				attribute: b,
				from: g,
				to: c,
				time: e,
				effect: f
			};
			this.animations.push(c);
			a["an_" + b] = c
		},
		update: function() {
			var a, b = this.animations;
			for (a = b.length - 1; 0 <= a; a--) {
				var c = b[a],
					e = c.time * d.updateRate,
					f = c.frame + 1,
					g = c.obj,
					h = c.attribute,
					k, l, m;
				if (f <= e) {
					c.frame++;
					if ("translate" == h) {
						k = c.from.split(",");
						h = Number(k[0]);
						k = Number(k[1]);
						isNaN(k) && (k = 0);
						l = c.to.split(",");
						m = Number(l[0]);
						l = Number(l[1]);
						m = 0 === m - h ? m : Math.round(d[c.effect](0, f, h, m - h, e));
						c = 0 === l - k ? l : Math.round(d[c.effect](0, f, k, l - k, e));
						h = "transform";
						if (isNaN(m) || isNaN(c)) continue;
						c = "translate(" + m + "," + c + ")"
					} else l = Number(c.from), k = Number(c.to), m = k - l, c = d[c.effect](0, f, l, m, e), isNaN(c) && (c = k), 0 === m && this.animations.splice(a, 1);
					this.setAttr(g, h, c)
				} else "translate" == h ? (l = c.to.split(","), m = Number(l[0]), l = Number(l[1]), g.translate(m, l)) : (k = Number(c.to), this.setAttr(g, h, k)), g.animationFinished = !0, this.animations.splice(a, 1)
			}
		},
		getBBox: function(a) {
			if (a = a.node) try {
				return a.getBBox()
			} catch (b) {}
			return {
				width: 0,
				height: 0,
				x: 0,
				y: 0
			}
		},
		path: function(a, b) {
			a.node.setAttributeNS(d.SVG_XLINK, "xlink:href", b)
		},
		clipRect: function(a, b, c, e, f) {
			var g = a.node,
				h = a.clipPath;
			h && this.D.remove(h);
			var k = g.parentNode;
			k && (g = document.createElementNS(d.SVG_NS, "clipPath"), h = d.getUniqueId(), g.setAttribute("id", h), this.D.rect(b, c, e, f, 0, 0, g), k.appendChild(g), b = "#", d.baseHref && !d.isIE && (b = this.removeTarget(window.location.href) + b), this.setAttr(a, "clip-path", "url(" + b + h + ")"), this.clipPathC++, a.clipPath = g)
		},
		text: function(a, b, c) {
			var e = new d.AmDObject("text", this.D);
			a = String(a).split("\n");
			var f = d.removePx(b["font-size"]),
				g;
			for (g = 0; g < a.length; g++) {
				var h = this.create(null, "tspan");
				h.appendChild(document.createTextNode(a[g]));
				h.setAttribute("y", (f + 2) * g + Math.round(f / 2));
				h.setAttribute("x", 0);
				e.node.appendChild(h)
			}
			e.node.setAttribute("y", Math.round(f / 2));
			this.attr(e, b);
			this.D.addToContainer(e.node, c);
			return e
		},
		setText: function(a, b) {
			var c = a.node;
			c && (c.removeChild(c.firstChild), c.appendChild(document.createTextNode(b)))
		},
		move: function(a, b, c, e) {
			isNaN(b) && (b = 0);
			isNaN(c) && (c = 0);
			b = "translate(" + b + "," + c + ")";
			e && (b = b + " scale(" + e + ")");
			this.setAttr(a, "transform", b)
		},
		rotate: function(a, b) {
			var c = a.node.getAttribute("transform"),
				e = "rotate(" + b + ")";
			c && (e = c + " " + e);
			this.setAttr(a, "transform", e)
		},
		set: function(a) {
			var b = new d.AmDObject("g", this.D);
			this.D.container.appendChild(b.node);
			if (a) {
				var c;
				for (c = 0; c < a.length; c++) b.push(a[c])
			}
			return b
		},
		addListener: function(a, b, c) {
			a.node["on" + b] = c
		},
		gradient: function(a, b, c, e) {
			var f = a.node,
				g = a.grad;
			g && this.D.remove(g);
			b = document.createElementNS(d.SVG_NS, b);
			g = d.getUniqueId();
			b.setAttribute("id", g);
			if (!isNaN(e)) {
				var h = 0,
					k = 0,
					l = 0,
					m = 0;
				90 == e ? l = 100 : 270 == e ? m = 100 : 180 == e ? h = 100 : 0 === e && (k = 100);
				b.setAttribute("x1", h + "%");
				b.setAttribute("x2", k + "%");
				b.setAttribute("y1", l + "%");
				b.setAttribute("y2", m + "%")
			}
			for (e = 0; e < c.length; e++) h = document.createElementNS(d.SVG_NS, "stop"), k = 100 * e / (c.length - 1), 0 === e && (k = 0), h.setAttribute("offset", k + "%"), h.setAttribute("stop-color", c[e]), b.appendChild(h);
			f.parentNode.appendChild(b);
			c = "#";
			d.baseHref && !d.isIE && (c = this.removeTarget(window.location.href) + c);
			f.setAttribute("fill", "url(" + c + g + ")");
			a.grad = b
		},
		removeTarget: function(a) {
			return a.split("#")[0]
		},
		pattern: function(a, b, c, e) {
			var f = a.node;
			isNaN(c) && (c = 1);
			var g = a.patternNode;
			g && this.D.remove(g);
			var g = document.createElementNS(d.SVG_NS, "pattern"),
				h = d.getUniqueId(),
				k = b;
			b.url && (k = b.url);
			d.isAbsolute(k) || -1 != k.indexOf("data:image") || (k = e + k);
			e = Number(b.width);
			isNaN(e) && (e = 4);
			var l = Number(b.height);
			isNaN(l) && (l = 4);
			e /= c;
			l /= c;
			c = b.x;
			isNaN(c) && (c = 0);
			var m = -Math.random() * Number(b.randomX);
			isNaN(m) || (c = m);
			m = b.y;
			isNaN(m) && (m = 0);
			var n = -Math.random() * Number(b.randomY);
			isNaN(n) || (m = n);
			g.setAttribute("id", h);
			g.setAttribute("width", e);
			g.setAttribute("height", l);
			g.setAttribute("patternUnits", "userSpaceOnUse");
			g.setAttribute("xlink:href", k);
			b.color && (n = document.createElementNS(d.SVG_NS, "rect"), n.setAttributeNS(null, "height", e), n.setAttributeNS(null, "width", l), n.setAttributeNS(null, "fill", b.color), g.appendChild(n));
			this.D.image(k, 0, 0, e, l, g).translate(c, m);
			k = "#";
			d.baseHref && !d.isIE && (k = this.removeTarget(window.location.href) + k);
			f.setAttribute("fill", "url(" + k + h + ")");
			a.patternNode = g;
			f.parentNode.appendChild(g)
		},
		remove: function(a) {
			a.clipPath && this.D.remove(a.clipPath);
			a.grad && this.D.remove(a.grad);
			a.patternNode && this.D.remove(a.patternNode);
			this.D.remove(a.node)
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.AmChart = d.Class({
		construct: function(a) {
			this.svgIcons = this.tapToActivate = !0;
			this.theme = a;
			this.classNamePrefix = "amcharts";
			this.addClassNames = !1;
			this.version = "3.21.6";
			d.addChart(this);
			this.createEvents("buildStarted", "dataUpdated", "init", "rendered", "drawn", "failed", "resized", "animationFinished");
			this.height = this.width = "100%";
			this.dataChanged = !0;
			this.chartCreated = !1;
			this.previousWidth = this.previousHeight = 0;
			this.backgroundColor = "#FFFFFF";
			this.borderAlpha = this.backgroundAlpha = 0;
			this.color = this.borderColor = "#000000";
			this.fontFamily = "Verdana";
			this.fontSize = 11;
			this.usePrefixes = !1;
			this.autoResize = !0;
			this.autoDisplay = !1;
			this.addCodeCredits = this.accessible = !0;
			this.touchStartTime = this.touchClickDuration = 0;
			this.precision = -1;
			this.percentPrecision = 2;
			this.decimalSeparator = ".";
			this.thousandsSeparator = ",";
			this.labels = [];
			this.allLabels = [];
			this.titles = [];
			this.marginRight = this.marginLeft = this.autoMarginOffset = 0;
			this.timeOuts = [];
			this.creditsPosition = "top-left";
			var b = document.createElement("div"),
				c = b.style;
			c.overflow = "hidden";
			c.position = "relative";
			c.textAlign = "left";
			this.chartDiv = b;
			b = document.createElement("div");
			c = b.style;
			c.overflow = "hidden";
			c.position = "relative";
			c.textAlign = "left";
			this.legendDiv = b;
			this.titleHeight = 0;
			this.hideBalloonTime = 150;
			this.handDrawScatter = 2;
			this.cssScale = this.handDrawThickness = 1;
			this.cssAngle = 0;
			this.prefixesOfBigNumbers = [{
				number: 1E3,
				prefix: "k"
			}, {
				number: 1E6,
				prefix: "M"
			}, {
				number: 1E9,
				prefix: "G"
			}, {
				number: 1E12,
				prefix: "T"
			}, {
				number: 1E15,
				prefix: "P"
			}, {
				number: 1E18,
				prefix: "E"
			}, {
				number: 1E21,
				prefix: "Z"
			}, {
				number: 1E24,
				prefix: "Y"
			}];
			this.prefixesOfSmallNumbers = [{
				number: 1E-24,
				prefix: "y"
			}, {
				number: 1E-21,
				prefix: "z"
			}, {
				number: 1E-18,
				prefix: "a"
			}, {
				number: 1E-15,
				prefix: "f"
			}, {
				number: 1E-12,
				prefix: "p"
			}, {
				number: 1E-9,
				prefix: "n"
			}, {
				number: 1E-6,
				prefix: "\u03bc"
			}, {
				number: .001,
				prefix: "m"
			}];
			this.panEventsEnabled = !0;
			this.product = "amcharts";
			this.animations = [];
			this.balloon = new d.AmBalloon(this.theme);
			this.balloon.chart = this;
			this.processTimeout = 0;
			this.processCount = 1E3;
			this.animatable = [];
			this.langObj = {};
			d.applyTheme(this, a, "AmChart")
		},
		drawChart: function() {
			0 < this.realWidth && 0 < this.realHeight && (this.drawBackground(), this.redrawLabels(), this.drawTitles(), this.brr(), this.renderFix(), this.chartDiv && (this.boundingRect = this.chartDiv.getBoundingClientRect()))
		},
		makeAccessible: function(a, b, c) {
			this.accessible && a && (c && a.setAttr("role", c), a.setAttr("aria-label", b))
		},
		drawBackground: function() {
			d.remove(this.background);
			var a = this.container,
				b = this.backgroundColor,
				c = this.backgroundAlpha,
				e = this.set;
			d.isModern || 0 !== c || (c = .001);
			var f = this.updateWidth();
			this.realWidth = f;
			var g = this.updateHeight();
			this.realHeight = g;
			b = d.polygon(a, [0, f - 1, f - 1, 0], [0, 0, g - 1, g - 1], b, c, 1, this.borderColor, this.borderAlpha);
			d.setCN(this, b, "bg");
			this.background = b;
			e.push(b);
			if (b = this.backgroundImage) a = a.image(b, 0, 0, f, g), d.setCN(this, b, "bg-image"), this.bgImg = a, e.push(a)
		},
		drawTitles: function(a) {
			var b = this.titles;
			this.titleHeight = 0;
			if (d.ifArray(b)) {
				var c = 20,
					e;
				for (e = 0; e < b.length; e++) {
					var f = b[e],
						f = d.processObject(f, d.Title, this.theme);
					if (!1 !== f.enabled) {
						var g = f.color;
						void 0 === g && (g = this.color);
						var h = f.size;
						isNaN(h) && (h = this.fontSize + 2);
						isNaN(f.alpha);
						var k = this.marginLeft,
							l = !0;
						void 0 !== f.bold && (l = f.bold);
						g = d.wrappedText(this.container, f.text, g, this.fontFamily, h, "middle", l, this.realWidth - 35 - this.marginRight - k);
						g.translate(k + (this.realWidth - this.marginRight - k) / 2, c);
						g.node.style.pointerEvents = "none";
						f.sprite = g;
						void 0 !== f.tabIndex && g.setAttr("tabindex", f.tabIndex);
						d.setCN(this, g, "title");
						f.id && d.setCN(this, g, "title-" + f.id);
						g.attr({
							opacity: f.alpha
						});
						c += g.getBBox().height +
							5;
						a ? g.remove() : this.freeLabelsSet.push(g)
					}
				}
				this.titleHeight = c - 10
			}
		},
		write: function(a) {
			var b = this;
			if (b.listeners)
				for (var c = 0; c < b.listeners.length; c++) {
					var e = b.listeners[c];
					b.addListener(e.event, e.method)
				}
			b.fire({
				type: "buildStarted",
				chart: b
			});
			b.afterWriteTO && clearTimeout(b.afterWriteTO);
			0 < b.processTimeout ? b.afterWriteTO = setTimeout(function() {
				b.afterWrite.call(b, a)
			}, b.processTimeout) : b.afterWrite(a)
		},
		afterWrite: function(a) {
			var b;
			if (b = "object" != typeof a ? document.getElementById(a) : a) {
				for (; b.firstChild;) b.removeChild(b.firstChild);
				this.div = b;
				b.style.overflow = "hidden";
				b.style.textAlign = "left";
				a = this.chartDiv;
				var c = this.legendDiv,
					e = this.legend,
					f = c.style,
					g = a.style;
				this.measure();
				this.previousHeight = this.divRealHeight;
				this.previousWidth = this.divRealWidth;
				var h, k = document.createElement("div");
				h = k.style;
				h.position = "relative";
				this.containerDiv = k;
				k.className = this.classNamePrefix + "-main-div";
				a.className = this.classNamePrefix + "-chart-div";
				b.appendChild(k);
				(b = this.exportConfig) && d.AmExport && !this.AmExport && (this.AmExport = new d.AmExport(this, b));
				this.amExport && d.AmExport && (this.AmExport = d.extend(this.amExport, new d.AmExport(this), !0));
				this.AmExport && this.AmExport.init && this.AmExport.init();
				if (e) {
					e = this.addLegend(e, e.divId);
					if (e.enabled) switch (f.left = null, f.top = null, f.right = null, g.left = null, g.right = null, g.top = null, f.position = "relative", g.position = "relative", h.width = "100%", h.height = "100%", e.position) {
						case "bottom":
							k.appendChild(a);
							k.appendChild(c);
							break;
						case "top":
							k.appendChild(c);
							k.appendChild(a);
							break;
						case "absolute":
							f.position = "absolute";
							g.position = "absolute";
							void 0 !== e.left && (f.left = e.left + "px");
							void 0 !== e.right && (f.right = e.right + "px");
							void 0 !== e.top && (f.top = e.top + "px");
							void 0 !== e.bottom && (f.bottom = e.bottom + "px");
							e.marginLeft = 0;
							e.marginRight = 0;
							k.appendChild(a);
							k.appendChild(c);
							break;
						case "right":
							f.position = "relative";
							g.position = "absolute";
							k.appendChild(a);
							k.appendChild(c);
							break;
						case "left":
							f.position = "absolute";
							g.position = "relative";
							k.appendChild(a);
							k.appendChild(c);
							break;
						case "outside":
							k.appendChild(a)
					} else k.appendChild(a);
					this.prevLegendPosition = e.position
				} else k.appendChild(a);
				this.listenersAdded || (this.addListeners(), this.listenersAdded = !0);
				(this.mouseWheelScrollEnabled || this.mouseWheelZoomEnabled) && d.addWheelListeners();
				this.initChart()
			}
		},
		createLabelsSet: function() {
			d.remove(this.labelsSet);
			this.labelsSet = this.container.set();
			this.freeLabelsSet.push(this.labelsSet)
		},
		initChart: function() {
			this.balloon = d.processObject(this.balloon, d.AmBalloon, this.theme);
			window.AmCharts_path && (this.path = window.AmCharts_path);
			void 0 === this.path && (this.path = d.getPath());
			void 0 === this.path && (this.path = "amcharts/");
			this.path = d.normalizeUrl(this.path);
			void 0 === this.pathToImages && (this.pathToImages = this.path + "images/");
			this.initHC || (d.callInitHandler(this), this.initHC = !0);
			d.applyLang(this.language, this);
			var a = this.numberFormatter;
			a && (isNaN(a.precision) || (this.precision = a.precision), void 0 !== a.thousandsSeparator && (this.thousandsSeparator = a.thousandsSeparator), void 0 !== a.decimalSeparator && (this.decimalSeparator = a.decimalSeparator));
			(a = this.percentFormatter) && !isNaN(a.precision) && (this.percentPrecision = a.precision);
			this.nf = {
				precision: this.precision,
				thousandsSeparator: this.thousandsSeparator,
				decimalSeparator: this.decimalSeparator
			};
			this.pf = {
				precision: this.percentPrecision,
				thousandsSeparator: this.thousandsSeparator,
				decimalSeparator: this.decimalSeparator
			};
			this.destroy();
			(a = this.container) ? (a.container.innerHTML = "", a.width = this.realWidth, a.height = this.realHeight, a.addDefs(this), this.chartDiv.appendChild(a.container)) : a = new d.AmDraw(this.chartDiv, this.realWidth, this.realHeight, this);
			this.container = a;
			this.extension = ".png";
			this.svgIcons && d.SVG && (this.extension = ".svg");
			this.checkDisplay();
			this.checkTransform(this.div);
			a.chart = this;
			d.VML || d.SVG ? (a.handDrawn = this.handDrawn, a.handDrawScatter = this.handDrawScatter, a.handDrawThickness = this.handDrawThickness, d.remove(this.set), this.set = a.set(), d.remove(this.gridSet), this.gridSet = a.set(), d.remove(this.cursorLineSet), this.cursorLineSet = a.set(), d.remove(this.graphsBehindSet), this.graphsBehindSet = a.set(), d.remove(this.bulletBehindSet), this.bulletBehindSet = a.set(), d.remove(this.columnSet), this.columnSet = a.set(), d.remove(this.graphsSet), this.graphsSet = a.set(), d.remove(this.trendLinesSet), this.trendLinesSet = a.set(), d.remove(this.axesSet), this.axesSet = a.set(), d.remove(this.cursorSet), this.cursorSet = a.set(), d.remove(this.scrollbarsSet), this.scrollbarsSet = a.set(), d.remove(this.bulletSet), this.bulletSet = a.set(), d.remove(this.freeLabelsSet), this.freeLabelsSet = a.set(), d.remove(this.axesLabelsSet), this.axesLabelsSet = a.set(), d.remove(this.balloonsSet), this.balloonsSet = a.set(), d.remove(this.plotBalloonsSet), this.plotBalloonsSet = a.set(), d.remove(this.zoomButtonSet), this.zoomButtonSet = a.set(), d.remove(this.zbSet), this.zbSet = null, d.remove(this.linkSet), this.linkSet = a.set()) : this.fire({
				type: "failed",
				chart: this
			})
		},
		premeasure: function() {
			var a = this.div;
			if (a) {
				try {
					this.boundingRect = this.chartDiv.getBoundingClientRect()
				} catch (e) {}
				var b = a.offsetWidth,
					c = a.offsetHeight;
				a.clientHeight && (b = a.clientWidth, c = a.clientHeight);
				if (b != this.mw || c != this.mh) this.mw = b, this.mh = c, this.measure()
			}
		},
		measure: function() {
			var a = this.div;
			if (a) {
				var b = this.chartDiv,
					c = a.offsetWidth,
					e = a.offsetHeight,
					f = this.container;
				a.clientHeight && (c = a.clientWidth, e = a.clientHeight);
				var e = Math.round(e),
					c = Math.round(c),
					a = Math.round(d.toCoordinate(this.width, c)),
					g = Math.round(d.toCoordinate(this.height, e));
				(c != this.previousWidth || e != this.previousHeight) && 0 < a && 0 < g && (b.style.width = a + "px", b.style.height = g + "px", b.style.padding = 0, f && f.setSize(a, g), this.balloon = d.processObject(this.balloon, d.AmBalloon, this.theme));
				this.balloon && this.balloon.setBounds && this.balloon.setBounds(2, 2, a - 2, g);
				this.updateWidth();
				this.balloon.chart = this;
				this.realWidth = a;
				this.realHeight = g;
				this.divRealWidth = c;
				this.divRealHeight = e
			}
		},
		checkDisplay: function() {
			if (this.autoDisplay && this.container) {
				var a = d.rect(this.container, 10, 10),
					b = a.getBBox();
				0 === b.width && 0 === b.height && (this.divRealHeight = this.divRealWidth = this.realHeight = this.realWidth = 0, this.previousWidth = this.previousHeight = NaN);
				a.remove()
			}
		},
		checkTransform: function(a) {
			if (this.autoTransform && window.getComputedStyle && a) {
				if (a.style) {
					var b = window.getComputedStyle(a, null);
					if (b && (b = b.getPropertyValue("-webkit-transform") || b.getPropertyValue("-moz-transform") || b.getPropertyValue("-ms-transform") || b.getPropertyValue("-o-transform") || b.getPropertyValue("transform")) && "none" !== b) {
						var c = b.split("(")[1].split(")")[0].split(","),
							b = c[0],
							c = c[1],
							b = Math.sqrt(b * b + c * c);
						isNaN(b) || (this.cssScale *= b)
					}
				}
				a.parentNode && this.checkTransform(a.parentNode)
			}
		},
		destroy: function() {
			this.chartDiv.innerHTML = "";
			this.clearTimeOuts();
			this.legend && this.legend.destroy()
		},
		clearTimeOuts: function() {
			var a = this.timeOuts;
			if (a) {
				var b;
				for (b = 0; b < a.length; b++) clearTimeout(a[b])
			}
			this.timeOuts = []
		},
		clear: function(a) {
			try {
				document.removeEventListener("touchstart", this.docfn1, !0), document.removeEventListener("touchend", this.docfn2, !0)
			} catch (b) {}
			d.callMethod("clear", [this.chartScrollbar, this.scrollbarV, this.scrollbarH, this.chartCursor]);
			this.chartCursor = this.scrollbarH = this.scrollbarV = this.chartScrollbar = null;
			this.clearTimeOuts();
			this.container && (this.container.remove(this.chartDiv), this.container.remove(this.legendDiv));
			a || d.removeChart(this);
			if (a = this.div)
				for (; a.firstChild;) a.removeChild(a.firstChild);
			this.legend && this.legend.destroy();
			this.AmExport && this.AmExport.clear && this.AmExport.clear()
		},
		setMouseCursor: function(a) {
			"auto" == a && d.isNN && (a = "default");
			this.chartDiv.style.cursor = a;
			this.legendDiv.style.cursor = a
		},
		redrawLabels: function() {
			this.labels = [];
			var a = this.allLabels;
			this.createLabelsSet();
			var b;
			for (b = 0; b < a.length; b++) this.drawLabel(a[b])
		},
		drawLabel: function(a) {
			var b = this;
			if (b.container && !1 !== a.enabled) {
				a = d.processObject(a, d.Label, b.theme);
				var c = a.y,
					e = a.text,
					f = a.align,
					g = a.size,
					h = a.color,
					k = a.rotation,
					l = a.alpha,
					m = a.bold,
					n = d.toCoordinate(a.x, b.realWidth),
					c = d.toCoordinate(c, b.realHeight);
				n || (n = 0);
				c || (c = 0);
				void 0 === h && (h = b.color);
				isNaN(g) && (g = b.fontSize);
				f || (f = "start");
				"left" == f && (f = "start");
				"right" == f && (f = "end");
				"center" == f && (f = "middle", k ? c = b.realHeight - c + c / 2 : n = b.realWidth / 2 - n);
				void 0 === l && (l = 1);
				void 0 === k && (k = 0);
				c += g / 2;
				e = d.text(b.container, e, h, b.fontFamily, g, f, m, l);
				e.translate(n, c);
				void 0 !== a.tabIndex && e.setAttr("tabindex", a.tabIndex);
				d.setCN(b, e, "label");
				a.id && d.setCN(b, e, "label-" + a.id);
				0 !== k && e.rotate(k);
				a.url ? (e.setAttr("cursor", "pointer"), e.click(function() {
					d.getURL(a.url, b.urlTarget)
				})) : e.node.style.pointerEvents = "none";
				b.labelsSet.push(e);
				b.labels.push(e)
			}
		},
		addLabel: function(a, b, c, e, d, g, h, k, l, m) {
			a = {
				x: a,
				y: b,
				text: c,
				align: e,
				size: d,
				color: g,
				alpha: k,
				rotation: h,
				bold: l,
				url: m,
				enabled: !0
			};
			this.container && this.drawLabel(a);
			this.allLabels.push(a)
		},
		clearLabels: function() {
			var a = this.labels,
				b;
			for (b = a.length - 1; 0 <= b; b--) a[b].remove();
			this.labels = [];
			this.allLabels = []
		},
		updateHeight: function() {
			var a = this.divRealHeight,
				b = this.legend;
			if (b) {
				var c = this.legendDiv.offsetHeight,
					b = b.position;
				if ("top" == b || "bottom" == b) {
					a -= c;
					if (0 > a || isNaN(a)) a = 0;
					this.chartDiv.style.height = a + "px"
				}
			}
			return a
		},
		updateWidth: function() {
			var a = this.divRealWidth,
				b = this.divRealHeight,
				c = this.legend;
			if (c) {
				var e = this.legendDiv,
					d = e.offsetWidth;
				isNaN(c.width) || (d = c.width);
				c.ieW && (d = c.ieW);
				var g = e.offsetHeight,
					e = e.style,
					h = this.chartDiv.style,
					k = c.position;
				if (("right" == k || "left" == k) && void 0 === c.divId) {
					a -= d;
					if (0 > a || isNaN(a)) a = 0;
					h.width = a + "px";
					this.balloon && this.balloon.setBounds && this.balloon.setBounds(2, 2, a - 2, this.realHeight);
					"left" == k ? (h.left = d + "px", e.left = "0px") : (h.left = "0px", e.left = a + "px");
					b > g && (e.top = (b - g) / 2 + "px")
				}
			}
			return a
		},
		getTitleHeight: function() {
			this.drawTitles(!0);
			return this.titleHeight
		},
		addTitle: function(a, b, c, e, d) {
			isNaN(b) && (b = this.fontSize + 2);
			a = {
				text: a,
				size: b,
				color: c,
				alpha: e,
				bold: d,
				enabled: !0
			};
			this.titles.push(a);
			return a
		},
		handleWheel: function(a) {
			var b = 0;
			a || (a = window.event);
			a.wheelDelta ? b = a.wheelDelta / 120 : a.detail && (b = -a.detail / 3);
			b && this.handleWheelReal(b, a.shiftKey);
			a.preventDefault && a.preventDefault()
		},
		handleWheelReal: function() {},
		handleDocTouchStart: function() {
			this.handleMouseMove();
			this.tmx = this.mouseX;
			this.tmy = this.mouseY;
			this.touchStartTime = (new Date).getTime()
		},
		handleDocTouchEnd: function() {
			-.5 < this.tmx && this.tmx < this.divRealWidth + 1 && 0 < this.tmy && this.tmy < this.divRealHeight ? (this.handleMouseMove(), 4 > Math.abs(this.mouseX - this.tmx) && 4 > Math.abs(this.mouseY - this.tmy) ? (this.tapped = !0, this.panRequired && this.panEventsEnabled && this.chartDiv && (this.chartDiv.style.msTouchAction = "none", this.chartDiv.style.touchAction = "none")) : this.mouseIsOver || this.resetTouchStyle()) : (this.tapped = !1, this.resetTouchStyle())
		},
		resetTouchStyle: function() {
			this.panEventsEnabled && this.chartDiv && (this.chartDiv.style.msTouchAction = "auto", this.chartDiv.style.touchAction = "auto")
		},
		checkTouchDuration: function(a) {
			var b = this,
				c = (new Date).getTime();
			if (a)
				if (a.touches) b.isTouchEvent = !0;
				else if (!b.isTouchEvent) return !0;
			if (c - b.touchStartTime > b.touchClickDuration) return !0;
			setTimeout(function() {
				b.resetTouchDuration()
			}, 300)
		},
		resetTouchDuration: function() {
			this.isTouchEvent = !1
		},
		checkTouchMoved: function() {
			if (4 < Math.abs(this.mouseX - this.tmx) || 4 < Math.abs(this.mouseY - this.tmy)) return !0
		},
		addListeners: function() {
			var a = this,
				b = a.chartDiv;
			document.addEventListener ? ("ontouchstart" in document.documentElement && (b.addEventListener("touchstart", function(b) {
				a.handleTouchStart.call(a, b)
			}, !0), b.addEventListener("touchmove", function(b) {
				a.handleMouseMove.call(a, b)
			}, !0), b.addEventListener("touchend", function(b) {
				a.handleTouchEnd.call(a, b)
			}, !0), a.docfn1 = function(b) {
				a.handleDocTouchStart.call(a, b)
			}, a.docfn2 = function(b) {
				a.handleDocTouchEnd.call(a, b)
			}, document.addEventListener("touchstart", a.docfn1, !0), document.addEventListener("touchend", a.docfn2, !0)), b.addEventListener("mousedown", function(b) {
				a.mouseIsOver = !0;
				a.handleMouseMove.call(a, b);
				a.handleMouseDown.call(a, b);
				a.handleDocTouchStart.call(a, b)
			}, !0), b.addEventListener("mouseover", function(b) {
				a.handleMouseOver.call(a, b)
			}, !0), b.addEventListener("mouseout", function(b) {
				a.handleMouseOut.call(a, b)
			}, !0), b.addEventListener("mouseup", function(b) {
				a.handleDocTouchEnd.call(a, b)
			}, !0)) : (b.attachEvent("onmousedown", function(b) {
				a.handleMouseDown.call(a, b)
			}), b.attachEvent("onmouseover", function(b) {
				a.handleMouseOver.call(a, b)
			}), b.attachEvent("onmouseout", function(b) {
				a.handleMouseOut.call(a, b)
			}))
		},
		dispDUpd: function() {
			this.skipEvents || (this.dispatchDataUpdated && (this.dispatchDataUpdated = !1, this.fire({
				type: "dataUpdated",
				chart: this
			})), this.chartCreated || (this.chartCreated = !0, this.fire({
				type: "init",
				chart: this
			})), this.chartRendered || (this.fire({
				type: "rendered",
				chart: this
			}), this.chartRendered = !0), this.fire({
				type: "drawn",
				chart: this
			}));
			this.skipEvents = !1
		},
		validateSize: function() {
			var a = this;
			a.premeasure();
			a.checkDisplay();
			a.cssScale = 1;
			a.cssAngle = 0;
			a.checkTransform(a.div);
			if (a.divRealWidth != a.previousWidth || a.divRealHeight != a.previousHeight) {
				var b = a.legend;
				if (0 < a.realWidth && 0 < a.realHeight) {
					a.sizeChanged = !0;
					if (b) {
						a.legendInitTO && clearTimeout(a.legendInitTO);
						var c = setTimeout(function() {
							b.invalidateSize()
						}, 10);
						a.timeOuts.push(c);
						a.legendInitTO = c
					}
					a.marginsUpdated = !1;
					clearTimeout(a.initTO);
					c = setTimeout(function() {
						a.initChart()
					}, 10);
					a.timeOuts.push(c);
					a.initTO = c
				}
				a.renderFix();
				b && b.renderFix && b.renderFix();
				clearTimeout(a.resizedTO);
				a.resizedTO = setTimeout(function() {
					a.fire({
						type: "resized",
						chart: a
					})
				}, 10);
				a.previousHeight = a.divRealHeight;
				a.previousWidth = a.divRealWidth
			}
		},
		invalidateSize: function() {
			this.previousHeight = this.previousWidth = NaN;
			this.invalidateSizeReal()
		},
		invalidateSizeReal: function() {
			var a = this;
			a.marginsUpdated = !1;
			clearTimeout(a.validateTO);
			var b = setTimeout(function() {
				a.validateSize()
			}, 5);
			a.timeOuts.push(b);
			a.validateTO = b
		},
		validateData: function(a) {
			this.chartCreated && (this.dataChanged = !0, this.marginsUpdated = !1, this.initChart(a))
		},
		validateNow: function(a, b) {
			this.initTO && clearTimeout(this.initTO);
			a && (this.dataChanged = !0, this.marginsUpdated = !1);
			this.skipEvents = b;
			this.chartRendered = !1;
			var c = this.legend;
			c && c.position != this.prevLegendPosition && (this.previousWidth = this.mw = 0, c.invalidateSize && (c.invalidateSize(), this.validateSize()));
			this.write(this.div)
		},
		showItem: function(a) {
			a.hidden = !1;
			this.initChart()
		},
		hideItem: function(a) {
			a.hidden = !0;
			this.initChart()
		},
		hideBalloon: function() {
			var a = this;
			clearTimeout(a.hoverInt);
			clearTimeout(a.balloonTO);
			a.hoverInt = setTimeout(function() {
				a.hideBalloonReal.call(a)
			}, a.hideBalloonTime)
		},
		cleanChart: function() {},
		hideBalloonReal: function() {
			var a = this.balloon;
			a && a.hide && a.hide()
		},
		showBalloon: function(a, b, c, e, d) {
			var g = this;
			clearTimeout(g.balloonTO);
			clearTimeout(g.hoverInt);
			g.balloonTO = setTimeout(function() {
				g.showBalloonReal.call(g, a, b, c, e, d)
			}, 1)
		},
		showBalloonReal: function(a, b, c, e, d) {
			this.handleMouseMove();
			var g = this.balloon;
			g.enabled && (g.followCursor(!1), g.changeColor(b), !c || g.fixedPosition ? (g.setPosition(e, d), isNaN(e) || isNaN(d) ? g.followCursor(!0) : g.followCursor(!1)) : g.followCursor(!0), a && g.showBalloon(a))
		},
		handleMouseOver: function() {
			this.outTO && clearTimeout(this.outTO);
			d.resetMouseOver();
			this.mouseIsOver = !0
		},
		handleMouseOut: function() {
			var a = this;
			d.resetMouseOver();
			a.outTO && clearTimeout(a.outTO);
			a.outTO = setTimeout(function() {
				a.handleMouseOutReal()
			}, 10)
		},
		handleMouseOutReal: function() {
			this.mouseIsOver = !1
		},
		handleMouseMove: function(a) {
			a || (a = window.event);
			this.mouse2Y = this.mouse2X = NaN;
			var b, c, e, d;
			if (a) {
				if (a.touches) {
					var g = a.touches.item(1);
					g && this.panEventsEnabled && this.boundingRect && (e = g.clientX - this.boundingRect.left, d = g.clientY - this.boundingRect.top);
					a = a.touches.item(0);
					if (!a) return
				} else this.wasTouched = !1;
				this.boundingRect && a.clientX && (b = a.clientX - this.boundingRect.left, c = a.clientY - this.boundingRect.top);
				isNaN(e) ? this.mouseX = b : (this.mouseX = Math.min(b, e), this.mouse2X = Math.max(b, e));
				isNaN(d) ? this.mouseY = c : (this.mouseY = Math.min(c, d), this.mouse2Y = Math.max(c, d));
				this.autoTransform && (this.mouseX /= this.cssScale, this.mouseY /= this.cssScale)
			}
		},
		handleTouchStart: function(a) {
			this.hideBalloonReal();
			a && (a.touches && this.tapToActivate && !this.tapped || !this.panRequired) || (this.handleMouseMove(a), this.handleMouseDown(a))
		},
		handleTouchEnd: function(a) {
			this.wasTouched = !0;
			this.handleMouseMove(a);
			d.resetMouseOver();
			this.handleReleaseOutside(a)
		},
		handleReleaseOutside: function() {
			this.handleDocTouchEnd.call(this)
		},
		handleMouseDown: function(a) {
			d.resetMouseOver();
			this.mouseIsOver = !0;
			a && a.preventDefault && (this.panEventsEnabled ? a.preventDefault() : a.touches || a.preventDefault())
		},
		addLegend: function(a, b) {
			a = d.processObject(a, d.AmLegend, this.theme);
			a.divId = b;
			a.ieW = 0;
			var c;
			c = "object" != typeof b && b ? document.getElementById(b) : b;
			this.legend = a;
			a.chart = this;
			c ? (a.div = c, a.position = "outside", a.autoMargins = !1) : a.div = this.legendDiv;
			return a
		},
		removeLegend: function() {
			this.legend = void 0;
			this.previousWidth = 0;
			this.legendDiv.innerHTML = ""
		},
		handleResize: function() {
			(d.isPercents(this.width) || d.isPercents(this.height)) && this.invalidateSizeReal();
			this.renderFix()
		},
		renderFix: function() {
			if (!d.VML) {
				var a = this.container;
				a && a.renderFix()
			}
		},
		getSVG: function() {
			if (d.hasSVG) return this.container
		},
		animate: function(a, b, c, e, f, g, h) {
			a["an_" + b] && d.removeFromArray(this.animations, a["an_" + b]);
			c = {
				obj: a,
				frame: 0,
				attribute: b,
				from: c,
				to: e,
				time: f,
				effect: g,
				suffix: h
			};
			a["an_" + b] = c;
			this.animations.push(c);
			return c
		},
		setLegendData: function(a) {
			var b = this.legend;
			b && b.setData(a)
		},
		stopAnim: function(a) {
			d.removeFromArray(this.animations, a)
		},
		updateAnimations: function() {
			var a;
			this.container && this.container.update();
			if (this.animations)
				for (a = this.animations.length - 1; 0 <= a; a--) {
					var b = this.animations[a],
						c = d.updateRate * b.time,
						e = b.frame + 1,
						f = b.obj,
						g = b.attribute;
					if (e <= c) {
						b.frame++;
						var h = Number(b.from),
							k = Number(b.to) - h,
							c = d[b.effect](0, e, h, k, c);
						0 === k ? (this.animations.splice(a, 1), f.node.style[g] = Number(b.to) + b.suffix) : f.node.style[g] = c + b.suffix
					} else f.node.style[g] = Number(b.to) + b.suffix, f.animationFinished = !0, this.animations.splice(a, 1)
				}
		},
		update: function() {
			this.updateAnimations();
			var a = this.animatable;
			if (0 < a.length) {
				for (var b = !0, c = a.length - 1; 0 <= c; c--) {
					var e = a[c];
					e && (e.animationFinished ? a.splice(c, 1) : b = !1)
				}
				b && (this.fire({
					type: "animationFinished",
					chart: this
				}), this.animatable = [])
			}
		},
		inIframe: function() {
			try {
				return window.self !== window.top
			} catch (a) {
				return !0
			}
		},
		brr: function() {

		}
	});
	d.Slice = d.Class({
		construct: function() {}
	});
	d.SerialDataItem = d.Class({
		construct: function() {}
	});
	d.GraphDataItem = d.Class({
		construct: function() {}
	});
	d.Guide = d.Class({
		construct: function(a) {
			this.cname = "Guide";
			d.applyTheme(this, a, this.cname)
		}
	});
	d.Title = d.Class({
		construct: function(a) {
			this.cname = "Title";
			d.applyTheme(this, a, this.cname)
		}
	});
	d.Label = d.Class({
		construct: function(a) {
			this.cname = "Label";
			d.applyTheme(this, a, this.cname)
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.AmBalloon = d.Class({
		construct: function(a) {
			this.cname = "AmBalloon";
			this.enabled = !0;
			this.fillColor = "#FFFFFF";
			this.fillAlpha = .8;
			this.borderThickness = 2;
			this.borderColor = "#FFFFFF";
			this.borderAlpha = 1;
			this.cornerRadius = 0;
			this.maxWidth = 220;
			this.horizontalPadding = 8;
			this.verticalPadding = 4;
			this.pointerWidth = 6;
			this.pointerOrientation = "V";
			this.color = "#000000";
			this.adjustBorderColor = !0;
			this.show = this.follow = this.showBullet = !1;
			this.bulletSize = 3;
			this.shadowAlpha = .4;
			this.shadowColor = "#000000";
			this.fadeOutDuration = this.animationDuration = .3;
			this.fixedPosition = !0;
			this.offsetY = 6;
			this.offsetX = 1;
			this.textAlign = "center";
			this.disableMouseEvents = !0;
			this.deltaSignX = this.deltaSignY = 1;
			d.isModern || (this.offsetY *= 1.5);
			this.sdy = this.sdx = 0;
			d.applyTheme(this, a, this.cname)
		},
		draw: function() {
			var a = this.pointToX,
				b = this.pointToY;
			d.isModern || (this.drop = !1);
			var c = this.chart;
			d.VML && (this.fadeOutDuration = 0);
			this.xAnim && c.stopAnim(this.xAnim);
			this.yAnim && c.stopAnim(this.yAnim);
			this.sdy = this.sdx = 0;
			if (!isNaN(a)) {
				var e = this.follow,
					f = c.container,
					g = this.set;
				d.remove(g);
				this.removeDiv();
				g = f.set();
				g.node.style.pointerEvents = "none";
				this.set = g;
				this.mainSet ? (this.mainSet.push(this.set), this.sdx = this.mainSet.x, this.sdy = this.mainSet.y) : c.balloonsSet.push(g);
				if (this.show) {
					var h = this.l,
						k = this.t,
						l = this.r,
						m = this.b,
						n = this.balloonColor,
						p = this.fillColor,
						r = this.borderColor,
						t = p;
					void 0 != n && (this.adjustBorderColor ? t = r = n : p = n);
					var q = this.horizontalPadding,
						y = this.verticalPadding,
						B = this.pointerWidth,
						u = this.pointerOrientation,
						w = this.cornerRadius,
						v = c.fontFamily,
						A = this.fontSize;
					void 0 == A && (A = c.fontSize);
					var n = document.createElement("div"),
						C = c.classNamePrefix;
					n.className = C + "-balloon-div";
					this.className && (n.className = n.className + " " + C + "-balloon-div-" + this.className);
					C = n.style;
					this.disableMouseEvents && (C.pointerEvents = "none");
					C.position = "absolute";
					var x = this.minWidth,
						z = document.createElement("div");
					n.appendChild(z);
					var F = z.style;
					isNaN(x) || (F.minWidth = x - 2 * q + "px");
					F.textAlign = this.textAlign;
					F.maxWidth = this.maxWidth + "px";
					F.fontSize = A + "px";
					F.color = this.color;
					F.fontFamily = v;
					z.innerHTML = this.text;
					c.chartDiv.appendChild(n);
					this.textDiv = n;
					var F = n.offsetWidth,
						E = n.offsetHeight;
					n.clientHeight && (F = n.clientWidth, E = n.clientHeight);
					v = E + 2 * y;
					z = F + 2 * q;
					!isNaN(x) && z < x && (z = x);
					window.opera && (v += 2);
					var H = !1,
						A = this.offsetY;
					c.handDrawn && (A += c.handDrawScatter + 2);
					"H" != u ? (x = a - z / 2, b < k + v + 10 && "down" != u ? (H = !0, e && (b += A), A = b + B, this.deltaSignY = -1) : (e && (b -= A), A = b - v - B, this.deltaSignY = 1)) : (2 * B > v && (B = v / 2), A = b - v / 2, a < h + (l - h) / 2 ? (x = a + B, this.deltaSignX = -1) : (x = a - z - B, this.deltaSignX =
						1));
					A + v >= m && (A = m - v);
					A < k && (A = k);
					x < h && (x = h);
					x + z > l && (x = l - z);
					var k = A + y,
						m = x + q,
						G = this.shadowAlpha,
						D = this.shadowColor,
						q = this.borderThickness,
						K = this.bulletSize,
						J, y = this.fillAlpha,
						L = this.borderAlpha;
					this.showBullet && (J = d.circle(f, K, t, y), g.push(J));
					this.drop ? (h = z / 1.6, l = 0, "V" == u && (u = "down"), "H" == u && (u = "left"), "down" == u && (x = a + 1, A = b - h - h / 3), "up" == u && (l = 180, x = a + 1, A = b + h + h / 3), "left" == u && (l = 270, x = a + h + h / 3 + 2, A = b), "right" == u && (l = 90, x = a - h - h / 3 + 2, A = b), k = A - E / 2 + 1, m = x - F / 2 - 1, p = d.drop(f, h, l, p, y, q, r, L)) : 0 < w || 0 === B ? (0 < G && (a = d.rect(f, z, v, p, 0, q + 1, D, G, w), d.isModern ? a.translate(1, 1) : a.translate(4, 4), g.push(a)), p = d.rect(f, z, v, p, y, q, r, L, w)) : (t = [], w = [], "H" != u ? (h = a - x, h > z - B && (h = z - B), h < B && (h = B), t = [0, h - B, a - x, h + B, z, z, 0, 0], w = H ? [0, 0, b - A, 0, 0, v, v, 0] : [v, v, b - A, v, v, 0, 0, v]) : (u = b - A, u > v - B && (u = v - B), u < B && (u = B), w = [0, u - B, b - A, u + B, v, v, 0, 0], t = a < h + (l - h) / 2 ? [0, 0, x < a ? 0 : a - x, 0, 0, z, z, 0] : [z, z, x + z > a ? z : a - x, z, z, 0, 0, z]), 0 < G && (a = d.polygon(f, t, w, p, 0, q, D, G), a.translate(1, 1), g.push(a)), p = d.polygon(f, t, w, p, y, q, r, L));
					this.bg = p;
					g.push(p);
					p.toFront();
					d.setCN(c, p, "balloon-bg");
					this.className && d.setCN(c, p, "balloon-bg-" + this.className);
					f = 1 * this.deltaSignX;
					m += this.sdx;
					k += this.sdy;
					C.left = m + "px";
					C.top = k + "px";
					g.translate(x - f, A, 1, !0);
					p = p.getBBox();
					this.bottom = A + v + 1;
					this.yPos = p.y + A;
					J && J.translate(this.pointToX - x + f, b - A);
					b = this.animationDuration;
					0 < this.animationDuration && !e && !isNaN(this.prevX) && (g.translate(this.prevX, this.prevY, NaN, !0), g.animate({
						translate: x - f + "," + A
					}, b, "easeOutSine"), n && (C.left = this.prevTX + "px", C.top = this.prevTY + "px", this.xAnim = c.animate({
						node: n
					}, "left", this.prevTX, m, b, "easeOutSine", "px"), this.yAnim = c.animate({
						node: n
					}, "top", this.prevTY, k, b, "easeOutSine", "px")));
					this.prevX = x - f;
					this.prevY = A;
					this.prevTX = m;
					this.prevTY = k
				}
			}
		},
		fixPrevious: function() {
			this.rPrevX = this.prevX;
			this.rPrevY = this.prevY;
			this.rPrevTX = this.prevTX;
			this.rPrevTY = this.prevTY
		},
		restorePrevious: function() {
			this.prevX = this.rPrevX;
			this.prevY = this.rPrevY;
			this.prevTX = this.rPrevTX;
			this.prevTY = this.rPrevTY
		},
		followMouse: function() {
			if (this.follow && this.show) {
				var a = this.chart.mouseX - this.offsetX * this.deltaSignX -
					this.sdx,
					b = this.chart.mouseY - this.sdy;
				this.pointToX = a;
				this.pointToY = b;
				if (a != this.previousX || b != this.previousY)
					if (this.previousX = a, this.previousY = b, 0 === this.cornerRadius) this.draw();
					else {
						var c = this.set;
						if (c) {
							var e = c.getBBox(),
								a = a - e.width / 2,
								d = b - e.height - 10;
							a < this.l && (a = this.l);
							a > this.r - e.width && (a = this.r - e.width);
							d < this.t && (d = b + 10);
							c.translate(a, d);
							b = this.textDiv.style;
							b.left = a + this.horizontalPadding + "px";
							b.top = d + this.verticalPadding + "px"
						}
					}
			}
		},
		changeColor: function(a) {
			this.balloonColor = a
		},
		setBounds: function(a, b, c, e) {
			this.l = a;
			this.t = b;
			this.r = c;
			this.b = e;
			this.destroyTO && clearTimeout(this.destroyTO)
		},
		showBalloon: function(a) {
			if (this.text != a || this.positionChanged) this.text = a, this.isHiding = !1, this.show = !0, this.destroyTO && clearTimeout(this.destroyTO), a = this.chart, this.fadeAnim1 && a.stopAnim(this.fadeAnim1), this.fadeAnim2 && a.stopAnim(this.fadeAnim2), this.draw(), this.positionChanged = !1
		},
		hide: function(a) {
			var b = this;
			b.text = void 0;
			isNaN(a) && (a = b.fadeOutDuration);
			var c = b.chart;
			if (0 < a && !b.isHiding) {
				b.isHiding = !0;
				b.destroyTO && clearTimeout(b.destroyTO);
				b.destroyTO = setTimeout(function() {
					b.destroy.call(b)
				}, 1E3 * a);
				b.follow = !1;
				b.show = !1;
				var e = b.set;
				e && (e.setAttr("opacity", b.fillAlpha), b.fadeAnim1 = e.animate({
					opacity: 0
				}, a, "easeInSine"));
				b.textDiv && (b.fadeAnim2 = c.animate({
					node: b.textDiv
				}, "opacity", 1, 0, a, "easeInSine", ""))
			} else b.show = !1, b.follow = !1, b.destroy()
		},
		setPosition: function(a, b) {
			if (a != this.pointToX || b != this.pointToY) this.previousX = this.pointToX, this.previousY = this.pointToY, this.pointToX = a, this.pointToY = b, this.positionChanged = !0
		},
		followCursor: function(a) {
			var b = this;
			b.follow = a;
			clearInterval(b.interval);
			var c = b.chart.mouseX - b.sdx,
				e = b.chart.mouseY - b.sdy;
			!isNaN(c) && a && (b.pointToX = c - b.offsetX * b.deltaSignX, b.pointToY = e, b.followMouse(), b.interval = setInterval(function() {
				b.followMouse.call(b)
			}, 40))
		},
		removeDiv: function() {
			if (this.textDiv) {
				var a = this.textDiv.parentNode;
				a && a.removeChild(this.textDiv)
			}
		},
		destroy: function() {
			clearInterval(this.interval);
			d.remove(this.set);
			this.removeDiv();
			this.set = null
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.circle = function(a, b, c, e, f, g, h, k, l) {
		0 >= b && (b = .001);
		if (void 0 == f || 0 === f) f = .01;
		void 0 === g && (g = "#000000");
		void 0 === h && (h = 0);
		e = {
			fill: c,
			stroke: g,
			"fill-opacity": e,
			"stroke-width": f,
			"stroke-opacity": h
		};
		a = isNaN(l) ? a.circle(0, 0, b).attr(e) : a.ellipse(0, 0, b, l).attr(e);
		k && a.gradient("radialGradient", [c, d.adjustLuminosity(c, -.6)]);
		return a
	};
	d.text = function(a, b, c, e, f, g, h, k) {
		g || (g = "middle");
		"right" == g && (g = "end");
		"left" == g && (g = "start");
		isNaN(k) && (k = 1);
		void 0 !== b && (b = String(b), d.isIE && !d.isModern && (b = b.replace("&amp;", "&"), b = b.replace("&", "&amp;")));
		c = {
			fill: c,
			"font-family": e,
			"font-size": f + "px",
			opacity: k
		};
		!0 === h && (c["font-weight"] = "bold");
		c["text-anchor"] = g;
		return a.text(b, c)
	};
	d.polygon = function(a, b, c, e, f, g, h, k, l, m, n) {
		isNaN(g) && (g = .01);
		isNaN(k) && (k = f);
		var p = e,
			r = !1;
		"object" == typeof p && 1 < p.length && (r = !0, p = p[0]);
		void 0 === h && (h = p);
		f = {
			fill: p,
			stroke: h,
			"fill-opacity": f,
			"stroke-width": g,
			"stroke-opacity": k
		};
		void 0 !== n && 0 < n && (f["stroke-dasharray"] = n);
		n = d.dx;
		g = d.dy;
		a.handDrawn && (c = d.makeHD(b, c, a.handDrawScatter), b = c[0], c = c[1]);
		h = Math.round;
		m && (h = Number);
		k = "M" + (h(b[0]) + n) + "," + (h(c[0]) + g);
		for (p = 1; p < b.length; p++) m && (b[p] = d.roundTo(b[p], 5), c[p] = d.roundTo(c[p], 5)), k += " L" + (h(b[p]) + n) + "," + (h(c[p]) + g);
		a = a.path(k + " Z").attr(f);
		r && a.gradient("linearGradient", e, l);
		return a
	};
	d.rect = function(a, b, c, e, f, g, h, k, l, m, n) {
		if (isNaN(b) || isNaN(c)) return a.set();
		isNaN(g) && (g = 0);
		void 0 === l && (l = 0);
		void 0 === m && (m = 270);
		isNaN(f) && (f = 0);
		var p = e,
			r = !1;
		"object" == typeof p && (p = p[0], r = !0);
		void 0 === h && (h = p);
		void 0 === k && (k = f);
		b = Math.round(b);
		c = Math.round(c);
		var t = 0,
			q = 0;
		0 > b && (b = Math.abs(b), t = -b);
		0 > c && (c = Math.abs(c), q = -c);
		t += d.dx;
		q += d.dy;
		f = {
			fill: p,
			stroke: h,
			"fill-opacity": f,
			"stroke-opacity": k
		};
		void 0 !== n && 0 < n && (f["stroke-dasharray"] = n);
		a = a.rect(t, q, b, c, l, g).attr(f);
		r && a.gradient("linearGradient", e, m);
		return a
	};
	d.bullet = function(a, b, c, e, f, g, h, k, l, m, n, p, r) {
		var t;
		"circle" == b && (b = "round");
		switch (b) {
			case "round":
				t = d.circle(a, c / 2, e, f, g, h, k);
				break;
			case "square":
				t = d.polygon(a, [-c / 2, c / 2, c / 2, -c / 2], [c / 2, c / 2, -c / 2, -c / 2], e, f, g, h, k, m - 180, void 0, r);
				break;
			case "rectangle":
				t = d.polygon(a, [-c, c, c, -c], [c / 2, c / 2, -c / 2, -c / 2], e, f, g, h, k, m - 180, void 0, r);
				break;
			case "diamond":
				t = d.polygon(a, [-c / 2, 0, c / 2, 0], [0, -c / 2, 0, c / 2], e, f, g, h, k);
				break;
			case "triangleUp":
				t = d.triangle(a, c, 0, e, f, g, h, k);
				break;
			case "triangleDown":
				t = d.triangle(a, c, 180, e, f, g, h, k);
				break;
			case "triangleLeft":
				t = d.triangle(a, c, 270, e, f, g, h, k);
				break;
			case "triangleRight":
				t = d.triangle(a, c, 90, e, f, g, h, k);
				break;
			case "bubble":
				t = d.circle(a, c / 2, e, f, g, h, k, !0);
				break;
			case "line":
				t = d.line(a, [-c /
					2, c / 2
				], [0, 0], e, f, g, h, k);
				break;
			case "yError":
				t = a.set();
				t.push(d.line(a, [0, 0], [-c / 2, c / 2], e, f, g));
				t.push(d.line(a, [-l, l], [-c / 2, -c / 2], e, f, g));
				t.push(d.line(a, [-l, l], [c / 2, c / 2], e, f, g));
				break;
			case "xError":
				t = a.set(), t.push(d.line(a, [-c / 2, c / 2], [0, 0], e, f, g)), t.push(d.line(a, [-c / 2, -c / 2], [-l, l], e, f, g)), t.push(d.line(a, [c / 2, c / 2], [-l, l], e, f, g))
		}
		t && t.pattern(n, NaN, p);
		return t
	};
	d.triangle = function(a, b, c, e, d, g, h, k) {
		if (void 0 === g || 0 === g) g = 1;
		void 0 === h && (h = "#000");
		void 0 === k && (k = 0);
		e = {
			fill: e,
			stroke: h,
			"fill-opacity": d,
			"stroke-width": g,
			"stroke-opacity": k
		};
		b /= 2;
		var l;
		0 === c && (l = " M" + -b + "," + b + " L0," + -b + " L" + b + "," + b + " Z");
		180 == c && (l = " M" + -b + "," + -b + " L0," + b + " L" + b + "," + -b + " Z");
		90 == c && (l = " M" + -b + "," + -b + " L" + b + ",0 L" + -b + "," + b + " Z");
		270 == c && (l = " M" + -b + ",0 L" + b + "," + b + " L" + b + "," + -b + " Z");
		return a.path(l).attr(e)
	};
	d.line = function(a, b, c, e, f, g, h, k, l, m, n) {
		if (a.handDrawn && !n) return d.handDrawnLine(a, b, c, e, f, g, h, k, l, m, n);
		g = {
			fill: "none",
			"stroke-width": g
		};
		void 0 !== h && 0 < h && (g["stroke-dasharray"] = h);
		isNaN(f) || (g["stroke-opacity"] = f);
		e && (g.stroke = e);
		e = Math.round;
		m && (e = Number, b[0] = d.roundTo(b[0], 5), c[0] = d.roundTo(c[0], 5));
		m = d.dx;
		f = d.dy;
		h = "M" + (e(b[0]) + m) + "," + (e(c[0]) + f);
		for (k = 1; k < b.length; k++) b[k] = d.roundTo(b[k], 5), c[k] = d.roundTo(c[k], 5), h += " L" + (e(b[k]) + m) + "," + (e(c[k]) + f);
		if (d.VML) return a.path(h, void 0, !0).attr(g);
		l && (h += " M0,0 L0,0");
		return a.path(h).attr(g)
	};
	d.makeHD = function(a, b, c) {
		for (var e = [], d = [], g = 1; g < a.length; g++)
			for (var h = Number(a[g - 1]), k = Number(b[g - 1]), l = Number(a[g]), m = Number(b[g]), n = Math.round(Math.sqrt(Math.pow(l -
					h, 2) + Math.pow(m - k, 2)) / 50) + 1, l = (l - h) / n, m = (m - k) / n, p = 0; p <= n; p++) {
				var r = k + p * m + Math.random() * c;
				e.push(h + p * l + Math.random() * c);
				d.push(r)
			}
		return [e, d]
	};
	d.handDrawnLine = function(a, b, c, e, f, g, h, k, l, m) {
		var n, p = a.set();
		for (n = 1; n < b.length; n++)
			for (var r = [b[n - 1], b[n]], t = [c[n - 1], c[n]], t = d.makeHD(r, t, a.handDrawScatter), r = t[0], t = t[1], q = 1; q < r.length; q++) p.push(d.line(a, [r[q - 1], r[q]], [t[q - 1], t[q]], e, f, g + Math.random() * a.handDrawThickness - a.handDrawThickness / 2, h, k, l, m, !0));
		return p
	};
	d.doNothing = function(a) {
		return a
	};
	d.drop =
		function(a, b, c, e, d, g, h, k) {
			var l = 1 / 180 * Math.PI,
				m = c - 20,
				n = Math.sin(m * l) * b,
				p = Math.cos(m * l) * b,
				r = Math.sin((m + 40) * l) * b,
				t = Math.cos((m + 40) * l) * b,
				q = .8 * b,
				y = -b / 3,
				B = b / 3;
			0 === c && (y = -y, B = 0);
			180 == c && (B = 0);
			90 == c && (y = 0);
			270 == c && (y = 0, B = -B);
			c = {
				fill: e,
				stroke: h,
				"stroke-width": g,
				"stroke-opacity": k,
				"fill-opacity": d
			};
			b = "M" + n + "," + p + " A" + b + "," + b + ",0,1,1," + r + "," + t + (" A" + q + "," + q + ",0,0,0," + (Math.sin((m + 20) * l) * b + B) + "," + (Math.cos((m + 20) * l) * b + y));
			b += " A" + q + "," + q + ",0,0,0," + n + "," + p;
			return a.path(b, void 0, void 0, "1000,1000").attr(c)
		};
	d.wedge = function(a, b, c, e, f, g, h, k, l, m, n, p, r, t) {
		var q = Math.round;
		g = q(g);
		h = q(h);
		k = q(k);
		var y = q(h / g * k),
			B = d.VML,
			u = 359.5 + g / 100;
		359.94 < u && (u = 359.94);
		f >= u && (f = u);
		var w = 1 / 180 * Math.PI,
			u = b + Math.sin(e * w) * k,
			v = c - Math.cos(e * w) * y,
			A = b + Math.sin(e * w) * g,
			C = c - Math.cos(e * w) * h,
			x = b + Math.sin((e + f) * w) * g,
			z = c - Math.cos((e + f) * w) * h,
			F = b + Math.sin((e + f) * w) * k,
			w = c - Math.cos((e + f) * w) * y,
			E = {
				fill: d.adjustLuminosity(m.fill, -.2),
				"stroke-opacity": 0,
				"fill-opacity": m["fill-opacity"]
			},
			H = 0;
		180 < Math.abs(f) && (H = 1);
		e = a.set();
		var G;
		B && (u = q(10 * u), A = q(10 * A), x = q(10 * x), F = q(10 * F), v = q(10 * v), C = q(10 * C), z = q(10 * z), w = q(10 * w), b = q(10 * b), l = q(10 * l), c = q(10 * c), g *= 10, h *= 10, k *= 10, y *= 10, 1 > Math.abs(f) && 1 >= Math.abs(x - A) && 1 >= Math.abs(z - C) && (G = !0));
		f = "";
		var D;
		p && (E["fill-opacity"] = 0, E["stroke-opacity"] = m["stroke-opacity"] / 2, E.stroke = m.stroke);
		if (0 < l) {
			D = " M" + u + "," + (v + l) + " L" + A + "," + (C + l);
			B ? (G || (D += " A" + (b - g) + "," + (l + c - h) + "," + (b + g) + "," + (l + c + h) + "," + A + "," + (C + l) + "," + x + "," + (z + l)), D += " L" + F + "," + (w + l), 0 < k && (G || (D += " B" + (b - k) + "," + (l + c - y) + "," + (b + k) + "," + (l + c + y) + "," + F + "," + (l + w) + "," + u + "," + (l + v)))) : (D += " A" + g + "," + h + ",0," + H + ",1," + x + "," + (z + l) + " L" + F + "," + (w + l), 0 < k && (D += " A" + k + "," + y + ",0," + H + ",0," + u + "," + (v + l)));
			D += " Z";
			var K = l;
			B && (K /= 10);
			for (var J = 0; J < K; J += 10) {
				var L = a.path(D, void 0, void 0, "1000,1000").attr(E);
				e.push(L);
				L.translate(0, -J)
			}
			D = a.path(" M" + u + "," + v + " L" + u + "," + (v + l) + " L" + A + "," + (C + l) + " L" + A + "," + C + " L" + u + "," + v + " Z", void 0, void 0, "1000,1000").attr(E);
			l = a.path(" M" + x + "," + z + " L" + x + "," + (z + l) + " L" + F + "," + (w + l) + " L" + F + "," + w + " L" + x + "," + z + " Z", void 0, void 0, "1000,1000").attr(E);
			e.push(D);
			e.push(l)
		}
		B ? (G || (f = " A" + q(b - g) + "," + q(c - h) + "," + q(b + g) + "," + q(c + h) + "," + q(A) + "," + q(C) + "," + q(x) + "," + q(z)), h = " M" + q(u) + "," + q(v) + " L" + q(A) + "," + q(C) + f + " L" + q(F) + "," + q(w)) : h = " M" + u + "," + v + " L" + A + "," + C + (" A" + g + "," + h + ",0," + H + ",1," + x + "," + z) + " L" + F + "," + w;
		0 < k && (B ? G || (h += " B" + (b - k) + "," + (c - y) + "," + (b + k) + "," + (c + y) + "," + F + "," + w + "," + u + "," + v) : h += " A" + k + "," + y + ",0," + H + ",0," + u + "," + v);
		a.handDrawn && (k = d.line(a, [u, A], [v, C], m.stroke, m.thickness * Math.random() * a.handDrawThickness, m["stroke-opacity"]), e.push(k));
		a = a.path(h + " Z", void 0, void 0, "1000,1000").attr(m);
		if (n) {
			k = [];
			for (y = 0; y < n.length; y++) k.push(d.adjustLuminosity(m.fill, n[y]));
			"radial" != t || d.isModern || (k = []);
			0 < k.length && a.gradient(t + "Gradient", k)
		}
		d.isModern && "radial" == t && a.grad && (a.grad.setAttribute("gradientUnits", "userSpaceOnUse"), a.grad.setAttribute("r", g), a.grad.setAttribute("cx", b), a.grad.setAttribute("cy", c));
		a.pattern(p, NaN, r);
		e.wedge = a;
		e.push(a);
		return e
	};
	d.rgb2hex = function(a) {
		return (a = a.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i)) && 4 === a.length ? "#" + ("0" + parseInt(a[1], 10).toString(16)).slice(-2) + ("0" + parseInt(a[2], 10).toString(16)).slice(-2) + ("0" + parseInt(a[3], 10).toString(16)).slice(-2) : ""
	};
	d.adjustLuminosity = function(a, b) {
		a && -1 != a.indexOf("rgb") && (a = d.rgb2hex(a));
		a = String(a).replace(/[^0-9a-f]/gi, "");
		6 > a.length && (a = String(a[0]) + String(a[0]) + String(a[1]) + String(a[1]) + String(a[2]) + String(a[2]));
		b = b || 0;
		var c = "#",
			e, f;
		for (f = 0; 3 > f; f++) e = parseInt(a.substr(2 * f, 2), 16), e = Math.round(Math.min(Math.max(0, e + e * b), 255)).toString(16), c += ("00" +
			e).substr(e.length);
		return c
	}
})();
(function() {
	var d = window.AmCharts;
	d.AmLegend = d.Class({
		construct: function(a) {
			this.enabled = !0;
			this.cname = "AmLegend";
			this.createEvents("rollOverMarker", "rollOverItem", "rollOutMarker", "rollOutItem", "showItem", "hideItem", "clickMarker", "clickLabel");
			this.position = "bottom";
			this.borderColor = this.color = "#000000";
			this.borderAlpha = 0;
			this.markerLabelGap = 5;
			this.verticalGap = 10;
			this.align = "left";
			this.horizontalGap = 0;
			this.spacing = 10;
			this.markerDisabledColor = "#AAB3B3";
			this.markerType = "square";
			this.markerSize = 16;
			this.markerBorderThickness = this.markerBorderAlpha = 1;
			this.marginBottom = this.marginTop = 0;
			this.marginLeft = this.marginRight = 20;
			this.autoMargins = !0;
			this.valueWidth = 50;
			this.switchable = !0;
			this.switchType = "x";
			this.switchColor = "#FFFFFF";
			this.rollOverColor = "#CC0000";
			this.reversedOrder = !1;
			this.labelText = "[[title]]";
			this.valueText = "[[value]]";
			this.accessibleLabel = "[[title]]";
			this.useMarkerColorForLabels = !1;
			this.rollOverGraphAlpha = 1;
			this.textClickEnabled = !1;
			this.equalWidths = !0;
			this.backgroundColor = "#FFFFFF";
			this.backgroundAlpha = 0;
			this.useGraphSettings = !1;
			this.showEntries = !0;
			this.labelDx = 0;
			d.applyTheme(this, a, this.cname)
		},
		setData: function(a) {
			this.legendData = a;
			this.invalidateSize()
		},
		invalidateSize: function() {
			this.destroy();
			this.entries = [];
			this.valueLabels = [];
			var a = this.legendData;
			this.enabled && (d.ifArray(a) || d.ifArray(this.data)) && this.drawLegend()
		},
		drawLegend: function() {
			var a = this.chart,
				b = this.position,
				c = this.width,
				e = a.divRealWidth,
				f = a.divRealHeight,
				g = this.div,
				h = this.legendData;
			this.data && (h = this.combineLegend ? this.legendData.concat(this.data) : this.data);
			isNaN(this.fontSize) && (this.fontSize = a.fontSize);
			this.maxColumnsReal = this.maxColumns;
			if ("right" == b || "left" == b) this.maxColumnsReal = 1, this.autoMargins && (this.marginLeft = this.marginRight = 10);
			else if (this.autoMargins) {
				this.marginRight = a.marginRight;
				this.marginLeft = a.marginLeft;
				var k = a.autoMarginOffset;
				"bottom" == b ? (this.marginBottom = k, this.marginTop = 0) : (this.marginTop = k, this.marginBottom = 0)
			}
			c = void 0 !== c ? d.toCoordinate(c, e) : "right" != b && "left" != b ? a.realWidth : 0 < this.ieW ? this.ieW : a.realWidth;
			"outside" == b ? (c = g.offsetWidth, f = g.offsetHeight, g.clientHeight && (c = g.clientWidth, f = g.clientHeight)) : (isNaN(c) || (g.style.width = c + "px"), g.className = "amChartsLegend " + a.classNamePrefix + "-legend-div");
			this.divWidth = c;
			(b = this.container) ? (b.container.innerHTML = "", g.appendChild(b.container), b.width = c, b.height = f, b.setSize(c, f), b.addDefs(a)) : b = new d.AmDraw(g, c, f, a);
			this.container = b;
			this.lx = 0;
			this.ly = 8;
			f = this.markerSize;
			f > this.fontSize && (this.ly = f / 2 - 1);
			0 < f && (this.lx += f + this.markerLabelGap);
			this.titleWidth = 0;
			if (f = this.title) f = d.text(this.container, f, this.color, a.fontFamily, this.fontSize, "start", !0), d.setCN(a, f, "legend-title"), f.translate(this.marginLeft, this.marginTop + this.verticalGap + this.ly + 1), a = f.getBBox(), this.titleWidth = a.width + 15, this.titleHeight = a.height + 6;
			this.index = this.maxLabelWidth = 0;
			if (this.showEntries) {
				for (a = 0; a < h.length; a++) this.createEntry(h[a]);
				for (a = this.index = 0; a < h.length; a++) this.createValue(h[a])
			}
			this.arrangeEntries();
			this.updateValues()
		},
		arrangeEntries: function() {
			var a = this.position,
				b = this.marginLeft +
				this.titleWidth,
				c = this.marginRight,
				e = this.marginTop,
				f = this.marginBottom,
				g = this.horizontalGap,
				h = this.div,
				k = this.divWidth,
				l = this.maxColumnsReal,
				m = this.verticalGap,
				n = this.spacing,
				p = k - c - b,
				r = 0,
				t = 0,
				q = this.container;
			this.set && this.set.remove();
			var y = q.set();
			this.set = y;
			var B = q.set();
			y.push(B);
			var u = this.entries,
				w, v;
			for (v = 0; v < u.length; v++) {
				w = u[v].getBBox();
				var A = w.width;
				A > r && (r = A);
				w = w.height;
				w > t && (t = w)
			}
			var A = t = 0,
				C = g,
				x = 0,
				z = 0;
			for (v = 0; v < u.length; v++) {
				var F = u[v];
				this.reversedOrder && (F = u[u.length - v - 1]);
				w = F.getBBox();
				var E;
				this.equalWidths ? E = A * (r + n + this.markerLabelGap) : (E = C, C = C + w.width + g + n);
				E + w.width > p && 0 < v && 0 !== A && (t++, E = A = 0, C = E + w.width + g + n, x = x + z + m, z = 0);
				w.height > z && (z = w.height);
				F.translate(E, x);
				A++;
				!isNaN(l) && A >= l && (A = 0, t++, x = x + z + m, C = g, z = 0);
				B.push(F)
			}
			w = B.getBBox();
			l = w.height + 2 * m - 1;
			"left" == a || "right" == a ? (n = w.width + 2 * g, k = n + b + c, h.style.width = k + "px", this.ieW = k) : n = k - b - c - 1;
			c = d.polygon(this.container, [0, n, n, 0], [0, 0, l, l], this.backgroundColor, this.backgroundAlpha, 1, this.borderColor, this.borderAlpha);
			d.setCN(this.chart, c, "legend-bg");
			y.push(c);
			y.translate(b, e);
			c.toBack();
			b = g;
			if ("top" == a || "bottom" == a || "absolute" == a || "outside" == a) "center" == this.align ? b = g + (n - w.width) / 2 : "right" == this.align && (b = g + n - w.width);
			B.translate(b, m + 1);
			this.titleHeight > l && (l = this.titleHeight);
			e = l + e + f + 1;
			0 > e && (e = 0);
			"absolute" != a && "outside" != a && e > this.chart.divRealHeight && (h.style.top = "0px");
			h.style.height = Math.round(e) + "px";
			q.setSize(this.divWidth, e)
		},
		createEntry: function(a) {
			if (!1 !== a.visibleInLegend && !a.hideFromLegend) {
				var b = this,
					c = b.chart,
					e = b.useGraphSettings,
					f = a.markerType;
				f && (e = !1);
				a.legendEntryWidth = b.markerSize;
				f || (f = b.markerType);
				var g = a.color,
					h = a.alpha;
				a.legendKeyColor && (g = a.legendKeyColor());
				a.legendKeyAlpha && (h = a.legendKeyAlpha());
				var k;
				!0 === a.hidden && (k = g = b.markerDisabledColor);
				var l = a.pattern,
					m, n = a.customMarker;
				n || (n = b.customMarker);
				var p = b.container,
					r = b.markerSize,
					t = 0,
					q = 0,
					y = r / 2;
				if (e) {
					e = a.type;
					b.switchType = void 0;
					if ("line" == e || "step" == e || "smoothedLine" == e || "ohlc" == e) m = p.set(), a.hidden || (g = a.lineColorR, k = a.bulletBorderColorR), t = d.line(p, [0, 2 * r], [r / 2, r / 2], g, a.lineAlpha, a.lineThickness, a.dashLength), d.setCN(c, t, "graph-stroke"), m.push(t), a.bullet && (a.hidden || (g = a.bulletColorR), t = d.bullet(p, a.bullet, a.bulletSize, g, a.bulletAlpha, a.bulletBorderThickness, k, a.bulletBorderAlpha)) && (d.setCN(c, t, "graph-bullet"), t.translate(r + 1, r / 2), m.push(t)), y = 0, t = r, q = r / 3;
					else {
						a.getGradRotation && (m = a.getGradRotation(), 0 === m && (m = 180));
						t = a.fillColorsR;
						!0 === a.hidden && (t = g);
						if (m = b.createMarker("rectangle", t, a.fillAlphas, a.lineThickness, g, a.lineAlpha, m, l, a.dashLength)) y = r, m.translate(y, r / 2);
						t = r
					}
					d.setCN(c, m, "graph-" + e);
					d.setCN(c, m, "graph-" + a.id)
				} else if (n) m = p.image(n, 0, 0, r, r);
				else {
					var B;
					isNaN(b.gradientRotation) || (B = 180 + b.gradientRotation);
					(m = b.createMarker(f, g, h, void 0, void 0, void 0, B, l)) && m.translate(r / 2, r / 2)
				}
				d.setCN(c, m, "legend-marker");
				b.addListeners(m, a);
				p = p.set([m]);
				b.switchable && a.switchable && p.setAttr("cursor", "pointer");
				void 0 !== a.id && d.setCN(c, p, "legend-item-" + a.id);
				d.setCN(c, p, a.className, !0);
				k = b.switchType;
				var u;
				k && "none" != k && 0 < r && ("x" == k ? (u = b.createX(), u.translate(r / 2, r / 2)) : u = b.createV(), u.dItem = a, !0 !== a.hidden ? "x" == k ? u.hide() : u.show() : "x" != k && u.hide(), b.switchable || u.hide(), b.addListeners(u, a), a.legendSwitch = u, p.push(u), d.setCN(c, u, "legend-switch"));
				k = b.color;
				a.showBalloon && b.textClickEnabled && void 0 !== b.selectedColor && (k = b.selectedColor);
				b.useMarkerColorForLabels && !l && (k = g);
				!0 === a.hidden && (k = b.markerDisabledColor);
				g = d.massReplace(b.labelText, {
					"[[title]]": a.title
				});
				void 0 !== b.tabIndex && (p.setAttr("tabindex", b.tabIndex), p.setAttr("role", "menuitem"), p.keyup(function(c) {
					13 == c.keyCode && b.clickMarker(a, c)
				}));
				c.accessible && b.accessibleLabel && (l = d.massReplace(b.accessibleLabel, {
					"[[title]]": a.title
				}), c.makeAccessible(p, l));
				l = b.fontSize;
				m && (r <= l && (r = r / 2 + b.ly - l / 2 + (l + 2 - r) / 2 - q, m.translate(y, r), u && u.translate(u.x, r)), a.legendEntryWidth = m.getBBox().width);
				var w;
				g && (g = d.fixBrakes(g), a.legendTextReal = g, w = b.labelWidth, w = isNaN(w) ? d.text(b.container, g, k, c.fontFamily, l, "start") : d.wrappedText(b.container, g, k, c.fontFamily, l, "start", !1, w, 0), d.setCN(c, w, "legend-label"),
					w.translate(b.lx + t, b.ly), p.push(w), b.labelDx = t, c = w.getBBox().width, b.maxLabelWidth < c && (b.maxLabelWidth = c));
				b.entries[b.index] = p;
				a.legendEntry = b.entries[b.index];
				a.legendMarker = m;
				a.legendLabel = w;
				b.index++
			}
		},
		addListeners: function(a, b) {
			var c = this;
			a && a.mouseover(function(a) {
				c.rollOverMarker(b, a)
			}).mouseout(function(a) {
				c.rollOutMarker(b, a)
			}).click(function(a) {
				c.clickMarker(b, a)
			})
		},
		rollOverMarker: function(a, b) {
			this.switchable && this.dispatch("rollOverMarker", a, b);
			this.dispatch("rollOverItem", a, b)
		},
		rollOutMarker: function(a, b) {
			this.switchable && this.dispatch("rollOutMarker", a, b);
			this.dispatch("rollOutItem", a, b)
		},
		clickMarker: function(a, b) {
			this.switchable && (!0 === a.hidden ? this.dispatch("showItem", a, b) : this.dispatch("hideItem", a, b));
			this.dispatch("clickMarker", a, b)
		},
		rollOverLabel: function(a, b) {
			a.hidden || this.textClickEnabled && a.legendLabel && a.legendLabel.attr({
				fill: this.rollOverColor
			});
			this.dispatch("rollOverItem", a, b)
		},
		rollOutLabel: function(a, b) {
			if (!a.hidden && this.textClickEnabled && a.legendLabel) {
				var c = this.color;
				void 0 !== this.selectedColor && a.showBalloon && (c = this.selectedColor);
				this.useMarkerColorForLabels && (c = a.lineColor, void 0 === c && (c = a.color));
				a.legendLabel.attr({
					fill: c
				})
			}
			this.dispatch("rollOutItem", a, b)
		},
		clickLabel: function(a, b) {
			this.textClickEnabled ? a.hidden || this.dispatch("clickLabel", a, b) : this.switchable && (!0 === a.hidden ? this.dispatch("showItem", a, b) : this.dispatch("hideItem", a, b))
		},
		dispatch: function(a, b, c) {
			a = {
				type: a,
				dataItem: b,
				target: this,
				event: c,
				chart: this.chart
			};
			this.chart && this.chart.handleLegendEvent(a);
			this.fire(a)
		},
		createValue: function(a) {
			var b = this,
				c = b.fontSize,
				e = b.chart;
			if (!1 !== a.visibleInLegend && !a.hideFromLegend) {
				var f = b.maxLabelWidth;
				b.forceWidth && (f = b.labelWidth);
				b.equalWidths || (b.valueAlign = "left");
				"left" == b.valueAlign && a.legendLabel && (f = a.legendLabel.getBBox().width);
				var g = f;
				if (b.valueText && 0 < b.valueWidth) {
					var h = b.color;
					b.useMarkerColorForValues && (h = a.color, a.legendKeyColor && (h = a.legendKeyColor()));
					!0 === a.hidden && (h = b.markerDisabledColor);
					var k = b.valueText,
						f = f + b.lx + b.labelDx + b.markerLabelGap +
						b.valueWidth,
						l = "end";
					"left" == b.valueAlign && (f -= b.valueWidth, l = "start");
					h = d.text(b.container, k, h, b.chart.fontFamily, c, l);
					d.setCN(e, h, "legend-value");
					h.translate(f, b.ly);
					b.entries[b.index].push(h);
					g += b.valueWidth + 2 * b.markerLabelGap;
					h.dItem = a;
					b.valueLabels.push(h)
				}
				b.index++;
				e = b.markerSize;
				e < c + 7 && (e = c + 7, d.VML && (e += 3));
				c = b.container.rect(a.legendEntryWidth, 0, g, e, 0, 0).attr({
					stroke: "none",
					fill: "#fff",
					"fill-opacity": .005
				});
				c.dItem = a;
				b.entries[b.index - 1].push(c);
				c.mouseover(function(c) {
					b.rollOverLabel(a, c)
				}).mouseout(function(c) {
					b.rollOutLabel(a, c)
				}).click(function(c) {
					b.clickLabel(a, c)
				})
			}
		},
		createV: function() {
			var a = this.markerSize;
			return d.polygon(this.container, [a / 5, a / 2, a - a / 5, a / 2], [a / 3, a - a / 5, a / 5, a / 1.7], this.switchColor)
		},
		createX: function() {
			var a = (this.markerSize - 4) / 2,
				b = {
					stroke: this.switchColor,
					"stroke-width": 3
				},
				c = this.container,
				e = d.line(c, [-a, a], [-a, a]).attr(b),
				a = d.line(c, [-a, a], [a, -a]).attr(b);
			return this.container.set([e, a])
		},
		createMarker: function(a, b, c, e, f, g, h, k, l) {
			var m = this.markerSize,
				n = this.container;
			f || (f = this.markerBorderColor);
			f ||
				(f = b);
			isNaN(e) && (e = this.markerBorderThickness);
			isNaN(g) && (g = this.markerBorderAlpha);
			return d.bullet(n, a, m, b, c, e, f, g, m, h, k, this.chart.path, l)
		},
		validateNow: function() {
			this.invalidateSize()
		},
		updateValues: function() {
			var a = this.valueLabels,
				b = this.chart,
				c, e = this.data;
			if (a)
				for (c = 0; c < a.length; c++) {
					var f = a[c],
						g = f.dItem;
					g.periodDataItem = void 0;
					g.periodPercentDataItem = void 0;
					var h = " ";
					if (e) g.value ? f.text(g.value) : f.text("");
					else {
						var k = null;
						if (void 0 !== g.type) {
							var k = g.currentDataItem,
								l = this.periodValueText;
							g.legendPeriodValueText && (l = g.legendPeriodValueText);
							g.legendPeriodValueTextR && (l = g.legendPeriodValueTextR);
							k ? (h = this.valueText, g.legendValueText && (h = g.legendValueText), g.legendValueTextR && (h = g.legendValueTextR), h = b.formatString(h, k)) : l && b.formatPeriodString && (l = d.massReplace(l, {
								"[[title]]": g.title
							}), h = b.formatPeriodString(l, g))
						} else h = b.formatString(this.valueText, g);
						l = g;
						k && (l = k);
						var m = this.valueFunction;
						m && (h = m(l, h, b.periodDataItem));
						var n;
						this.useMarkerColorForLabels && !k && g.lastDataItem && (k = g.lastDataItem);
						k ? n = b.getBalloonColor(g, k) : g.legendKeyColor && (n = g.legendKeyColor());
						g.legendColorFunction && (n = g.legendColorFunction(l, h, g.periodDataItem, g.periodPercentDataItem));
						f.text(h);
						if (!g.pattern && (this.useMarkerColorForValues && f.setAttr("fill", n), this.useMarkerColorForLabels)) {
							if (f = g.legendMarker) f.setAttr("fill", n), f.setAttr("stroke", n);
							(f = g.legendLabel) && (g.hidden ? f.setAttr("fill", this.markerDisabledColor) : f.setAttr("fill", n))
						}
					}
				}
		},
		renderFix: function() {
			if (!d.VML && this.enabled) {
				var a = this.container;
				a && a.renderFix()
			}
		},
		destroy: function() {
			this.div.innerHTML = "";
			d.remove(this.set)
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.AmMap = d.Class({
		inherits: d.AmChart,
		construct: function(a) {
			this.cname = "AmMap";
			this.type = "map";
			this.theme = a;
			this.svgNotSupported = "This browser doesn't support SVG. Use Chrome, Firefox, Internet Explorer 9 or later.";
			this.createEvents("rollOverMapObject", "rollOutMapObject", "clickMapObject", "mouseDownMapObject", "selectedObjectChanged", "homeButtonClicked", "zoomCompleted", "dragCompleted", "positionChanged", "writeDevInfo", "click", "descriptionClosed");
			this.zoomDuration = .6;
			this.zoomControl = new d.ZoomControl(a);
			this.fitMapToContainer = !0;
			this.mouseWheelZoomEnabled = this.backgroundZoomsToTop = !1;
			this.allowClickOnSelectedObject = this.useHandCursorOnClickableOjects = this.showBalloonOnSelectedObject = !0;
			this.showObjectsAfterZoom = this.wheelBusy = !1;
			this.zoomOnDoubleClick = this.useObjectColorForBalloon = !0;
			this.allowMultipleDescriptionWindows = !1;
			this.dragMap = this.centerMap = this.linesAboveImages = !0;
			this.colorSteps = 5;
			this.forceNormalize = !1;
			this.showAreasInList = !0;
			this.showLinesInList = this.showImagesInList = !1;
			this.areasProcessor = new d.AreasProcessor(this);
			this.areasSettings = new d.AreasSettings(a);
			this.imagesProcessor = new d.ImagesProcessor(this);
			this.imagesSettings = new d.ImagesSettings(a);
			this.linesProcessor = new d.LinesProcessor(this);
			this.linesSettings = new d.LinesSettings(a);
			this.initialTouchZoom = 1;
			this.showDescriptionOnHover = !1;
			d.AmMap.base.construct.call(this, a);
			this.creditsPosition = "bottom-left";
			this.product = "ammap";
			this.areasClasses = {};
			this.updatableImages = [];
			d.applyTheme(this, a, this.cname)
		},
		initChart: function() {
			this.zoomInstantly = !0;
			var a = this.container;
			this.panRequired = !0;
			if (this.sizeChanged && d.hasSVG && this.chartCreated) {
				this.updatableImages = [];
				this.freeLabelsSet && this.freeLabelsSet.remove();
				this.freeLabelsSet = a.set();
				this.container.setSize(this.realWidth, this.realHeight);
				this.resizeMap();
				this.drawBackground();
				this.redrawLabels();
				this.drawTitles();
				this.processObjects(!0);
				this.rescaleObjects();
				this.zoomControl.init(this, a);
				this.drawBg();
				var b = this.smallMap;
				b && b.init(this, a);
				(b = this.valueLegend) && b.init(this, a);
				this.sizeChanged = !1;
				this.zoomToLongLat(this.zLevelTemp, this.zLongTemp, this.zLatTemp, !0);
				this.previousWidth = this.realWidth;
				this.previousHeight = this.realHeight;
				this.updateSmallMap();
				this.linkSet.toFront();
				this.zoomControl.update && this.zoomControl.update()
			} else(d.AmMap.base.initChart.call(this), d.hasSVG) ? (this.dataChanged && (this.parseData(), this.dispatchDataUpdated = !0, this.dataChanged = !1, a = this.legend) && (a.position = "absolute", a.invalidateSize()), this.createDescriptionsDiv(), this.svgAreas = [], this.svgAreasById = {}, this.drawChart()) : (this.chartDiv.style.textAlign = "", this.chartDiv.setAttribute("class", "ammapAlert"), this.chartDiv.innerHTML = this.svgNotSupported, this.fire({
				type: "failed",
				chart: this
			}))
		},
		storeTemp: function() {
			if (d.hasSVG && 0 < this.realWidth && 0 < this.realHeight) {
				var a = this.mapContainer.getBBox();
				0 < a.width && 0 < a.height && (a = this.zoomLongitude(), isNaN(a) || (this.zLongTemp = a), a = this.zoomLatitude(), isNaN(a) || (this.zLatTemp = a), a = this.zoomLevel(), isNaN(a) || (this.zLevelTemp = a))
			}
		},
		invalidateSize: function() {
			this.storeTemp();
			d.AmMap.base.invalidateSize.call(this)
		},
		validateSize: function() {
			this.storeTemp();
			d.AmMap.base.validateSize.call(this)
		},
		handleWheelReal: function(a) {
			if (!this.wheelBusy) {
				this.stopAnimation();
				var b = this.zoomLevel(),
					c = this.zoomControl,
					e = c.zoomFactor;
				this.wheelBusy = !0;
				a = d.fitToBounds(0 < a ? b * e : b / e, c.minZoomLevel, c.maxZoomLevel);
				e = this.mouseX / this.mapWidth;
				c = this.mouseY / this.mapHeight;
				e = (this.zoomX() - e) * (a / b) + e;
				b = (this.zoomY() - c) * (a / b) + c;
				this.zoomTo(a, e, b)
			}
		},
		addLegend: function(a, b) {
			a.position = "absolute";
			a.autoMargins = !1;
			a.valueWidth = 0;
			a.switchable = !1;
			d.AmMap.base.addLegend.call(this, a, b);
			void 0 === a.enabled && (a.enabled = !0);
			return a
		},
		handleLegendEvent: function() {},
		createDescriptionsDiv: function() {
			if (!this.descriptionsDiv) {
				var a = document.createElement("div"),
					b = a.style;
				b.position = "absolute";
				b.left = "0px";
				b.top = "0px";
				this.descriptionsDiv = a
			}
			this.containerDiv.appendChild(this.descriptionsDiv)
		},
		drawChart: function() {
			d.AmMap.base.drawChart.call(this);
			var a = this.dataProvider;
			this.dataProvider = a = d.extend(a, new d.MapData, !0);
			this.areasSettings = d.processObject(this.areasSettings, d.AreasSettings, this.theme);
			this.imagesSettings = d.processObject(this.imagesSettings, d.ImagesSettings, this.theme);
			this.linesSettings = d.processObject(this.linesSettings, d.LinesSettings, this.theme);
			var b = this.container;
			this.mapContainer && this.mapContainer.remove();
			this.mapContainer = b.set();
			this.graphsSet.push(this.mapContainer);
			var c;
			a.map && (c = d.maps[a.map]);
			a.mapVar && (c = a.mapVar);
			c ? (this.svgData = c.svg, this.getBounds(), this.buildEverything()) : (a = a.mapURL) && this.loadXml(a);
			this.balloonsSet.toFront()
		},
		drawBg: function() {
			var a = this;
			a.background.click(function() {
				a.handleBackgroundClick()
			});
			a.background.mouseover(function() {
				a.rollOutMapObject(a.previouslyHovered)
			})
		},
		buildEverything: function() {
			if (0 < this.realWidth && 0 < this.realHeight) {
				var a = this.container,
					b = this.dataProvider;
				this.projection || (this.projection = b.projection, this.projection || (this.projection = "equirectangular"));
				this.updatableImages = [];
				var c = this.projection;
				c && (this.projectionFunction = d[c]);
				this.projectionFunction || (this.projectionFunction = d.equirectangular);
				this.dpProjectionFunction = d[b.projection];
				this.dpProjectionFunction || (this.dpProjectionFunction = d.equirectangular);
				this.zoomControl = d.processObject(this.zoomControl, d.ZoomControl, this.theme);
				this.zoomControl.init(this, a);
				this.drawBg();
				this.buildSVGMap();
				this.projectionFunction && c != b.projection || this.forceNormalize ? (this.normalizeMap(), this.changeProjection()) : this.fixMapPosition();
				if (c = this.smallMap) c = d.processObject(c, d.SmallMap, this.theme), c.init(this, a), this.smallMap = c;
				isNaN(b.zoomX) && isNaN(b.zoomY) && isNaN(b.zoomLatitude) && isNaN(b.zoomLongitude) && (this.centerMap ? (c = this.xyToCoordinates(this.mapWidth / 2, this.mapHeight / 2), b.zoomLongitudeC = c.longitude, b.zoomLatitudeC = c.latitude) : (b.zoomX = 0, b.zoomY = 0), this.zoomInstantly = !0);
				this.selectObject(this.dataProvider);
				this.processAreas();
				if (b = this.valueLegend) this.valueLegend = b = d.processObject(b, d.ValueLegend, this.theme), b.init(this, a);
				this.objectList && (a = this.objectList = d.processObject(this.objectList, d.ObjectList)) && (this.clearObjectList(), a.init(this));
				this.dispDUpd();
				this.updateSmallMap();
				this.linkSet.toFront()
			} else this.cleanChart()
		},
		hideGroup: function(a) {
			this.showHideGroup(a, !1)
		},
		showGroup: function(a) {
			this.showHideGroup(a, !0)
		},
		showHideGroup: function(a, b) {
			this.showHideReal(this.imagesProcessor.allObjects, a, b);
			this.showHideReal(this.areasProcessor.allObjects, a, b);
			this.showHideReal(this.linesProcessor.allObjects, a, b)
		},
		showHideReal: function(a, b, c) {
			var e;
			for (e = 0; e < a.length; e++) {
				var d = a[e];
				if (d.groupId == b) {
					var g = d.displayObject;
					g && (c ? (d.hidden = !1, g.show()) : (d.hidden = !0, g.hide()))
				}
			}
		},
		makeObjectAccessible: function(a) {
			if (a.accessibleLabel) {
				var b = this.formatString(a.accessibleLabel, a);
				a.displayObject && this.makeAccessible(a.displayObject, b, "menuitem")
			}
		},
		update: function() {
			if (d.hasSVG) {
				d.AmMap.base.update.call(this);
				this.zoomControl && this.zoomControl.update && this.zoomControl.update();
				for (var a = 0, b = this.updatableImages.length; a < b; a++) this.updatableImages[a].update()
			}
		},
		animateMap: function() {
			var a = this;
			a.totalFrames = a.zoomDuration * d.updateRate;
			a.totalFrames += 1;
			a.frame = 0;
			a.tweenPercent = 0;
			a.balloon.hide(0);
			setTimeout(function() {
				a.updateSize.call(a)
			}, 1E3 / d.updateRate)
		},
		updateSize: function() {
			var a = this,
				b = a.totalFrames;
			a.preventHover = !0;
			a.frame <= b ? (a.frame++, b = d.easeOutSine(0, a.frame, 0, 1, b), 1 <= b ? (b = 1, a.preventHover = !1, a.wheelBusy = !1) : window.requestAnimationFrame ? window.requestAnimationFrame(function() {
				a.updateSize.call(a)
			}) : setTimeout(function() {
				a.updateSize.call(a)
			}, 1E3 / d.updateRate), .8 < b && (a.preventHover = !1)) : (b = 1, a.preventHover = !1, a.wheelBusy = !1);
			a.tweenPercent = b;
			a.rescaleMapAndObjects()
		},
		rescaleMapAndObjects: function() {
			var a = this.initialScale,
				b = this.initialX,
				c = this.initialY,
				e = this.tweenPercent,
				a = a + (this.finalScale - a) * e;
			this.mapContainer.translate(b + (this.finalX - b) * e, c + (this.finalY - c) * e, a, !0);
			if (this.areasSettings.adjustOutlineThickness) {
				for (var b = this.svgAreas, d = 0; d < b.length; d++)(c = b[d]) && c.setAttr("stroke-width", this.areasSettings.outlineThickness / a / this.mapScale);
				if (b = this.dataProvider.areas)
					for (d = 0; d < b.length; d++) {
						var c = b[d],
							g = c.displayObject;
						g && g.setAttr("stroke-width", c.outlineThicknessReal / a / this.mapScale)
					}
			}
			this.rescaleObjects();
			this.positionChanged();
			this.updateSmallMap();
			1 == e && this.fire({
				type: "zoomCompleted",
				chart: this
			})
		},
		updateSmallMap: function() {
			this.smallMap && this.smallMap.update()
		},
		rescaleObjects: function() {
			var a = this.mapContainer.scale,
				b = this.imagesProcessor.objectsToResize,
				c;
			for (c = 0; c < b.length; c++) {
				var d = b[c].image,
					f = b[c].scale,
					g = b[c].mapImage;
				isNaN(g.selectedScaleReal) || g != this.selectedObject || (g.tempScale = f, f *= g.selectedScaleReal);
				d.translate(d.x, d.y, f / a, !0)
			}
			b = this.imagesProcessor.labelsToReposition;
			for (c = 0; c < b.length; c++) d = b[c], d.imageLabel && this.imagesProcessor.positionLabel(d.imageLabel, d, d.labelPositionReal);
			b = this.linesProcessor;
			if (d = b.linesToResize)
				for (c = 0; c < d.length; c++) f = d[c], f.line.setAttr("stroke-width", f.thickness / a);
			b = b.objectsToResize;
			for (c = 0; c < b.length; c++) d = b[c], d.translate(d.x, d.y, 1 / a, !0)
		},
		handleTouchEnd: function(a) {
			this.initialDistance = NaN;
			this.mouseIsDown = this.isDragging = !1;
			d.AmMap.base.handleTouchEnd.call(this, a)
		},
		handleMouseDown: function(a) {
			d.resetMouseOver();
			this.mouseIsDown = this.mouseIsOver = !0;
			this.balloon.hide(0);
			a && this.mouseIsOver && a.preventDefault && this.panEventsEnabled && a.preventDefault();
			if (this.chartCreated && !this.preventHover && (this.initialTouchZoom = this.zoomLevel(), this.dragMap && (this.stopAnimation(), this.mapContainerClickX = this.mapContainer.x, this.mapContainerClickY = this.mapContainer.y), a || (a = window.event), a.shiftKey && !0 === this.developerMode && this.getDevInfo(), a && a.touches)) {
				var b = this.mouseX,
					c = this.mouseY,
					e = a.touches.item(1);
				e && this.panEventsEnabled && this.boundingRect && (a = e.clientX - this.boundingRect.left, e = e.clientY - this.boundingRect.top, this.middleXP = (b + (a - b) / 2) / this.realWidth, this.middleYP = (c + (e - c) / 2) / this.realHeight, this.initialDistance = Math.sqrt(Math.pow(a - b, 2) + Math.pow(e - c, 2)))
			}
		},
		stopDrag: function() {
			this.isDragging = !1
		},
		handleReleaseOutside: function() {
			if (d.isModern) {
				var a = this;
				d.AmMap.base.handleReleaseOutside.call(a);
				a.mouseIsDown = !1;
				setTimeout(function() {
					a.resetPinch.call(a)
				}, 100);
				if (!a.preventHover) {
					a.stopDrag();
					var b = a.zoomControl;
					b && b.draggerUp && b.draggerUp();
					a.mapWasDragged = !1;
					var b = a.mapContainer,
						c = a.mapContainerClickX,
						e = a.mapContainerClickY;
					isNaN(c) || isNaN(e) || !(3 < Math.abs(b.x - c) || 3 < Math.abs(b.y - e)) || (a.mapWasDragged = !0, b = {
						type: "dragCompleted",
						zoomX: a.zoomX(),
						zoomY: a.zoomY(),
						zoomLevel: a.zoomLevel(),
						chart: a
					}, a.fire(b));
					(a.mouseIsOver && !a.mapWasDragged && !a.skipClick || a.wasTouched && 3 > Math.abs(a.mouseX - a.tmx) && 3 > Math.abs(a.mouseY - a.tmy)) && a.fire({
						type: "click",
						x: a.mouseX,
						y: a.mouseY,
						chart: a
					});
					a.mapContainerClickX = NaN;
					a.mapContainerClickY = NaN;
					a.objectWasClicked = !1;
					a.zoomOnDoubleClick && a.mouseIsOver && (b = (new Date).getTime(), 200 > b - a.previousClickTime && 40 < b - a.previousClickTime && a.doDoubleClickZoom(), a.previousClickTime = b)
				}
				a.wasTouched = !1
			}
		},
		resetPinch: function() {
			this.mapWasPinched = !1
		},
		handleMouseMove: function(a) {
			var b = this;
			d.AmMap.base.handleMouseMove.call(b, a);
			if (!a || !a.touches || !b.tapToActivate || b.tapped) {
				b.panEventsEnabled && b.mouseIsOver && a && a.preventDefault && a.preventDefault();
				var c = b.previuosMouseX,
					e = b.previuosMouseY,
					f = b.mouseX,
					g = b.mouseY,
					h = b.zoomControl;
				isNaN(c) && (c = f);
				isNaN(e) && (e = g);
				b.mouse2X = NaN;
				b.mouse2Y = NaN;
				a && a.touches && (a = a.touches.item(1)) && b.panEventsEnabled && b.boundingRect && (b.mouse2X = a.clientX - b.boundingRect.left, b.mouse2Y = a.clientY - b.boundingRect.top);
				if (a = b.mapContainer) {
					var k = b.mouse2X,
						l = b.mouse2Y;
					b.pinchTO && clearTimeout(b.pinchTO);
					b.pinchTO = setTimeout(function() {
						b.resetPinch.call(b)
					}, 1E3);
					var m = b.realHeight,
						n = b.realWidth,
						p = b.mapWidth,
						r = b.mapHeight;
					b.mouseIsDown && b.dragMap && (3 < Math.abs(b.previuosMouseX - b.mouseX) || 3 < Math.abs(b.previuosMouseY - b.mouseY)) && (b.isDragging = !0);
					if (!isNaN(k)) {
						b.stopDrag();
						var t = Math.sqrt(Math.pow(k - f, 2) + Math.pow(l - g, 2)),
							q = b.initialDistance;
						isNaN(q) && (q = Math.sqrt(Math.pow(k - f, 2) + Math.pow(l - g, 2)));
						if (!isNaN(q)) {
							var k = b.initialTouchZoom * t / q,
								k = d.fitToBounds(k, h.minZoomLevel, h.maxZoomLevel),
								h = b.zoomLevel(),
								q = b.middleXP,
								l = b.middleYP,
								t = m / r,
								y = n / p,
								q = (b.zoomX() - q * y) * (k / h) + q * y,
								l = (b.zoomY() -
									l * t) * (k / h) + l * t;
							.1 < Math.abs(k - h) && (b.zoomTo(k, q, l, !0), b.mapWasPinched = !0, clearTimeout(b.pinchTO))
						}
					}
					k = a.scale;
					b.isDragging && (b.balloon.hide(0), b.positionChanged(), c = a.x + (f - c), e = a.y + (g - e), b.preventDragOut && (r = -r * k + m / 2 - b.diffY * b.mapScale * k, m = m / 2 - b.diffY * b.mapScale * k, c = d.fitToBounds(c, -p * k + n / 2, n / 2), e = d.fitToBounds(e, r, m)), isNaN(c) || isNaN(e) || (a.translate(c, e, k, !0), b.updateSmallMap()));
					b.previuosMouseX = f;
					b.previuosMouseY = g
				}
			}
		},
		selectObject: function(a, b) {
			var c = this;
			a || (a = c.dataProvider);
			a.isOver = !1;
			var e = a.linkToObject;
			d.isString(e) && (e = c.getObjectById(e));
			a.useTargetsZoomValues && e && (a.zoomX = e.zoomX, a.zoomY = e.zoomY, a.zoomLatitude = e.zoomLatitude, a.zoomLongitude = e.zoomLongitude, a.zoomLevel = e.zoomLevel);
			var f = c.selectedObject;
			f && c.returnInitialColor(f);
			c.selectedObject = a;
			var g = !1,
				h, k;
			"MapArea" == a.objectType && (a.autoZoomReal && (g = !0), h = c.areasSettings.selectedOutlineColor, k = c.areasSettings.selectedOutlineThickness);
			if (e && !g && (d.isString(e) && (e = c.getObjectById(e)), isNaN(a.zoomLevel) && isNaN(a.zoomX) && isNaN(a.zoomY))) {
				if (c.extendMapData(e)) return;
				c.selectObject(e);
				return
			}
			c.allowMultipleDescriptionWindows || c.closeAllDescriptions();
			clearTimeout(c.selectedObjectTimeOut);
			clearTimeout(c.processObjectsTimeOut);
			e = c.zoomDuration;
			!g && isNaN(a.zoomLevel) && isNaN(a.zoomX) && isNaN(a.zoomY) ? (c.showDescriptionAndGetUrl(), b || c.processObjects()) : (c.selectedObjectTimeOut = setTimeout(function() {
				c.showDescriptionAndGetUrl.call(c)
			}, 1E3 * e + 200), c.showObjectsAfterZoom) ? b || (c.processObjectsTimeOut = setTimeout(function() {
				c.processObjects.call(c)
			}, 1E3 * e + 200)) : b || c.processObjects();
			e = a.displayObject;
			g = a.selectedColorReal;
			if ("MapImage" == a.objectType) {
				h = c.imagesSettings.selectedOutlineColor;
				k = c.imagesSettings.selectedOutlineThickness;
				var e = a.image,
					l = a.selectedScaleReal;
				if (!isNaN(l) && 1 != l) {
					var m = a.scale;
					isNaN(a.tempScale) || (m = a.tempScale);
					isNaN(m) && (m = 1);
					a.tempScale = m;
					var n = a.displayObject;
					n.translate(n.x, n.y, m * l, !0)
				}
			}
			if (e) {
				if (d.removeCN(c, e, "selected-object"), d.setCN(c, e, "selected-object"), a.bringForwardOnHover && a.displayObject.toFront(), c.outlinesToFront(), !a.preserveOriginalAttributes) {
					e.setAttr("stroke", a.outlineColorReal);
					void 0 !== g && e.setAttr("fill", g);
					void 0 !== h && e.setAttr("stroke", h);
					void 0 !== k && e.setAttr("stroke-width", k);
					"MapLine" == a.objectType && ((l = a.lineSvg) && l.setAttr("stroke", g), l = a.arrowSvg) && (l.setAttr("fill", g), l.setAttr("stroke", g));
					if (l = a.imageLabel) m = a.selectedLabelColorReal, void 0 !== m && l.setAttr("fill", m);
					a.selectable || (e.setAttr("cursor", "default"), l && l.setAttr("cursor", "default"))
				}
			} else c.returnInitialColorReal(a);
			if (e = a.groupId)
				for (l = a.groupArray, l || (l = c.getGroupById(e), a.groupArray = l), m = 0; m < l.length; m++)
					if (n = l[m], n.isOver = !1, e = n.displayObject, "MapImage" == n.objectType && (e = n.image), e) {
						var p = n.selectedColorReal;
						void 0 !== p && e.setAttr("fill", p);
						void 0 !== h && e.setAttr("stroke", h);
						void 0 !== k && e.setAttr("stroke-width", k);
						"MapLine" == n.objectType && ((e = n.lineSvg) && e.setAttr("stroke", g), e = n.arrowSvg) && (e.setAttr("fill", g), e.setAttr("stroke", g))
					}
			c.rescaleObjects();
			c.zoomToSelectedObject();
			f != a && c.fire({
				type: "selectedObjectChanged",
				chart: c
			})
		},
		returnInitialColor: function(a, b) {
			this.returnInitialColorReal(a);
			b && (a.isFirst = !1);
			if (this.selectedObject.bringForwardOnHover) {
				var c = this.selectedObject.displayObject;
				c && c.toFront()
			}
			if (c = a.groupId) {
				var c = this.getGroupById(c),
					d;
				for (d = 0; d < c.length; d++) this.returnInitialColorReal(c[d]), b && (c[d].isFirst = !1)
			}
			this.outlinesToFront()
		},
		outlinesToFront: function() {
			if (this.outlines)
				for (var a = 0; a < this.outlines.length; a++) this.outlines[a].toFront()
		},
		closeAllDescriptions: function() {
			this.descriptionsDiv.innerHTML = ""
		},
		fireClosed: function() {
			this.fire({
				type: "descriptionClosed",
				chart: this
			})
		},
		returnInitialColorReal: function(a) {
			a.isOver = !1;
			var b = a.displayObject;
			if (b) {
				d.removeCN(this, b, "selected-object");
				b.toPrevious();
				if ("MapImage" == a.objectType) {
					var c = a.tempScale;
					isNaN(c) || b.translate(b.x, b.y, c, !0);
					a.tempScale = NaN;
					b = a.image
				}
				c = a.colorReal;
				if ("MapLine" == a.objectType) {
					var e = a.lineSvg;
					e && e.setAttr("stroke", c);
					if (e = a.arrowSvg) {
						var f = a.arrowColor;
						void 0 === f && (f = c);
						e.setAttr("fill", f);
						e.setAttr("stroke", f)
					}
				}
				var e = a.alphaReal,
					f = a.outlineAlphaReal,
					g = a.outlineThicknessReal,
					h = a.outlineColorReal;
				if (a.showAsSelected) {
					var c = a.selectedColorReal,
						k, l;
					"MapImage" == a.objectType && (k = this.imagesSettings.selectedOutlineColor, l = this.imagesSettings.selectedOutlineThickness);
					"MapArea" == a.objectType && (k = this.areasSettings.selectedOutlineColor, l = this.areasSettings.selectedOutlineThickness);
					void 0 !== k && (h = k);
					void 0 !== l && (g = l)
				}
				"bubble" == a.type && (c = void 0);
				void 0 !== c && b.setAttr("fill", c);
				if (k = a.image) k.setAttr("fill", c), k.setAttr("stroke", h), k.setAttr("stroke-width", g), k.setAttr("fill-opacity", e), k.setAttr("stroke-opacity", f);
				"MapArea" == a.objectType && (c = 1, this.areasSettings.adjustOutlineThickness && (c = this.zoomLevel() * this.mapScale), b.setAttr("stroke", h), b.setAttr("stroke-width", g / c), b.setAttr("fill-opacity", e), b.setAttr("stroke-opacity", f));
				(c = a.pattern) && b.pattern(c, this.mapScale, this.path);
				(b = a.imageLabel) && !a.labelInactive && (a.showAsSelected && void 0 !== a.selectedLabelColor ? b.setAttr("fill", a.selectedLabelColor) : b.setAttr("fill", a.labelColorReal))
			}
		},
		zoomToRectangle: function(a, b, c, e) {
			var f = this.realWidth,
				g = this.realHeight,
				h = this.mapSet.scale,
				k = this.zoomControl,
				f = d.fitToBounds(c / f > e / g ? .8 * f / (c * h) : .8 * g / (e * h), k.minZoomLevel, k.maxZoomLevel);
			this.zoomToMapXY(f, (a + c / 2) * h, (b + e / 2) * h)
		},
		zoomToLatLongRectangle: function(a, b, c, e) {
			var f = this.dataProvider,
				g = this.zoomControl,
				h = Math.abs(c - a),
				k = Math.abs(b - e),
				l = Math.abs(f.rightLongitude - f.leftLongitude),
				f = Math.abs(f.topLatitude - f.bottomLatitude),
				g = d.fitToBounds(h / l > k / f ? .8 * l / h : .8 * f / k, g.minZoomLevel, g.maxZoomLevel);
			this.zoomToLongLat(g, a + (c - a) / 2, e + (b - e) / 2)
		},
		getGroupById: function(a) {
			var b = [];
			this.getGroup(this.imagesProcessor.allObjects, a, b);
			this.getGroup(this.linesProcessor.allObjects, a, b);
			this.getGroup(this.areasProcessor.allObjects, a, b);
			return b
		},
		zoomToGroup: function(a) {
			a = "object" == typeof a ? a : this.getGroupById(a);
			var b, c, d, f, g;
			for (g = 0; g < a.length; g++) {
				var h = a[g].displayObject;
				if (h) {
					var k = h.getBBox(),
						h = k.y,
						l = k.y + k.height,
						m = k.x,
						k = k.x + k.width;
					if (h < b || isNaN(b)) b = h;
					if (l > f || isNaN(f)) f = l;
					if (m < c || isNaN(c)) c = m;
					if (k > d || isNaN(d)) d = k
				}
			}
			c += this.diffX;
			d += this.diffX;
			f += this.diffY;
			b += this.diffY;
			this.zoomToRectangle(c, b, d - c, f - b)
		},
		getGroup: function(a, b, c) {
			if (a) {
				var d;
				for (d = 0; d < a.length; d++) {
					var f = a[d];
					f.groupId == b && c.push(f)
				}
			}
		},
		zoomToStageXY: function(a, b, c, e) {
			if (!this.objectWasClicked) {
				var f = this.zoomControl;
				a = d.fitToBounds(a, f.minZoomLevel, f.maxZoomLevel);
				var f = this.zoomLevel(),
					g = this.mapSet.getBBox();
				b = this.xyToCoordinates((b - this.mapContainer.x) / f - g.x * this.mapScale, (c - this.mapContainer.y) / f - g.y * this.mapScale);
				this.zoomToLongLat(a, b.longitude, b.latitude, e)
			}
		},
		zoomToLongLat: function(a, b, c,
			d) {
			b = this.coordinatesToXY(b, c);
			this.zoomToMapXY(a, b.x, b.y, d)
		},
		zoomToMapXY: function(a, b, c, d) {
			var f = this.mapWidth,
				g = this.mapHeight;
			this.zoomTo(a, -(b / f) * a + this.realWidth / f / 2, -(c / g) * a + this.realHeight / g / 2, d)
		},
		zoomToObject: function(a) {
			if (a) {
				var b = a.zoomLatitude,
					c = a.zoomLongitude;
				isNaN(a.zoomLatitudeC) || (b = a.zoomLatitudeC);
				isNaN(a.zoomLongitudeC) || (c = a.zoomLongitudeC);
				var e = a.zoomLevel,
					f = this.zoomInstantly,
					g = a.zoomX,
					h = a.zoomY,
					k = this.realWidth,
					l = this.realHeight;
				isNaN(e) || (isNaN(b) || isNaN(c) ? this.zoomTo(e, g, h, f) : this.zoomToLongLat(e, c, b, f));
				this.zoomInstantly = !1;
				"MapImage" == a.objectType && isNaN(a.zoomX) && isNaN(a.zoomY) && isNaN(a.zoomLatitude) && isNaN(a.zoomLongitude) && !isNaN(a.latitude) && !isNaN(a.longitude) && this.zoomToLongLat(a.zoomLevel, a.longitude, a.latitude);
				"MapArea" == a.objectType && (f = a.displayObject.getBBox(), g = this.mapScale, b = (f.x + this.diffX) * g, c = (f.y + this.diffY) * g, e = f.width * g, f = f.height * g, k = a.autoZoomReal && isNaN(a.zoomLevel) ? e / k > f / l ? .8 * k / e : .8 * l / f : a.zoomLevel, l = this.zoomControl, k = d.fitToBounds(k, l.minZoomLevel, l.maxZoomLevel), isNaN(a.zoomX) && isNaN(a.zoomY) && isNaN(a.zoomLatitude) && isNaN(a.zoomLongitude) && this.zoomToMapXY(k, b + e / 2, c + f / 2));
				this.zoomControl.update()
			}
		},
		zoomToSelectedObject: function() {
			this.zoomToObject(this.selectedObject)
		},
		zoomTo: function(a, b, c, e) {
			var f = this.zoomControl;
			a = d.fitToBounds(a, f.minZoomLevel, f.maxZoomLevel);
			f = this.zoomLevel();
			isNaN(b) && (b = this.realWidth / this.mapWidth, b = (this.zoomX() - .5 * b) * (a / f) + .5 * b);
			isNaN(c) && (c = this.realHeight / this.mapHeight, c = (this.zoomY() - .5 * c) * (a / f) + .5 * c);
			this.stopAnimation();
			isNaN(a) || (f = this.mapContainer, this.initialX = f.x, this.initialY = f.y, this.initialScale = f.scale, this.finalX = this.mapWidth * b, this.finalY = this.mapHeight * c, this.finalScale = a, this.finalX != this.initialX || this.finalY != this.initialY || this.finalScale != this.initialScale ? e ? (this.tweenPercent = 1, this.rescaleMapAndObjects(), this.wheelBusy = !1) : this.animateMap() : this.wheelBusy = !1)
		},
		loadXml: function(a) {
			var b;
			window.XMLHttpRequest && (b = new XMLHttpRequest);
			b.overrideMimeType && b.overrideMimeType("text/xml");
			b.open("GET", a, !1);
			b.send();
			this.parseXMLObject(b.responseXML);
			this.svgData && this.buildEverything()
		},
		stopAnimation: function() {
			this.frame = this.totalFrames
		},
		processObjects: function(a) {
			var b = this.selectedObject;
			if (0 < b.images.length || 0 < b.areas.length || 0 < b.lines.length || b == this.dataProvider || a) {
				a = this.container;
				var c = this.stageImagesContainer;
				c && c.remove();
				this.stageImagesContainer = c = a.set();
				this.trendLinesSet.push(c);
				var d = this.stageLinesContainer;
				d && d.remove();
				this.stageLinesContainer = d = a.set();
				this.trendLinesSet.push(d);
				var f = this.mapImagesContainer;
				f && f.remove();
				this.mapImagesContainer = f = a.set();
				this.mapContainer.push(f);
				var g = this.mapLinesContainer;
				g && g.remove();
				this.mapLinesContainer = g = a.set();
				this.mapContainer.push(g);
				this.linesAboveImages ? (f.toFront(), c.toFront(), g.toFront(), d.toFront()) : (g.toFront(), d.toFront(), f.toFront(), c.toFront());
				b && (this.imagesProcessor.reset(), this.linesProcessor.reset(), this.linesAboveImages ? (this.imagesProcessor.process(b), this.linesProcessor.process(b)) : (this.linesProcessor.process(b), this.imagesProcessor.process(b)));
				this.rescaleObjects()
			}
		},
		processAreas: function() {
			this.areasProcessor.process(this.dataProvider)
		},
		buildSVGMap: function() {
			d.remove(this.mapSet);
			var a = this.svgData.g.path,
				b = this.container,
				c = b.set();
			this.svgAreas = [];
			this.svgAreasById = {};
			void 0 === a.length && (a = [a]);
			var e;
			for (e = 0; e < a.length; e++) {
				var f = a[e],
					g = f.d,
					h = f.title;
				f.titleTr && (h = f.titleTr);
				var k = b.path(g);
				k.id = f.id;
				if (this.areasSettings.preserveOriginalAttributes) {
					k.customAttr = {};
					for (var l in f) "d" != l && "id" != l && "title" != l && (k.customAttr[l] = f[l])
				}
				f.outline && (k.outline = !0);
				k.path = g;
				this.svgAreasById[f.id] = {
					area: k,
					title: h,
					className: f["class"]
				};
				this.svgAreas.push(k);
				c.push(k)
			}
			this.mapSet = c;
			this.mapContainer.push(c);
			this.resizeMap()
		},
		centerAlign: function() {},
		setProjection: function(a) {
			this.projection = a;
			this.chartCreated = !1;
			this.buildEverything()
		},
		addObjectEventListeners: function(a, b) {
			var c = this;
			a.mousedown(function(a) {
				c.mouseDownMapObject(b, a)
			}).mouseup(function(a) {
				c.clickMapObject(b, a)
			}).mouseover(function(a) {
				c.balloonX = NaN;
				c.rollOverMapObject(b, !0, a)
			}).mouseout(function(a) {
				c.balloonX = NaN;
				c.rollOutMapObject(b, a)
			}).touchend(function(a) {
				4 > Math.abs(c.mouseX - c.tmx) && 4 > Math.abs(c.mouseY - c.tmy) && (c.tapped = !0);
				c.tapToActivate && !c.tapped || c.mapWasDragged || c.mapWasPinched || (c.balloonX = NaN, c.rollOverMapObject(b, !0, a), c.clickMapObject(b, a))
			}).touchstart(function(a) {
				c.tmx = c.mouseX;
				c.tmy = c.mouseY;
				c.mouseDownMapObject(b, a)
			}).keyup(function(a) {
				13 == a.keyCode && c.clickMapObject(b, a)
			})
		},
		checkIfSelected: function(a) {
			var b = this.selectedObject;
			if (b == a) return !0;
			if (b = b.groupId) {
				var b = this.getGroupById(b),
					c;
				for (c = 0; c < b.length; c++)
					if (b[c] == a) return !0
			}
			return !1
		},
		clearMap: function() {
			this.chartDiv.innerHTML = "";
			this.clearObjectList()
		},
		clearObjectList: function() {
			var a = this.objectList;
			a && a.div && (a.div.innerHTML = "")
		},
		checkIfLast: function(a) {
			if (a) {
				var b = a.parentNode;
				if (b && b.lastChild == a) return !0
			}
			return !1
		},
		showAsRolledOver: function(a) {
			var b = a.displayObject;
			if (!a.showAsSelected && b && !a.isOver) {
				b.node.onmouseout = function() {};
				b.node.onmouseover = function() {};
				b.node.onclick = function() {};
				!a.isFirst && a.bringForwardOnHover && (b.toFront(), a.isFirst = !0);
				var c = a.rollOverColorReal,
					e;
				a.preserveOriginalAttributes && (c = void 0);
				"bubble" == a.type && (c = void 0);
				void 0 == c && (isNaN(a.rollOverBrightnessReal) || (c = d.adjustLuminosity(a.colorReal, a.rollOverBrightnessReal / 100)));
				if (void 0 != c)
					if ("MapImage" == a.objectType)(e = a.image) && e.setAttr("fill", c);
					else if ("MapLine" == a.objectType) {
					if ((e = a.lineSvg) && e.setAttr("stroke", c), e = a.arrowSvg) e.setAttr("fill", c), e.setAttr("stroke", c)
				} else b.setAttr("fill", c);
				(c = a.imageLabel) && !a.labelInactive && (e = a.labelRollOverColorReal, void 0 != e && c.setAttr("fill", e));
				c = a.rollOverOutlineColorReal;
				void 0 != c && ("MapImage" == a.objectType ? (e = a.image) && e.setAttr("stroke", c) : b.setAttr("stroke", c));
				"MapImage" == a.objectType ? (c = this.imagesSettings.rollOverOutlineThickness, (e = a.image) && (isNaN(c) || e.setAttr("stroke-width", c))) : (c = this.areasSettings.rollOverOutlineThickness, isNaN(c) || b.setAttr("stroke-width", c));
				if ("MapArea" == a.objectType) {
					c = this.areasSettings;
					e = a.rollOverAlphaReal;
					isNaN(e) || b.setAttr("fill-opacity", e);
					e = c.rollOverOutlineAlpha;
					isNaN(e) || b.setAttr("stroke-opacity", e);
					e = 1;
					this.areasSettings.adjustOutlineThickness && (e = this.zoomLevel() * this.mapScale);
					var f = c.rollOverOutlineThickness;
					isNaN(f) || b.setAttr("stroke-width", f / e);
					(c = c.rollOverPattern) && b.pattern(c, this.mapScale, this.path)
				}
				"MapImage" == a.objectType && (c = a.rollOverScaleReal, isNaN(c) || 1 == c || (e = b.scale, isNaN(e) && (e = 1), a.tempScale = e, b.translate(b.x, b.y, e * c, !0)));
				this.useHandCursorOnClickableOjects && this.checkIfClickable(a) && b.setAttr("cursor", "pointer");
				a.mouseEnabled && this.addObjectEventListeners(b, a);
				a.isOver = !0
			}
			this.outlinesToFront()
		},
		rollOverMapObject: function(a, b, c) {
			if (this.chartCreated) {
				this.handleMouseMove();
				var d = this.previouslyHovered;
				d && d != a ? (!1 === this.checkIfSelected(d) && (this.returnInitialColor(d, !0), this.previouslyHovered = null), this.balloon.hide(0)) : clearTimeout(this.hoverInt);
				if (!this.preventHover) {
					if (!1 === this.checkIfSelected(a)) {
						if (d = a.groupId) {
							var d = this.getGroupById(d),
								f;
							for (f = 0; f < d.length; f++) d[f] != a && this.showAsRolledOver(d[f])
						}
						this.showAsRolledOver(a)
					} else(d = a.displayObject) && (this.allowClickOnSelectedObject ? d.setAttr("cursor", "pointer") : d.setAttr("cursor", "default"));
					this.showDescriptionOnHover ? this.showDescription(a) : !this.showBalloonOnSelectedObject && this.checkIfSelected(a) || !1 === b || (f = this.balloon, this.balloon.fixedPosition = !1, b = a.colorReal, d = "", void 0 !== b && this.useObjectColorForBalloon || (b = f.fillColor), (f = a.balloonTextReal) && (d = this.formatString(f, a)), this.balloonLabelFunction && (d = this.balloonLabelFunction(a, this)), d && "" !== d && this.showBalloon(d, b, !1, this.balloonX, this.balloonY));
					this.fire({
						type: "rollOverMapObject",
						mapObject: a,
						chart: this,
						event: c
					});
					this.previouslyHovered = a
				}
			}
		},
		longitudeToX: function(a) {
			return (this.longitudeToCoordinate(a) + this.diffX * this.mapScale) * this.zoomLevel() + this.mapContainer.x
		},
		latitudeToY: function(a) {
			return (this.latitudeToCoordinate(a) + this.diffY * this.mapScale) * this.zoomLevel() + this.mapContainer.y
		},
		latitudeToStageY: function(a) {
			return this.latitudeToCoordinate(a) * this.zoomLevel() +
				this.mapContainer.y + this.diffY * this.mapScale
		},
		longitudeToStageX: function(a) {
			return this.longitudeToCoordinate(a) * this.zoomLevel() + this.mapContainer.x + this.diffX * this.mapScale
		},
		stageXToLongitude: function(a) {
			a = (a - this.mapContainer.x) / this.zoomLevel();
			return this.coordinateToLongitude(a)
		},
		stageYToLatitude: function(a) {
			a = (a - this.mapContainer.y) / this.zoomLevel();
			return this.coordinateToLatitude(a)
		},
		rollOutMapObject: function(a, b) {
			this.hideBalloon();
			a && this.chartCreated && a.isOver && (this.checkIfSelected(a) ||
				this.returnInitialColor(a), this.fire({
					type: "rollOutMapObject",
					mapObject: a,
					chart: this,
					event: b
				}))
		},
		formatString: function(a, b) {
			var c = this.nf,
				e = this.pf,
				f = b.title;
			b.titleTr && (f = b.titleTr);
			void 0 == f && (f = "");
			var g = b.value,
				g = isNaN(g) ? "" : d.formatNumber(g, c),
				c = b.percents,
				c = isNaN(c) ? "" : d.formatNumber(c, e),
				e = b.description;
			void 0 == e && (e = "");
			var h = b.customData;
			void 0 == h && (h = "");
			return a = d.massReplace(a, {
				"[[title]]": f,
				"[[value]]": g,
				"[[percent]]": c,
				"[[description]]": e,
				"[[customData]]": h
			})
		},
		mouseDownMapObject: function(a, b) {
			this.fire({
				type: "mouseDownMapObject",
				mapObject: a,
				chart: this,
				event: b
			})
		},
		clickMapObject: function(a, b) {
			var c = this;
			b && (b.touches || isNaN(a.zoomLevel) && isNaN(a.zoomX) && isNaN(a.zoomY) || c.hideBalloon());
			if (c.chartCreated && !c.preventHover && c.checkTouchDuration(b) && !c.mapWasDragged && c.checkIfClickable(a) && !c.mapWasPinched) {
				c.selectObject(a);
				var d = c.zoomLevel(),
					f = c.mapSet.getBBox(),
					d = c.xyToCoordinates((c.mouseX - c.mapContainer.x) / d - f.x * c.mapScale, (c.mouseY - c.mapContainer.y) / d - f.y * c.mapScale);
				c.clickLatitude =
					d.latitude;
				c.clickLongitude = d.longitude;
				b && b.touches && setTimeout(function() {
					c.showBalloonAfterZoom.call(c)
				}, 1E3 * c.zoomDuration);
				c.fire({
					type: "clickMapObject",
					mapObject: a,
					chart: c,
					event: b
				});
				c.objectWasClicked = !0
			}
		},
		showBalloonAfterZoom: function() {
			var a = this.clickLongitude,
				b = this.clickLatitude,
				c = this.selectedObject;
			"MapImage" != c.objectType || isNaN(c.longitude) || (a = c.longitude, b = c.latitude);
			a = this.coordinatesToStageXY(a, b);
			this.balloonX = a.x;
			this.balloonY = a.y;
			this.rollOverMapObject(this.selectedObject, !0)
		},
		checkIfClickable: function(a) {
			var b = this.allowClickOnSelectedObject;
			return this.selectedObject == a && b ? !0 : this.selectedObject != a || b ? !0 === a.selectable || "MapArea" == a.objectType && a.autoZoomReal || a.url || a.linkToObject || 0 < a.images.length || 0 < a.lines.length || !isNaN(a.zoomLevel) || !isNaN(a.zoomX) || !isNaN(a.zoomY) || a.description ? !0 : !1 : !1
		},
		resizeMap: function() {
			var a = this.mapSet;
			if (a) {
				var b = 1,
					c = a.getBBox(),
					d = this.realWidth,
					f = this.realHeight,
					g = c.width,
					c = c.height;
				0 < g && 0 < c && (this.fitMapToContainer && (b = g / d > c / f ? d / g : f / c), a.translate(0, 0, b, !0), this.mapScale = b, this.mapHeight = c * b, this.mapWidth = g * b)
			}
		},
		zoomIn: function() {
			var a = this.zoomLevel() * this.zoomControl.zoomFactor;
			this.zoomTo(a)
		},
		zoomOut: function() {
			var a = this.zoomLevel() / this.zoomControl.zoomFactor;
			this.zoomTo(a)
		},
		moveLeft: function() {
			var a = this.zoomX() + this.zoomControl.panStepSize;
			this.zoomTo(this.zoomLevel(), a, this.zoomY())
		},
		moveRight: function() {
			var a = this.zoomX() - this.zoomControl.panStepSize;
			this.zoomTo(this.zoomLevel(), a, this.zoomY())
		},
		moveUp: function() {
			var a =
				this.zoomY() + this.zoomControl.panStepSize;
			this.zoomTo(this.zoomLevel(), this.zoomX(), a)
		},
		moveDown: function() {
			var a = this.zoomY() - this.zoomControl.panStepSize;
			this.zoomTo(this.zoomLevel(), this.zoomX(), a)
		},
		zoomX: function() {
			return this.mapSet ? Math.round(1E4 * this.mapContainer.x / this.mapWidth) / 1E4 : NaN
		},
		zoomY: function() {
			return this.mapSet ? Math.round(1E4 * this.mapContainer.y / this.mapHeight) / 1E4 : NaN
		},
		goHome: function() {
			this.selectObject(this.dataProvider);
			this.fire({
				type: "homeButtonClicked",
				chart: this
			})
		},
		zoomLevel: function() {
			return Math.round(1E5 *
				this.mapContainer.scale) / 1E5
		},
		showDescriptionAndGetUrl: function() {
			var a = this.selectedObject;
			if (a) {
				this.showDescription();
				var b = a.url;
				if (b) d.getURL(b, a.urlTarget);
				else if (b = a.linkToObject) {
					if (d.isString(b)) {
						var c = this.getObjectById(b);
						if (c) {
							this.selectObject(c);
							return
						}
					}
					b && a.passZoomValuesToTarget && (b.zoomLatitude = this.zoomLatitude(), b.zoomLongitude = this.zoomLongitude(), b.zoomLevel = this.zoomLevel());
					this.extendMapData(b) || this.selectObject(b)
				}
			}
		},
		extendMapData: function(a) {
			var b = a.objectType;
			if ("MapImage" !=
				b && "MapArea" != b && "MapLine" != b) return d.extend(a, new d.MapData, !0), this.dataProvider = a, this.zoomInstantly = !0, this.validateData(), !0
		},
		showDescription: function(a) {
			a || (a = this.selectedObject);
			this.allowMultipleDescriptionWindows || this.closeAllDescriptions();
			if (a.description) {
				var b = a.descriptionWindow;
				b && b.close();
				b = new d.DescriptionWindow;
				a.descriptionWindow = b;
				var c = a.descriptionWindowWidth,
					e = a.descriptionWindowHeight,
					f = a.descriptionWindowLeft,
					g = a.descriptionWindowTop,
					h = a.descriptionWindowRight,
					k = a.descriptionWindowBottom;
				isNaN(h) || (f = this.realWidth - h);
				isNaN(k) || (g = this.realHeight - k);
				var l = a.descriptionWindowX;
				isNaN(l) || (f = l);
				l = a.descriptionWindowY;
				isNaN(l) || (g = l);
				isNaN(f) && (f = this.mouseX, f = f > this.realWidth / 2 ? f - c - 20 : f + 20);
				isNaN(g) && (g = this.mouseY);
				b.maxHeight = e;
				l = a.title;
				a.titleTr && (l = a.titleTr);
				b.show(this, this.descriptionsDiv, a.description, l);
				a = b.div.style;
				a.position = "absolute";
				a.width = c + "px";
				a.maxHeight = e + "px";
				isNaN(k) || (g -= b.div.offsetHeight);
				isNaN(h) || (f -= b.div.offsetWidth);
				a.left = f + "px";
				a.top = g + "px"
			}
		},
		parseXMLObject: function(a) {
			var b = {
				root: {}
			};
			this.parseXMLNode(b, "root", a);
			this.svgData = b.root.svg;
			this.getBounds()
		},
		getBounds: function() {
			var a = this.dataProvider;
			try {
				var b = this.svgData.defs["amcharts:ammap"];
				a.leftLongitude = Number(b.leftLongitude);
				a.rightLongitude = Number(b.rightLongitude);
				a.topLatitude = Number(b.topLatitude);
				a.bottomLatitude = Number(b.bottomLatitude);
				a.projection = b.projection;
				var c = b.wrappedLongitudes;
				c && (a.rightLongitude += 360);
				a.wrappedLongitudes = c
			} catch (d) {}
		},
		recalcLongitude: function(a) {
			return this.dataProvider.wrappedLongitudes ? a < this.dataProvider.leftLongitude ? Number(a) + 360 : a : a
		},
		latitudeToCoordinate: function(a) {
			var b, c = this.dataProvider;
			if (this.mapSet) {
				b = c.topLatitude;
				var d = c.bottomLatitude;
				"mercator" == c.projection && (a = this.mercatorLatitudeToCoordinate(a), b = this.mercatorLatitudeToCoordinate(b), d = this.mercatorLatitudeToCoordinate(d));
				b = (a - b) / (d - b) * this.mapHeight
			}
			return b
		},
		longitudeToCoordinate: function(a) {
			a = this.recalcLongitude(a);
			var b, c = this.dataProvider;
			this.mapSet && (b = c.leftLongitude, b = (a - b) / (c.rightLongitude - b) * this.mapWidth);
			return b
		},
		mercatorLatitudeToCoordinate: function(a) {
			89.5 < a && (a = 89.5); - 89.5 > a && (a = -89.5);
			a = d.degreesToRadians(a);
			return d.radiansToDegrees(.5 * Math.log((1 + Math.sin(a)) / (1 - Math.sin(a))) / 2)
		},
		zoomLatitude: function() {
			if (this.mapContainer) {
				var a = this.mapSet.getBBox(),
					b = (-this.mapContainer.x + this.previousWidth / 2) / this.zoomLevel() - a.x * this.mapScale,
					a = (-this.mapContainer.y + this.previousHeight / 2) / this.zoomLevel() - a.y * this.mapScale;
				return this.xyToCoordinates(b, a).latitude
			}
		},
		zoomLongitude: function() {
			if (this.mapContainer) {
				var a =
					this.mapSet.getBBox(),
					b = (-this.mapContainer.x + this.previousWidth / 2) / this.zoomLevel() - a.x * this.mapScale,
					a = (-this.mapContainer.y + this.previousHeight / 2) / this.zoomLevel() - a.y * this.mapScale;
				return this.xyToCoordinates(b, a).longitude
			}
		},
		getAreaCenterLatitude: function(a) {
			a = a.displayObject.getBBox();
			var b = this.mapScale,
				c = this.mapSet.getBBox();
			return this.xyToCoordinates((a.x + a.width / 2 + this.diffX) * b - c.x * b, (a.y + a.height / 2 + this.diffY) * b - c.y * b).latitude
		},
		getAreaCenterLongitude: function(a) {
			a = a.displayObject.getBBox();
			var b = this.mapScale,
				c = this.mapSet.getBBox();
			return this.xyToCoordinates((a.x + a.width / 2 + this.diffX) * b - c.x * b, (a.y + a.height / 2 + this.diffY) * b - c.y * b).longitude
		},
		milesToPixels: function(a) {
			var b = this.dataProvider;
			return this.mapWidth / (b.rightLongitude - b.leftLongitude) * a / 69.172
		},
		kilometersToPixels: function(a) {
			var b = this.dataProvider;
			return this.mapWidth / (b.rightLongitude - b.leftLongitude) * a / 111.325
		},
		handleBackgroundClick: function() {
			if (this.backgroundZoomsToTop && !this.mapWasDragged) {
				var a = this.dataProvider;
				if (this.checkIfClickable(a)) this.clickMapObject(a);
				else {
					var b = a.zoomX,
						c = a.zoomY,
						d = a.zoomLongitude,
						f = a.zoomLatitude,
						a = a.zoomLevel;
					isNaN(b) || isNaN(c) || this.zoomTo(a, b, c);
					isNaN(d) || isNaN(f) || this.zoomToLongLat(a, d, f, !0)
				}
			}
		},
		parseXMLNode: function(a, b, c, d) {
			void 0 === d && (d = "");
			var f, g, h;
			if (c) {
				var k = c.childNodes.length;
				for (f = 0; f < k; f++) {
					g = c.childNodes[f];
					var l = g.nodeName,
						m = g.nodeValue ? this.trim(g.nodeValue) : "",
						n = !1;
					g.attributes && 0 < g.attributes.length && (n = !0);
					if (0 !== g.childNodes.length || "" !== m || !1 !== n)
						if (3 == g.nodeType || 4 == g.nodeType) {
							if ("" !== m) {
								g = 0;
								for (h in a[b]) a[b].hasOwnProperty(h) && g++;
								g ? a[b]["#text"] = m : a[b] = m
							}
						} else if (1 == g.nodeType) {
						var p;
						void 0 !== a[b][l] ? void 0 === a[b][l].length ? (p = a[b][l], a[b][l] = [], a[b][l].push(p), a[b][l].push({}), p = a[b][l][1]) : "object" == typeof a[b][l] && (a[b][l].push({}), p = a[b][l][a[b][l].length - 1]) : (a[b][l] = {}, p = a[b][l]);
						if (g.attributes && g.attributes.length)
							for (m = 0; m < g.attributes.length; m++) p[g.attributes[m].name] = g.attributes[m].value;
						void 0 !== a[b][l].length ? this.parseXMLNode(a[b][l], a[b][l].length - 1, g, d + "  ") : this.parseXMLNode(a[b], l, g, d + "  ")
					}
				}
				g = 0;
				c = "";
				for (h in a[b]) "#text" == h ? c = a[b][h] : g++;
				0 === g && void 0 === a[b].length && (a[b] = c)
			}
		},
		doDoubleClickZoom: function() {
			if (!this.mapWasDragged) {
				var a = this.zoomLevel() * this.zoomControl.zoomFactor;
				this.zoomToStageXY(a, this.mouseX, this.mouseY)
			}
		},
		getDevInfo: function() {
			var a = this.zoomLevel(),
				b = this.mapSet.getBBox(),
				b = this.xyToCoordinates((this.mouseX - this.mapContainer.x) / a - b.x * this.mapScale, (this.mouseY - this.mapContainer.y) / a - b.y * this.mapScale),
				a = {
					chart: this,
					type: "writeDevInfo",
					zoomLevel: a,
					zoomX: this.zoomX(),
					zoomY: this.zoomY(),
					zoomLatitude: this.zoomLatitude(),
					zoomLongitude: this.zoomLongitude(),
					latitude: b.latitude,
					longitude: b.longitude,
					left: this.mouseX,
					top: this.mouseY,
					right: this.realWidth - this.mouseX,
					bottom: this.realHeight - this.mouseY,
					percentLeft: Math.round(this.mouseX / this.realWidth * 100) + "%",
					percentTop: Math.round(this.mouseY / this.realHeight * 100) + "%",
					percentRight: Math.round((this.realWidth - this.mouseX) / this.realWidth * 100) + "%",
					percentBottom: Math.round((this.realHeight -
						this.mouseY) / this.realHeight * 100) + "%"
				},
				b = "zoomLevel:" + a.zoomLevel + ", zoomLongitude:" + a.zoomLongitude + ", zoomLatitude:" + a.zoomLatitude + "\n",
				b = b + ("zoomX:" + a.zoomX + ", zoomY:" + a.zoomY + "\n"),
				b = b + ("latitude:" + a.latitude + ", longitude:" + a.longitude + "\n"),
				b = b + ("left:" + a.left + ", top:" + a.top + "\n"),
				b = b + ("right:" + a.right + ", bottom:" + a.bottom + "\n"),
				b = b + ("left:" + a.percentLeft + ", top:" + a.percentTop + "\n"),
				b = b + ("right:" + a.percentRight + ", bottom:" + a.percentBottom + "\n");
			a.str = b;
			this.fire(a);
			return a
		},
		getXY: function(a,
			b, c) {
			void 0 !== a && (-1 != String(a).indexOf("%") ? (a = Number(a.split("%").join("")), c && (a = 100 - a), a = Number(a) * b / 100) : c && (a = b - a));
			return a
		},
		getObjectById: function(a) {
			var b = this.dataProvider;
			if (b.areas) {
				var c = this.getObject(a, b.areas);
				if (c) return c
			}
			if (c = this.getObject(a, b.images)) return c;
			if (a = this.getObject(a, b.lines)) return a
		},
		getObject: function(a, b) {
			if (b) {
				var c;
				for (c = 0; c < b.length; c++) {
					var d = b[c];
					if (d.id == a) return d;
					if (d.areas) {
						var f = this.getObject(a, d.areas);
						if (f) return f
					}
					if (f = this.getObject(a, d.images)) return f;
					if (d = this.getObject(a, d.lines)) return d
				}
			}
		},
		parseData: function() {
			var a = this.dataProvider;
			this.processObject(a.areas, a, "area");
			this.processObject(a.images, a, "image");
			this.processObject(a.lines, a, "line")
		},
		processObject: function(a, b, c) {
			if (a) {
				var e;
				for (e = 0; e < a.length; e++) {
					var f = a[e];
					f.parentObject = b;
					"area" == c && d.extend(f, new d.MapArea(this.theme), !0);
					"image" == c && (f = d.extend(f, new d.MapImage(this.theme), !0));
					"line" == c && (f = d.extend(f, new d.MapLine(this.theme), !0));
					a[e] = f;
					f.areas && this.processObject(f.areas, f, "area");
					f.images && this.processObject(f.images, f, "image");
					f.lines && this.processObject(f.lines, f, "line")
				}
			}
		},
		positionChanged: function() {
			var a = {
				type: "positionChanged",
				zoomX: this.zoomX(),
				zoomY: this.zoomY(),
				zoomLevel: this.zoomLevel(),
				chart: this
			};
			this.fire(a)
		},
		getX: function(a, b) {
			return this.getXY(a, this.realWidth, b)
		},
		getY: function(a, b) {
			return this.getXY(a, this.realHeight, b)
		},
		trim: function(a) {
			if (a) {
				var b;
				for (b = 0; b < a.length; b++)
					if (-1 === " \n\r\t\f\x0B\u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000".indexOf(a.charAt(b))) {
						a = a.substring(b);
						break
					}
				for (b = a.length - 1; 0 <= b; b--)
					if (-1 === " \n\r\t\f\x0B\u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000".indexOf(a.charAt(b))) {
						a = a.substring(0, b + 1);
						break
					}
				return -1 === " \n\r\t\f\x0B\u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000".indexOf(a.charAt(0)) ? a : ""
			}
		},
		destroy: function() {
			d.AmMap.base.destroy.call(this)
		},
		x2c: function(a) {
			var b = this.dataProvider.leftLongitude;
			return Math.round(this.unscaledMapWidth * (a - b) / (this.dataProvider.rightLongitude - b) * 100) / 100
		},
		y2c: function(a) {
			var b = this.dataProvider.topLatitude;
			return Math.round(this.unscaledMapHeight * (a - b) / (this.dataProvider.bottomLatitude - b) * 100) / 100
		},
		normalize: function(a) {
			if (!a.pathsArray) {
				var b;
				if (a.normalized) b = a.normalized;
				else {
					var c = d.normalizePath(a.node);
					b = a.node.getAttribute("d");
					a.normalized = b;
					c.maxX > this.maxMapX && (this.maxMapX = c.maxX);
					c.minX < this.minMapX && (this.minMapX = c.minX);
					c.maxY > this.maxMapY && (this.maxMapY = c.maxY);
					c.minY < this.minMapY &&
						(this.minMapY = c.minY)
				}
				a.node.setAttribute("d", b)
			}
		},
		redraw: function(a) {
			var b = a.normalized,
				b = b.split(" Z").join(""),
				b = b.split("M");
			a.pathsArray = [];
			for (var c = 0; c < b.length; c++) {
				var d = b[c];
				if (d) {
					for (var d = d.split("L"), f = [], g = 0; g < d.length; g++)
						if (d[g]) {
							var h = d[g].split(" "),
								h = this.xyToCoordinates(Number(h[1]) - this.minMapX, Number(h[2]) - this.minMapY, this.dpProjectionFunction, this.sourceMapWidth, this.sourceMapHeight);
							f.push([h.longitude, h.latitude])
						}
					a.pathsArray.push(f)
				}
			}
			b = "";
			for (c = 0; c < a.pathsArray.length; c++) b += this.redrawArea(a.pathsArray[c]);
			a.node.setAttribute("d", b);
			a.path = b
		},
		redrawArea: function(a) {
			for (var b = !1, c = "", e = 0; e < a.length; e++) {
				var f = a[e][0],
					g = a[e][1],
					h = d.degreesToRadians(a[e][0]),
					k = d.degreesToRadians(a[e][1]),
					k = this.projectionFunction(h, k),
					h = d.roundTo(this.x2c(d.radiansToDegrees(k[0])), 3),
					k = d.roundTo(this.y2c(d.radiansToDegrees(k[1])), 3);
				h < this.minMapXX && (this.minMapXX = h, this.leftLongLat = {
					longitude: f,
					latitude: g
				});
				h > this.maxMapXX && (this.maxMapXX = h, this.rightLongLat = {
					longitude: f,
					latitude: g
				});
				k < this.minMapYY && (this.minMapYY = k, this.topLongLat = {
					longitude: f,
					latitude: g
				});
				k > this.maxMapYY && (this.maxMapYY = k, this.bottomLongLat = {
					longitude: f,
					latitude: g
				});
				b ? c += " L " : (c += " M ", b = !0);
				c += h + " " + k
			}
			return c + " Z "
		},
		normalizeMap: function() {
			var a = d.degreesToRadians(this.dataProvider.leftLongitude),
				b = d.degreesToRadians(this.dataProvider.rightLongitude),
				c = d.degreesToRadians(this.dataProvider.topLatitude),
				e = d.degreesToRadians(this.dataProvider.bottomLatitude),
				f = a + (b - a) / 2,
				g = c + (e - c) / 2,
				h = this.dpProjectionFunction(f,
					c)[1],
				k = this.dpProjectionFunction(f, e)[1],
				l = this.dpProjectionFunction(a, g)[0],
				m = this.dpProjectionFunction(b, g)[0],
				c = d.equirectangular(f, c),
				e = d.equirectangular(f, e),
				h = (c[1] - e[1]) / (h - k),
				a = d.equirectangular(a, g),
				b = d.equirectangular(b, g),
				l = (a[0] - b[0]) / (l - m);
			this.minMapX = Infinity;
			this.maxMapX = -Infinity;
			this.minMapY = Infinity;
			this.maxMapY = -Infinity;
			for (m = 0; m < this.svgAreas.length; m++) this.normalize(this.svgAreas[m]);
			this.sourceMapHeight = Math.abs(this.maxMapY - this.minMapY);
			this.sourceMapWidth = Math.abs(this.maxMapX -
				this.minMapX);
			this.unscaledMapWidth = this.sourceMapWidth * l;
			this.unscaledMapHeight = this.sourceMapHeight * h;
			this.diffY = this.diffX = 0
		},
		fixMapPosition: function() {
			var a = d.degreesToRadians(this.dataProvider.leftLongitude),
				b = d.degreesToRadians(this.dataProvider.rightLongitude),
				c = d.degreesToRadians(this.dataProvider.topLatitude),
				e = d.degreesToRadians(this.dataProvider.bottomLatitude),
				f = a + (b - a) / 2,
				g = c + (e - c) / 2,
				h = this.dpProjectionFunction(f, c)[1],
				k = this.dpProjectionFunction(f, e)[1],
				l = this.dpProjectionFunction(a,
					g)[0],
				m = this.dpProjectionFunction(b, g)[0];
			this.sourceMapHeight = this.mapHeight / this.mapScale;
			this.sourceMapWidth = this.mapWidth / this.mapScale;
			this.unscaledMapWidth = (a - b) / (l - m) * this.sourceMapWidth;
			this.unscaledMapHeight = (c - e) / (h - k) * this.sourceMapHeight;
			b = this.coordinatesToXY(d.radiansToDegrees(f), d.radiansToDegrees(c));
			a = this.coordinatesToXY(d.radiansToDegrees(a), d.radiansToDegrees(g));
			c = g = Infinity;
			for (e = 0; e < this.svgAreas.length; e++) f = this.svgAreas[e].getBBox(), f.y < g && (g = f.y), f.x < c && (c = f.x);
			this.diffY =
				b.y / this.mapScale - g;
			this.diffX = a.x / this.mapScale - c;
			for (e = 0; e < this.svgAreas.length; e++) this.svgAreas[e].translate(this.diffX, this.diffY)
		},
		changeProjection: function() {
			this.minMapXX = Infinity;
			this.maxMapXX = -Infinity;
			this.minMapYY = Infinity;
			this.maxMapYY = -Infinity;
			this.projectionChanged = !1;
			for (var a = 0; a < this.svgAreas.length; a++) this.redraw(this.svgAreas[a]);
			this.projectionChanged = !0;
			this.resizeMap()
		},
		coordinatesToXY: function(a, b) {
			var c, e;
			c = !1;
			this.dataProvider && (c = this.dataProvider.wrappedLongitudes) && (a = this.recalcLongitude(a));
			this.projectionFunction ? (e = this.projectionFunction(d.degreesToRadians(a), d.degreesToRadians(b)), c = this.mapScale * d.roundTo(this.x2c(d.radiansToDegrees(e[0])), 3), e = this.mapScale * d.roundTo(this.y2c(d.radiansToDegrees(e[1])), 3)) : (c = this.longitudeToCoordinate(a), e = this.latitudeToCoordinate(b));
			return {
				x: c,
				y: e
			}
		},
		coordinatesToStageXY: function(a, b) {
			var c = this.coordinatesToXY(a, b),
				d = c.x * this.zoomLevel() + this.mapContainer.x,
				c = c.y * this.zoomLevel() + this.mapContainer.y;
			return {
				x: d,
				y: c
			}
		},
		stageXYToCoordinates: function(a, b) {
			var c = this.mapSet.getBBox(),
				d = (a - this.mapContainer.x) / this.zoomLevel() - c.x * this.mapScale,
				c = (b - this.mapContainer.y) / this.zoomLevel() - c.y * this.mapScale;
			return this.xyToCoordinates(d, c)
		},
		xyToCoordinates: function(a, b, c, e, f) {
			var g;
			isNaN(e) && (e = this.mapWidth);
			isNaN(f) && (f = this.mapHeight);
			c || (c = this.projectionFunction);
			if (g = c.invert) {
				var h = this.dataProvider.leftLongitude,
					k = this.dataProvider.rightLongitude,
					l = this.dataProvider.topLatitude,
					m = this.dataProvider.bottomLatitude,
					n = h + (k - h) / 2,
					p = l + (m - l) / 2,
					l = d.radiansToDegrees(c(d.degreesToRadians(n), d.degreesToRadians(l))[1]),
					m = d.radiansToDegrees(c(d.degreesToRadians(n), d.degreesToRadians(m))[1]),
					h = d.radiansToDegrees(c(d.degreesToRadians(h), d.degreesToRadians(p))[0]),
					k = d.radiansToDegrees(c(d.degreesToRadians(k), d.degreesToRadians(p))[0]);
				this.projectionChanged && (l = d.radiansToDegrees(c(d.degreesToRadians(this.topLongLat.longitude), d.degreesToRadians(this.topLongLat.latitude))[1]), m = d.radiansToDegrees(c(d.degreesToRadians(this.bottomLongLat.longitude),
					d.degreesToRadians(this.bottomLongLat.latitude))[1]), h = d.radiansToDegrees(c(d.degreesToRadians(this.leftLongLat.longitude), d.degreesToRadians(this.leftLongLat.latitude))[0]), k = d.radiansToDegrees(c(d.degreesToRadians(this.rightLongLat.longitude), d.degreesToRadians(this.rightLongLat.latitude))[0]));
				a = d.degreesToRadians(a / e * (k - h) + h);
				b = d.degreesToRadians(b / f * (m - l) + l);
				b = g(a, b);
				g = d.radiansToDegrees(b[0]);
				b = d.radiansToDegrees(b[1])
			} else g = this.coordinateToLongitude(a), b = this.coordinateToLatitude(b);
			return {
				longitude: d.roundTo(g, 4),
				latitude: d.roundTo(b, 4)
			}
		},
		coordinateToLatitude: function(a, b) {
			var c;
			void 0 === b && (b = this.mapHeight);
			if (this.mapSet) {
				var e = this.dataProvider,
					f = e.bottomLatitude;
				c = e.topLatitude;
				"mercator" == e.projection ? (e = this.mercatorLatitudeToCoordinate(f), c = this.mercatorLatitudeToCoordinate(c), c = 2 * d.degreesToRadians(a * (e - c) / b + c), c = d.radiansToDegrees(2 * Math.atan(Math.exp(c)) - .5 * Math.PI)) : c = a / b * (f - c) + c
			}
			return Math.round(1E6 * c) / 1E6
		},
		coordinateToLongitude: function(a, b) {
			var c, d = this.dataProvider;
			void 0 === b && (b = this.mapWidth);
			this.mapSet && (c = a / b * (d.rightLongitude - d.leftLongitude) + d.leftLongitude);
			return Math.round(1E6 * c) / 1E6
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.ZoomControl = d.Class({
		construct: function(a) {
			this.cname = "ZoomControl";
			this.panStepSize = .1;
			this.zoomFactor = 2;
			this.maxZoomLevel = 64;
			this.minZoomLevel = 1;
			this.panControlEnabled = !1;
			this.zoomControlEnabled = !0;
			this.buttonRollOverColor = "#DADADA";
			this.buttonFillColor = "#FFFFFF";
			this.buttonFillAlpha = 1;
			this.buttonBorderColor = "#000000";
			this.buttonBorderAlpha = .1;
			this.buttonIconAlpha = this.buttonBorderThickness = 1;
			this.gridColor = this.buttonIconColor = "#000000";
			this.homeIconFile = "homeIcon.gif";
			this.gridBackgroundColor = "#000000";
			this.draggerAlpha = this.gridAlpha = this.gridBackgroundAlpha = 0;
			this.draggerSize = this.buttonSize = 31;
			this.iconSize = 11;
			this.homeButtonEnabled = !0;
			this.buttonCornerRadius = 2;
			this.gridHeight = 5;
			this.roundButtons = !0;
			this.top = this.left = 10;
			d.applyTheme(this, a, this.cname)
		},
		init: function(a, b) {
			var c = this;
			c.chart = a;
			d.remove(c.set);
			var e = b.set();
			d.setCN(a, e, "zoom-control");
			var f = c.buttonSize,
				g = c.zoomControlEnabled,
				h = c.panControlEnabled,
				k = c.buttonFillColor,
				l = c.buttonFillAlpha,
				m = c.buttonBorderThickness,
				n = c.buttonBorderColor,
				p = c.buttonBorderAlpha,
				r = c.buttonCornerRadius,
				t = c.buttonRollOverColor,
				q = c.gridHeight,
				y = c.zoomFactor,
				B = c.minZoomLevel,
				u = c.maxZoomLevel,
				w = c.buttonIconAlpha,
				v = c.buttonIconColor,
				A = c.roundButtons,
				C = a.svgIcons,
				x = a.getX(c.left),
				z = a.getY(c.top);
			isNaN(c.right) || (x = a.getX(c.right, !0), x = h ? x - 3 * f : x - f);
			isNaN(c.bottom) || (z = a.getY(c.bottom, !0), g && (z -= q + 3 * f), z = h ? z - 3 * f : c.homeButtonEnabled ? z - .5 * f : z + f);
			e.translate(x, z);
			c.previousDY = NaN;
			var F, x = f / 4 - 1;
			if (g) {
				F = b.set();
				d.setCN(a, F, "zoom-control-zoom");
				e.push(F);
				c.set = e;
				c.zoomSet = F;
				5 < q && (g = d.rect(b, f + 6, q + 2 * f + 6, c.gridBackgroundColor, c.gridBackgroundAlpha, 0, "#000000", 0, 4), d.setCN(a, g, "zoom-bg"), g.translate(-3, -3), g.mouseup(function() {
					c.handleBgUp()
				}).touchend(function() {
					c.handleBgUp()
				}), F.push(g));
				var E = f;
				A && (E = f / 1.5);
				c.draggerSize = E;
				var H = Math.log(u / B) / Math.log(y) + 1;
				1E3 < H && (H = 1E3);
				var g = q / H,
					G, D = b.set();
				D.translate((f - E) / 2 + 1, 1, NaN, !0);
				F.push(D);
				for (G = 1; G < H; G++) z = f + G * g, z = d.line(b, [1, E - 2], [z, z], c.gridColor, c.gridAlpha, 1), d.setCN(a, z, "zoom-grid"), D.push(z);
				z = new d.SimpleButton;
				z.setDownHandler(c.draggerDown, c);
				z.setClickHandler(c.draggerUp, c);
				z.init(b, E, g, k, l, m, n, p, r, t);
				d.setCN(a, z.set, "zoom-dragger");
				F.push(z.set);
				z.set.setAttr("opacity", c.draggerAlpha);
				c.dragger = z.set;
				c.previousY = NaN;
				z = new d.SimpleButton;
				C ? (E = b.set(), H = d.line(b, [-x, x], [0, 0], v, w, 1), G = d.line(b, [0, 0], [-x, x], v, w, 1), E.push(H), E.push(G), z.svgIcon = E) : z.setIcon(a.pathToImages + "plus.gif", c.iconSize);
				z.setClickHandler(a.zoomIn, a);
				z.init(b, f, f, k, l, m, n, p, r, t, w, v, A);
				d.setCN(a, z.set, "zoom-in");
				F.push(z.set);
				z = new d.SimpleButton;
				C ? z.svgIcon = d.line(b, [-x, x], [0, 0], v, w, 1) : z.setIcon(a.pathToImages + "minus.gif", c.iconSize);
				z.setClickHandler(a.zoomOut, a);
				z.init(b, f, f, k, l, m, n, p, r, t, w, v, A);
				z.set.translate(0, q + f);
				d.setCN(a, z.set, "zoom-out");
				F.push(z.set);
				q -= g;
				u = Math.log(u / 100) / Math.log(y);
				c.realStepSize = q / (u - Math.log(B / 100) / Math.log(y));
				c.realGridHeight = q;
				c.stepMax = u
			}
			h && (h = b.set(), d.setCN(a, h, "zoom-control-pan"), e.push(h), F && F.translate(f, 4 * f), y = new d.SimpleButton, C ? y.svgIcon = d.line(b, [x / 5, -x + x / 5,
				x / 5
			], [-x, 0, x], v, w, 1) : y.setIcon(a.pathToImages + "panLeft.gif", c.iconSize), y.setClickHandler(a.moveLeft, a), y.init(b, f, f, k, l, m, n, p, r, t, w, v, A), y.set.translate(0, f), d.setCN(a, y.set, "pan-left"), h.push(y.set), y = new d.SimpleButton, C ? y.svgIcon = d.line(b, [-x / 5, x - x / 5, -x / 5], [-x, 0, x], v, w, 1) : y.setIcon(a.pathToImages + "panRight.gif", c.iconSize), y.setClickHandler(a.moveRight, a), y.init(b, f, f, k, l, m, n, p, r, t, w, v, A), y.set.translate(2 * f, f), d.setCN(a, y.set, "pan-right"), h.push(y.set), y = new d.SimpleButton, C ? y.svgIcon = d.line(b, [-x, 0, x], [x / 5, -x + x / 5, x / 5], v, w, 1) : y.setIcon(a.pathToImages + "panUp.gif", c.iconSize), y.setClickHandler(a.moveUp, a), y.init(b, f, f, k, l, m, n, p, r, t, w, v, A), y.set.translate(f, 0), d.setCN(a, y.set, "pan-up"), h.push(y.set), y = new d.SimpleButton, C ? y.svgIcon = d.line(b, [-x, 0, x], [-x / 5, x - x / 5, -x / 5], v, w, 1) : y.setIcon(a.pathToImages + "panDown.gif", c.iconSize), y.setClickHandler(a.moveDown, a), y.init(b, f, f, k, l, m, n, p, r, t, w, v, A), y.set.translate(f, 2 * f), d.setCN(a, y.set, "pan-down"), h.push(y.set), e.push(h));
			c.homeButtonEnabled && (h = new d.SimpleButton, C ? h.svgIcon = d.polygon(b, [-x, 0, x, x - 1, x - 1, 2, 2, -2, -2, -x + 1, -x + 1], [0, -x, 0, 0, x - 1, x - 1, 2, 2, x - 1, x - 1, 0], v, w, 1, v, w) : h.setIcon(a.pathToImages + c.homeIconFile, c.iconSize), h.setClickHandler(a.goHome, a), c.panControlEnabled && (p = l = 0), h.init(b, f, f, k, l, m, n, p, r, t, w, v, A), c.panControlEnabled ? h.set.translate(f, f) : F && F.translate(0, 1.5 * f), d.setCN(a, h.set, "pan-home"), e.push(h.set));
			c.update()
		},
		draggerDown: function() {
			this.chart.stopDrag();
			this.isDragging = !0
		},
		draggerUp: function() {
			this.isDragging = !1
		},
		handleBgUp: function() {
			var a = this.chart;
			a.zoomTo(100 * Math.pow(this.zoomFactor, this.stepMax - (a.mouseY - this.zoomSet.y - this.set.y - this.buttonSize - this.realStepSize / 2) / this.realStepSize))
		},
		update: function() {
			var a;
			a = this.zoomFactor;
			var b = this.realStepSize,
				c = this.stepMax,
				e = this.dragger,
				f = this.buttonSize,
				g, h = this.chart;
			h && (this.isDragging ? (h.stopDrag(), g = e.y + (h.mouseY - this.previousY), g = d.fitToBounds(g, f, this.realGridHeight + f), h.zoomTo(100 * Math.pow(a, c - (g - f) / b), NaN, NaN, !0)) : (a = Math.log(h.zoomLevel() / 100) / Math.log(a), g = (c - a) * b + f), this.previousY =
				h.mouseY, this.previousDY != g && e && (e.translate((this.buttonSize - this.draggerSize) / 2, g), this.previousDY = g))
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.SimpleButton = d.Class({
		construct: function() {},
		init: function(a, b, c, e, f, g, h, k, l, m, n, p, r) {
			var t = this;
			t.rollOverColor = m;
			t.color = e;
			t.container = a;
			m = a.set();
			t.set = m;
			r ? (b /= 2, e = d.circle(a, b, e, f, g, h, k), e.translate(b, b)) : e = d.rect(a, b, c, e, f, g, h, k, l);
			m.push(e);
			f = t.iconPath;
			var q;
			f && (q = t.iconSize, g = (b - q) / 2, r && (g = (2 * b - q) / 2), q = a.image(f, g, (c - q) / 2, q, q));
			t.svgIcon && (q = t.svgIcon, r ? q.translate(b, b) : q.translate(b / 2, b / 2));
			m.setAttr("cursor", "pointer");
			q && (m.push(q), q.setAttr("opacity",
				n), q.node.style.pointerEvents = "none");
			e.mousedown(function() {
				t.handleDown()
			}).touchstart(function() {
				t.handleDown()
			}).mouseup(function() {
				t.handleUp()
			}).touchend(function() {
				t.handleUp()
			}).mouseover(function() {
				t.handleOver()
			}).mouseout(function() {
				t.handleOut()
			});
			t.bg = e
		},
		setIcon: function(a, b) {
			this.iconPath = a;
			this.iconSize = b
		},
		setClickHandler: function(a, b) {
			this.clickHandler = a;
			this.scope = b
		},
		setDownHandler: function(a, b) {
			this.downHandler = a;
			this.scope = b
		},
		handleUp: function() {
			var a = this.clickHandler;
			a && a.call(this.scope)
		},
		handleDown: function() {
			var a = this.downHandler;
			a && a.call(this.scope)
		},
		handleOver: function() {
			this.container.chart.skipClick = !0;
			this.bg.setAttr("fill", this.rollOverColor)
		},
		handleOut: function() {
			this.container.chart.skipClick = !1;
			this.bg.setAttr("fill", this.color)
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.SmallMap = d.Class({
		construct: function(a) {
			this.cname = "SmallMap";
			this.mapColor = "#e6e6e6";
			this.rectangleColor = "#FFFFFF";
			this.top = this.right = 10;
			this.minimizeButtonWidth = 23;
			this.backgroundColor = "#9A9A9A";
			this.backgroundAlpha = 1;
			this.borderColor = "#FFFFFF";
			this.iconColor = "#000000";
			this.borderThickness = 3;
			this.borderAlpha = 1;
			this.size = .2;
			this.enabled = !0;
			d.applyTheme(this, a, this.cname)
		},
		init: function(a, b) {
			var c = this;
			if (c.enabled) {
				c.chart = a;
				c.container = b;
				c.width = a.realWidth * c.size;
				c.height = a.realHeight * c.size;
				d.remove(c.mapSet);
				d.remove(c.allSet);
				d.remove(c.set);
				var e = b.set();
				c.set = e;
				d.setCN(a, e, "small-map");
				var f = b.set();
				c.allSet = f;
				e.push(f);
				c.buildSVGMap();
				var g = c.borderThickness,
					h = c.borderColor,
					k = d.rect(b, c.width + g, c.height + g, c.backgroundColor, c.backgroundAlpha, g, h, c.borderAlpha);
				d.setCN(a, k, "small-map-bg");
				k.translate(-g / 2, -g / 2);
				f.push(k);
				k.toBack();
				var l, m, k = c.minimizeButtonWidth,
					n = new d.SimpleButton,
					p = k / 2;
				a.svgIcons ? n.svgIcon = d.line(b, [-p / 2, 0, p / 2], [-p / 4, p / 4, -p /
					4
				], c.iconColor, 1, 1) : n.setIcon(a.pathToImages + "arrowDown.gif", k);
				n.setClickHandler(c.minimize, c);
				n.init(b, k, k, h, 1, 1, h, 1);
				d.setCN(a, n.set, "small-map-down");
				n = n.set;
				c.downButtonSet = n;
				e.push(n);
				var r = new d.SimpleButton;
				a.svgIcons ? r.svgIcon = d.line(b, [-p / 2, 0, p / 2], [p / 4, -p / 4, p / 4], c.iconColor, 1, 1) : r.setIcon(a.pathToImages + "arrowUp.gif", k);
				r.setClickHandler(c.maximize, c);
				r.init(b, k, k, h, 1, 1, h, 1);
				d.setCN(a, r.set, "small-map-up");
				h = r.set;
				c.upButtonSet = h;
				h.hide();
				e.push(h);
				var t, q;
				isNaN(c.top) || (l = a.getY(c.top) +
					g, q = 0);
				isNaN(c.bottom) || (l = a.getY(c.bottom, !0) - c.height - g, q = c.height - k + g / 2);
				isNaN(c.left) || (m = a.getX(c.left) + g, t = -g / 2);
				isNaN(c.right) || (m = a.getX(c.right, !0) - c.width - g, t = c.width - k + g / 2);
				g = b.set();
				g.clipRect(1, 1, c.width, c.height);
				f.push(g);
				c.rectangleC = g;
				e.translate(m, l);
				n.translate(t, q);
				h.translate(t, q);
				f.mouseup(function() {
					c.handleMouseUp()
				});
				c.drawRectangle()
			} else d.remove(c.allSet), d.remove(c.downButtonSet), d.remove(c.upButtonSet)
		},
		minimize: function() {
			this.downButtonSet.hide();
			this.upButtonSet.show();
			this.allSet.hide()
		},
		maximize: function() {
			this.downButtonSet.show();
			this.upButtonSet.hide();
			this.allSet.show()
		},
		buildSVGMap: function() {
			var a = this.chart,
				b = {
					fill: this.mapColor,
					stroke: this.mapColor,
					"stroke-opacity": 1
				},
				c = this.container,
				e = c.set();
			d.setCN(a, e, "small-map-image");
			var f;
			for (f = 0; f < a.svgAreas.length; f++) {
				var g = c.path(a.svgAreas[f].path).attr(b);
				e.push(g)
			}
			this.allSet.push(e);
			b = e.getBBox();
			c = this.size * a.mapScale;
			f = -b.x * c;
			var g = -b.y * c,
				h = 0,
				k = 0;
			a.centerMap && (h = (this.width - b.width * c) / 2, k = (this.height -
				b.height * c) / 2);
			this.mapWidth = b.width * c;
			this.mapHeight = b.height * c;
			f += h;
			g += k;
			this.dx = h;
			this.dy = k;
			e.translate(f, g, c);
			this.mapSet = e;
			this.mapX = f;
			this.mapY = g
		},
		update: function() {
			var a = this.chart;
			if (a) {
				var b = a.zoomLevel(),
					c = this.width,
					d = this.height,
					f = c / (a.realWidth * b),
					g = a.mapContainer.getBBox(),
					c = c / b,
					d = d / b,
					h = this.rectangle;
				h.translate(-(a.mapContainer.x + g.x * b) * f + this.dx, -(a.mapContainer.y + g.y * b) * f + this.dy);
				0 < c && 0 < d && (h.setAttr("width", Math.ceil(c + 1)), h.setAttr("height", Math.ceil(d + 1)));
				this.rWidth = c;
				this.rHeight =
					d
			}
		},
		drawRectangle: function() {
			var a = this.rectangle;
			d.remove(a);
			a = d.rect(this.container, 10, 10, "#000", 0, 1, this.rectangleColor, 1);
			d.setCN(this.chart, a, "small-map-rectangle");
			this.rectangleC.push(a);
			this.rectangle = a
		},
		handleMouseUp: function() {
			var a = this.chart,
				b = a.zoomLevel();
			a.zoomToMapXY(b, (a.mouseX - this.set.x - this.mapX) / this.size + a.diffX * a.mapScale, (a.mouseY - this.set.y - this.mapY) / this.size + a.diffY * a.mapScale)
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.AreasProcessor = d.Class({
		construct: function(a) {
			this.chart = a
		},
		process: function(a) {
			this.updateAllAreas();
			this.allObjects = [];
			a = a.areas;
			var b = this.chart;
			b.outlines = [];
			var c = a.length,
				d, f, g = 0,
				h = !1,
				k = !1,
				l = 0;
			for (d = 0; d < c; d++)
				if (f = a[d], f.value = Number(f.value), f = f.value, !isNaN(f)) {
					if (!1 === h || h < f) h = f;
					if (!1 === k || k > f) k = f;
					g += Math.abs(f);
					l++
				}
			this.minValue = k;
			this.maxValue = h;
			isNaN(b.minValue) || (this.minValue = b.minValue);
			isNaN(b.maxValue) || (this.maxValue = b.maxValue);
			b.maxValueReal =
				h;
			b.minValueReal = k;
			for (d = 0; d < c; d++) f = a[d], isNaN(f.value) ? f.percents = void 0 : (f.percents = (f.value - k) / g * 100, k == h && (f.percents = 100));
			for (d = 0; d < c; d++) f = a[d], this.createArea(f);
			b.outlinesToFront()
		},
		updateAllAreas: function() {
			var a = this.chart,
				b = a.areasSettings,
				c = b.unlistedAreasColor,
				e = b.unlistedAreasAlpha,
				f = b.unlistedAreasOutlineColor,
				g = b.unlistedAreasOutlineAlpha,
				h = a.svgAreas,
				k = a.dataProvider,
				l = k.areas,
				m = {},
				n;
			for (n = 0; n < l.length; n++) m[l[n].id] = l[n];
			for (n = 0; n < h.length; n++) {
				l = h[n];
				if (b.preserveOriginalAttributes) {
					if (l.customAttr)
						for (var p in l.customAttr) l.setAttr(p,
							l.customAttr[p])
				} else {
					void 0 != c && l.setAttr("fill", c);
					isNaN(e) || l.setAttr("fill-opacity", e);
					void 0 != f && l.setAttr("stroke", f);
					isNaN(g) || l.setAttr("stroke-opacity", g);
					var r = b.outlineThickness;
					b.adjustOutlineThickness && (r = r / a.zoomLevel() / a.mapScale);
					l.setAttr("stroke-width", r)
				}
				d.setCN(a, l, "map-area-unlisted");
				k.getAreasFromMap && !m[l.id] && (r = new d.MapArea(a.theme), r.parentObject = k, r.id = l.id, r.outline = l.outline, k.areas.push(r))
			}
		},
		createArea: function(a) {
			var b = this.chart,
				c = b.svgAreasById[a.id],
				e = b.areasSettings;
			if (c && c.className) {
				var f = b.areasClasses[c.className];
				f && (e = d.processObject(f, d.AreasSettings, b.theme))
			}
			var g = e.color,
				h = e.alpha,
				k = e.outlineThickness,
				l = e.rollOverColor,
				m = e.selectedColor,
				n = e.rollOverAlpha,
				p = e.rollOverBrightness,
				r = e.outlineColor,
				t = e.outlineAlpha,
				q = e.balloonText,
				y = e.selectable,
				B = e.pattern,
				u = e.rollOverOutlineColor,
				w = e.bringForwardOnHover,
				v = e.preserveOriginalAttributes;
			this.allObjects.push(a);
			a.chart = b;
			a.baseSettings = e;
			a.autoZoomReal = void 0 == a.autoZoom ? e.autoZoom : a.autoZoom;
			f = a.color;
			void 0 == f && (f = g);
			var A = a.alpha;
			isNaN(A) && (A = h);
			h = a.rollOverAlpha;
			isNaN(h) && (h = n);
			isNaN(h) && (h = A);
			n = a.rollOverColor;
			void 0 == n && (n = l);
			l = a.pattern;
			void 0 == l && (l = B);
			B = a.selectedColor;
			void 0 == B && (B = m);
			m = a.balloonText;
			void 0 === m && (m = q);
			void 0 == e.colorSolid || isNaN(a.value) || (q = Math.floor((a.value - this.minValue) / ((this.maxValue - this.minValue) / b.colorSteps)), q == b.colorSteps && q--, q *= 1 / (b.colorSteps - 1), this.maxValue == this.minValue && (q = 1), a.colorReal = d.getColorFade(f, e.colorSolid, q));
			void 0 != a.color && (a.colorReal = a.color);
			void 0 == a.selectable && (a.selectable = y);
			void 0 == a.colorReal && (a.colorReal = g);
			g = a.outlineColor;
			void 0 == g && (g = r);
			r = a.outlineAlpha;
			isNaN(r) && (r = t);
			t = a.outlineThickness;
			isNaN(t) && (t = k);
			k = a.rollOverOutlineColor;
			void 0 == k && (k = u);
			u = a.rollOverBrightness;
			void 0 == u && (u = p);
			void 0 == a.bringForwardOnHover && (a.bringForwardOnHover = w);
			void 0 == a.preserveOriginalAttributes && (a.preserveOriginalAttributes = v);
			isNaN(e.selectedBrightness) || (B = d.adjustLuminosity(a.colorReal, e.selectedBrightness / 100));
			a.alphaReal = A;
			a.rollOverColorReal = n;
			a.rollOverAlphaReal = h;
			a.balloonTextReal = m;
			a.selectedColorReal = B;
			a.outlineColorReal = g;
			a.outlineAlphaReal = r;
			a.rollOverOutlineColorReal = k;
			a.outlineThicknessReal = t;
			a.patternReal = l;
			a.rollOverBrightnessReal = u;
			a.accessibleLabel || (a.accessibleLabel = e.accessibleLabel);
			d.processDescriptionWindow(e, a);
			if (c && (p = c.area, w = c.title, a.enTitle = c.title, w && !a.title && (a.title = w), (c = b.language) ? (w = d.mapTranslations) && (c = w[c]) && c[a.enTitle] && (a.titleTr = c[a.enTitle]) : a.titleTr = void 0, p)) {
				c = a.tabIndex;
				void 0 === c && (c = e.tabIndex);
				void 0 !== c && p.setAttr("tabindex", c);
				a.displayObject = p;
				a.outline && (A = 0, a.alphaReal = 0, a.rollOverAlphaReal = 0, a.mouseEnabled = !1, b.outlines.push(p), p.node.setAttribute("pointer-events", "none"));
				a.mouseEnabled && b.addObjectEventListeners(p, a);
				var C;
				void 0 != f && (C = f);
				void 0 != a.colorReal && (C = a.showAsSelected || b.selectedObject == a ? a.selectedColorReal : a.colorReal);
				p.node.setAttribute("class", "");
				d.setCN(b, p, "map-area");
				d.setCN(b, p, "map-area-" + p.id);
				e.adjustOutlineThickness && (t = t / b.zoomLevel() / b.mapScale);
				a.preserveOriginalAttributes ||
					(p.setAttr("fill", C), p.setAttr("stroke", g), p.setAttr("stroke-opacity", r), p.setAttr("stroke-width", t), p.setAttr("fill-opacity", A));
				b.makeObjectAccessible(a);
				l && p.pattern(l, b.mapScale, b.path);
				a.hidden && p.hide()
			}
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.AreasSettings = d.Class({
		construct: function(a) {
			this.cname = "AreasSettings";
			this.alpha = 1;
			this.autoZoom = !1;
			this.balloonText = "[[title]]";
			this.color = "#FFCC00";
			this.colorSolid = "#990000";
			this.unlistedAreasAlpha = 1;
			this.unlistedAreasColor = "#DDDDDD";
			this.outlineColor = "#FFFFFF";
			this.outlineThickness = this.outlineAlpha = 1;
			this.selectedColor = this.rollOverOutlineColor = "#CC0000";
			this.unlistedAreasOutlineColor = "#FFFFFF";
			this.unlistedAreasOutlineAlpha = 1;
			this.descriptionWindowWidth = 250;
			this.bringForwardOnHover = this.adjustOutlineThickness = !0;
			this.accessibleLabel = "[[title]] [[value]] [[description]]";
			d.applyTheme(this, a, this.cname)
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.ImagesProcessor = d.Class({
		construct: function(a) {
			this.chart = a;
			this.reset()
		},
		process: function(a) {
			var b = a.images,
				c;
			for (c = b.length - 1; 0 <= c; c--) {
				var d = b[c];
				this.createImage(d, c);
				d.parentArray = b
			}
			this.counter = c;
			a.parentObject && a.remainVisible && this.process(a.parentObject)
		},
		createImage: function(a, b) {
			a = d.processObject(a, d.MapImage);
			a.arrays = [];
			isNaN(b) && (this.counter++, b = this.counter);
			var c = this.chart,
				e = c.container,
				f = c.mapImagesContainer,
				g = c.stageImagesContainer,
				h = c.imagesSettings;
			a.remove && a.remove();
			var k = h.color,
				l = h.alpha,
				m = h.rollOverColor,
				n = h.rollOverOutlineColor,
				p = h.selectedColor,
				r = h.balloonText,
				t = h.outlineColor,
				q = h.outlineAlpha,
				y = h.outlineThickness,
				B = h.selectedScale,
				u = h.rollOverScale,
				w = h.selectable,
				v = h.labelPosition,
				A = h.labelColor,
				C = h.labelFontSize,
				x = h.bringForwardOnHover,
				z = h.labelRollOverColor,
				F = h.rollOverBrightness,
				E = h.selectedLabelColor;
			a.index = b;
			a.chart = c;
			a.baseSettings = c.imagesSettings;
			var H = e.set();
			a.displayObject = H;
			var G = a.color;
			void 0 == G && (G = k);
			k = a.alpha;
			isNaN(k) && (k = l);
			void 0 == a.bringForwardOnHover && (a.bringForwardOnHover = x);
			l = a.outlineAlpha;
			isNaN(l) && (l = q);
			q = a.rollOverColor;
			void 0 == q && (q = m);
			m = a.selectedColor;
			void 0 == m && (m = p);
			p = a.balloonText;
			void 0 === p && (p = r);
			r = a.outlineColor;
			void 0 == r && (r = t);
			a.outlineColorReal = r;
			t = a.outlineThickness;
			isNaN(t) && (t = y);
			(y = a.labelPosition) || (y = v);
			v = a.labelColor;
			void 0 == v && (v = A);
			A = a.labelRollOverColor;
			void 0 == A && (A = z);
			z = a.selectedLabelColor;
			void 0 == z && (z = E);
			E = a.labelFontSize;
			isNaN(E) && (E = C);
			C = a.selectedScale;
			isNaN(C) && (C = B);
			B = a.rollOverScale;
			isNaN(B) && (B = u);
			u = a.rollOverBrightness;
			void 0 == u && (u = F);
			void 0 == a.selectable && (a.selectable = w);
			a.colorReal = G;
			isNaN(h.selectedBrightness) || (m = d.adjustLuminosity(a.colorReal, h.selectedBrightness / 100));
			a.alphaReal = k;
			a.rollOverColorReal = q;
			a.balloonTextReal = p;
			a.selectedColorReal = m;
			a.labelColorReal = v;
			a.labelRollOverColorReal = A;
			a.selectedLabelColorReal = z;
			a.labelFontSizeReal = E;
			a.labelPositionReal = y;
			a.selectedScaleReal = C;
			a.rollOverScaleReal = B;
			a.rollOverOutlineColorReal = n;
			a.rollOverBrightnessReal = u;
			a.accessibleLabel || (a.accessibleLabel = h.accessibleLabel);
			d.processDescriptionWindow(h, a);
			a.centeredReal = void 0 == a.centered ? h.centered : a.centered;
			n = a.type;
			u = a.imageURL;
			B = a.svgPath;
			C = a.width;
			E = a.height;
			w = a.scale;
			isNaN(a.percentWidth) || (C = a.percentWidth / 100 * c.realWidth);
			isNaN(a.percentHeight) || (E = a.percentHeight / 100 * c.realHeight);
			var D;
			u || n || B || (n = "circle", C = 1, l = k = 0);
			q = F = 0;
			h = a.selectedColorReal;
			if (n) {
				isNaN(C) && (C = 10);
				isNaN(E) && (E = 10);
				"kilometers" == a.widthAndHeightUnits && (C = c.kilometersToPixels(a.width), E = c.kilometersToPixels(a.height));
				"miles" == a.widthAndHeightUnits && (C = c.milesToPixels(a.width), E = c.milesToPixels(a.height));
				if ("circle" == n || "bubble" == n) E = C;
				D = this.createPredefinedImage(G, r, t, n, C, E);
				q = F = 0;
				a.centeredReal ? (isNaN(a.right) || (F = C * w), isNaN(a.bottom) || (q = E * w)) : (F = C * w / 2, q = E * w / 2);
				D.translate(F, q, w, !0)
			} else u ? (isNaN(C) && (C = 10), isNaN(E) && (E = 10), D = e.image(u, 0, 0, C, E), D.node.setAttribute("preserveAspectRatio", "none"), D.setAttr("opacity", k), a.centeredReal && (F = isNaN(a.right) ? -C / 2 : C / 2, q = isNaN(a.bottom) ? -E / 2 : E / 2, D.translate(F, q, NaN, !0))) : B && (D = e.path(B), u = D.getBBox(), a.centeredReal ? (F = -u.x * w - u.width * w / 2, isNaN(a.right) || (F = -F), q = -u.y * w - u.height * w / 2, isNaN(a.bottom) || (q = -q)) : F = q = 0, D.translate(F, q, w, !0), D.x = F, D.y = q);
			D && (H.push(D), a.image = D, D.setAttr("stroke-opacity", l), D.setAttr("stroke-width", t), D.setAttr("stroke", r), D.setAttr("fill-opacity", k), "bubble" != n && D.setAttr("fill", G), d.setCN(c, D, "map-image"), void 0 != a.id && d.setCN(c, D, "map-image-" + a.id));
			G = a.labelColorReal;
			!a.showAsSelected && c.selectedObject != a || void 0 == h || (D && D.setAttr("fill", h), G = a.selectedLabelColorReal);
			D = null;
			void 0 !== a.label && (D = d.text(e, a.label, G, c.fontFamily, a.labelFontSizeReal, a.labelAlign), d.setCN(c, D, "map-image-label"), void 0 !== a.id && d.setCN(c, D, "map-image-label-" + a.id), G = a.labelBackgroundAlpha, (k = a.labelBackgroundColor) && 0 < G && (l = D.getBBox(), e = d.rect(e, l.width + 16, l.height + 10, k, G), d.setCN(c, e, "map-image-label-background"), void 0 != a.id && d.setCN(c, e, "map-image-label-background-" + a.id), H.push(e), a.labelBG = e), a.imageLabel = D, H.push(D), d.setCN(c, H, "map-image-container"), void 0 != a.id && d.setCN(c, H, "map-image-container-" + a.id), this.labelsToReposition.push(a), a.arrays.push({
				arr: this.labelsToReposition,
				el: a
			}));
			e = isNaN(a.latitude) || isNaN(a.longitude) ? !0 : !1;
			a.lineId && (D = this.chart.getObjectById(a.lineId)) && 0 < D.longitudes.length && (e = !1);
			e ? g.push(H) : f.push(H);
			H.toBack();
			H && (H.rotation = a.rotation, isNaN(a.rotation) || H.rotate(a.rotation), a.arrays.push({
				arr: this.allSvgObjects,
				el: H
			}), this.allSvgObjects.push(H));
			this.allObjects.push(a);
			c.makeObjectAccessible(a);
			f = a.tabIndex;
			void 0 === f && (f = c.imagesSettings.tabIndex);
			void 0 !== f && H.setAttr("tabindex", f);
			a.arrays.push({
				arr: this.allObjects,
				el: a
			});
			isNaN(a.longitude) || isNaN(a.latitude) || !a.fixedSize || (a.objToResize = {
				image: H,
				mapImage: a,
				scale: 1
			}, this.objectsToResize.push(a.objToResize), a.arrays.push({
				arr: this.objectsToResize,
				el: a.objToResize
			}));
			this.updateSizeAndPosition(a);
			a.mouseEnabled && c.addObjectEventListeners(H, a);
			a.hidden && H.hide();
			d.removeFromArray(c.updatableImages, a);
			a.animateAlongLine && (c.updatableImages.push(a), a.delayAnimateAlong());
			return a
		},
		updateSizeAndPosition: function(a) {
			var b = this.chart,
				c = a.displayObject,
				e = b.getX(a.left),
				f = b.getY(a.top),
				g, h = a.image.getBBox();
			isNaN(a.right) || (e = b.getX(a.right, !0) - h.width * a.scale);
			isNaN(a.bottom) || (f = b.getY(a.bottom, !0) - h.height * a.scale);
			var k = a.longitude,
				l = a.latitude,
				m = a.positionOnLine,
				h = a.imageLabel,
				n = this.chart.zoomLevel(),
				p, r;
			a.lineId && (a.line = this.chart.getObjectById(a.lineId));
			if (a.line && a.line.getCoordinates) {
				a.line.chart = b;
				var t = a.line.getCoordinates(m, a.lineSegment);
				t && (k = b.coordinateToLongitude(t.x), l = b.coordinateToLatitude(t.y), p = t.x, r = t.y, a.animateAngle && (g = d.radiansToDegrees(t.angle)))
			}
			isNaN(g) || c.rotate(g + a.extraAngle);
			if (!isNaN(e) && !isNaN(f)) c.translate(e, f, NaN, !0);
			else if (!isNaN(l) && !isNaN(k))
				if (f = b.coordinatesToXY(k, l), e = f.x, f = f.y, isNaN(p) || (e = p), isNaN(r) || (f = r), a.fixedSize) {
					p = a.positionScale;
					isNaN(p) ? p = 0 : (--p, p *= 1 - 2 * Math.abs(m - .5));
					if (m = a.objectToResize) m.scale = 1 + p;
					c.translate(e, f, 1 / n + p, !0)
				} else c.translate(e, f, NaN, !0);
			this.positionLabel(h, a, a.labelPositionReal)
		},
		positionLabel: function(a, b, c) {
			if (a) {
				var d = b.image,
					f = 0,
					g = 0,
					h = 0,
					k = 0;
				d && (k = d.getBBox(), g = d.y + k.y, f = d.x + k.x, h = k.width, k = k.height, b.svgPath && (h *= b.scale, k *= b.scale));
				var d = a.getBBox(),
					l = d.width,
					m = d.height;
				"right" == c && (f += h + l / 2 + 5, g += k / 2 - 2);
				"left" == c && (f += -l / 2 - 5, g += k / 2 - 2);
				"top" == c && (g -= m / 2 + 3, f += h / 2);
				"bottom" == c && (g += k + m / 2, f += h / 2);
				"middle" == c && (f += h / 2, g += k / 2);
				a.translate(f + b.labelShiftX, g + b.labelShiftY, NaN, !0);
				a = b.labelFontSizeReal;
				b.labelBG && b.labelBG.translate(f - d.width / 2 + b.labelShiftX - 9, g - a / 2 + b.labelShiftY -
					4, NaN, !0)
			}
		},
		createPredefinedImage: function(a, b, c, e, f, g) {
			var h = this.chart.container,
				k;
			switch (e) {
				case "circle":
					k = d.circle(h, f / 2, a, 1, c, b, 1);
					break;
				case "rectangle":
					k = d.polygon(h, [-f / 2, f / 2, f / 2, -f / 2], [g / 2, g / 2, -g / 2, -g / 2], a, 1, c, b, 1, 0, !0);
					break;
				case "bubble":
					k = d.circle(h, f / 2, a, 1, c, b, 1, !0);
					break;
				case "hexagon":
					f /= Math.sqrt(3), k = d.polygon(h, [.866 * f, 0 * f, -.866 * f, -.866 * f, 0 * f, .866 * f], [.5 * f, 1 * f, .5 * f, -.5 * f, -1 * f, -.5 * f], a, 1, c, b, 1)
			}
			return k
		},
		reset: function() {
			this.objectsToResize = [];
			this.allSvgObjects = [];
			this.allObjects = [];
			this.allLabels = [];
			this.labelsToReposition = []
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.ImagesSettings = d.Class({
		construct: function(a) {
			this.cname = "ImagesSettings";
			this.balloonText = "[[title]]";
			this.alpha = 1;
			this.borderAlpha = 0;
			this.borderThickness = 1;
			this.labelPosition = "right";
			this.labelColor = "#000000";
			this.labelFontSize = 11;
			this.color = "#000000";
			this.labelRollOverColor = "#00CC00";
			this.centered = !0;
			this.rollOverScale = this.selectedScale = 1;
			this.descriptionWindowWidth = 250;
			this.bringForwardOnHover = !0;
			this.outlineColor = "transparent";
			this.adjustAnimationSpeed = !1;
			this.baseAnimationDistance = 500;
			this.pauseDuration = 0;
			this.easingFunction = d.easeInOutQuad;
			this.animationDuration = 3;
			this.positionScale = 1;
			this.accessibleLabel = "[[title]] [[description]]";
			d.applyTheme(this, a, this.cname)
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.LinesProcessor = d.Class({
		construct: function(a) {
			this.chart = a;
			this.reset()
		},
		process: function(a) {
			var b = a.lines,
				c;
			for (c = 0; c < b.length; c++) {
				var d = b[c];
				this.createLine(d, c);
				d.parentArray = b
			}
			this.counter = c;
			a.parentObject && a.remainVisible && this.process(a.parentObject)
		},
		createLine: function(a, b) {
			a = d.processObject(a, d.MapLine);
			isNaN(b) && (this.counter++, b = this.counter);
			a.index = b;
			a.remove && a.remove();
			var c = this.chart,
				e = c.linesSettings,
				f = this.objectsToResize,
				g = c.mapLinesContainer,
				h = c.stageLinesContainer,
				k = e.thickness,
				l = e.dashLength,
				m = e.arrow,
				n = e.arrowSize,
				p = e.arrowColor,
				r = e.arrowAlpha,
				t = e.color,
				q = e.alpha,
				y = e.rollOverColor,
				B = e.selectedColor,
				u = e.rollOverAlpha,
				w = e.balloonText,
				v = e.bringForwardOnHover,
				A = e.arc,
				C = e.rollOverBrightness,
				x = c.container;
			a.chart = c;
			a.baseSettings = e;
			var z = x.set();
			a.displayObject = z;
			var F = a.tabIndex;
			void 0 === F && (F = e.tabIndex);
			void 0 !== F && z.setAttr("tabindex", F);
			this.allSvgObjects.push(z);
			a.arrays.push({
				arr: this.allSvgObjects,
				el: z
			});
			this.allObjects.push(a);
			a.arrays.push({
				arr: this.allObjects,
				el: a
			});
			a.mouseEnabled && c.addObjectEventListeners(z, a);
			if (a.remainVisible || c.selectedObject == a.parentObject) {
				F = a.thickness;
				isNaN(F) && (F = k);
				k = a.dashLength;
				isNaN(k) && (k = l);
				l = a.color;
				void 0 == l && (l = t);
				t = a.alpha;
				isNaN(t) && (t = q);
				q = a.rollOverAlpha;
				isNaN(q) && (q = u);
				isNaN(q) && (q = t);
				u = a.rollOverColor;
				void 0 == u && (u = y);
				y = a.selectedColor;
				void 0 == y && (y = B);
				B = a.balloonText;
				void 0 === B && (B = w);
				w = a.arc;
				isNaN(w) && (w = A);
				A = a.arrow;
				if (!A || "none" == A && "none" != m) A = m;
				m = a.arrowColor;
				void 0 == m && (m = p);
				void 0 == m && (m = l);
				p = a.arrowAlpha;
				isNaN(p) && (p = r);
				isNaN(p) && (p = t);
				r = a.arrowSize;
				isNaN(r) && (r = n);
				n = a.rollOverBrightness;
				void 0 == n && (n = C);
				a.colorReal = l;
				a.arrowColor = m;
				isNaN(e.selectedBrightness) || (y = d.adjustLuminosity(a.colorReal, e.selectedBrightness / 100));
				a.alphaReal = t;
				a.rollOverColorReal = u;
				a.rollOverAlphaReal = q;
				a.balloonTextReal = B;
				a.selectedColorReal = y;
				a.thicknessReal = F;
				a.rollOverBrightnessReal = n;
				a.accessibleLabel || (a.accessibleLabel = e.accessibleLabel);
				void 0 === a.shiftArrow && (a.shiftArrow = e.shiftArrow);
				void 0 == a.bringForwardOnHover && (a.bringForwardOnHover = v);
				d.processDescriptionWindow(e, a);
				v = this.processCoordinates(a.x, c.realWidth);
				C = this.processCoordinates(a.y, c.realHeight);
				n = a.longitudes;
				e = a.latitudes;
				q = n.length;
				if (0 < q)
					for (v = [], C = [], u = 0; u < q; u++) B = c.coordinatesToXY(n[u], e[u]), v.push(B.x), C.push(B.y);
				if (0 < v.length) {
					a.segments = v.length;
					d.dx = 0;
					d.dy = 0;
					var E, H, G, q = 10 * (1 - Math.abs(w));
					10 <= q && (q = NaN);
					1 > q && (q = 1);
					a.arcRadius = [];
					a.distances = [];
					n = c.mapContainer.scale;
					if (isNaN(q)) {
						for (q = 0; q < v.length - 1; q++) H = Math.sqrt(Math.pow(v[q + 1] - v[q], 2) + Math.pow(C[q + 1] - C[q], 2)), a.distances[q] = H;
						q = d.line(x, v, C, l, 1, F / n, k, !1, !1, !0);
						l = d.line(x, v, C, l, .001, 5 / n, k, !1, !1, !0);
						q.setAttr("stroke-linecap", "round")
					} else {
						u = 1;
						0 > w && (u = 0);
						B = {
							fill: "none",
							stroke: l,
							"stroke-opacity": 1,
							"stroke-width": F / n,
							"fill-opacity": 0,
							"stroke-linecap": "round"
						};
						void 0 !== k && 0 < k && (B["stroke-dasharray"] = k);
						for (var k = "", D = 0; D < v.length - 1; D++) {
							var K = v[D],
								J = v[D + 1],
								L = C[D],
								O = C[D + 1];
							H = Math.sqrt(Math.pow(J - K, 2) + Math.pow(O - L, 2));
							G = H / 2 * q;
							E = 270 + 180 * Math.acos(H / 2 /
								G) / Math.PI;
							isNaN(E) && (E = 270);
							if (K < J) {
								var P = K,
									K = J,
									J = P,
									P = L,
									L = O,
									O = P;
								E = -E
							}
							0 < w && (E = -E);
							k += "M" + K + "," + L + "A" + G + "," + G + ",0,0," + u + "," + J + "," + O;
							a.arcRadius[D] = G;
							a.distances[D] = H
						}
						q = x.path(k).attr(B);
						l = x.path(k).attr({
							"fill-opacity": 0,
							stroke: l,
							"stroke-width": 5 / n,
							"stroke-opacity": .001,
							fill: "none"
						})
					}
					d.setCN(c, q, "map-line");
					void 0 != a.id && d.setCN(c, q, "map-line-" + a.id);
					d.dx = .5;
					d.dy = .5;
					z.push(q);
					z.push(l);
					q.setAttr("opacity", t);
					if ("none" != A) {
						var I, M, N;
						if ("end" == A || "both" == A) u = v[v.length - 1], D = C[C.length - 1], 1 < v.length ?
							(B = v[v.length - 2], I = C[C.length - 2]) : (B = u, I = D), I = 180 * Math.atan((D - I) / (u - B)) / Math.PI, isNaN(E) || (I += E), M = u, N = D, I = 0 > u - B ? I - 90 : I + 90;
						t = [-r / 2 - .5, -.5, r / 2 - .5];
						k = [r, -.5, r];
						a.shiftArrow && "middle" != A && (k = [0, 1.2 * -r, 0]);
						"both" == A && (r = d.polygon(x, t, k, m, p, 1, m, p, void 0, !0), z.push(r), r.translate(M, N, 1 / n, !0), isNaN(I) || r.rotate(I), d.setCN(c, q, "map-line-arrow"), void 0 != a.id && d.setCN(c, q, "map-line-arrow-" + a.id), a.fixedSize && f.push(r));
						if ("start" == A || "both" == A) r = v[0], N = C[0], 1 < v.length ? (u = v[1], M = C[1]) : (u = r, M = N), I = 180 * Math.atan((N -
							M) / (r - u)) / Math.PI, isNaN(E) || (I -= E), M = r, I = 0 > r - u ? I - 90 : I + 90;
						"middle" == A && (u = v[v.length - 1], D = C[C.length - 1], 1 < v.length ? (B = v[v.length - 2], I = C[C.length - 2]) : (B = u, I = D), M = B + (u - B) / 2, N = I + (D - I) / 2, I = 180 * Math.atan((D - I) / (u - B)) / Math.PI, isNaN(E) || (E = H / 2, G -= Math.sqrt(G * G - E * E), 0 > w && (G = -G), E = Math.sin(I / 180 * Math.PI), -1 == E && (E = 1), M -= E * G, N += Math.cos(I / 180 * Math.PI) * G), I = 0 > u - B ? I - 90 : I + 90);
						r = d.polygon(x, t, k, m, p, 1, m, p, void 0, !0);
						d.setCN(c, q, "map-line-arrow");
						void 0 != a.id && d.setCN(c, q, "map-line-arrow-" + a.id);
						z.push(r);
						r.translate(M,
							N, 1 / n, !0);
						isNaN(I) || r.rotate(I);
						a.fixedSize && (f.push(r), a.arrays.push({
							arr: f,
							el: r
						}));
						a.arrowSvg = r
					}
					a.fixedSize && q && (f = {
						line: q,
						thickness: F
					}, this.linesToResize.push(f), a.arrays.push({
						arr: this.linesToResize,
						el: f
					}), f = {
						line: l,
						thickness: 5
					}, this.linesToResize.push(f), a.arrays.push({
						arr: this.linesToResize,
						el: f
					}));
					a.lineSvg = q;
					a.showAsSelected && !isNaN(y) && q.setAttr("stroke", y);
					0 < e.length ? g.push(z) : h.push(z);
					a.hidden && z.hide();
					c.makeObjectAccessible(a)
				}
			}
		},
		processCoordinates: function(a, b) {
			var c = [],
				d;
			for (d = 0; d < a.length; d++) {
				var f = a[d],
					g = Number(f);
				isNaN(g) && (g = Number(f.replace("%", "")) * b / 100);
				isNaN(g) || c.push(g)
			}
			return c
		},
		reset: function() {
			this.objectsToResize = [];
			this.allSvgObjects = [];
			this.allObjects = [];
			this.linesToResize = []
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.LinesSettings = d.Class({
		construct: function(a) {
			this.cname = "LinesSettings";
			this.balloonText = "[[title]]";
			this.thickness = 1;
			this.dashLength = 0;
			this.arrowSize = 10;
			this.arrowAlpha = 1;
			this.arrow = "none";
			this.color = "#990000";
			this.descriptionWindowWidth = 250;
			this.bringForwardOnHover = !0;
			d.applyTheme(this, a, this.cname)
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.MapObject = d.Class({
		construct: function(a) {
			this.fixedSize = this.mouseEnabled = !0;
			this.images = [];
			this.lines = [];
			this.areas = [];
			this.remainVisible = !0;
			this.passZoomValuesToTarget = !1;
			this.objectType = this.cname;
			d.applyTheme(this, a, "MapObject");
			this.arrays = []
		},
		deleteObject: function() {
			this.remove();
			this.parentArray && d.removeFromArray(this.parentArray, this);
			if (this.arrays)
				for (var a = 0; a < this.arrays.length; a++) d.removeFromArray(this.arrays[a].arr, this.arrays[a].el);
			this.arrays = []
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.MapArea = d.Class({
		inherits: d.MapObject,
		construct: function(a) {
			this.cname = "MapArea";
			d.MapArea.base.construct.call(this, a);
			d.applyTheme(this, a, this.cname)
		},
		validate: function() {
			this.chart.areasProcessor.createArea(this)
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.MapLine = d.Class({
		inherits: d.MapObject,
		construct: function(a) {
			this.cname = "MapLine";
			this.longitudes = [];
			this.latitudes = [];
			this.x = [];
			this.y = [];
			this.segments = 0;
			this.arrow = "none";
			d.MapLine.base.construct.call(this, a);
			d.applyTheme(this, a, this.cname)
		},
		validate: function() {
			this.chart.linesProcessor.createLine(this)
		},
		remove: function() {
			var a = this.displayObject;
			a && a.remove()
		},
		getCoordinates: function(a, b) {
			isNaN(b) && (b = 0);
			isNaN(this.arc) || this.isValid || (this.isValid = !0, this.validate());
			if (!isNaN(a)) {
				var c, e, f, g, h, k;
				if (1 < this.longitudes.length) {
					e = this.chart.coordinatesToXY(this.longitudes[b], this.latitudes[b]);
					var l = this.chart.coordinatesToXY(this.longitudes[b + 1], this.latitudes[b + 1]);
					c = e.x;
					f = l.x;
					e = e.y;
					g = l.y
				} else 1 < this.x.length && (c = this.x[b], f = this.x[b + 1], e = this.y[b], g = this.y[b + 1]);
				l = Math.sqrt(Math.pow(f - c, 2) + Math.pow(g - e, 2));
				c < f && !isNaN(this.arc) && 0 !== this.arc && (a = 1 - a);
				h = c + (f - c) * a;
				k = e + (g - e) * a;
				var m = Math.atan2(g - e, f - c);
				if (!isNaN(this.arc) && 0 !== this.arc && this.arcRadius) {
					var n = 0;
					c < f && (n = c, c = f, f = n, n = e, e = g, g = n, n = Math.PI);
					k = this.arcRadius[b];
					0 > this.arc && (l = -l);
					h = c + (f - c) / 2 + Math.sqrt(k * k - l / 2 * (l / 2)) * (e - g) / l;
					var p = e + (g - e) / 2 + Math.sqrt(k * k - l / 2 * (l / 2)) * (f - c) / l;
					c = 180 * Math.atan2(e - p, c - h) / Math.PI;
					f = 180 * Math.atan2(g - p, f - h) / Math.PI;
					180 < f - c && (f -= 360);
					m = d.degreesToRadians(c + (f - c) * a);
					h += k * Math.cos(m);
					k = p + k * Math.sin(m);
					m = 0 < this.arc ? m + Math.PI / 2 : m - Math.PI / 2;
					m += n
				}
				this.distance = l;
				return {
					x: h,
					y: k,
					angle: m
				}
			}
		},
		fixToStage: function() {
			if (0 < this.latitudes.length) {
				this.y = [];
				for (var a = 0; a < this.latitudes.length; a++) {
					var b =
						this.chart.coordinatesToStageXY(this.longitudes[a], this.latitudes[a]);
					this.y.push(b.y);
					this.x.push(b.x)
				}
				this.latitudes = [];
				this.longitudes = []
			}
			this.validate()
		},
		fixToMap: function() {
			if (0 < this.y.length) {
				this.latitudes = [];
				for (var a = 0; a < this.y.length; a++) {
					var b = this.chart.stageXYToCoordinates(this.x[a], this.y[a]);
					this.latitudes.push(b.latitude);
					this.longitudes.push(b.longitude)
				}
				this.y = [];
				this.x = []
			}
			this.validate()
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.MapImage = d.Class({
		inherits: d.MapObject,
		construct: function(a) {
			this.cname = "MapImage";
			this.scale = 1;
			this.widthAndHeightUnits = "pixels";
			this.labelShiftY = this.labelShiftX = 0;
			this.positionOnLine = .5;
			this.direction = 1;
			this.lineSegment = this.extraAngle = 0;
			this.animateAngle = !0;
			this.createEvents("animationStart", "animationEnd");
			d.MapImage.base.construct.call(this, a);
			d.applyTheme(this, a, this.cname);
			this.delayCounter = 0
		},
		validate: function() {
			this.chart.imagesProcessor.createImage(this)
		},
		updatePosition: function() {
			this.chart.imagesProcessor.updateSizeAndPosition(this)
		},
		remove: function() {
			var a = this.displayObject;
			a && a.remove();
			(a = this.imageLabel) && a.remove()
		},
		animateTo: function(a, b, c, d) {
			isNaN(c) || (this.animationDuration = c);
			d && (this.easingFunction = d);
			this.finalX = a;
			this.finalY = b;
			isNaN(this.longitude) || (this.initialX = this.longitude);
			isNaN(this.left) || (this.initialX = this.left);
			isNaN(this.right) || (this.initialX = this.right);
			isNaN(this.latitude) || (this.initialY = this.latitude);
			isNaN(this.top) || (this.initialY = this.top);
			isNaN(this.bottom) || (this.initialY = this.bottom);
			this.animatingAlong = !1;
			this.animate()
		},
		animateAlong: function(a, b, c) {
			1 == this.positionOnLine && this.flipDirection && (this.direction = -1, this.extraAngle = 180);
			isNaN(b) || (this.animationDuration = b);
			c && (this.easingFunction = c);
			a && (this.line = this.chart.getObjectById(a));
			this.animateAlongLine = this.line;
			this.animatingAlong = !0;
			this.animate()
		},
		animate: function() {
			var a = this.chart.imagesSettings,
				b = this.animationDuration;
			isNaN(b) && (b = a.animationDuration);
			this.totalFrames = b * d.updateRate;
			b = 1;
			this.line && a.adjustAnimationSpeed && (this.line.distances && (b = this.line.distances[this.lineSegment] * this.chart.zoomLevel(), b = Math.abs(b / a.baseAnimationDistance)), this.totalFrames = Math.round(b * this.totalFrames));
			this.frame = 0;
			this.fire({
				type: "animationStart",
				chart: this.chart,
				image: this,
				lineSegment: this.lineSegment,
				direction: this.direction
			})
		},
		update: function() {
			var a = this.totalFrames;
			this.frame++;
			this.delayCounter--;
			0 === this.delayCounter && this.animateAlong();
			if (!(0 < this.delayCounter))
				if (this.frame <= a) {
					this.updatePosition();
					var b = this.chart.imagesSettings,
						c = this.easingFunction;
					c || (c = b.easingFunction);
					a = c(0, this.frame, 0, 1, a); - 1 == this.direction && (a = 1 - a);
					this.animatingAlong ? this.positionOnLine = a : (b = this.initialX + (this.finalX - this.initialX) * a, isNaN(this.longitude) || (this.longitude = b), isNaN(this.left) || (this.left = b), isNaN(this.right) || (this.right = b), a = this.initialY + (this.finalY - this.initialY) * a, isNaN(this.latitude) || (this.latitude = a), isNaN(this.top) || (this.top = a), isNaN(this.bottom) || (this.bottom = a))
				} else this.frame == a + 1 && (this.fire({
					type: "animationEnd",
					chart: this.chart,
					image: this,
					lineSegment: this.lineSegment,
					direction: this.direction
				}), this.line && this.animatingAlong && (1 == this.direction ? this.lineSegment < this.line.segments - 2 ? (this.lineSegment++, this.delayAnimateAlong(), this.positionOnLine = 0) : this.flipDirection ? (this.direction = -1, this.extraAngle = 180, this.delayAnimateAlong()) : this.loop && (this.delayAnimateAlong(), this.lineSegment = 0) : 0 < this.lineSegment ? (this.lineSegment--, this.delayAnimateAlong(), this.positionOnLine = 0) : this.loop && this.flipDirection ? (this.direction = 1, this.extraAngle = 0, this.delayAnimateAlong()) : this.loop && this.delayAnimateAlong()))
		},
		delayAnimateAlong: function() {
			this.animateAlongLine && (this.delayCounter = this.chart.imagesSettings.pauseDuration * d.updateRate)
		},
		fixToStage: function() {
			if (!isNaN(this.longitude)) {
				var a = this.chart.coordinatesToStageXY(this.longitude, this.latitude);
				this.left = a.x;
				this.top = a.y;
				this.latitude = this.longitude = void 0
			}
			this.validate()
		},
		fixToMap: function() {
			if (!isNaN(this.left)) {
				var a = this.chart.stageXYToCoordinates(this.left, this.top);
				this.longitude = a.longitude;
				this.latitude = a.latitude;
				this.top = this.left = void 0
			}
			this.validate()
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.degreesToRadians = function(a) {
		return a / 180 * Math.PI
	};
	d.radiansToDegrees = function(a) {
		return a / Math.PI * 180
	};
	d.getColorFade = function(a, b, c) {
		var e = d.hex2RGB(b);
		b = e[0];
		var f = e[1],
			e = e[2],
			g = d.hex2RGB(a);
		a = g[0];
		var h = g[1],
			g = g[2];
		a += Math.round((b - a) * c);
		h += Math.round((f - h) * c);
		g += Math.round((e - g) * c);
		return "rgb(" + a + "," + h + "," + g + ")"
	};
	d.hex2RGB = function(a) {
		return [parseInt(a.substring(1, 3), 16), parseInt(a.substring(3, 5), 16), parseInt(a.substring(5, 7), 16)]
	};
	d.processDescriptionWindow = function(a, b) {
		isNaN(b.descriptionWindowX) && (b.descriptionWindowX = a.descriptionWindowX);
		isNaN(b.descriptionWindowY) && (b.descriptionWindowY = a.descriptionWindowY);
		isNaN(b.descriptionWindowLeft) && (b.descriptionWindowLeft = a.descriptionWindowLeft);
		isNaN(b.descriptionWindowRight) && (b.descriptionWindowRight = a.descriptionWindowRight);
		isNaN(b.descriptionWindowTop) && (b.descriptionWindowTop = a.descriptionWindowTop);
		isNaN(b.descriptionWindowBottom) && (b.descriptionWindowBottom = a.descriptionWindowBottom);
		isNaN(b.descriptionWindowWidth) && (b.descriptionWindowWidth = a.descriptionWindowWidth);
		isNaN(b.descriptionWindowHeight) && (b.descriptionWindowHeight = a.descriptionWindowHeight)
	};
	d.normalizePath = function(a) {
		for (var b = "", c = d.parsePath(a.getAttribute("d")), e, f, g = Infinity, h = -Infinity, k = Infinity, l = -Infinity, m = 0; m < c.length; m++) {
			var n = c[m],
				p = n.letter,
				r = n.x,
				n = n.y;
			"h" == p && (p = "L", r += e, n = f);
			"H" == p && (p = "L", n = f);
			"v" == p && (p = "L", r = e, n += f);
			"V" == p && (p = "L", r = e);
			if ("m" === p || "l" === p) p = p.toUpperCase(), r += e, n += f;
			r = d.roundTo(r, 3);
			n = d.roundTo(n, 3);
			e = r;
			f = n;
			r > h && (h = r);
			r < g && (g = r);
			n > l && (l = n);
			n < k && (k = n);
			b = "z" == p.toLowerCase() ? b + "Z " : b + (p + " " + r + " " + n + " ")
		}
		a.setAttribute("d", b);
		return {
			minX: g,
			maxX: h,
			minY: k,
			maxY: l
		}
	};
	d.mercatorLatitudeToRadians = function(a) {
		return Math.log(Math.tan(Math.PI / 4 + d.degreesToRadians(a) / 2))
	};
	d.parsePath = function(a) {
		a = a.match(/([MmLlHhVvZz]{1}[0-9.,\-\s]*)/g);
		for (var b = [], c = 0; c < a.length; c++) {
			var d = a[c].match(/([MmLlHhVvZz]{1})|([0-9.\-]+)/g),
				f = {
					letter: d[0]
				};
			switch (d[0]) {
				case "Z":
				case "Z":
				case "z":
					break;
				case "V":
				case "v":
					f.y = Number(d[1]);
					break;
				case "H":
				case "h":
					f.x = Number(d[1]);
					break;
				default:
					f.x = Number(d[1]), f.y = Number(d[2])
			}
			b.push(f)
		}
		return b
	};
	d.acos = function(a) {
		return 1 < a ? 0 : -1 > a ? Math.PI : Math.acos(a)
	};
	d.asin = function(a) {
		return 1 < a ? Math.PI / 2 : -1 > a ? -Math.PI / 2 : Math.asin(a)
	};
	d.sinci = function(a) {
		return a ? a / Math.sin(a) : 1
	};
	d.asqrt = function(a) {
		return 0 < a ? Math.sqrt(a) : 0
	};
	d.winkel3 = function(a, b) {
		var c = d.aitoff(a, b);
		return [(c[0] + a / Math.PI * 2) / 2, (c[1] + b) / 2]
	};
	d.winkel3.invert = function(a, b) {
		var c = a,
			e = b,
			f = 25,
			g = Math.PI / 2;
		do var h = Math.cos(e),
			k = Math.sin(e),
			l = Math.sin(2 * e),
			m = k * k,
			n = h * h,
			p = Math.sin(c),
			r = Math.cos(c / 2),
			t = Math.sin(c / 2),
			q = t * t,
			y = 1 - n * r * r,
			B = y ? d.acos(h * r) * Math.sqrt(u = 1 / y) : u = 0,
			u, y = .5 * (2 * B * h * t + c / g) - a,
			w = .5 * (B * k + e) - b,
			v = .5 * u * (n * q + B * h * r * m) + .5 / g,
			A = u * (p * l / 4 - B * k * t),
			k = .125 * u * (l * t - B * k * n * p),
			m = .5 * u * (m * r + B * q * h) + .5,
			h = A * k - m * v,
			A = (w * A - y * m) / h,
			y = (y * k - w * v) / h,
			c = c - A,
			e = e - y; while ((1E-6 < Math.abs(A) || 1E-6 < Math.abs(y)) && 0 < --f);
		return [c, e]
	};
	d.aitoff = function(a, b) {
		var c = Math.cos(b),
			e = d.sinci(d.acos(c * Math.cos(a /= 2)));
		return [2 * c * Math.sin(a) * e, Math.sin(b) * e]
	};
	d.orthographic =
		function(a, b) {
			return [Math.cos(b) * Math.sin(a), Math.sin(b)]
		};
	d.equirectangular = function(a, b) {
		return [a, b]
	};
	d.equirectangular.invert = function(a, b) {
		return [a, b]
	};
	d.eckert5 = function(a, b) {
		var c = Math.PI;
		return [a * (1 + Math.cos(b)) / Math.sqrt(2 + c), 2 * b / Math.sqrt(2 + c)]
	};
	d.eckert5.invert = function(a, b) {
		var c = Math.sqrt(2 + Math.PI),
			d = b * c / 2;
		return [c * a / (1 + Math.cos(d)), d]
	};
	d.eckert6 = function(a, b) {
		for (var c = Math.PI, d = (1 + c / 2) * Math.sin(b), f = 0, g = Infinity; 10 > f && 1E-5 < Math.abs(g); f++) b -= g = (b + Math.sin(b) - d) / (1 + Math.cos(b));
		d = Math.sqrt(2 +
			c);
		return [a * (1 + Math.cos(b)) / d, 2 * b / d]
	};
	d.eckert6.invert = function(a, b) {
		var c = 1 + Math.PI / 2,
			e = Math.sqrt(c / 2);
		return [2 * a * e / (1 + Math.cos(b *= e)), d.asin((b + Math.sin(b)) / c)]
	};
	d.mercator = function(a, b) {
		b >= Math.PI / 2 - .02 && (b = Math.PI / 2 - .02);
		b <= -Math.PI / 2 + .02 && (b = -Math.PI / 2 + .02);
		return [a, Math.log(Math.tan(Math.PI / 4 + b / 2))]
	};
	d.mercator.invert = function(a, b) {
		return [a, 2 * Math.atan(Math.exp(b)) - Math.PI / 2]
	};
	d.miller = function(a, b) {
		return [a, 1.25 * Math.log(Math.tan(Math.PI / 4 + .4 * b))]
	};
	d.miller.invert = function(a, b) {
		return [a, 2.5 *
			Math.atan(Math.exp(.8 * b)) - .625 * Math.PI
		]
	};
	d.eckert3 = function(a, b) {
		var c = Math.PI,
			d = Math.sqrt(c * (4 + c));
		return [2 / d * a * (1 + Math.sqrt(1 - 4 * b * b / (c * c))), 4 / d * b]
	};
	d.eckert3.invert = function(a, b) {
		var c = Math.PI,
			e = Math.sqrt(c * (4 + c)) / 2;
		return [a * e / (1 + d.asqrt(1 - b * b * (4 + c) / (4 * c))), b * e / 2]
	}
})();
(function() {
	var d = window.AmCharts;
	d.MapData = d.Class({
		inherits: d.MapObject,
		construct: function() {
			this.cname = "MapData";
			d.MapData.base.construct.call(this);
			this.projection = "mercator";
			this.topLatitude = 90;
			this.bottomLatitude = -90;
			this.leftLongitude = -180;
			this.rightLongitude = 180;
			this.zoomLevel = 1;
			this.getAreasFromMap = !1
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.DescriptionWindow = d.Class({
		construct: function() {},
		show: function(a, b, c, d) {
			var f = this;
			f.chart = a;
			var g = document.createElement("div");
			g.style.position = "absolute";
			var h = a.classNamePrefix + "-description-";
			g.className = "ammapDescriptionWindow " + h + "div";
			f.div = g;
			b.appendChild(g);
			var k = ".gif";
			a.svgIcons && (k = ".svg");
			var l = document.createElement("img");
			l.className = "ammapDescriptionWindowCloseButton " + h + "close-img";
			l.src = a.pathToImages + "xIcon" + k;
			l.style.cssFloat = "right";
			l.style.cursor =
				"pointer";
			l.onclick = function() {
				f.close()
			};
			l.onmouseover = function() {
				l.src = a.pathToImages + "xIconH" + k
			};
			l.onmouseout = function() {
				l.src = a.pathToImages + "xIcon" + k
			};
			g.appendChild(l);
			b = document.createElement("div");
			b.className = "ammapDescriptionTitle " + h + "title-div";
			b.onmousedown = function() {
				f.div.style.zIndex = 1E3
			};
			g.appendChild(b);
			b.innerHTML = d;
			d = b.offsetHeight;
			b = document.createElement("div");
			b.className = "ammapDescriptionText " + h + "text-div";
			b.style.maxHeight = f.maxHeight - d - 20 + "px";
			g.appendChild(b);
			b.innerHTML = c
		},
		close: function() {
			try {
				this.div.parentNode.removeChild(this.div), this.chart.fireClosed()
			} catch (a) {}
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.ValueLegend = d.Class({
		construct: function(a) {
			this.cname = "ValueLegend";
			this.enabled = !0;
			this.showAsGradient = !1;
			this.minValue = 0;
			this.height = 12;
			this.width = 200;
			this.bottom = this.left = 10;
			this.borderColor = "#FFFFFF";
			this.borderAlpha = this.borderThickness = 1;
			this.color = "#000000";
			this.fontSize = 11;
			d.applyTheme(this, a, this.cname)
		},
		init: function(a, b) {
			if (this.enabled) {
				var c = a.areasSettings.color,
					e = a.areasSettings.colorSolid,
					f = a.colorSteps;
				d.remove(this.set);
				var g = b.set();
				this.set = g;
				d.setCN(a, g, "value-legend");
				var h = 0,
					k = this.minValue,
					l = this.fontSize,
					m = a.fontFamily,
					n = this.color,
					p = {
						precision: a.precision,
						decimalSeparator: a.decimalSeparator,
						thousandsSeparator: a.thousandsSeparator
					};
				void 0 == k && (k = d.formatNumber(a.minValueReal, p));
				void 0 !== k && (h = d.text(b, k, n, m, l, "left"), h.translate(0, l / 2 - 1), d.setCN(a, h, "value-legend-min-label"), g.push(h), h = h.getBBox().height);
				k = this.maxValue;
				void 0 === k && (k = d.formatNumber(a.maxValueReal, p));
				void 0 !== k && (h = d.text(b, k, n, m, l, "right"), h.translate(this.width, l / 2 - 1), d.setCN(a, h, "value-legend-max-label"), g.push(h), h = h.getBBox().height);
				if (this.showAsGradient) c = d.rect(b, this.width, this.height, [c, e], 1, this.borderThickness, this.borderColor, 1, 0, 0), d.setCN(a, c, "value-legend-gradient"), c.translate(0, h), g.push(c);
				else
					for (l = this.width / f, m = 0; m < f; m++) n = d.getColorFade(c, e, 1 * m / (f - 1)), n = d.rect(b, l, this.height, n, 1, this.borderThickness, this.borderColor, 1), d.setCN(a, n, "value-legend-color"), d.setCN(a, n, "value-legend-color-" + m), n.translate(l * m, h), g.push(n);
				e = c = 0;
				f = g.getBBox();
				h = a.getY(this.bottom, !0);
				l = a.getY(this.top);
				m = a.getX(this.right, !0);
				n = a.getX(this.left);
				isNaN(l) || (c = l);
				isNaN(h) || (c = h - f.height);
				isNaN(n) || (e = n);
				isNaN(m) || (e = m - f.width);
				g.translate(e, c)
			} else d.remove(this.set)
		}
	})
})();
(function() {
	var d = window.AmCharts;
	d.ObjectList = d.Class({
		construct: function(a) {
			this.divId = a
		},
		init: function(a) {
			this.chart = a;
			var b = this.divId;
			this.container && (b = this.container);
			this.div = "object" != typeof b ? document.getElementById(b) : b;
			b = document.createElement("div");
			b.className = "ammapObjectList " + a.classNamePrefix + "-object-list-div";
			this.div.appendChild(b);
			this.addObjects(a.dataProvider, b)
		},
		addObjects: function(a, b) {
			var c = this.chart,
				d = document.createElement("ul");
			d.className = c.classNamePrefix + "-object-list-ul";
			var f;
			if (a.areas)
				for (f = 0; f < a.areas.length; f++) {
					var g = a.areas[f];
					void 0 === g.showInList && (g.showInList = c.showAreasInList);
					this.addObject(g, d)
				}
			if (a.images)
				for (f = 0; f < a.images.length; f++) g = a.images[f], void 0 === g.showInList && (g.showInList = c.showImagesInList), this.addObject(g, d);
			if (a.lines)
				for (f = 0; f < a.lines.length; f++) g = a.lines[f], void 0 === g.showInList && (g.showInList = c.showLinesInList), this.addObject(g, d);
			0 < d.childNodes.length && b.appendChild(d)
		},
		addObject: function(a, b) {
			var c = this;
			if (a.showInList && void 0 !== a.title) {
				var d = c.chart,
					f = document.createElement("li");
				f.className = d.classNamePrefix + "-object-list-li";
				var g = a.titleTr;
				g || (g = a.title);
				var g = document.createTextNode(g),
					h = document.createElement("a");
				h.className = d.classNamePrefix + "-object-list-a";
				h.appendChild(g);
				f.appendChild(h);
				b.appendChild(f);
				this.addObjects(a, f);
				h.onmouseover = function() {
					c.chart.rollOverMapObject(a, !1)
				};
				h.onmouseout = function() {
					c.chart.rollOutMapObject(a)
				};
				h.onclick = function() {
					c.chart.clickMapObject(a)
				}
			}
		}
	})
})();
