Sunda Cyber Army


* Sunda Cyber Army 2k17 *
Indonesia Defacer ~


Path : /home/dent/public_html/accounts/configurator/
File Upload :
Current File : /home/dent/public_html/accounts/configurator/config.js

! function(a, b) {
	"object" == typeof module && "object" == typeof module.exports ? module.exports = a.document ? b(a, !0) : function(a) {
		if (!a.document) throw new Error("jQuery requires a window with a document");
		return b(a)
	} : b(a)
}("undefined" != typeof window ? window : this, function(a, b) {
	var c = [],
		d = c.slice,
		e = c.concat,
		f = c.push,
		g = c.indexOf,
		h = {},
		i = h.toString,
		j = h.hasOwnProperty,
		k = "".trim,
		l = {},
		m = "1.11.0",
		n = function(a, b) {
			return new n.fn.init(a, b)
		},
		o = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
		p = /^-ms-/,
		q = /-([\da-z])/gi,
		r = function(a, b) {
			return b.toUpperCase()
		};
	n.fn = n.prototype = {
		jquery: m,
		constructor: n,
		selector: "",
		length: 0,
		toArray: function() {
			return d.call(this)
		},
		get: function(a) {
			return null != a ? 0 > a ? this[a + this.length] : this[a] : d.call(this)
		},
		pushStack: function(a) {
			var b = n.merge(this.constructor(), a);
			return b.prevObject = this, b.context = this.context, b
		},
		each: function(a, b) {
			return n.each(this, a, b)
		},
		map: function(a) {
			return this.pushStack(n.map(this, function(b, c) {
				return a.call(b, c, b)
			}))
		},
		slice: function() {
			return this.pushStack(d.apply(this, arguments))
		},
		first: function() {
			return this.eq(0)
		},
		last: function() {
			return this.eq(-1)
		},
		eq: function(a) {
			var b = this.length,
				c = +a + (0 > a ? b : 0);
			return this.pushStack(c >= 0 && b > c ? [this[c]] : [])
		},
		end: function() {
			return this.prevObject || this.constructor(null)
		},
		push: f,
		sort: c.sort,
		splice: c.splice
	}, n.extend = n.fn.extend = function() {
		var a, b, c, d, e, f, g = arguments[0] || {},
			h = 1,
			i = arguments.length,
			j = !1;
		for ("boolean" == typeof g && (j = g, g = arguments[h] || {}, h++), "object" == typeof g || n.isFunction(g) || (g = {}), h === i && (g = this, h--); i > h; h++)
			if (null != (e = arguments[h]))
				for (d in e) a = g[d], c = e[d], g !== c && (j && c && (n.isPlainObject(c) || (b = n.isArray(c))) ? (b ? (b = !1, f = a && n.isArray(a) ? a : []) : f = a && n.isPlainObject(a) ? a : {}, g[d] = n.extend(j, f, c)) : void 0 !== c && (g[d] = c));
		return g
	}, n.extend({
		expando: "jQuery" + (m + Math.random()).replace(/\D/g, ""),
		isReady: !0,
		error: function(a) {
			throw new Error(a)
		},
		noop: function() {},
		isFunction: function(a) {
			return "function" === n.type(a)
		},
		isArray: Array.isArray || function(a) {
			return "array" === n.type(a)
		},
		isWindow: function(a) {
			return null != a && a == a.window
		},
		isNumeric: function(a) {
			return a - parseFloat(a) >= 0
		},
		isEmptyObject: function(a) {
			var b;
			for (b in a) return !1;
			return !0
		},
		isPlainObject: function(a) {
			var b;
			if (!a || "object" !== n.type(a) || a.nodeType || n.isWindow(a)) return !1;
			try {
				if (a.constructor && !j.call(a, "constructor") && !j.call(a.constructor.prototype, "isPrototypeOf")) return !1
			} catch (c) {
				return !1
			}
			if (l.ownLast)
				for (b in a) return j.call(a, b);
			for (b in a);
			return void 0 === b || j.call(a, b)
		},
		type: function(a) {
			return null == a ? a + "" : "object" == typeof a || "function" == typeof a ? h[i.call(a)] || "object" : typeof a
		},
		globalEval: function(b) {
			b && n.trim(b) && (a.execScript || function(b) {
				a.eval.call(a, b)
			})(b)
		},
		camelCase: function(a) {
			return a.replace(p, "ms-").replace(q, r)
		},
		nodeName: function(a, b) {
			return a.nodeName && a.nodeName.toLowerCase() === b.toLowerCase()
		},
		each: function(a, b, c) {
			var d, e = 0,
				f = a.length,
				g = s(a);
			if (c) {
				if (g) {
					for (; f > e; e++)
						if (d = b.apply(a[e], c), d === !1) break
				} else
					for (e in a)
						if (d = b.apply(a[e], c), d === !1) break
			} else if (g) {
				for (; f > e; e++)
					if (d = b.call(a[e], e, a[e]), d === !1) break
			} else
				for (e in a)
					if (d = b.call(a[e], e, a[e]), d === !1) break;
			return a
		},
		trim: k && !k.call(" ") ? function(a) {
			return null == a ? "" : k.call(a)
		} : function(a) {
			return null == a ? "" : (a + "").replace(o, "")
		},
		makeArray: function(a, b) {
			var c = b || [];
			return null != a && (s(Object(a)) ? n.merge(c, "string" == typeof a ? [a] : a) : f.call(c, a)), c
		},
		inArray: function(a, b, c) {
			var d;
			if (b) {
				if (g) return g.call(b, a, c);
				for (d = b.length, c = c ? 0 > c ? Math.max(0, d + c) : c : 0; d > c; c++)
					if (c in b && b[c] === a) return c
			}
			return -1
		},
		merge: function(a, b) {
			var c = +b.length,
				d = 0,
				e = a.length;
			while (c > d) a[e++] = b[d++];
			if (c !== c)
				while (void 0 !== b[d]) a[e++] = b[d++];
			return a.length = e, a
		},
		grep: function(a, b, c) {
			for (var d, e = [], f = 0, g = a.length, h = !c; g > f; f++) d = !b(a[f], f), d !== h && e.push(a[f]);
			return e
		},
		map: function(a, b, c) {
			var d, f = 0,
				g = a.length,
				h = s(a),
				i = [];
			if (h)
				for (; g > f; f++) d = b(a[f], f, c), null != d && i.push(d);
			else
				for (f in a) d = b(a[f], f, c), null != d && i.push(d);
			return e.apply([], i)
		},
		guid: 1,
		proxy: function(a, b) {
			var c, e, f;
			return "string" == typeof b && (f = a[b], b = a, a = f), n.isFunction(a) ? (c = d.call(arguments, 2), e = function() {
				return a.apply(b || this, c.concat(d.call(arguments)))
			}, e.guid = a.guid = a.guid || n.guid++, e) : void 0
		},
		now: function() {
			return +new Date
		},
		support: l
	}), n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(a, b) {
		h["[object " + b + "]"] = b.toLowerCase()
	});

	function s(a) {
		var b = a.length,
			c = n.type(a);
		return "function" === c || n.isWindow(a) ? !1 : 1 === a.nodeType && b ? !0 : "array" === c || 0 === b || "number" == typeof b && b > 0 && b - 1 in a
	}
	var t = function(a) {
		var b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s = "sizzle" + -new Date,
			t = a.document,
			u = 0,
			v = 0,
			w = eb(),
			x = eb(),
			y = eb(),
			z = function(a, b) {
				return a === b && (j = !0), 0
			},
			A = "undefined",
			B = 1 << 31,
			C = {}.hasOwnProperty,
			D = [],
			E = D.pop,
			F = D.push,
			G = D.push,
			H = D.slice,
			I = D.indexOf || function(a) {
				for (var b = 0, c = this.length; c > b; b++)
					if (this[b] === a) return b;
				return -1
			},
			J = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
			K = "[\\x20\\t\\r\\n\\f]",
			L = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
			M = L.replace("w", "w#"),
			N = "\\[" + K + "*(" + L + ")" + K + "*(?:([*^$|!~]?=)" + K + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + M + ")|)|)" + K + "*\\]",
			O = ":(" + L + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + N.replace(3, 8) + ")*)|.*)\\)|)",
			P = new RegExp("^" + K + "+|((?:^|[^\\\\])(?:\\\\.)*)" + K + "+$", "g"),
			Q = new RegExp("^" + K + "*," + K + "*"),
			R = new RegExp("^" + K + "*([>+~]|" + K + ")" + K + "*"),
			S = new RegExp("=" + K + "*([^\\]'\"]*?)" + K + "*\\]", "g"),
			T = new RegExp(O),
			U = new RegExp("^" + M + "$"),
			V = {
				ID: new RegExp("^#(" + L + ")"),
				CLASS: new RegExp("^\\.(" + L + ")"),
				TAG: new RegExp("^(" + L.replace("w", "w*") + ")"),
				ATTR: new RegExp("^" + N),
				PSEUDO: new RegExp("^" + O),
				CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + K + "*(even|odd|(([+-]|)(\\d*)n|)" + K + "*(?:([+-]|)" + K + "*(\\d+)|))" + K + "*\\)|)", "i"),
				bool: new RegExp("^(?:" + J + ")$", "i"),
				needsContext: new RegExp("^" + K + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + K + "*((?:-\\d)?\\d*)" + K + "*\\)|)(?=[^-]|$)", "i")
			},
			W = /^(?:input|select|textarea|button)$/i,
			X = /^h\d$/i,
			Y = /^[^{]+\{\s*\[native \w/,
			Z = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
			$ = /[+~]/,
			_ = /'|\\/g,
			ab = new RegExp("\\\\([\\da-f]{1,6}" + K + "?|(" + K + ")|.)", "ig"),
			bb = function(a, b, c) {
				var d = "0x" + b - 65536;
				return d !== d || c ? b : 0 > d ? String.fromCharCode(d + 65536) : String.fromCharCode(d >> 10 | 55296, 1023 & d | 56320)
			};
		try {
			G.apply(D = H.call(t.childNodes), t.childNodes), D[t.childNodes.length].nodeType
		} catch (cb) {
			G = {
				apply: D.length ? function(a, b) {
					F.apply(a, H.call(b))
				} : function(a, b) {
					var c = a.length,
						d = 0;
					while (a[c++] = b[d++]);
					a.length = c - 1
				}
			}
		}

		function db(a, b, d, e) {
			var f, g, h, i, j, m, p, q, u, v;
			if ((b ? b.ownerDocument || b : t) !== l && k(b), b = b || l, d = d || [], !a || "string" != typeof a) return d;
			if (1 !== (i = b.nodeType) && 9 !== i) return [];
			if (n && !e) {
				if (f = Z.exec(a))
					if (h = f[1]) {
						if (9 === i) {
							if (g = b.getElementById(h), !g || !g.parentNode) return d;
							if (g.id === h) return d.push(g), d
						} else if (b.ownerDocument && (g = b.ownerDocument.getElementById(h)) && r(b, g) && g.id === h) return d.push(g), d
					} else {
						if (f[2]) return G.apply(d, b.getElementsByTagName(a)), d;
						if ((h = f[3]) && c.getElementsByClassName && b.getElementsByClassName) return G.apply(d, b.getElementsByClassName(h)), d
					} if (c.qsa && (!o || !o.test(a))) {
					if (q = p = s, u = b, v = 9 === i && a, 1 === i && "object" !== b.nodeName.toLowerCase()) {
						m = ob(a), (p = b.getAttribute("id")) ? q = p.replace(_, "\\$&") : b.setAttribute("id", q), q = "[id='" + q + "'] ", j = m.length;
						while (j--) m[j] = q + pb(m[j]);
						u = $.test(a) && mb(b.parentNode) || b, v = m.join(",")
					}
					if (v) try {
						return G.apply(d, u.querySelectorAll(v)), d
					} catch (w) {} finally {
						p || b.removeAttribute("id")
					}
				}
			}
			return xb(a.replace(P, "$1"), b, d, e)
		}

		function eb() {
			var a = [];

			function b(c, e) {
				return a.push(c + " ") > d.cacheLength && delete b[a.shift()], b[c + " "] = e
			}
			return b
		}

		function fb(a) {
			return a[s] = !0, a
		}

		function gb(a) {
			var b = l.createElement("div");
			try {
				return !!a(b)
			} catch (c) {
				return !1
			} finally {
				b.parentNode && b.parentNode.removeChild(b), b = null
			}
		}

		function hb(a, b) {
			var c = a.split("|"),
				e = a.length;
			while (e--) d.attrHandle[c[e]] = b
		}

		function ib(a, b) {
			var c = b && a,
				d = c && 1 === a.nodeType && 1 === b.nodeType && (~b.sourceIndex || B) - (~a.sourceIndex || B);
			if (d) return d;
			if (c)
				while (c = c.nextSibling)
					if (c === b) return -1;
			return a ? 1 : -1
		}

		function jb(a) {
			return function(b) {
				var c = b.nodeName.toLowerCase();
				return "input" === c && b.type === a
			}
		}

		function kb(a) {
			return function(b) {
				var c = b.nodeName.toLowerCase();
				return ("input" === c || "button" === c) && b.type === a
			}
		}

		function lb(a) {
			return fb(function(b) {
				return b = +b, fb(function(c, d) {
					var e, f = a([], c.length, b),
						g = f.length;
					while (g--) c[e = f[g]] && (c[e] = !(d[e] = c[e]))
				})
			})
		}

		function mb(a) {
			return a && typeof a.getElementsByTagName !== A && a
		}
		c = db.support = {}, f = db.isXML = function(a) {
			var b = a && (a.ownerDocument || a).documentElement;
			return b ? "HTML" !== b.nodeName : !1
		}, k = db.setDocument = function(a) {
			var b, e = a ? a.ownerDocument || a : t,
				g = e.defaultView;
			return e !== l && 9 === e.nodeType && e.documentElement ? (l = e, m = e.documentElement, n = !f(e), g && g !== g.top && (g.addEventListener ? g.addEventListener("unload", function() {
				k()
			}, !1) : g.attachEvent && g.attachEvent("onunload", function() {
				k()
			})), c.attributes = gb(function(a) {
				return a.className = "i", !a.getAttribute("className")
			}), c.getElementsByTagName = gb(function(a) {
				return a.appendChild(e.createComment("")), !a.getElementsByTagName("*").length
			}), c.getElementsByClassName = Y.test(e.getElementsByClassName) && gb(function(a) {
				return a.innerHTML = "<div class='a'></div><div class='a i'></div>", a.firstChild.className = "i", 2 === a.getElementsByClassName("i").length
			}), c.getById = gb(function(a) {
				return m.appendChild(a).id = s, !e.getElementsByName || !e.getElementsByName(s).length
			}), c.getById ? (d.find.ID = function(a, b) {
				if (typeof b.getElementById !== A && n) {
					var c = b.getElementById(a);
					return c && c.parentNode ? [c] : []
				}
			}, d.filter.ID = function(a) {
				var b = a.replace(ab, bb);
				return function(a) {
					return a.getAttribute("id") === b
				}
			}) : (delete d.find.ID, d.filter.ID = function(a) {
				var b = a.replace(ab, bb);
				return function(a) {
					var c = typeof a.getAttributeNode !== A && a.getAttributeNode("id");
					return c && c.value === b
				}
			}), d.find.TAG = c.getElementsByTagName ? function(a, b) {
				return typeof b.getElementsByTagName !== A ? b.getElementsByTagName(a) : void 0
			} : function(a, b) {
				var c, d = [],
					e = 0,
					f = b.getElementsByTagName(a);
				if ("*" === a) {
					while (c = f[e++]) 1 === c.nodeType && d.push(c);
					return d
				}
				return f
			}, d.find.CLASS = c.getElementsByClassName && function(a, b) {
				return typeof b.getElementsByClassName !== A && n ? b.getElementsByClassName(a) : void 0
			}, p = [], o = [], (c.qsa = Y.test(e.querySelectorAll)) && (gb(function(a) {
				a.innerHTML = "<select t=''><option selected=''></option></select>", a.querySelectorAll("[t^='']").length && o.push("[*^$]=" + K + "*(?:''|\"\")"), a.querySelectorAll("[selected]").length || o.push("\\[" + K + "*(?:value|" + J + ")"), a.querySelectorAll(":checked").length || o.push(":checked")
			}), gb(function(a) {
				var b = e.createElement("input");
				b.setAttribute("type", "hidden"), a.appendChild(b).setAttribute("name", "D"), a.querySelectorAll("[name=d]").length && o.push("name" + K + "*[*^$|!~]?="), a.querySelectorAll(":enabled").length || o.push(":enabled", ":disabled"), a.querySelectorAll("*,:x"), o.push(",.*:")
			})), (c.matchesSelector = Y.test(q = m.webkitMatchesSelector || m.mozMatchesSelector || m.oMatchesSelector || m.msMatchesSelector)) && gb(function(a) {
				c.disconnectedMatch = q.call(a, "div"), q.call(a, "[s!='']:x"), p.push("!=", O)
			}), o = o.length && new RegExp(o.join("|")), p = p.length && new RegExp(p.join("|")), b = Y.test(m.compareDocumentPosition), r = b || Y.test(m.contains) ? function(a, b) {
				var c = 9 === a.nodeType ? a.documentElement : a,
					d = b && b.parentNode;
				return a === d || !(!d || 1 !== d.nodeType || !(c.contains ? c.contains(d) : a.compareDocumentPosition && 16 & a.compareDocumentPosition(d)))
			} : function(a, b) {
				if (b)
					while (b = b.parentNode)
						if (b === a) return !0;
				return !1
			}, z = b ? function(a, b) {
				if (a === b) return j = !0, 0;
				var d = !a.compareDocumentPosition - !b.compareDocumentPosition;
				return d ? d : (d = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1, 1 & d || !c.sortDetached && b.compareDocumentPosition(a) === d ? a === e || a.ownerDocument === t && r(t, a) ? -1 : b === e || b.ownerDocument === t && r(t, b) ? 1 : i ? I.call(i, a) - I.call(i, b) : 0 : 4 & d ? -1 : 1)
			} : function(a, b) {
				if (a === b) return j = !0, 0;
				var c, d = 0,
					f = a.parentNode,
					g = b.parentNode,
					h = [a],
					k = [b];
				if (!f || !g) return a === e ? -1 : b === e ? 1 : f ? -1 : g ? 1 : i ? I.call(i, a) - I.call(i, b) : 0;
				if (f === g) return ib(a, b);
				c = a;
				while (c = c.parentNode) h.unshift(c);
				c = b;
				while (c = c.parentNode) k.unshift(c);
				while (h[d] === k[d]) d++;
				return d ? ib(h[d], k[d]) : h[d] === t ? -1 : k[d] === t ? 1 : 0
			}, e) : l
		}, db.matches = function(a, b) {
			return db(a, null, null, b)
		}, db.matchesSelector = function(a, b) {
			if ((a.ownerDocument || a) !== l && k(a), b = b.replace(S, "='$1']"), !(!c.matchesSelector || !n || p && p.test(b) || o && o.test(b))) try {
				var d = q.call(a, b);
				if (d || c.disconnectedMatch || a.document && 11 !== a.document.nodeType) return d
			} catch (e) {}
			return db(b, l, null, [a]).length > 0
		}, db.contains = function(a, b) {
			return (a.ownerDocument || a) !== l && k(a), r(a, b)
		}, db.attr = function(a, b) {
			(a.ownerDocument || a) !== l && k(a);
			var e = d.attrHandle[b.toLowerCase()],
				f = e && C.call(d.attrHandle, b.toLowerCase()) ? e(a, b, !n) : void 0;
			return void 0 !== f ? f : c.attributes || !n ? a.getAttribute(b) : (f = a.getAttributeNode(b)) && f.specified ? f.value : null
		}, db.error = function(a) {
			throw new Error("Syntax error, unrecognized expression: " + a)
		}, db.uniqueSort = function(a) {
			var b, d = [],
				e = 0,
				f = 0;
			if (j = !c.detectDuplicates, i = !c.sortStable && a.slice(0), a.sort(z), j) {
				while (b = a[f++]) b === a[f] && (e = d.push(f));
				while (e--) a.splice(d[e], 1)
			}
			return i = null, a
		}, e = db.getText = function(a) {
			var b, c = "",
				d = 0,
				f = a.nodeType;
			if (f) {
				if (1 === f || 9 === f || 11 === f) {
					if ("string" == typeof a.textContent) return a.textContent;
					for (a = a.firstChild; a; a = a.nextSibling) c += e(a)
				} else if (3 === f || 4 === f) return a.nodeValue
			} else
				while (b = a[d++]) c += e(b);
			return c
		}, d = db.selectors = {
			cacheLength: 50,
			createPseudo: fb,
			match: V,
			attrHandle: {},
			find: {},
			relative: {
				">": {
					dir: "parentNode",
					first: !0
				},
				" ": {
					dir: "parentNode"
				},
				"+": {
					dir: "previousSibling",
					first: !0
				},
				"~": {
					dir: "previousSibling"
				}
			},
			preFilter: {
				ATTR: function(a) {
					return a[1] = a[1].replace(ab, bb), a[3] = (a[4] || a[5] || "").replace(ab, bb), "~=" === a[2] && (a[3] = " " + a[3] + " "), a.slice(0, 4)
				},
				CHILD: function(a) {
					return a[1] = a[1].toLowerCase(), "nth" === a[1].slice(0, 3) ? (a[3] || db.error(a[0]), a[4] = +(a[4] ? a[5] + (a[6] || 1) : 2 * ("even" === a[3] || "odd" === a[3])), a[5] = +(a[7] + a[8] || "odd" === a[3])) : a[3] && db.error(a[0]), a
				},
				PSEUDO: function(a) {
					var b, c = !a[5] && a[2];
					return V.CHILD.test(a[0]) ? null : (a[3] && void 0 !== a[4] ? a[2] = a[4] : c && T.test(c) && (b = ob(c, !0)) && (b = c.indexOf(")", c.length - b) - c.length) && (a[0] = a[0].slice(0, b), a[2] = c.slice(0, b)), a.slice(0, 3))
				}
			},
			filter: {
				TAG: function(a) {
					var b = a.replace(ab, bb).toLowerCase();
					return "*" === a ? function() {
						return !0
					} : function(a) {
						return a.nodeName && a.nodeName.toLowerCase() === b
					}
				},
				CLASS: function(a) {
					var b = w[a + " "];
					return b || (b = new RegExp("(^|" + K + ")" + a + "(" + K + "|$)")) && w(a, function(a) {
						return b.test("string" == typeof a.className && a.className || typeof a.getAttribute !== A && a.getAttribute("class") || "")
					})
				},
				ATTR: function(a, b, c) {
					return function(d) {
						var e = db.attr(d, a);
						return null == e ? "!=" === b : b ? (e += "", "=" === b ? e === c : "!=" === b ? e !== c : "^=" === b ? c && 0 === e.indexOf(c) : "*=" === b ? c && e.indexOf(c) > -1 : "$=" === b ? c && e.slice(-c.length) === c : "~=" === b ? (" " + e + " ").indexOf(c) > -1 : "|=" === b ? e === c || e.slice(0, c.length + 1) === c + "-" : !1) : !0
					}
				},
				CHILD: function(a, b, c, d, e) {
					var f = "nth" !== a.slice(0, 3),
						g = "last" !== a.slice(-4),
						h = "of-type" === b;
					return 1 === d && 0 === e ? function(a) {
						return !!a.parentNode
					} : function(b, c, i) {
						var j, k, l, m, n, o, p = f !== g ? "nextSibling" : "previousSibling",
							q = b.parentNode,
							r = h && b.nodeName.toLowerCase(),
							t = !i && !h;
						if (q) {
							if (f) {
								while (p) {
									l = b;
									while (l = l[p])
										if (h ? l.nodeName.toLowerCase() === r : 1 === l.nodeType) return !1;
									o = p = "only" === a && !o && "nextSibling"
								}
								return !0
							}
							if (o = [g ? q.firstChild : q.lastChild], g && t) {
								k = q[s] || (q[s] = {}), j = k[a] || [], n = j[0] === u && j[1], m = j[0] === u && j[2], l = n && q.childNodes[n];
								while (l = ++n && l && l[p] || (m = n = 0) || o.pop())
									if (1 === l.nodeType && ++m && l === b) {
										k[a] = [u, n, m];
										break
									}
							} else if (t && (j = (b[s] || (b[s] = {}))[a]) && j[0] === u) m = j[1];
							else
								while (l = ++n && l && l[p] || (m = n = 0) || o.pop())
									if ((h ? l.nodeName.toLowerCase() === r : 1 === l.nodeType) && ++m && (t && ((l[s] || (l[s] = {}))[a] = [u, m]), l === b)) break;
							return m -= e, m === d || m % d === 0 && m / d >= 0
						}
					}
				},
				PSEUDO: function(a, b) {
					var c, e = d.pseudos[a] || d.setFilters[a.toLowerCase()] || db.error("unsupported pseudo: " + a);
					return e[s] ? e(b) : e.length > 1 ? (c = [a, a, "", b], d.setFilters.hasOwnProperty(a.toLowerCase()) ? fb(function(a, c) {
						var d, f = e(a, b),
							g = f.length;
						while (g--) d = I.call(a, f[g]), a[d] = !(c[d] = f[g])
					}) : function(a) {
						return e(a, 0, c)
					}) : e
				}
			},
			pseudos: {
				not: fb(function(a) {
					var b = [],
						c = [],
						d = g(a.replace(P, "$1"));
					return d[s] ? fb(function(a, b, c, e) {
						var f, g = d(a, null, e, []),
							h = a.length;
						while (h--)(f = g[h]) && (a[h] = !(b[h] = f))
					}) : function(a, e, f) {
						return b[0] = a, d(b, null, f, c), !c.pop()
					}
				}),
				has: fb(function(a) {
					return function(b) {
						return db(a, b).length > 0
					}
				}),
				contains: fb(function(a) {
					return function(b) {
						return (b.textContent || b.innerText || e(b)).indexOf(a) > -1
					}
				}),
				lang: fb(function(a) {
					return U.test(a || "") || db.error("unsupported lang: " + a), a = a.replace(ab, bb).toLowerCase(),
						function(b) {
							var c;
							do
								if (c = n ? b.lang : b.getAttribute("xml:lang") || b.getAttribute("lang")) return c = c.toLowerCase(), c === a || 0 === c.indexOf(a + "-"); while ((b = b.parentNode) && 1 === b.nodeType);
							return !1
						}
				}),
				target: function(b) {
					var c = a.location && a.location.hash;
					return c && c.slice(1) === b.id
				},
				root: function(a) {
					return a === m
				},
				focus: function(a) {
					return a === l.activeElement && (!l.hasFocus || l.hasFocus()) && !!(a.type || a.href || ~a.tabIndex)
				},
				enabled: function(a) {
					return a.disabled === !1
				},
				disabled: function(a) {
					return a.disabled === !0
				},
				checked: function(a) {
					var b = a.nodeName.toLowerCase();
					return "input" === b && !!a.checked || "option" === b && !!a.selected
				},
				selected: function(a) {
					return a.parentNode && a.parentNode.selectedIndex, a.selected === !0
				},
				empty: function(a) {
					for (a = a.firstChild; a; a = a.nextSibling)
						if (a.nodeType < 6) return !1;
					return !0
				},
				parent: function(a) {
					return !d.pseudos.empty(a)
				},
				header: function(a) {
					return X.test(a.nodeName)
				},
				input: function(a) {
					return W.test(a.nodeName)
				},
				button: function(a) {
					var b = a.nodeName.toLowerCase();
					return "input" === b && "button" === a.type || "button" === b
				},
				text: function(a) {
					var b;
					return "input" === a.nodeName.toLowerCase() && "text" === a.type && (null == (b = a.getAttribute("type")) || "text" === b.toLowerCase())
				},
				first: lb(function() {
					return [0]
				}),
				last: lb(function(a, b) {
					return [b - 1]
				}),
				eq: lb(function(a, b, c) {
					return [0 > c ? c + b : c]
				}),
				even: lb(function(a, b) {
					for (var c = 0; b > c; c += 2) a.push(c);
					return a
				}),
				odd: lb(function(a, b) {
					for (var c = 1; b > c; c += 2) a.push(c);
					return a
				}),
				lt: lb(function(a, b, c) {
					for (var d = 0 > c ? c + b : c; --d >= 0;) a.push(d);
					return a
				}),
				gt: lb(function(a, b, c) {
					for (var d = 0 > c ? c + b : c; ++d < b;) a.push(d);
					return a
				})
			}
		}, d.pseudos.nth = d.pseudos.eq;
		for (b in {
				radio: !0,
				checkbox: !0,
				file: !0,
				password: !0,
				image: !0
			}) d.pseudos[b] = jb(b);
		for (b in {
				submit: !0,
				reset: !0
			}) d.pseudos[b] = kb(b);

		function nb() {}
		nb.prototype = d.filters = d.pseudos, d.setFilters = new nb;

		function ob(a, b) {
			var c, e, f, g, h, i, j, k = x[a + " "];
			if (k) return b ? 0 : k.slice(0);
			h = a, i = [], j = d.preFilter;
			while (h) {
				(!c || (e = Q.exec(h))) && (e && (h = h.slice(e[0].length) || h), i.push(f = [])), c = !1, (e = R.exec(h)) && (c = e.shift(), f.push({
					value: c,
					type: e[0].replace(P, " ")
				}), h = h.slice(c.length));
				for (g in d.filter) !(e = V[g].exec(h)) || j[g] && !(e = j[g](e)) || (c = e.shift(), f.push({
					value: c,
					type: g,
					matches: e
				}), h = h.slice(c.length));
				if (!c) break
			}
			return b ? h.length : h ? db.error(a) : x(a, i).slice(0)
		}

		function pb(a) {
			for (var b = 0, c = a.length, d = ""; c > b; b++) d += a[b].value;
			return d
		}

		function qb(a, b, c) {
			var d = b.dir,
				e = c && "parentNode" === d,
				f = v++;
			return b.first ? function(b, c, f) {
				while (b = b[d])
					if (1 === b.nodeType || e) return a(b, c, f)
			} : function(b, c, g) {
				var h, i, j = [u, f];
				if (g) {
					while (b = b[d])
						if ((1 === b.nodeType || e) && a(b, c, g)) return !0
				} else
					while (b = b[d])
						if (1 === b.nodeType || e) {
							if (i = b[s] || (b[s] = {}), (h = i[d]) && h[0] === u && h[1] === f) return j[2] = h[2];
							if (i[d] = j, j[2] = a(b, c, g)) return !0
						}
			}
		}

		function rb(a) {
			return a.length > 1 ? function(b, c, d) {
				var e = a.length;
				while (e--)
					if (!a[e](b, c, d)) return !1;
				return !0
			} : a[0]
		}

		function sb(a, b, c, d, e) {
			for (var f, g = [], h = 0, i = a.length, j = null != b; i > h; h++)(f = a[h]) && (!c || c(f, d, e)) && (g.push(f), j && b.push(h));
			return g
		}

		function tb(a, b, c, d, e, f) {
			return d && !d[s] && (d = tb(d)), e && !e[s] && (e = tb(e, f)), fb(function(f, g, h, i) {
				var j, k, l, m = [],
					n = [],
					o = g.length,
					p = f || wb(b || "*", h.nodeType ? [h] : h, []),
					q = !a || !f && b ? p : sb(p, m, a, h, i),
					r = c ? e || (f ? a : o || d) ? [] : g : q;
				if (c && c(q, r, h, i), d) {
					j = sb(r, n), d(j, [], h, i), k = j.length;
					while (k--)(l = j[k]) && (r[n[k]] = !(q[n[k]] = l))
				}
				if (f) {
					if (e || a) {
						if (e) {
							j = [], k = r.length;
							while (k--)(l = r[k]) && j.push(q[k] = l);
							e(null, r = [], j, i)
						}
						k = r.length;
						while (k--)(l = r[k]) && (j = e ? I.call(f, l) : m[k]) > -1 && (f[j] = !(g[j] = l))
					}
				} else r = sb(r === g ? r.splice(o, r.length) : r), e ? e(null, g, r, i) : G.apply(g, r)
			})
		}

		function ub(a) {
			for (var b, c, e, f = a.length, g = d.relative[a[0].type], i = g || d.relative[" "], j = g ? 1 : 0, k = qb(function(a) {
					return a === b
				}, i, !0), l = qb(function(a) {
					return I.call(b, a) > -1
				}, i, !0), m = [function(a, c, d) {
					return !g && (d || c !== h) || ((b = c).nodeType ? k(a, c, d) : l(a, c, d))
				}]; f > j; j++)
				if (c = d.relative[a[j].type]) m = [qb(rb(m), c)];
				else {
					if (c = d.filter[a[j].type].apply(null, a[j].matches), c[s]) {
						for (e = ++j; f > e; e++)
							if (d.relative[a[e].type]) break;
						return tb(j > 1 && rb(m), j > 1 && pb(a.slice(0, j - 1).concat({
							value: " " === a[j - 2].type ? "*" : ""
						})).replace(P, "$1"), c, e > j && ub(a.slice(j, e)), f > e && ub(a = a.slice(e)), f > e && pb(a))
					}
					m.push(c)
				} return rb(m)
		}

		function vb(a, b) {
			var c = b.length > 0,
				e = a.length > 0,
				f = function(f, g, i, j, k) {
					var m, n, o, p = 0,
						q = "0",
						r = f && [],
						s = [],
						t = h,
						v = f || e && d.find.TAG("*", k),
						w = u += null == t ? 1 : Math.random() || .1,
						x = v.length;
					for (k && (h = g !== l && g); q !== x && null != (m = v[q]); q++) {
						if (e && m) {
							n = 0;
							while (o = a[n++])
								if (o(m, g, i)) {
									j.push(m);
									break
								} k && (u = w)
						}
						c && ((m = !o && m) && p--, f && r.push(m))
					}
					if (p += q, c && q !== p) {
						n = 0;
						while (o = b[n++]) o(r, s, g, i);
						if (f) {
							if (p > 0)
								while (q--) r[q] || s[q] || (s[q] = E.call(j));
							s = sb(s)
						}
						G.apply(j, s), k && !f && s.length > 0 && p + b.length > 1 && db.uniqueSort(j)
					}
					return k && (u = w, h = t), r
				};
			return c ? fb(f) : f
		}
		g = db.compile = function(a, b) {
			var c, d = [],
				e = [],
				f = y[a + " "];
			if (!f) {
				b || (b = ob(a)), c = b.length;
				while (c--) f = ub(b[c]), f[s] ? d.push(f) : e.push(f);
				f = y(a, vb(e, d))
			}
			return f
		};

		function wb(a, b, c) {
			for (var d = 0, e = b.length; e > d; d++) db(a, b[d], c);
			return c
		}

		function xb(a, b, e, f) {
			var h, i, j, k, l, m = ob(a);
			if (!f && 1 === m.length) {
				if (i = m[0] = m[0].slice(0), i.length > 2 && "ID" === (j = i[0]).type && c.getById && 9 === b.nodeType && n && d.relative[i[1].type]) {
					if (b = (d.find.ID(j.matches[0].replace(ab, bb), b) || [])[0], !b) return e;
					a = a.slice(i.shift().value.length)
				}
				h = V.needsContext.test(a) ? 0 : i.length;
				while (h--) {
					if (j = i[h], d.relative[k = j.type]) break;
					if ((l = d.find[k]) && (f = l(j.matches[0].replace(ab, bb), $.test(i[0].type) && mb(b.parentNode) || b))) {
						if (i.splice(h, 1), a = f.length && pb(i), !a) return G.apply(e, f), e;
						break
					}
				}
			}
			return g(a, m)(f, b, !n, e, $.test(a) && mb(b.parentNode) || b), e
		}
		return c.sortStable = s.split("").sort(z).join("") === s, c.detectDuplicates = !!j, k(), c.sortDetached = gb(function(a) {
			return 1 & a.compareDocumentPosition(l.createElement("div"))
		}), gb(function(a) {
			return a.innerHTML = "<a href='#'></a>", "#" === a.firstChild.getAttribute("href")
		}) || hb("type|href|height|width", function(a, b, c) {
			return c ? void 0 : a.getAttribute(b, "type" === b.toLowerCase() ? 1 : 2)
		}), c.attributes && gb(function(a) {
			return a.innerHTML = "<input/>", a.firstChild.setAttribute("value", ""), "" === a.firstChild.getAttribute("value")
		}) || hb("value", function(a, b, c) {
			return c || "input" !== a.nodeName.toLowerCase() ? void 0 : a.defaultValue
		}), gb(function(a) {
			return null == a.getAttribute("disabled")
		}) || hb(J, function(a, b, c) {
			var d;
			return c ? void 0 : a[b] === !0 ? b.toLowerCase() : (d = a.getAttributeNode(b)) && d.specified ? d.value : null
		}), db
	}(a);
	n.find = t, n.expr = t.selectors, n.expr[":"] = n.expr.pseudos, n.unique = t.uniqueSort, n.text = t.getText, n.isXMLDoc = t.isXML, n.contains = t.contains;
	var u = n.expr.match.needsContext,
		v = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
		w = /^.[^:#\[\.,]*$/;

	function x(a, b, c) {
		if (n.isFunction(b)) return n.grep(a, function(a, d) {
			return !!b.call(a, d, a) !== c
		});
		if (b.nodeType) return n.grep(a, function(a) {
			return a === b !== c
		});
		if ("string" == typeof b) {
			if (w.test(b)) return n.filter(b, a, c);
			b = n.filter(b, a)
		}
		return n.grep(a, function(a) {
			return n.inArray(a, b) >= 0 !== c
		})
	}
	n.filter = function(a, b, c) {
		var d = b[0];
		return c && (a = ":not(" + a + ")"), 1 === b.length && 1 === d.nodeType ? n.find.matchesSelector(d, a) ? [d] : [] : n.find.matches(a, n.grep(b, function(a) {
			return 1 === a.nodeType
		}))
	}, n.fn.extend({
		find: function(a) {
			var b, c = [],
				d = this,
				e = d.length;
			if ("string" != typeof a) return this.pushStack(n(a).filter(function() {
				for (b = 0; e > b; b++)
					if (n.contains(d[b], this)) return !0
			}));
			for (b = 0; e > b; b++) n.find(a, d[b], c);
			return c = this.pushStack(e > 1 ? n.unique(c) : c), c.selector = this.selector ? this.selector + " " + a : a, c
		},
		filter: function(a) {
			return this.pushStack(x(this, a || [], !1))
		},
		not: function(a) {
			return this.pushStack(x(this, a || [], !0))
		},
		is: function(a) {
			return !!x(this, "string" == typeof a && u.test(a) ? n(a) : a || [], !1).length
		}
	});
	var y, z = a.document,
		A = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
		B = n.fn.init = function(a, b) {
			var c, d;
			if (!a) return this;
			if ("string" == typeof a) {
				if (c = "<" === a.charAt(0) && ">" === a.charAt(a.length - 1) && a.length >= 3 ? [null, a, null] : A.exec(a), !c || !c[1] && b) return !b || b.jquery ? (b || y).find(a) : this.constructor(b).find(a);
				if (c[1]) {
					if (b = b instanceof n ? b[0] : b, n.merge(this, n.parseHTML(c[1], b && b.nodeType ? b.ownerDocument || b : z, !0)), v.test(c[1]) && n.isPlainObject(b))
						for (c in b) n.isFunction(this[c]) ? this[c](b[c]) : this.attr(c, b[c]);
					return this
				}
				if (d = z.getElementById(c[2]), d && d.parentNode) {
					if (d.id !== c[2]) return y.find(a);
					this.length = 1, this[0] = d
				}
				return this.context = z, this.selector = a, this
			}
			return a.nodeType ? (this.context = this[0] = a, this.length = 1, this) : n.isFunction(a) ? "undefined" != typeof y.ready ? y.ready(a) : a(n) : (void 0 !== a.selector && (this.selector = a.selector, this.context = a.context), n.makeArray(a, this))
		};
	B.prototype = n.fn, y = n(z);
	var C = /^(?:parents|prev(?:Until|All))/,
		D = {
			children: !0,
			contents: !0,
			next: !0,
			prev: !0
		};
	n.extend({
		dir: function(a, b, c) {
			var d = [],
				e = a[b];
			while (e && 9 !== e.nodeType && (void 0 === c || 1 !== e.nodeType || !n(e).is(c))) 1 === e.nodeType && d.push(e), e = e[b];
			return d
		},
		sibling: function(a, b) {
			for (var c = []; a; a = a.nextSibling) 1 === a.nodeType && a !== b && c.push(a);
			return c
		}
	}), n.fn.extend({
		has: function(a) {
			var b, c = n(a, this),
				d = c.length;
			return this.filter(function() {
				for (b = 0; d > b; b++)
					if (n.contains(this, c[b])) return !0
			})
		},
		closest: function(a, b) {
			for (var c, d = 0, e = this.length, f = [], g = u.test(a) || "string" != typeof a ? n(a, b || this.context) : 0; e > d; d++)
				for (c = this[d]; c && c !== b; c = c.parentNode)
					if (c.nodeType < 11 && (g ? g.index(c) > -1 : 1 === c.nodeType && n.find.matchesSelector(c, a))) {
						f.push(c);
						break
					} return this.pushStack(f.length > 1 ? n.unique(f) : f)
		},
		index: function(a) {
			return a ? "string" == typeof a ? n.inArray(this[0], n(a)) : n.inArray(a.jquery ? a[0] : a, this) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
		},
		add: function(a, b) {
			return this.pushStack(n.unique(n.merge(this.get(), n(a, b))))
		},
		addBack: function(a) {
			return this.add(null == a ? this.prevObject : this.prevObject.filter(a))
		}
	});

	function E(a, b) {
		do a = a[b]; while (a && 1 !== a.nodeType);
		return a
	}
	n.each({
		parent: function(a) {
			var b = a.parentNode;
			return b && 11 !== b.nodeType ? b : null
		},
		parents: function(a) {
			return n.dir(a, "parentNode")
		},
		parentsUntil: function(a, b, c) {
			return n.dir(a, "parentNode", c)
		},
		next: function(a) {
			return E(a, "nextSibling")
		},
		prev: function(a) {
			return E(a, "previousSibling")
		},
		nextAll: function(a) {
			return n.dir(a, "nextSibling")
		},
		prevAll: function(a) {
			return n.dir(a, "previousSibling")
		},
		nextUntil: function(a, b, c) {
			return n.dir(a, "nextSibling", c)
		},
		prevUntil: function(a, b, c) {
			return n.dir(a, "previousSibling", c)
		},
		siblings: function(a) {
			return n.sibling((a.parentNode || {}).firstChild, a)
		},
		children: function(a) {
			return n.sibling(a.firstChild)
		},
		contents: function(a) {
			return n.nodeName(a, "iframe") ? a.contentDocument || a.contentWindow.document : n.merge([], a.childNodes)
		}
	}, function(a, b) {
		n.fn[a] = function(c, d) {
			var e = n.map(this, b, c);
			return "Until" !== a.slice(-5) && (d = c), d && "string" == typeof d && (e = n.filter(d, e)), this.length > 1 && (D[a] || (e = n.unique(e)), C.test(a) && (e = e.reverse())), this.pushStack(e)
		}
	});
	var F = /\S+/g,
		G = {};

	function H(a) {
		var b = G[a] = {};
		return n.each(a.match(F) || [], function(a, c) {
			b[c] = !0
		}), b
	}
	n.Callbacks = function(a) {
		a = "string" == typeof a ? G[a] || H(a) : n.extend({}, a);
		var b, c, d, e, f, g, h = [],
			i = !a.once && [],
			j = function(l) {
				for (c = a.memory && l, d = !0, f = g || 0, g = 0, e = h.length, b = !0; h && e > f; f++)
					if (h[f].apply(l[0], l[1]) === !1 && a.stopOnFalse) {
						c = !1;
						break
					} b = !1, h && (i ? i.length && j(i.shift()) : c ? h = [] : k.disable())
			},
			k = {
				add: function() {
					if (h) {
						var d = h.length;
						! function f(b) {
							n.each(b, function(b, c) {
								var d = n.type(c);
								"function" === d ? a.unique && k.has(c) || h.push(c) : c && c.length && "string" !== d && f(c)
							})
						}(arguments), b ? e = h.length : c && (g = d, j(c))
					}
					return this
				},
				remove: function() {
					return h && n.each(arguments, function(a, c) {
						var d;
						while ((d = n.inArray(c, h, d)) > -1) h.splice(d, 1), b && (e >= d && e--, f >= d && f--)
					}), this
				},
				has: function(a) {
					return a ? n.inArray(a, h) > -1 : !(!h || !h.length)
				},
				empty: function() {
					return h = [], e = 0, this
				},
				disable: function() {
					return h = i = c = void 0, this
				},
				disabled: function() {
					return !h
				},
				lock: function() {
					return i = void 0, c || k.disable(), this
				},
				locked: function() {
					return !i
				},
				fireWith: function(a, c) {
					return !h || d && !i || (c = c || [], c = [a, c.slice ? c.slice() : c], b ? i.push(c) : j(c)), this
				},
				fire: function() {
					return k.fireWith(this, arguments), this
				},
				fired: function() {
					return !!d
				}
			};
		return k
	}, n.extend({
		Deferred: function(a) {
			var b = [
					["resolve", "done", n.Callbacks("once memory"), "resolved"],
					["reject", "fail", n.Callbacks("once memory"), "rejected"],
					["notify", "progress", n.Callbacks("memory")]
				],
				c = "pending",
				d = {
					state: function() {
						return c
					},
					always: function() {
						return e.done(arguments).fail(arguments), this
					},
					then: function() {
						var a = arguments;
						return n.Deferred(function(c) {
							n.each(b, function(b, f) {
								var g = n.isFunction(a[b]) && a[b];
								e[f[1]](function() {
									var a = g && g.apply(this, arguments);
									a && n.isFunction(a.promise) ? a.promise().done(c.resolve).fail(c.reject).progress(c.notify) : c[f[0] + "With"](this === d ? c.promise() : this, g ? [a] : arguments)
								})
							}), a = null
						}).promise()
					},
					promise: function(a) {
						return null != a ? n.extend(a, d) : d
					}
				},
				e = {};
			return d.pipe = d.then, n.each(b, function(a, f) {
				var g = f[2],
					h = f[3];
				d[f[1]] = g.add, h && g.add(function() {
					c = h
				}, b[1 ^ a][2].disable, b[2][2].lock), e[f[0]] = function() {
					return e[f[0] + "With"](this === e ? d : this, arguments), this
				}, e[f[0] + "With"] = g.fireWith
			}), d.promise(e), a && a.call(e, e), e
		},
		when: function(a) {
			var b = 0,
				c = d.call(arguments),
				e = c.length,
				f = 1 !== e || a && n.isFunction(a.promise) ? e : 0,
				g = 1 === f ? a : n.Deferred(),
				h = function(a, b, c) {
					return function(e) {
						b[a] = this, c[a] = arguments.length > 1 ? d.call(arguments) : e, c === i ? g.notifyWith(b, c) : --f || g.resolveWith(b, c)
					}
				},
				i, j, k;
			if (e > 1)
				for (i = new Array(e), j = new Array(e), k = new Array(e); e > b; b++) c[b] && n.isFunction(c[b].promise) ? c[b].promise().done(h(b, k, c)).fail(g.reject).progress(h(b, j, i)) : --f;
			return f || g.resolveWith(k, c), g.promise()
		}
	});
	var I;
	n.fn.ready = function(a) {
		return n.ready.promise().done(a), this
	}, n.extend({
		isReady: !1,
		readyWait: 1,
		holdReady: function(a) {
			a ? n.readyWait++ : n.ready(!0)
		},
		ready: function(a) {
			if (a === !0 ? !--n.readyWait : !n.isReady) {
				if (!z.body) return setTimeout(n.ready);
				n.isReady = !0, a !== !0 && --n.readyWait > 0 || (I.resolveWith(z, [n]), n.fn.trigger && n(z).trigger("ready").off("ready"))
			}
		}
	});

	function J() {
		z.addEventListener ? (z.removeEventListener("DOMContentLoaded", K, !1), a.removeEventListener("load", K, !1)) : (z.detachEvent("onreadystatechange", K), a.detachEvent("onload", K))
	}

	function K() {
		(z.addEventListener || "load" === event.type || "complete" === z.readyState) && (J(), n.ready())
	}
	n.ready.promise = function(b) {
		if (!I)
			if (I = n.Deferred(), "complete" === z.readyState) setTimeout(n.ready);
			else if (z.addEventListener) z.addEventListener("DOMContentLoaded", K, !1), a.addEventListener("load", K, !1);
		else {
			z.attachEvent("onreadystatechange", K), a.attachEvent("onload", K);
			var c = !1;
			try {
				c = null == a.frameElement && z.documentElement
			} catch (d) {}
			c && c.doScroll && ! function e() {
				if (!n.isReady) {
					try {
						c.doScroll("left")
					} catch (a) {
						return setTimeout(e, 50)
					}
					J(), n.ready()
				}
			}()
		}
		return I.promise(b)
	};
	var L = "undefined",
		M;
	for (M in n(l)) break;
	l.ownLast = "0" !== M, l.inlineBlockNeedsLayout = !1, n(function() {
			var a, b, c = z.getElementsByTagName("body")[0];
			c && (a = z.createElement("div"), a.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px", b = z.createElement("div"), c.appendChild(a).appendChild(b), typeof b.style.zoom !== L && (b.style.cssText = "border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1", (l.inlineBlockNeedsLayout = 3 === b.offsetWidth) && (c.style.zoom = 1)), c.removeChild(a), a = b = null)
		}),
		function() {
			var a = z.createElement("div");
			if (null == l.deleteExpando) {
				l.deleteExpando = !0;
				try {
					delete a.test
				} catch (b) {
					l.deleteExpando = !1
				}
			}
			a = null
		}(), n.acceptData = function(a) {
			var b = n.noData[(a.nodeName + " ").toLowerCase()],
				c = +a.nodeType || 1;
			return 1 !== c && 9 !== c ? !1 : !b || b !== !0 && a.getAttribute("classid") === b
		};
	var N = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
		O = /([A-Z])/g;

	function P(a, b, c) {
		if (void 0 === c && 1 === a.nodeType) {
			var d = "data-" + b.replace(O, "-$1").toLowerCase();
			if (c = a.getAttribute(d), "string" == typeof c) {
				try {
					c = "true" === c ? !0 : "false" === c ? !1 : "null" === c ? null : +c + "" === c ? +c : N.test(c) ? n.parseJSON(c) : c
				} catch (e) {}
				n.data(a, b, c)
			} else c = void 0
		}
		return c
	}

	function Q(a) {
		var b;
		for (b in a)
			if (("data" !== b || !n.isEmptyObject(a[b])) && "toJSON" !== b) return !1;
		return !0
	}

	function R(a, b, d, e) {
		if (n.acceptData(a)) {
			var f, g, h = n.expando,
				i = a.nodeType,
				j = i ? n.cache : a,
				k = i ? a[h] : a[h] && h;
			if (k && j[k] && (e || j[k].data) || void 0 !== d || "string" != typeof b) return k || (k = i ? a[h] = c.pop() || n.guid++ : h), j[k] || (j[k] = i ? {} : {
				toJSON: n.noop
			}), ("object" == typeof b || "function" == typeof b) && (e ? j[k] = n.extend(j[k], b) : j[k].data = n.extend(j[k].data, b)), g = j[k], e || (g.data || (g.data = {}), g = g.data), void 0 !== d && (g[n.camelCase(b)] = d), "string" == typeof b ? (f = g[b], null == f && (f = g[n.camelCase(b)])) : f = g, f
		}
	}

	function S(a, b, c) {
		if (n.acceptData(a)) {
			var d, e, f = a.nodeType,
				g = f ? n.cache : a,
				h = f ? a[n.expando] : n.expando;
			if (g[h]) {
				if (b && (d = c ? g[h] : g[h].data)) {
					n.isArray(b) ? b = b.concat(n.map(b, n.camelCase)) : b in d ? b = [b] : (b = n.camelCase(b), b = b in d ? [b] : b.split(" ")), e = b.length;
					while (e--) delete d[b[e]];
					if (c ? !Q(d) : !n.isEmptyObject(d)) return
				}(c || (delete g[h].data, Q(g[h]))) && (f ? n.cleanData([a], !0) : l.deleteExpando || g != g.window ? delete g[h] : g[h] = null)
			}
		}
	}
	n.extend({
		cache: {},
		noData: {
			"applet ": !0,
			"embed ": !0,
			"object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
		},
		hasData: function(a) {
			return a = a.nodeType ? n.cache[a[n.expando]] : a[n.expando], !!a && !Q(a)
		},
		data: function(a, b, c) {
			return R(a, b, c)
		},
		removeData: function(a, b) {
			return S(a, b)
		},
		_data: function(a, b, c) {
			return R(a, b, c, !0)
		},
		_removeData: function(a, b) {
			return S(a, b, !0)
		}
	}), n.fn.extend({
		data: function(a, b) {
			var c, d, e, f = this[0],
				g = f && f.attributes;
			if (void 0 === a) {
				if (this.length && (e = n.data(f), 1 === f.nodeType && !n._data(f, "parsedAttrs"))) {
					c = g.length;
					while (c--) d = g[c].name, 0 === d.indexOf("data-") && (d = n.camelCase(d.slice(5)), P(f, d, e[d]));
					n._data(f, "parsedAttrs", !0)
				}
				return e
			}
			return "object" == typeof a ? this.each(function() {
				n.data(this, a)
			}) : arguments.length > 1 ? this.each(function() {
				n.data(this, a, b)
			}) : f ? P(f, a, n.data(f, a)) : void 0
		},
		removeData: function(a) {
			return this.each(function() {
				n.removeData(this, a)
			})
		}
	}), n.extend({
		queue: function(a, b, c) {
			var d;
			return a ? (b = (b || "fx") + "queue", d = n._data(a, b), c && (!d || n.isArray(c) ? d = n._data(a, b, n.makeArray(c)) : d.push(c)), d || []) : void 0
		},
		dequeue: function(a, b) {
			b = b || "fx";
			var c = n.queue(a, b),
				d = c.length,
				e = c.shift(),
				f = n._queueHooks(a, b),
				g = function() {
					n.dequeue(a, b)
				};
			"inprogress" === e && (e = c.shift(), d--), e && ("fx" === b && c.unshift("inprogress"), delete f.stop, e.call(a, g, f)), !d && f && f.empty.fire()
		},
		_queueHooks: function(a, b) {
			var c = b + "queueHooks";
			return n._data(a, c) || n._data(a, c, {
				empty: n.Callbacks("once memory").add(function() {
					n._removeData(a, b + "queue"), n._removeData(a, c)
				})
			})
		}
	}), n.fn.extend({
		queue: function(a, b) {
			var c = 2;
			return "string" != typeof a && (b = a, a = "fx", c--), arguments.length < c ? n.queue(this[0], a) : void 0 === b ? this : this.each(function() {
				var c = n.queue(this, a, b);
				n._queueHooks(this, a), "fx" === a && "inprogress" !== c[0] && n.dequeue(this, a)
			})
		},
		dequeue: function(a) {
			return this.each(function() {
				n.dequeue(this, a)
			})
		},
		clearQueue: function(a) {
			return this.queue(a || "fx", [])
		},
		promise: function(a, b) {
			var c, d = 1,
				e = n.Deferred(),
				f = this,
				g = this.length,
				h = function() {
					--d || e.resolveWith(f, [f])
				};
			"string" != typeof a && (b = a, a = void 0), a = a || "fx";
			while (g--) c = n._data(f[g], a + "queueHooks"), c && c.empty && (d++, c.empty.add(h));
			return h(), e.promise(b)
		}
	});
	var T = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
		U = ["Top", "Right", "Bottom", "Left"],
		V = function(a, b) {
			return a = b || a, "none" === n.css(a, "display") || !n.contains(a.ownerDocument, a)
		},
		W = n.access = function(a, b, c, d, e, f, g) {
			var h = 0,
				i = a.length,
				j = null == c;
			if ("object" === n.type(c)) {
				e = !0;
				for (h in c) n.access(a, b, h, c[h], !0, f, g)
			} else if (void 0 !== d && (e = !0, n.isFunction(d) || (g = !0), j && (g ? (b.call(a, d), b = null) : (j = b, b = function(a, b, c) {
					return j.call(n(a), c)
				})), b))
				for (; i > h; h++) b(a[h], c, g ? d : d.call(a[h], h, b(a[h], c)));
			return e ? a : j ? b.call(a) : i ? b(a[0], c) : f
		},
		X = /^(?:checkbox|radio)$/i;
	! function() {
		var a = z.createDocumentFragment(),
			b = z.createElement("div"),
			c = z.createElement("input");
		if (b.setAttribute("className", "t"), b.innerHTML = "  <link/><table></table><a href='/a'>a</a>", l.leadingWhitespace = 3 === b.firstChild.nodeType, l.tbody = !b.getElementsByTagName("tbody").length, l.htmlSerialize = !!b.getElementsByTagName("link").length, l.html5Clone = "<:nav></:nav>" !== z.createElement("nav").cloneNode(!0).outerHTML, c.type = "checkbox", c.checked = !0, a.appendChild(c), l.appendChecked = c.checked, b.innerHTML = "<textarea>x</textarea>", l.noCloneChecked = !!b.cloneNode(!0).lastChild.defaultValue, a.appendChild(b), b.innerHTML = "<input type='radio' checked='checked' name='t'/>", l.checkClone = b.cloneNode(!0).cloneNode(!0).lastChild.checked, l.noCloneEvent = !0, b.attachEvent && (b.attachEvent("onclick", function() {
				l.noCloneEvent = !1
			}), b.cloneNode(!0).click()), null == l.deleteExpando) {
			l.deleteExpando = !0;
			try {
				delete b.test
			} catch (d) {
				l.deleteExpando = !1
			}
		}
		a = b = c = null
	}(),
	function() {
		var b, c, d = z.createElement("div");
		for (b in {
				submit: !0,
				change: !0,
				focusin: !0
			}) c = "on" + b, (l[b + "Bubbles"] = c in a) || (d.setAttribute(c, "t"), l[b + "Bubbles"] = d.attributes[c].expando === !1);
		d = null
	}();
	var Y = /^(?:input|select|textarea)$/i,
		Z = /^key/,
		$ = /^(?:mouse|contextmenu)|click/,
		_ = /^(?:focusinfocus|focusoutblur)$/,
		ab = /^([^.]*)(?:\.(.+)|)$/;

	function bb() {
		return !0
	}

	function cb() {
		return !1
	}

	function db() {
		try {
			return z.activeElement
		} catch (a) {}
	}
	n.event = {
		global: {},
		add: function(a, b, c, d, e) {
			var f, g, h, i, j, k, l, m, o, p, q, r = n._data(a);
			if (r) {
				c.handler && (i = c, c = i.handler, e = i.selector), c.guid || (c.guid = n.guid++), (g = r.events) || (g = r.events = {}), (k = r.handle) || (k = r.handle = function(a) {
					return typeof n === L || a && n.event.triggered === a.type ? void 0 : n.event.dispatch.apply(k.elem, arguments)
				}, k.elem = a), b = (b || "").match(F) || [""], h = b.length;
				while (h--) f = ab.exec(b[h]) || [], o = q = f[1], p = (f[2] || "").split(".").sort(), o && (j = n.event.special[o] || {}, o = (e ? j.delegateType : j.bindType) || o, j = n.event.special[o] || {}, l = n.extend({
					type: o,
					origType: q,
					data: d,
					handler: c,
					guid: c.guid,
					selector: e,
					needsContext: e && n.expr.match.needsContext.test(e),
					namespace: p.join(".")
				}, i), (m = g[o]) || (m = g[o] = [], m.delegateCount = 0, j.setup && j.setup.call(a, d, p, k) !== !1 || (a.addEventListener ? a.addEventListener(o, k, !1) : a.attachEvent && a.attachEvent("on" + o, k))), j.add && (j.add.call(a, l), l.handler.guid || (l.handler.guid = c.guid)), e ? m.splice(m.delegateCount++, 0, l) : m.push(l), n.event.global[o] = !0);
				a = null
			}
		},
		remove: function(a, b, c, d, e) {
			var f, g, h, i, j, k, l, m, o, p, q, r = n.hasData(a) && n._data(a);
			if (r && (k = r.events)) {
				b = (b || "").match(F) || [""], j = b.length;
				while (j--)
					if (h = ab.exec(b[j]) || [], o = q = h[1], p = (h[2] || "").split(".").sort(), o) {
						l = n.event.special[o] || {}, o = (d ? l.delegateType : l.bindType) || o, m = k[o] || [], h = h[2] && new RegExp("(^|\\.)" + p.join("\\.(?:.*\\.|)") + "(\\.|$)"), i = f = m.length;
						while (f--) g = m[f], !e && q !== g.origType || c && c.guid !== g.guid || h && !h.test(g.namespace) || d && d !== g.selector && ("**" !== d || !g.selector) || (m.splice(f, 1), g.selector && m.delegateCount--, l.remove && l.remove.call(a, g));
						i && !m.length && (l.teardown && l.teardown.call(a, p, r.handle) !== !1 || n.removeEvent(a, o, r.handle), delete k[o])
					} else
						for (o in k) n.event.remove(a, o + b[j], c, d, !0);
				n.isEmptyObject(k) && (delete r.handle, n._removeData(a, "events"))
			}
		},
		trigger: function(b, c, d, e) {
			var f, g, h, i, k, l, m, o = [d || z],
				p = j.call(b, "type") ? b.type : b,
				q = j.call(b, "namespace") ? b.namespace.split(".") : [];
			if (h = l = d = d || z, 3 !== d.nodeType && 8 !== d.nodeType && !_.test(p + n.event.triggered) && (p.indexOf(".") >= 0 && (q = p.split("."), p = q.shift(), q.sort()), g = p.indexOf(":") < 0 && "on" + p, b = b[n.expando] ? b : new n.Event(p, "object" == typeof b && b), b.isTrigger = e ? 2 : 3, b.namespace = q.join("."), b.namespace_re = b.namespace ? new RegExp("(^|\\.)" + q.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, b.result = void 0, b.target || (b.target = d), c = null == c ? [b] : n.makeArray(c, [b]), k = n.event.special[p] || {}, e || !k.trigger || k.trigger.apply(d, c) !== !1)) {
				if (!e && !k.noBubble && !n.isWindow(d)) {
					for (i = k.delegateType || p, _.test(i + p) || (h = h.parentNode); h; h = h.parentNode) o.push(h), l = h;
					l === (d.ownerDocument || z) && o.push(l.defaultView || l.parentWindow || a)
				}
				m = 0;
				while ((h = o[m++]) && !b.isPropagationStopped()) b.type = m > 1 ? i : k.bindType || p, f = (n._data(h, "events") || {})[b.type] && n._data(h, "handle"), f && f.apply(h, c), f = g && h[g], f && f.apply && n.acceptData(h) && (b.result = f.apply(h, c), b.result === !1 && b.preventDefault());
				if (b.type = p, !e && !b.isDefaultPrevented() && (!k._default || k._default.apply(o.pop(), c) === !1) && n.acceptData(d) && g && d[p] && !n.isWindow(d)) {
					l = d[g], l && (d[g] = null), n.event.triggered = p;
					try {
						d[p]()
					} catch (r) {}
					n.event.triggered = void 0, l && (d[g] = l)
				}
				return b.result
			}
		},
		dispatch: function(a) {
			a = n.event.fix(a);
			var b, c, e, f, g, h = [],
				i = d.call(arguments),
				j = (n._data(this, "events") || {})[a.type] || [],
				k = n.event.special[a.type] || {};
			if (i[0] = a, a.delegateTarget = this, !k.preDispatch || k.preDispatch.call(this, a) !== !1) {
				h = n.event.handlers.call(this, a, j), b = 0;
				while ((f = h[b++]) && !a.isPropagationStopped()) {
					a.currentTarget = f.elem, g = 0;
					while ((e = f.handlers[g++]) && !a.isImmediatePropagationStopped())(!a.namespace_re || a.namespace_re.test(e.namespace)) && (a.handleObj = e, a.data = e.data, c = ((n.event.special[e.origType] || {}).handle || e.handler).apply(f.elem, i), void 0 !== c && (a.result = c) === !1 && (a.preventDefault(), a.stopPropagation()))
				}
				return k.postDispatch && k.postDispatch.call(this, a), a.result
			}
		},
		handlers: function(a, b) {
			var c, d, e, f, g = [],
				h = b.delegateCount,
				i = a.target;
			if (h && i.nodeType && (!a.button || "click" !== a.type))
				for (; i != this; i = i.parentNode || this)
					if (1 === i.nodeType && (i.disabled !== !0 || "click" !== a.type)) {
						for (e = [], f = 0; h > f; f++) d = b[f], c = d.selector + " ", void 0 === e[c] && (e[c] = d.needsContext ? n(c, this).index(i) >= 0 : n.find(c, this, null, [i]).length), e[c] && e.push(d);
						e.length && g.push({
							elem: i,
							handlers: e
						})
					} return h < b.length && g.push({
				elem: this,
				handlers: b.slice(h)
			}), g
		},
		fix: function(a) {
			if (a[n.expando]) return a;
			var b, c, d, e = a.type,
				f = a,
				g = this.fixHooks[e];
			g || (this.fixHooks[e] = g = $.test(e) ? this.mouseHooks : Z.test(e) ? this.keyHooks : {}), d = g.props ? this.props.concat(g.props) : this.props, a = new n.Event(f), b = d.length;
			while (b--) c = d[b], a[c] = f[c];
			return a.target || (a.target = f.srcElement || z), 3 === a.target.nodeType && (a.target = a.target.parentNode), a.metaKey = !!a.metaKey, g.filter ? g.filter(a, f) : a
		},
		props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
		fixHooks: {},
		keyHooks: {
			props: "char charCode key keyCode".split(" "),
			filter: function(a, b) {
				return null == a.which && (a.which = null != b.charCode ? b.charCode : b.keyCode), a
			}
		},
		mouseHooks: {
			props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
			filter: function(a, b) {
				var c, d, e, f = b.button,
					g = b.fromElement;
				return null == a.pageX && null != b.clientX && (d = a.target.ownerDocument || z, e = d.documentElement, c = d.body, a.pageX = b.clientX + (e && e.scrollLeft || c && c.scrollLeft || 0) - (e && e.clientLeft || c && c.clientLeft || 0), a.pageY = b.clientY + (e && e.scrollTop || c && c.scrollTop || 0) - (e && e.clientTop || c && c.clientTop || 0)), !a.relatedTarget && g && (a.relatedTarget = g === a.target ? b.toElement : g), a.which || void 0 === f || (a.which = 1 & f ? 1 : 2 & f ? 3 : 4 & f ? 2 : 0), a
			}
		},
		special: {
			load: {
				noBubble: !0
			},
			focus: {
				trigger: function() {
					if (this !== db() && this.focus) try {
						return this.focus(), !1
					} catch (a) {}
				},
				delegateType: "focusin"
			},
			blur: {
				trigger: function() {
					return this === db() && this.blur ? (this.blur(), !1) : void 0
				},
				delegateType: "focusout"
			},
			click: {
				trigger: function() {
					return n.nodeName(this, "input") && "checkbox" === this.type && this.click ? (this.click(), !1) : void 0
				},
				_default: function(a) {
					return n.nodeName(a.target, "a")
				}
			},
			beforeunload: {
				postDispatch: function(a) {
					void 0 !== a.result && (a.originalEvent.returnValue = a.result)
				}
			}
		},
		simulate: function(a, b, c, d) {
			var e = n.extend(new n.Event, c, {
				type: a,
				isSimulated: !0,
				originalEvent: {}
			});
			d ? n.event.trigger(e, null, b) : n.event.dispatch.call(b, e), e.isDefaultPrevented() && c.preventDefault()
		}
	}, n.removeEvent = z.removeEventListener ? function(a, b, c) {
		a.removeEventListener && a.removeEventListener(b, c, !1)
	} : function(a, b, c) {
		var d = "on" + b;
		a.detachEvent && (typeof a[d] === L && (a[d] = null), a.detachEvent(d, c))
	}, n.Event = function(a, b) {
		return this instanceof n.Event ? (a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || void 0 === a.defaultPrevented && (a.returnValue === !1 || a.getPreventDefault && a.getPreventDefault()) ? bb : cb) : this.type = a, b && n.extend(this, b), this.timeStamp = a && a.timeStamp || n.now(), void(this[n.expando] = !0)) : new n.Event(a, b)
	}, n.Event.prototype = {
		isDefaultPrevented: cb,
		isPropagationStopped: cb,
		isImmediatePropagationStopped: cb,
		preventDefault: function() {
			var a = this.originalEvent;
			this.isDefaultPrevented = bb, a && (a.preventDefault ? a.preventDefault() : a.returnValue = !1)
		},
		stopPropagation: function() {
			var a = this.originalEvent;
			this.isPropagationStopped = bb, a && (a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0)
		},
		stopImmediatePropagation: function() {
			this.isImmediatePropagationStopped = bb, this.stopPropagation()
		}
	}, n.each({
		mouseenter: "mouseover",
		mouseleave: "mouseout"
	}, function(a, b) {
		n.event.special[a] = {
			delegateType: b,
			bindType: b,
			handle: function(a) {
				var c, d = this,
					e = a.relatedTarget,
					f = a.handleObj;
				return (!e || e !== d && !n.contains(d, e)) && (a.type = f.origType, c = f.handler.apply(this, arguments), a.type = b), c
			}
		}
	}), l.submitBubbles || (n.event.special.submit = {
		setup: function() {
			return n.nodeName(this, "form") ? !1 : void n.event.add(this, "click._submit keypress._submit", function(a) {
				var b = a.target,
					c = n.nodeName(b, "input") || n.nodeName(b, "button") ? b.form : void 0;
				c && !n._data(c, "submitBubbles") && (n.event.add(c, "submit._submit", function(a) {
					a._submit_bubble = !0
				}), n._data(c, "submitBubbles", !0))
			})
		},
		postDispatch: function(a) {
			a._submit_bubble && (delete a._submit_bubble, this.parentNode && !a.isTrigger && n.event.simulate("submit", this.parentNode, a, !0))
		},
		teardown: function() {
			return n.nodeName(this, "form") ? !1 : void n.event.remove(this, "._submit")
		}
	}), l.changeBubbles || (n.event.special.change = {
		setup: function() {
			return Y.test(this.nodeName) ? (("checkbox" === this.type || "radio" === this.type) && (n.event.add(this, "propertychange._change", function(a) {
				"checked" === a.originalEvent.propertyName && (this._just_changed = !0)
			}), n.event.add(this, "click._change", function(a) {
				this._just_changed && !a.isTrigger && (this._just_changed = !1), n.event.simulate("change", this, a, !0)
			})), !1) : void n.event.add(this, "beforeactivate._change", function(a) {
				var b = a.target;
				Y.test(b.nodeName) && !n._data(b, "changeBubbles") && (n.event.add(b, "change._change", function(a) {
					!this.parentNode || a.isSimulated || a.isTrigger || n.event.simulate("change", this.parentNode, a, !0)
				}), n._data(b, "changeBubbles", !0))
			})
		},
		handle: function(a) {
			var b = a.target;
			return this !== b || a.isSimulated || a.isTrigger || "radio" !== b.type && "checkbox" !== b.type ? a.handleObj.handler.apply(this, arguments) : void 0
		},
		teardown: function() {
			return n.event.remove(this, "._change"), !Y.test(this.nodeName)
		}
	}), l.focusinBubbles || n.each({
		focus: "focusin",
		blur: "focusout"
	}, function(a, b) {
		var c = function(a) {
			n.event.simulate(b, a.target, n.event.fix(a), !0)
		};
		n.event.special[b] = {
			setup: function() {
				var d = this.ownerDocument || this,
					e = n._data(d, b);
				e || d.addEventListener(a, c, !0), n._data(d, b, (e || 0) + 1)
			},
			teardown: function() {
				var d = this.ownerDocument || this,
					e = n._data(d, b) - 1;
				e ? n._data(d, b, e) : (d.removeEventListener(a, c, !0), n._removeData(d, b))
			}
		}
	}), n.fn.extend({
		on: function(a, b, c, d, e) {
			var f, g;
			if ("object" == typeof a) {
				"string" != typeof b && (c = c || b, b = void 0);
				for (f in a) this.on(f, b, c, a[f], e);
				return this
			}
			if (null == c && null == d ? (d = b, c = b = void 0) : null == d && ("string" == typeof b ? (d = c, c = void 0) : (d = c, c = b, b = void 0)), d === !1) d = cb;
			else if (!d) return this;
			return 1 === e && (g = d, d = function(a) {
				return n().off(a), g.apply(this, arguments)
			}, d.guid = g.guid || (g.guid = n.guid++)), this.each(function() {
				n.event.add(this, a, d, c, b)
			})
		},
		one: function(a, b, c, d) {
			return this.on(a, b, c, d, 1)
		},
		off: function(a, b, c) {
			var d, e;
			if (a && a.preventDefault && a.handleObj) return d = a.handleObj, n(a.delegateTarget).off(d.namespace ? d.origType + "." + d.namespace : d.origType, d.selector, d.handler), this;
			if ("object" == typeof a) {
				for (e in a) this.off(e, b, a[e]);
				return this
			}
			return (b === !1 || "function" == typeof b) && (c = b, b = void 0), c === !1 && (c = cb), this.each(function() {
				n.event.remove(this, a, c, b)
			})
		},
		trigger: function(a, b) {
			return this.each(function() {
				n.event.trigger(a, b, this)
			})
		},
		triggerHandler: function(a, b) {
			var c = this[0];
			return c ? n.event.trigger(a, b, c, !0) : void 0
		}
	});

	function eb(a) {
		var b = fb.split("|"),
			c = a.createDocumentFragment();
		if (c.createElement)
			while (b.length) c.createElement(b.pop());
		return c
	}
	var fb = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
		gb = / jQuery\d+="(?:null|\d+)"/g,
		hb = new RegExp("<(?:" + fb + ")[\\s/>]", "i"),
		ib = /^\s+/,
		jb = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
		kb = /<([\w:]+)/,
		lb = /<tbody/i,
		mb = /<|&#?\w+;/,
		nb = /<(?:script|style|link)/i,
		ob = /checked\s*(?:[^=]|=\s*.checked.)/i,
		pb = /^$|\/(?:java|ecma)script/i,
		qb = /^true\/(.*)/,
		rb = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
		sb = {
			option: [1, "<select multiple='multiple'>", "</select>"],
			legend: [1, "<fieldset>", "</fieldset>"],
			area: [1, "<map>", "</map>"],
			param: [1, "<object>", "</object>"],
			thead: [1, "<table>", "</table>"],
			tr: [2, "<table><tbody>", "</tbody></table>"],
			col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
			td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
			_default: l.htmlSerialize ? [0, "", ""] : [1, "X<div>", "</div>"]
		},
		tb = eb(z),
		ub = tb.appendChild(z.createElement("div"));
	sb.optgroup = sb.option, sb.tbody = sb.tfoot = sb.colgroup = sb.caption = sb.thead, sb.th = sb.td;

	function vb(a, b) {
		var c, d, e = 0,
			f = typeof a.getElementsByTagName !== L ? a.getElementsByTagName(b || "*") : typeof a.querySelectorAll !== L ? a.querySelectorAll(b || "*") : void 0;
		if (!f)
			for (f = [], c = a.childNodes || a; null != (d = c[e]); e++) !b || n.nodeName(d, b) ? f.push(d) : n.merge(f, vb(d, b));
		return void 0 === b || b && n.nodeName(a, b) ? n.merge([a], f) : f
	}

	function wb(a) {
		X.test(a.type) && (a.defaultChecked = a.checked)
	}

	function xb(a, b) {
		return n.nodeName(a, "table") && n.nodeName(11 !== b.nodeType ? b : b.firstChild, "tr") ? a.getElementsByTagName("tbody")[0] || a.appendChild(a.ownerDocument.createElement("tbody")) : a
	}

	function yb(a) {
		return a.type = (null !== n.find.attr(a, "type")) + "/" + a.type, a
	}

	function zb(a) {
		var b = qb.exec(a.type);
		return b ? a.type = b[1] : a.removeAttribute("type"), a
	}

	function Ab(a, b) {
		for (var c, d = 0; null != (c = a[d]); d++) n._data(c, "globalEval", !b || n._data(b[d], "globalEval"))
	}

	function Bb(a, b) {
		if (1 === b.nodeType && n.hasData(a)) {
			var c, d, e, f = n._data(a),
				g = n._data(b, f),
				h = f.events;
			if (h) {
				delete g.handle, g.events = {};
				for (c in h)
					for (d = 0, e = h[c].length; e > d; d++) n.event.add(b, c, h[c][d])
			}
			g.data && (g.data = n.extend({}, g.data))
		}
	}

	function Cb(a, b) {
		var c, d, e;
		if (1 === b.nodeType) {
			if (c = b.nodeName.toLowerCase(), !l.noCloneEvent && b[n.expando]) {
				e = n._data(b);
				for (d in e.events) n.removeEvent(b, d, e.handle);
				b.removeAttribute(n.expando)
			}
			"script" === c && b.text !== a.text ? (yb(b).text = a.text, zb(b)) : "object" === c ? (b.parentNode && (b.outerHTML = a.outerHTML), l.html5Clone && a.innerHTML && !n.trim(b.innerHTML) && (b.innerHTML = a.innerHTML)) : "input" === c && X.test(a.type) ? (b.defaultChecked = b.checked = a.checked, b.value !== a.value && (b.value = a.value)) : "option" === c ? b.defaultSelected = b.selected = a.defaultSelected : ("input" === c || "textarea" === c) && (b.defaultValue = a.defaultValue)
		}
	}
	n.extend({
		clone: function(a, b, c) {
			var d, e, f, g, h, i = n.contains(a.ownerDocument, a);
			if (l.html5Clone || n.isXMLDoc(a) || !hb.test("<" + a.nodeName + ">") ? f = a.cloneNode(!0) : (ub.innerHTML = a.outerHTML, ub.removeChild(f = ub.firstChild)), !(l.noCloneEvent && l.noCloneChecked || 1 !== a.nodeType && 11 !== a.nodeType || n.isXMLDoc(a)))
				for (d = vb(f), h = vb(a), g = 0; null != (e = h[g]); ++g) d[g] && Cb(e, d[g]);
			if (b)
				if (c)
					for (h = h || vb(a), d = d || vb(f), g = 0; null != (e = h[g]); g++) Bb(e, d[g]);
				else Bb(a, f);
			return d = vb(f, "script"), d.length > 0 && Ab(d, !i && vb(a, "script")), d = h = e = null, f
		},
		buildFragment: function(a, b, c, d) {
			for (var e, f, g, h, i, j, k, m = a.length, o = eb(b), p = [], q = 0; m > q; q++)
				if (f = a[q], f || 0 === f)
					if ("object" === n.type(f)) n.merge(p, f.nodeType ? [f] : f);
					else if (mb.test(f)) {
				h = h || o.appendChild(b.createElement("div")), i = (kb.exec(f) || ["", ""])[1].toLowerCase(), k = sb[i] || sb._default, h.innerHTML = k[1] + f.replace(jb, "<$1></$2>") + k[2], e = k[0];
				while (e--) h = h.lastChild;
				if (!l.leadingWhitespace && ib.test(f) && p.push(b.createTextNode(ib.exec(f)[0])), !l.tbody) {
					f = "table" !== i || lb.test(f) ? "<table>" !== k[1] || lb.test(f) ? 0 : h : h.firstChild, e = f && f.childNodes.length;
					while (e--) n.nodeName(j = f.childNodes[e], "tbody") && !j.childNodes.length && f.removeChild(j)
				}
				n.merge(p, h.childNodes), h.textContent = "";
				while (h.firstChild) h.removeChild(h.firstChild);
				h = o.lastChild
			} else p.push(b.createTextNode(f));
			h && o.removeChild(h), l.appendChecked || n.grep(vb(p, "input"), wb), q = 0;
			while (f = p[q++])
				if ((!d || -1 === n.inArray(f, d)) && (g = n.contains(f.ownerDocument, f), h = vb(o.appendChild(f), "script"), g && Ab(h), c)) {
					e = 0;
					while (f = h[e++]) pb.test(f.type || "") && c.push(f)
				} return h = null, o
		},
		cleanData: function(a, b) {
			for (var d, e, f, g, h = 0, i = n.expando, j = n.cache, k = l.deleteExpando, m = n.event.special; null != (d = a[h]); h++)
				if ((b || n.acceptData(d)) && (f = d[i], g = f && j[f])) {
					if (g.events)
						for (e in g.events) m[e] ? n.event.remove(d, e) : n.removeEvent(d, e, g.handle);
					j[f] && (delete j[f], k ? delete d[i] : typeof d.removeAttribute !== L ? d.removeAttribute(i) : d[i] = null, c.push(f))
				}
		}
	}), n.fn.extend({
		text: function(a) {
			return W(this, function(a) {
				return void 0 === a ? n.text(this) : this.empty().append((this[0] && this[0].ownerDocument || z).createTextNode(a))
			}, null, a, arguments.length)
		},
		append: function() {
			return this.domManip(arguments, function(a) {
				if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
					var b = xb(this, a);
					b.appendChild(a)
				}
			})
		},
		prepend: function() {
			return this.domManip(arguments, function(a) {
				if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
					var b = xb(this, a);
					b.insertBefore(a, b.firstChild)
				}
			})
		},
		before: function() {
			return this.domManip(arguments, function(a) {
				this.parentNode && this.parentNode.insertBefore(a, this)
			})
		},
		after: function() {
			return this.domManip(arguments, function(a) {
				this.parentNode && this.parentNode.insertBefore(a, this.nextSibling)
			})
		},
		remove: function(a, b) {
			for (var c, d = a ? n.filter(a, this) : this, e = 0; null != (c = d[e]); e++) b || 1 !== c.nodeType || n.cleanData(vb(c)), c.parentNode && (b && n.contains(c.ownerDocument, c) && Ab(vb(c, "script")), c.parentNode.removeChild(c));
			return this
		},
		empty: function() {
			for (var a, b = 0; null != (a = this[b]); b++) {
				1 === a.nodeType && n.cleanData(vb(a, !1));
				while (a.firstChild) a.removeChild(a.firstChild);
				a.options && n.nodeName(a, "select") && (a.options.length = 0)
			}
			return this
		},
		clone: function(a, b) {
			return a = null == a ? !1 : a, b = null == b ? a : b, this.map(function() {
				return n.clone(this, a, b)
			})
		},
		html: function(a) {
			return W(this, function(a) {
				var b = this[0] || {},
					c = 0,
					d = this.length;
				if (void 0 === a) return 1 === b.nodeType ? b.innerHTML.replace(gb, "") : void 0;
				if (!("string" != typeof a || nb.test(a) || !l.htmlSerialize && hb.test(a) || !l.leadingWhitespace && ib.test(a) || sb[(kb.exec(a) || ["", ""])[1].toLowerCase()])) {
					a = a.replace(jb, "<$1></$2>");
					try {
						for (; d > c; c++) b = this[c] || {}, 1 === b.nodeType && (n.cleanData(vb(b, !1)), b.innerHTML = a);
						b = 0
					} catch (e) {}
				}
				b && this.empty().append(a)
			}, null, a, arguments.length)
		},
		replaceWith: function() {
			var a = arguments[0];
			return this.domManip(arguments, function(b) {
				a = this.parentNode, n.cleanData(vb(this)), a && a.replaceChild(b, this)
			}), a && (a.length || a.nodeType) ? this : this.remove()
		},
		detach: function(a) {
			return this.remove(a, !0)
		},
		domManip: function(a, b) {
			a = e.apply([], a);
			var c, d, f, g, h, i, j = 0,
				k = this.length,
				m = this,
				o = k - 1,
				p = a[0],
				q = n.isFunction(p);
			if (q || k > 1 && "string" == typeof p && !l.checkClone && ob.test(p)) return this.each(function(c) {
				var d = m.eq(c);
				q && (a[0] = p.call(this, c, d.html())), d.domManip(a, b)
			});
			if (k && (i = n.buildFragment(a, this[0].ownerDocument, !1, this), c = i.firstChild, 1 === i.childNodes.length && (i = c), c)) {
				for (g = n.map(vb(i, "script"), yb), f = g.length; k > j; j++) d = i, j !== o && (d = n.clone(d, !0, !0), f && n.merge(g, vb(d, "script"))), b.call(this[j], d, j);
				if (f)
					for (h = g[g.length - 1].ownerDocument, n.map(g, zb), j = 0; f > j; j++) d = g[j], pb.test(d.type || "") && !n._data(d, "globalEval") && n.contains(h, d) && (d.src ? n._evalUrl && n._evalUrl(d.src) : n.globalEval((d.text || d.textContent || d.innerHTML || "").replace(rb, "")));
				i = c = null
			}
			return this
		}
	}), n.each({
		appendTo: "append",
		prependTo: "prepend",
		insertBefore: "before",
		insertAfter: "after",
		replaceAll: "replaceWith"
	}, function(a, b) {
		n.fn[a] = function(a) {
			for (var c, d = 0, e = [], g = n(a), h = g.length - 1; h >= d; d++) c = d === h ? this : this.clone(!0), n(g[d])[b](c), f.apply(e, c.get());
			return this.pushStack(e)
		}
	});
	var Db, Eb = {};

	function Fb(b, c) {
		var d = n(c.createElement(b)).appendTo(c.body),
			e = a.getDefaultComputedStyle ? a.getDefaultComputedStyle(d[0]).display : n.css(d[0], "display");
		return d.detach(), e
	}

	function Gb(a) {
		var b = z,
			c = Eb[a];
		return c || (c = Fb(a, b), "none" !== c && c || (Db = (Db || n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement), b = (Db[0].contentWindow || Db[0].contentDocument).document, b.write(), b.close(), c = Fb(a, b), Db.detach()), Eb[a] = c), c
	}! function() {
		var a, b, c = z.createElement("div"),
			d = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";
		c.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", a = c.getElementsByTagName("a")[0], a.style.cssText = "float:left;opacity:.5", l.opacity = /^0.5/.test(a.style.opacity), l.cssFloat = !!a.style.cssFloat, c.style.backgroundClip = "content-box", c.cloneNode(!0).style.backgroundClip = "", l.clearCloneStyle = "content-box" === c.style.backgroundClip, a = c = null, l.shrinkWrapBlocks = function() {
			var a, c, e, f;
			if (null == b) {
				if (a = z.getElementsByTagName("body")[0], !a) return;
				f = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px", c = z.createElement("div"), e = z.createElement("div"), a.appendChild(c).appendChild(e), b = !1, typeof e.style.zoom !== L && (e.style.cssText = d + ";width:1px;padding:1px;zoom:1", e.innerHTML = "<div></div>", e.firstChild.style.width = "5px", b = 3 !== e.offsetWidth), a.removeChild(c), a = c = e = null
			}
			return b
		}
	}();
	var Hb = /^margin/,
		Ib = new RegExp("^(" + T + ")(?!px)[a-z%]+$", "i"),
		Jb, Kb, Lb = /^(top|right|bottom|left)$/;
	a.getComputedStyle ? (Jb = function(a) {
		return a.ownerDocument.defaultView.getComputedStyle(a, null)
	}, Kb = function(a, b, c) {
		var d, e, f, g, h = a.style;
		return c = c || Jb(a), g = c ? c.getPropertyValue(b) || c[b] : void 0, c && ("" !== g || n.contains(a.ownerDocument, a) || (g = n.style(a, b)), Ib.test(g) && Hb.test(b) && (d = h.width, e = h.minWidth, f = h.maxWidth, h.minWidth = h.maxWidth = h.width = g, g = c.width, h.width = d, h.minWidth = e, h.maxWidth = f)), void 0 === g ? g : g + ""
	}) : z.documentElement.currentStyle && (Jb = function(a) {
		return a.currentStyle
	}, Kb = function(a, b, c) {
		var d, e, f, g, h = a.style;
		return c = c || Jb(a), g = c ? c[b] : void 0, null == g && h && h[b] && (g = h[b]), Ib.test(g) && !Lb.test(b) && (d = h.left, e = a.runtimeStyle, f = e && e.left, f && (e.left = a.currentStyle.left), h.left = "fontSize" === b ? "1em" : g, g = h.pixelLeft + "px", h.left = d, f && (e.left = f)), void 0 === g ? g : g + "" || "auto"
	});

	function Mb(a, b) {
		return {
			get: function() {
				var c = a();
				if (null != c) return c ? void delete this.get : (this.get = b).apply(this, arguments)
			}
		}
	}! function() {
		var b, c, d, e, f, g, h = z.createElement("div"),
			i = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px",
			j = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";
		h.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", b = h.getElementsByTagName("a")[0], b.style.cssText = "float:left;opacity:.5", l.opacity = /^0.5/.test(b.style.opacity), l.cssFloat = !!b.style.cssFloat, h.style.backgroundClip = "content-box", h.cloneNode(!0).style.backgroundClip = "", l.clearCloneStyle = "content-box" === h.style.backgroundClip, b = h = null, n.extend(l, {
			reliableHiddenOffsets: function() {
				if (null != c) return c;
				var a, b, d, e = z.createElement("div"),
					f = z.getElementsByTagName("body")[0];
				if (f) return e.setAttribute("className", "t"), e.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", a = z.createElement("div"), a.style.cssText = i, f.appendChild(a).appendChild(e), e.innerHTML = "<table><tr><td></td><td>t</td></tr></table>", b = e.getElementsByTagName("td"), b[0].style.cssText = "padding:0;margin:0;border:0;display:none", d = 0 === b[0].offsetHeight, b[0].style.display = "", b[1].style.display = "none", c = d && 0 === b[0].offsetHeight, f.removeChild(a), e = f = null, c
			},
			boxSizing: function() {
				return null == d && k(), d
			},
			boxSizingReliable: function() {
				return null == e && k(), e
			},
			pixelPosition: function() {
				return null == f && k(), f
			},
			reliableMarginRight: function() {
				var b, c, d, e;
				if (null == g && a.getComputedStyle) {
					if (b = z.getElementsByTagName("body")[0], !b) return;
					c = z.createElement("div"), d = z.createElement("div"), c.style.cssText = i, b.appendChild(c).appendChild(d), e = d.appendChild(z.createElement("div")), e.style.cssText = d.style.cssText = j, e.style.marginRight = e.style.width = "0", d.style.width = "1px", g = !parseFloat((a.getComputedStyle(e, null) || {}).marginRight), b.removeChild(c)
				}
				return g
			}
		});

		function k() {
			var b, c, h = z.getElementsByTagName("body")[0];
			h && (b = z.createElement("div"), c = z.createElement("div"), b.style.cssText = i, h.appendChild(b).appendChild(c), c.style.cssText = "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;display:block;padding:1px;border:1px;width:4px;margin-top:1%;top:1%", n.swap(h, null != h.style.zoom ? {
				zoom: 1
			} : {}, function() {
				d = 4 === c.offsetWidth
			}), e = !0, f = !1, g = !0, a.getComputedStyle && (f = "1%" !== (a.getComputedStyle(c, null) || {}).top, e = "4px" === (a.getComputedStyle(c, null) || {
				width: "4px"
			}).width), h.removeChild(b), c = h = null)
		}
	}(), n.swap = function(a, b, c, d) {
		var e, f, g = {};
		for (f in b) g[f] = a.style[f], a.style[f] = b[f];
		e = c.apply(a, d || []);
		for (f in b) a.style[f] = g[f];
		return e
	};
	var Nb = /alpha\([^)]*\)/i,
		Ob = /opacity\s*=\s*([^)]*)/,
		Pb = /^(none|table(?!-c[ea]).+)/,
		Qb = new RegExp("^(" + T + ")(.*)$", "i"),
		Rb = new RegExp("^([+-])=(" + T + ")", "i"),
		Sb = {
			position: "absolute",
			visibility: "hidden",
			display: "block"
		},
		Tb = {
			letterSpacing: 0,
			fontWeight: 400
		},
		Ub = ["Webkit", "O", "Moz", "ms"];

	function Vb(a, b) {
		if (b in a) return b;
		var c = b.charAt(0).toUpperCase() + b.slice(1),
			d = b,
			e = Ub.length;
		while (e--)
			if (b = Ub[e] + c, b in a) return b;
		return d
	}

	function Wb(a, b) {
		for (var c, d, e, f = [], g = 0, h = a.length; h > g; g++) d = a[g], d.style && (f[g] = n._data(d, "olddisplay"), c = d.style.display, b ? (f[g] || "none" !== c || (d.style.display = ""), "" === d.style.display && V(d) && (f[g] = n._data(d, "olddisplay", Gb(d.nodeName)))) : f[g] || (e = V(d), (c && "none" !== c || !e) && n._data(d, "olddisplay", e ? c : n.css(d, "display"))));
		for (g = 0; h > g; g++) d = a[g], d.style && (b && "none" !== d.style.display && "" !== d.style.display || (d.style.display = b ? f[g] || "" : "none"));
		return a
	}

	function Xb(a, b, c) {
		var d = Qb.exec(b);
		return d ? Math.max(0, d[1] - (c || 0)) + (d[2] || "px") : b
	}

	function Yb(a, b, c, d, e) {
		for (var f = c === (d ? "border" : "content") ? 4 : "width" === b ? 1 : 0, g = 0; 4 > f; f += 2) "margin" === c && (g += n.css(a, c + U[f], !0, e)), d ? ("content" === c && (g -= n.css(a, "padding" + U[f], !0, e)), "margin" !== c && (g -= n.css(a, "border" + U[f] + "Width", !0, e))) : (g += n.css(a, "padding" + U[f], !0, e), "padding" !== c && (g += n.css(a, "border" + U[f] + "Width", !0, e)));
		return g
	}

	function Zb(a, b, c) {
		var d = !0,
			e = "width" === b ? a.offsetWidth : a.offsetHeight,
			f = Jb(a),
			g = l.boxSizing() && "border-box" === n.css(a, "boxSizing", !1, f);
		if (0 >= e || null == e) {
			if (e = Kb(a, b, f), (0 > e || null == e) && (e = a.style[b]), Ib.test(e)) return e;
			d = g && (l.boxSizingReliable() || e === a.style[b]), e = parseFloat(e) || 0
		}
		return e + Yb(a, b, c || (g ? "border" : "content"), d, f) + "px"
	}
	n.extend({
		cssHooks: {
			opacity: {
				get: function(a, b) {
					if (b) {
						var c = Kb(a, "opacity");
						return "" === c ? "1" : c
					}
				}
			}
		},
		cssNumber: {
			columnCount: !0,
			fillOpacity: !0,
			fontWeight: !0,
			lineHeight: !0,
			opacity: !0,
			order: !0,
			orphans: !0,
			widows: !0,
			zIndex: !0,
			zoom: !0
		},
		cssProps: {
			"float": l.cssFloat ? "cssFloat" : "styleFloat"
		},
		style: function(a, b, c, d) {
			if (a && 3 !== a.nodeType && 8 !== a.nodeType && a.style) {
				var e, f, g, h = n.camelCase(b),
					i = a.style;
				if (b = n.cssProps[h] || (n.cssProps[h] = Vb(i, h)), g = n.cssHooks[b] || n.cssHooks[h], void 0 === c) return g && "get" in g && void 0 !== (e = g.get(a, !1, d)) ? e : i[b];
				if (f = typeof c, "string" === f && (e = Rb.exec(c)) && (c = (e[1] + 1) * e[2] + parseFloat(n.css(a, b)), f = "number"), null != c && c === c && ("number" !== f || n.cssNumber[h] || (c += "px"), l.clearCloneStyle || "" !== c || 0 !== b.indexOf("background") || (i[b] = "inherit"), !(g && "set" in g && void 0 === (c = g.set(a, c, d))))) try {
					i[b] = "", i[b] = c
				} catch (j) {}
			}
		},
		css: function(a, b, c, d) {
			var e, f, g, h = n.camelCase(b);
			return b = n.cssProps[h] || (n.cssProps[h] = Vb(a.style, h)), g = n.cssHooks[b] || n.cssHooks[h], g && "get" in g && (f = g.get(a, !0, c)), void 0 === f && (f = Kb(a, b, d)), "normal" === f && b in Tb && (f = Tb[b]), "" === c || c ? (e = parseFloat(f), c === !0 || n.isNumeric(e) ? e || 0 : f) : f
		}
	}), n.each(["height", "width"], function(a, b) {
		n.cssHooks[b] = {
			get: function(a, c, d) {
				return c ? 0 === a.offsetWidth && Pb.test(n.css(a, "display")) ? n.swap(a, Sb, function() {
					return Zb(a, b, d)
				}) : Zb(a, b, d) : void 0
			},
			set: function(a, c, d) {
				var e = d && Jb(a);
				return Xb(a, c, d ? Yb(a, b, d, l.boxSizing() && "border-box" === n.css(a, "boxSizing", !1, e), e) : 0)
			}
		}
	}), l.opacity || (n.cssHooks.opacity = {
		get: function(a, b) {
			return Ob.test((b && a.currentStyle ? a.currentStyle.filter : a.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "" : b ? "1" : ""
		},
		set: function(a, b) {
			var c = a.style,
				d = a.currentStyle,
				e = n.isNumeric(b) ? "alpha(opacity=" + 100 * b + ")" : "",
				f = d && d.filter || c.filter || "";
			c.zoom = 1, (b >= 1 || "" === b) && "" === n.trim(f.replace(Nb, "")) && c.removeAttribute && (c.removeAttribute("filter"), "" === b || d && !d.filter) || (c.filter = Nb.test(f) ? f.replace(Nb, e) : f + " " + e)
		}
	}), n.cssHooks.marginRight = Mb(l.reliableMarginRight, function(a, b) {
		return b ? n.swap(a, {
			display: "inline-block"
		}, Kb, [a, "marginRight"]) : void 0
	}), n.each({
		margin: "",
		padding: "",
		border: "Width"
	}, function(a, b) {
		n.cssHooks[a + b] = {
			expand: function(c) {
				for (var d = 0, e = {}, f = "string" == typeof c ? c.split(" ") : [c]; 4 > d; d++) e[a + U[d] + b] = f[d] || f[d - 2] || f[0];
				return e
			}
		}, Hb.test(a) || (n.cssHooks[a + b].set = Xb)
	}), n.fn.extend({
		css: function(a, b) {
			return W(this, function(a, b, c) {
				var d, e, f = {},
					g = 0;
				if (n.isArray(b)) {
					for (d = Jb(a), e = b.length; e > g; g++) f[b[g]] = n.css(a, b[g], !1, d);
					return f
				}
				return void 0 !== c ? n.style(a, b, c) : n.css(a, b)
			}, a, b, arguments.length > 1)
		},
		show: function() {
			return Wb(this, !0)
		},
		hide: function() {
			return Wb(this)
		},
		toggle: function(a) {
			return "boolean" == typeof a ? a ? this.show() : this.hide() : this.each(function() {
				V(this) ? n(this).show() : n(this).hide()
			})
		}
	});

	function $b(a, b, c, d, e) {
		return new $b.prototype.init(a, b, c, d, e)
	}
	n.Tween = $b, $b.prototype = {
		constructor: $b,
		init: function(a, b, c, d, e, f) {
			this.elem = a, this.prop = c, this.easing = e || "swing", this.options = b, this.start = this.now = this.cur(), this.end = d, this.unit = f || (n.cssNumber[c] ? "" : "px")
		},
		cur: function() {
			var a = $b.propHooks[this.prop];
			return a && a.get ? a.get(this) : $b.propHooks._default.get(this)
		},
		run: function(a) {
			var b, c = $b.propHooks[this.prop];
			return this.pos = b = this.options.duration ? n.easing[this.easing](a, this.options.duration * a, 0, 1, this.options.duration) : a, this.now = (this.end - this.start) * b + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), c && c.set ? c.set(this) : $b.propHooks._default.set(this), this
		}
	}, $b.prototype.init.prototype = $b.prototype, $b.propHooks = {
		_default: {
			get: function(a) {
				var b;
				return null == a.elem[a.prop] || a.elem.style && null != a.elem.style[a.prop] ? (b = n.css(a.elem, a.prop, ""), b && "auto" !== b ? b : 0) : a.elem[a.prop]
			},
			set: function(a) {
				n.fx.step[a.prop] ? n.fx.step[a.prop](a) : a.elem.style && (null != a.elem.style[n.cssProps[a.prop]] || n.cssHooks[a.prop]) ? n.style(a.elem, a.prop, a.now + a.unit) : a.elem[a.prop] = a.now
			}
		}
	}, $b.propHooks.scrollTop = $b.propHooks.scrollLeft = {
		set: function(a) {
			a.elem.nodeType && a.elem.parentNode && (a.elem[a.prop] = a.now)
		}
	}, n.easing = {
		linear: function(a) {
			return a
		},
		swing: function(a) {
			return .5 - Math.cos(a * Math.PI) / 2
		}
	}, n.fx = $b.prototype.init, n.fx.step = {};
	var _b, ac, bc = /^(?:toggle|show|hide)$/,
		cc = new RegExp("^(?:([+-])=|)(" + T + ")([a-z%]*)$", "i"),
		dc = /queueHooks$/,
		ec = [jc],
		fc = {
			"*": [function(a, b) {
				var c = this.createTween(a, b),
					d = c.cur(),
					e = cc.exec(b),
					f = e && e[3] || (n.cssNumber[a] ? "" : "px"),
					g = (n.cssNumber[a] || "px" !== f && +d) && cc.exec(n.css(c.elem, a)),
					h = 1,
					i = 20;
				if (g && g[3] !== f) {
					f = f || g[3], e = e || [], g = +d || 1;
					do h = h || ".5", g /= h, n.style(c.elem, a, g + f); while (h !== (h = c.cur() / d) && 1 !== h && --i)
				}
				return e && (g = c.start = +g || +d || 0, c.unit = f, c.end = e[1] ? g + (e[1] + 1) * e[2] : +e[2]), c
			}]
		};

	function gc() {
		return setTimeout(function() {
			_b = void 0
		}), _b = n.now()
	}

	function hc(a, b) {
		var c, d = {
				height: a
			},
			e = 0;
		for (b = b ? 1 : 0; 4 > e; e += 2 - b) c = U[e], d["margin" + c] = d["padding" + c] = a;
		return b && (d.opacity = d.width = a), d
	}

	function ic(a, b, c) {
		for (var d, e = (fc[b] || []).concat(fc["*"]), f = 0, g = e.length; g > f; f++)
			if (d = e[f].call(c, b, a)) return d
	}

	function jc(a, b, c) {
		var d, e, f, g, h, i, j, k, m = this,
			o = {},
			p = a.style,
			q = a.nodeType && V(a),
			r = n._data(a, "fxshow");
		c.queue || (h = n._queueHooks(a, "fx"), null == h.unqueued && (h.unqueued = 0, i = h.empty.fire, h.empty.fire = function() {
			h.unqueued || i()
		}), h.unqueued++, m.always(function() {
			m.always(function() {
				h.unqueued--, n.queue(a, "fx").length || h.empty.fire()
			})
		})), 1 === a.nodeType && ("height" in b || "width" in b) && (c.overflow = [p.overflow, p.overflowX, p.overflowY], j = n.css(a, "display"), k = Gb(a.nodeName), "none" === j && (j = k), "inline" === j && "none" === n.css(a, "float") && (l.inlineBlockNeedsLayout && "inline" !== k ? p.zoom = 1 : p.display = "inline-block")), c.overflow && (p.overflow = "hidden", l.shrinkWrapBlocks() || m.always(function() {
			p.overflow = c.overflow[0], p.overflowX = c.overflow[1], p.overflowY = c.overflow[2]
		}));
		for (d in b)
			if (e = b[d], bc.exec(e)) {
				if (delete b[d], f = f || "toggle" === e, e === (q ? "hide" : "show")) {
					if ("show" !== e || !r || void 0 === r[d]) continue;
					q = !0
				}
				o[d] = r && r[d] || n.style(a, d)
			} if (!n.isEmptyObject(o)) {
			r ? "hidden" in r && (q = r.hidden) : r = n._data(a, "fxshow", {}), f && (r.hidden = !q), q ? n(a).show() : m.done(function() {
				n(a).hide()
			}), m.done(function() {
				var b;
				n._removeData(a, "fxshow");
				for (b in o) n.style(a, b, o[b])
			});
			for (d in o) g = ic(q ? r[d] : 0, d, m), d in r || (r[d] = g.start, q && (g.end = g.start, g.start = "width" === d || "height" === d ? 1 : 0))
		}
	}

	function kc(a, b) {
		var c, d, e, f, g;
		for (c in a)
			if (d = n.camelCase(c), e = b[d], f = a[c], n.isArray(f) && (e = f[1], f = a[c] = f[0]), c !== d && (a[d] = f, delete a[c]), g = n.cssHooks[d], g && "expand" in g) {
				f = g.expand(f), delete a[d];
				for (c in f) c in a || (a[c] = f[c], b[c] = e)
			} else b[d] = e
	}

	function lc(a, b, c) {
		var d, e, f = 0,
			g = ec.length,
			h = n.Deferred().always(function() {
				delete i.elem
			}),
			i = function() {
				if (e) return !1;
				for (var b = _b || gc(), c = Math.max(0, j.startTime + j.duration - b), d = c / j.duration || 0, f = 1 - d, g = 0, i = j.tweens.length; i > g; g++) j.tweens[g].run(f);
				return h.notifyWith(a, [j, f, c]), 1 > f && i ? c : (h.resolveWith(a, [j]), !1)
			},
			j = h.promise({
				elem: a,
				props: n.extend({}, b),
				opts: n.extend(!0, {
					specialEasing: {}
				}, c),
				originalProperties: b,
				originalOptions: c,
				startTime: _b || gc(),
				duration: c.duration,
				tweens: [],
				createTween: function(b, c) {
					var d = n.Tween(a, j.opts, b, c, j.opts.specialEasing[b] || j.opts.easing);
					return j.tweens.push(d), d
				},
				stop: function(b) {
					var c = 0,
						d = b ? j.tweens.length : 0;
					if (e) return this;
					for (e = !0; d > c; c++) j.tweens[c].run(1);
					return b ? h.resolveWith(a, [j, b]) : h.rejectWith(a, [j, b]), this
				}
			}),
			k = j.props;
		for (kc(k, j.opts.specialEasing); g > f; f++)
			if (d = ec[f].call(j, a, k, j.opts)) return d;
		return n.map(k, ic, j), n.isFunction(j.opts.start) && j.opts.start.call(a, j), n.fx.timer(n.extend(i, {
			elem: a,
			anim: j,
			queue: j.opts.queue
		})), j.progress(j.opts.progress).done(j.opts.done, j.opts.complete).fail(j.opts.fail).always(j.opts.always)
	}
	n.Animation = n.extend(lc, {
			tweener: function(a, b) {
				n.isFunction(a) ? (b = a, a = ["*"]) : a = a.split(" ");
				for (var c, d = 0, e = a.length; e > d; d++) c = a[d], fc[c] = fc[c] || [], fc[c].unshift(b)
			},
			prefilter: function(a, b) {
				b ? ec.unshift(a) : ec.push(a)
			}
		}), n.speed = function(a, b, c) {
			var d = a && "object" == typeof a ? n.extend({}, a) : {
				complete: c || !c && b || n.isFunction(a) && a,
				duration: a,
				easing: c && b || b && !n.isFunction(b) && b
			};
			return d.duration = n.fx.off ? 0 : "number" == typeof d.duration ? d.duration : d.duration in n.fx.speeds ? n.fx.speeds[d.duration] : n.fx.speeds._default, (null == d.queue || d.queue === !0) && (d.queue = "fx"), d.old = d.complete, d.complete = function() {
				n.isFunction(d.old) && d.old.call(this), d.queue && n.dequeue(this, d.queue)
			}, d
		}, n.fn.extend({
			fadeTo: function(a, b, c, d) {
				return this.filter(V).css("opacity", 0).show().end().animate({
					opacity: b
				}, a, c, d)
			},
			animate: function(a, b, c, d) {
				var e = n.isEmptyObject(a),
					f = n.speed(b, c, d),
					g = function() {
						var b = lc(this, n.extend({}, a), f);
						(e || n._data(this, "finish")) && b.stop(!0)
					};
				return g.finish = g, e || f.queue === !1 ? this.each(g) : this.queue(f.queue, g)
			},
			stop: function(a, b, c) {
				var d = function(a) {
					var b = a.stop;
					delete a.stop, b(c)
				};
				return "string" != typeof a && (c = b, b = a, a = void 0), b && a !== !1 && this.queue(a || "fx", []), this.each(function() {
					var b = !0,
						e = null != a && a + "queueHooks",
						f = n.timers,
						g = n._data(this);
					if (e) g[e] && g[e].stop && d(g[e]);
					else
						for (e in g) g[e] && g[e].stop && dc.test(e) && d(g[e]);
					for (e = f.length; e--;) f[e].elem !== this || null != a && f[e].queue !== a || (f[e].anim.stop(c), b = !1, f.splice(e, 1));
					(b || !c) && n.dequeue(this, a)
				})
			},
			finish: function(a) {
				return a !== !1 && (a = a || "fx"), this.each(function() {
					var b, c = n._data(this),
						d = c[a + "queue"],
						e = c[a + "queueHooks"],
						f = n.timers,
						g = d ? d.length : 0;
					for (c.finish = !0, n.queue(this, a, []), e && e.stop && e.stop.call(this, !0), b = f.length; b--;) f[b].elem === this && f[b].queue === a && (f[b].anim.stop(!0), f.splice(b, 1));
					for (b = 0; g > b; b++) d[b] && d[b].finish && d[b].finish.call(this);
					delete c.finish
				})
			}
		}), n.each(["toggle", "show", "hide"], function(a, b) {
			var c = n.fn[b];
			n.fn[b] = function(a, d, e) {
				return null == a || "boolean" == typeof a ? c.apply(this, arguments) : this.animate(hc(b, !0), a, d, e)
			}
		}), n.each({
			slideDown: hc("show"),
			slideUp: hc("hide"),
			slideToggle: hc("toggle"),
			fadeIn: {
				opacity: "show"
			},
			fadeOut: {
				opacity: "hide"
			},
			fadeToggle: {
				opacity: "toggle"
			}
		}, function(a, b) {
			n.fn[a] = function(a, c, d) {
				return this.animate(b, a, c, d)
			}
		}), n.timers = [], n.fx.tick = function() {
			var a, b = n.timers,
				c = 0;
			for (_b = n.now(); c < b.length; c++) a = b[c], a() || b[c] !== a || b.splice(c--, 1);
			b.length || n.fx.stop(), _b = void 0
		}, n.fx.timer = function(a) {
			n.timers.push(a), a() ? n.fx.start() : n.timers.pop()
		}, n.fx.interval = 13, n.fx.start = function() {
			ac || (ac = setInterval(n.fx.tick, n.fx.interval))
		}, n.fx.stop = function() {
			clearInterval(ac), ac = null
		}, n.fx.speeds = {
			slow: 600,
			fast: 200,
			_default: 400
		}, n.fn.delay = function(a, b) {
			return a = n.fx ? n.fx.speeds[a] || a : a, b = b || "fx", this.queue(b, function(b, c) {
				var d = setTimeout(b, a);
				c.stop = function() {
					clearTimeout(d)
				}
			})
		},
		function() {
			var a, b, c, d, e = z.createElement("div");
			e.setAttribute("className", "t"), e.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", a = e.getElementsByTagName("a")[0], c = z.createElement("select"), d = c.appendChild(z.createElement("option")), b = e.getElementsByTagName("input")[0], a.style.cssText = "top:1px", l.getSetAttribute = "t" !== e.className, l.style = /top/.test(a.getAttribute("style")), l.hrefNormalized = "/a" === a.getAttribute("href"), l.checkOn = !!b.value, l.optSelected = d.selected, l.enctype = !!z.createElement("form").enctype, c.disabled = !0, l.optDisabled = !d.disabled, b = z.createElement("input"), b.setAttribute("value", ""), l.input = "" === b.getAttribute("value"), b.value = "t", b.setAttribute("type", "radio"), l.radioValue = "t" === b.value, a = b = c = d = e = null
		}();
	var mc = /\r/g;
	n.fn.extend({
		val: function(a) {
			var b, c, d, e = this[0]; {
				if (arguments.length) return d = n.isFunction(a), this.each(function(c) {
					var e;
					1 === this.nodeType && (e = d ? a.call(this, c, n(this).val()) : a, null == e ? e = "" : "number" == typeof e ? e += "" : n.isArray(e) && (e = n.map(e, function(a) {
						return null == a ? "" : a + ""
					})), b = n.valHooks[this.type] || n.valHooks[this.nodeName.toLowerCase()], b && "set" in b && void 0 !== b.set(this, e, "value") || (this.value = e))
				});
				if (e) return b = n.valHooks[e.type] || n.valHooks[e.nodeName.toLowerCase()], b && "get" in b && void 0 !== (c = b.get(e, "value")) ? c : (c = e.value, "string" == typeof c ? c.replace(mc, "") : null == c ? "" : c)
			}
		}
	}), n.extend({
		valHooks: {
			option: {
				get: function(a) {
					var b = n.find.attr(a, "value");
					return null != b ? b : n.text(a)
				}
			},
			select: {
				get: function(a) {
					for (var b, c, d = a.options, e = a.selectedIndex, f = "select-one" === a.type || 0 > e, g = f ? null : [], h = f ? e + 1 : d.length, i = 0 > e ? h : f ? e : 0; h > i; i++)
						if (c = d[i], !(!c.selected && i !== e || (l.optDisabled ? c.disabled : null !== c.getAttribute("disabled")) || c.parentNode.disabled && n.nodeName(c.parentNode, "optgroup"))) {
							if (b = n(c).val(), f) return b;
							g.push(b)
						} return g
				},
				set: function(a, b) {
					var c, d, e = a.options,
						f = n.makeArray(b),
						g = e.length;
					while (g--)
						if (d = e[g], n.inArray(n.valHooks.option.get(d), f) >= 0) try {
							d.selected = c = !0
						} catch (h) {
							d.scrollHeight
						} else d.selected = !1;
					return c || (a.selectedIndex = -1), e
				}
			}
		}
	}), n.each(["radio", "checkbox"], function() {
		n.valHooks[this] = {
			set: function(a, b) {
				return n.isArray(b) ? a.checked = n.inArray(n(a).val(), b) >= 0 : void 0
			}
		}, l.checkOn || (n.valHooks[this].get = function(a) {
			return null === a.getAttribute("value") ? "on" : a.value
		})
	});
	var nc, oc, pc = n.expr.attrHandle,
		qc = /^(?:checked|selected)$/i,
		rc = l.getSetAttribute,
		sc = l.input;
	n.fn.extend({
		attr: function(a, b) {
			return W(this, n.attr, a, b, arguments.length > 1)
		},
		removeAttr: function(a) {
			return this.each(function() {
				n.removeAttr(this, a)
			})
		}
	}), n.extend({
		attr: function(a, b, c) {
			var d, e, f = a.nodeType;
			if (a && 3 !== f && 8 !== f && 2 !== f) return typeof a.getAttribute === L ? n.prop(a, b, c) : (1 === f && n.isXMLDoc(a) || (b = b.toLowerCase(), d = n.attrHooks[b] || (n.expr.match.bool.test(b) ? oc : nc)), void 0 === c ? d && "get" in d && null !== (e = d.get(a, b)) ? e : (e = n.find.attr(a, b), null == e ? void 0 : e) : null !== c ? d && "set" in d && void 0 !== (e = d.set(a, c, b)) ? e : (a.setAttribute(b, c + ""), c) : void n.removeAttr(a, b))
		},
		removeAttr: function(a, b) {
			var c, d, e = 0,
				f = b && b.match(F);
			if (f && 1 === a.nodeType)
				while (c = f[e++]) d = n.propFix[c] || c, n.expr.match.bool.test(c) ? sc && rc || !qc.test(c) ? a[d] = !1 : a[n.camelCase("default-" + c)] = a[d] = !1 : n.attr(a, c, ""), a.removeAttribute(rc ? c : d)
		},
		attrHooks: {
			type: {
				set: function(a, b) {
					if (!l.radioValue && "radio" === b && n.nodeName(a, "input")) {
						var c = a.value;
						return a.setAttribute("type", b), c && (a.value = c), b
					}
				}
			}
		}
	}), oc = {
		set: function(a, b, c) {
			return b === !1 ? n.removeAttr(a, c) : sc && rc || !qc.test(c) ? a.setAttribute(!rc && n.propFix[c] || c, c) : a[n.camelCase("default-" + c)] = a[c] = !0, c
		}
	}, n.each(n.expr.match.bool.source.match(/\w+/g), function(a, b) {
		var c = pc[b] || n.find.attr;
		pc[b] = sc && rc || !qc.test(b) ? function(a, b, d) {
			var e, f;
			return d || (f = pc[b], pc[b] = e, e = null != c(a, b, d) ? b.toLowerCase() : null, pc[b] = f), e
		} : function(a, b, c) {
			return c ? void 0 : a[n.camelCase("default-" + b)] ? b.toLowerCase() : null
		}
	}), sc && rc || (n.attrHooks.value = {
		set: function(a, b, c) {
			return n.nodeName(a, "input") ? void(a.defaultValue = b) : nc && nc.set(a, b, c)
		}
	}), rc || (nc = {
		set: function(a, b, c) {
			var d = a.getAttributeNode(c);
			return d || a.setAttributeNode(d = a.ownerDocument.createAttribute(c)), d.value = b += "", "value" === c || b === a.getAttribute(c) ? b : void 0
		}
	}, pc.id = pc.name = pc.coords = function(a, b, c) {
		var d;
		return c ? void 0 : (d = a.getAttributeNode(b)) && "" !== d.value ? d.value : null
	}, n.valHooks.button = {
		get: function(a, b) {
			var c = a.getAttributeNode(b);
			return c && c.specified ? c.value : void 0
		},
		set: nc.set
	}, n.attrHooks.contenteditable = {
		set: function(a, b, c) {
			nc.set(a, "" === b ? !1 : b, c)
		}
	}, n.each(["width", "height"], function(a, b) {
		n.attrHooks[b] = {
			set: function(a, c) {
				return "" === c ? (a.setAttribute(b, "auto"), c) : void 0
			}
		}
	})), l.style || (n.attrHooks.style = {
		get: function(a) {
			return a.style.cssText || void 0
		},
		set: function(a, b) {
			return a.style.cssText = b + ""
		}
	});
	var tc = /^(?:input|select|textarea|button|object)$/i,
		uc = /^(?:a|area)$/i;
	n.fn.extend({
		prop: function(a, b) {
			return W(this, n.prop, a, b, arguments.length > 1)
		},
		removeProp: function(a) {
			return a = n.propFix[a] || a, this.each(function() {
				try {
					this[a] = void 0, delete this[a]
				} catch (b) {}
			})
		}
	}), n.extend({
		propFix: {
			"for": "htmlFor",
			"class": "className"
		},
		prop: function(a, b, c) {
			var d, e, f, g = a.nodeType;
			if (a && 3 !== g && 8 !== g && 2 !== g) return f = 1 !== g || !n.isXMLDoc(a), f && (b = n.propFix[b] || b, e = n.propHooks[b]), void 0 !== c ? e && "set" in e && void 0 !== (d = e.set(a, c, b)) ? d : a[b] = c : e && "get" in e && null !== (d = e.get(a, b)) ? d : a[b]
		},
		propHooks: {
			tabIndex: {
				get: function(a) {
					var b = n.find.attr(a, "tabindex");
					return b ? parseInt(b, 10) : tc.test(a.nodeName) || uc.test(a.nodeName) && a.href ? 0 : -1
				}
			}
		}
	}), l.hrefNormalized || n.each(["href", "src"], function(a, b) {
		n.propHooks[b] = {
			get: function(a) {
				return a.getAttribute(b, 4)
			}
		}
	}), l.optSelected || (n.propHooks.selected = {
		get: function(a) {
			var b = a.parentNode;
			return b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex), null
		}
	}), n.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function() {
		n.propFix[this.toLowerCase()] = this
	}), l.enctype || (n.propFix.enctype = "encoding");
	var vc = /[\t\r\n\f]/g;
	n.fn.extend({
		addClass: function(a) {
			var b, c, d, e, f, g, h = 0,
				i = this.length,
				j = "string" == typeof a && a;
			if (n.isFunction(a)) return this.each(function(b) {
				n(this).addClass(a.call(this, b, this.className))
			});
			if (j)
				for (b = (a || "").match(F) || []; i > h; h++)
					if (c = this[h], d = 1 === c.nodeType && (c.className ? (" " + c.className + " ").replace(vc, " ") : " ")) {
						f = 0;
						while (e = b[f++]) d.indexOf(" " + e + " ") < 0 && (d += e + " ");
						g = n.trim(d), c.className !== g && (c.className = g)
					} return this
		},
		removeClass: function(a) {
			var b, c, d, e, f, g, h = 0,
				i = this.length,
				j = 0 === arguments.length || "string" == typeof a && a;
			if (n.isFunction(a)) return this.each(function(b) {
				n(this).removeClass(a.call(this, b, this.className))
			});
			if (j)
				for (b = (a || "").match(F) || []; i > h; h++)
					if (c = this[h], d = 1 === c.nodeType && (c.className ? (" " + c.className + " ").replace(vc, " ") : "")) {
						f = 0;
						while (e = b[f++])
							while (d.indexOf(" " + e + " ") >= 0) d = d.replace(" " + e + " ", " ");
						g = a ? n.trim(d) : "", c.className !== g && (c.className = g)
					} return this
		},
		toggleClass: function(a, b) {
			var c = typeof a;
			return "boolean" == typeof b && "string" === c ? b ? this.addClass(a) : this.removeClass(a) : this.each(n.isFunction(a) ? function(c) {
				n(this).toggleClass(a.call(this, c, this.className, b), b)
			} : function() {
				if ("string" === c) {
					var b, d = 0,
						e = n(this),
						f = a.match(F) || [];
					while (b = f[d++]) e.hasClass(b) ? e.removeClass(b) : e.addClass(b)
				} else(c === L || "boolean" === c) && (this.className && n._data(this, "__className__", this.className), this.className = this.className || a === !1 ? "" : n._data(this, "__className__") || "")
			})
		},
		hasClass: function(a) {
			for (var b = " " + a + " ", c = 0, d = this.length; d > c; c++)
				if (1 === this[c].nodeType && (" " + this[c].className + " ").replace(vc, " ").indexOf(b) >= 0) return !0;
			return !1
		}
	}), n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function(a, b) {
		n.fn[b] = function(a, c) {
			return arguments.length > 0 ? this.on(b, null, a, c) : this.trigger(b)
		}
	}), n.fn.extend({
		hover: function(a, b) {
			return this.mouseenter(a).mouseleave(b || a)
		},
		bind: function(a, b, c) {
			return this.on(a, null, b, c)
		},
		unbind: function(a, b) {
			return this.off(a, null, b)
		},
		delegate: function(a, b, c, d) {
			return this.on(b, a, c, d)
		},
		undelegate: function(a, b, c) {
			return 1 === arguments.length ? this.off(a, "**") : this.off(b, a || "**", c)
		}
	});
	var wc = n.now(),
		xc = /\?/,
		yc = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
	n.parseJSON = function(b) {
		if (a.JSON && a.JSON.parse) return a.JSON.parse(b + "");
		var c, d = null,
			e = n.trim(b + "");
		return e && !n.trim(e.replace(yc, function(a, b, e, f) {
			return c && b && (d = 0), 0 === d ? a : (c = e || b, d += !f - !e, "")
		})) ? Function("return " + e)() : n.error("Invalid JSON: " + b)
	}, n.parseXML = function(b) {
		var c, d;
		if (!b || "string" != typeof b) return null;
		try {
			a.DOMParser ? (d = new DOMParser, c = d.parseFromString(b, "text/xml")) : (c = new ActiveXObject("Microsoft.XMLDOM"), c.async = "false", c.loadXML(b))
		} catch (e) {
			c = void 0
		}
		return c && c.documentElement && !c.getElementsByTagName("parsererror").length || n.error("Invalid XML: " + b), c
	};
	var zc, Ac, Bc = /#.*$/,
		Cc = /([?&])_=[^&]*/,
		Dc = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm,
		Ec = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
		Fc = /^(?:GET|HEAD)$/,
		Gc = /^\/\//,
		Hc = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
		Ic = {},
		Jc = {},
		Kc = "*/".concat("*");
	try {
		Ac = location.href
	} catch (Lc) {
		Ac = z.createElement("a"), Ac.href = "", Ac = Ac.href
	}
	zc = Hc.exec(Ac.toLowerCase()) || [];

	function Mc(a) {
		return function(b, c) {
			"string" != typeof b && (c = b, b = "*");
			var d, e = 0,
				f = b.toLowerCase().match(F) || [];
			if (n.isFunction(c))
				while (d = f[e++]) "+" === d.charAt(0) ? (d = d.slice(1) || "*", (a[d] = a[d] || []).unshift(c)) : (a[d] = a[d] || []).push(c)
		}
	}

	function Nc(a, b, c, d) {
		var e = {},
			f = a === Jc;

		function g(h) {
			var i;
			return e[h] = !0, n.each(a[h] || [], function(a, h) {
				var j = h(b, c, d);
				return "string" != typeof j || f || e[j] ? f ? !(i = j) : void 0 : (b.dataTypes.unshift(j), g(j), !1)
			}), i
		}
		return g(b.dataTypes[0]) || !e["*"] && g("*")
	}

	function Oc(a, b) {
		var c, d, e = n.ajaxSettings.flatOptions || {};
		for (d in b) void 0 !== b[d] && ((e[d] ? a : c || (c = {}))[d] = b[d]);
		return c && n.extend(!0, a, c), a
	}

	function Pc(a, b, c) {
		var d, e, f, g, h = a.contents,
			i = a.dataTypes;
		while ("*" === i[0]) i.shift(), void 0 === e && (e = a.mimeType || b.getResponseHeader("Content-Type"));
		if (e)
			for (g in h)
				if (h[g] && h[g].test(e)) {
					i.unshift(g);
					break
				} if (i[0] in c) f = i[0];
		else {
			for (g in c) {
				if (!i[0] || a.converters[g + " " + i[0]]) {
					f = g;
					break
				}
				d || (d = g)
			}
			f = f || d
		}
		return f ? (f !== i[0] && i.unshift(f), c[f]) : void 0
	}

	function Qc(a, b, c, d) {
		var e, f, g, h, i, j = {},
			k = a.dataTypes.slice();
		if (k[1])
			for (g in a.converters) j[g.toLowerCase()] = a.converters[g];
		f = k.shift();
		while (f)
			if (a.responseFields[f] && (c[a.responseFields[f]] = b), !i && d && a.dataFilter && (b = a.dataFilter(b, a.dataType)), i = f, f = k.shift())
				if ("*" === f) f = i;
				else if ("*" !== i && i !== f) {
			if (g = j[i + " " + f] || j["* " + f], !g)
				for (e in j)
					if (h = e.split(" "), h[1] === f && (g = j[i + " " + h[0]] || j["* " + h[0]])) {
						g === !0 ? g = j[e] : j[e] !== !0 && (f = h[0], k.unshift(h[1]));
						break
					} if (g !== !0)
				if (g && a["throws"]) b = g(b);
				else try {
					b = g(b)
				} catch (l) {
					return {
						state: "parsererror",
						error: g ? l : "No conversion from " + i + " to " + f
					}
				}
		}
		return {
			state: "success",
			data: b
		}
	}
	n.extend({
		active: 0,
		lastModified: {},
		etag: {},
		ajaxSettings: {
			url: Ac,
			type: "GET",
			isLocal: Ec.test(zc[1]),
			global: !0,
			processData: !0,
			async: !0,
			contentType: "application/x-www-form-urlencoded; charset=UTF-8",
			accepts: {
				"*": Kc,
				text: "text/plain",
				html: "text/html",
				xml: "application/xml, text/xml",
				json: "application/json, text/javascript"
			},
			contents: {
				xml: /xml/,
				html: /html/,
				json: /json/
			},
			responseFields: {
				xml: "responseXML",
				text: "responseText",
				json: "responseJSON"
			},
			converters: {
				"* text": String,
				"text html": !0,
				"text json": n.parseJSON,
				"text xml": n.parseXML
			},
			flatOptions: {
				url: !0,
				context: !0
			}
		},
		ajaxSetup: function(a, b) {
			return b ? Oc(Oc(a, n.ajaxSettings), b) : Oc(n.ajaxSettings, a)
		},
		ajaxPrefilter: Mc(Ic),
		ajaxTransport: Mc(Jc),
		ajax: function(a, b) {
			"object" == typeof a && (b = a, a = void 0), b = b || {};
			var c, d, e, f, g, h, i, j, k = n.ajaxSetup({}, b),
				l = k.context || k,
				m = k.context && (l.nodeType || l.jquery) ? n(l) : n.event,
				o = n.Deferred(),
				p = n.Callbacks("once memory"),
				q = k.statusCode || {},
				r = {},
				s = {},
				t = 0,
				u = "canceled",
				v = {
					readyState: 0,
					getResponseHeader: function(a) {
						var b;
						if (2 === t) {
							if (!j) {
								j = {};
								while (b = Dc.exec(f)) j[b[1].toLowerCase()] = b[2]
							}
							b = j[a.toLowerCase()]
						}
						return null == b ? null : b
					},
					getAllResponseHeaders: function() {
						return 2 === t ? f : null
					},
					setRequestHeader: function(a, b) {
						var c = a.toLowerCase();
						return t || (a = s[c] = s[c] || a, r[a] = b), this
					},
					overrideMimeType: function(a) {
						return t || (k.mimeType = a), this
					},
					statusCode: function(a) {
						var b;
						if (a)
							if (2 > t)
								for (b in a) q[b] = [q[b], a[b]];
							else v.always(a[v.status]);
						return this
					},
					abort: function(a) {
						var b = a || u;
						return i && i.abort(b), x(0, b), this
					}
				};
			if (o.promise(v).complete = p.add, v.success = v.done, v.error = v.fail, k.url = ((a || k.url || Ac) + "").replace(Bc, "").replace(Gc, zc[1] + "//"), k.type = b.method || b.type || k.method || k.type, k.dataTypes = n.trim(k.dataType || "*").toLowerCase().match(F) || [""], null == k.crossDomain && (c = Hc.exec(k.url.toLowerCase()), k.crossDomain = !(!c || c[1] === zc[1] && c[2] === zc[2] && (c[3] || ("http:" === c[1] ? "80" : "443")) === (zc[3] || ("http:" === zc[1] ? "80" : "443")))), k.data && k.processData && "string" != typeof k.data && (k.data = n.param(k.data, k.traditional)), Nc(Ic, k, b, v), 2 === t) return v;
			h = k.global, h && 0 === n.active++ && n.event.trigger("ajaxStart"), k.type = k.type.toUpperCase(), k.hasContent = !Fc.test(k.type), e = k.url, k.hasContent || (k.data && (e = k.url += (xc.test(e) ? "&" : "?") + k.data, delete k.data), k.cache === !1 && (k.url = Cc.test(e) ? e.replace(Cc, "$1_=" + wc++) : e + (xc.test(e) ? "&" : "?") + "_=" + wc++)), k.ifModified && (n.lastModified[e] && v.setRequestHeader("If-Modified-Since", n.lastModified[e]), n.etag[e] && v.setRequestHeader("If-None-Match", n.etag[e])), (k.data && k.hasContent && k.contentType !== !1 || b.contentType) && v.setRequestHeader("Content-Type", k.contentType), v.setRequestHeader("Accept", k.dataTypes[0] && k.accepts[k.dataTypes[0]] ? k.accepts[k.dataTypes[0]] + ("*" !== k.dataTypes[0] ? ", " + Kc + "; q=0.01" : "") : k.accepts["*"]);
			for (d in k.headers) v.setRequestHeader(d, k.headers[d]);
			if (k.beforeSend && (k.beforeSend.call(l, v, k) === !1 || 2 === t)) return v.abort();
			u = "abort";
			for (d in {
					success: 1,
					error: 1,
					complete: 1
				}) v[d](k[d]);
			if (i = Nc(Jc, k, b, v)) {
				v.readyState = 1, h && m.trigger("ajaxSend", [v, k]), k.async && k.timeout > 0 && (g = setTimeout(function() {
					v.abort("timeout")
				}, k.timeout));
				try {
					t = 1, i.send(r, x)
				} catch (w) {
					if (!(2 > t)) throw w;
					x(-1, w)
				}
			} else x(-1, "No Transport");

			function x(a, b, c, d) {
				var j, r, s, u, w, x = b;
				2 !== t && (t = 2, g && clearTimeout(g), i = void 0, f = d || "", v.readyState = a > 0 ? 4 : 0, j = a >= 200 && 300 > a || 304 === a, c && (u = Pc(k, v, c)), u = Qc(k, u, v, j), j ? (k.ifModified && (w = v.getResponseHeader("Last-Modified"), w && (n.lastModified[e] = w), w = v.getResponseHeader("etag"), w && (n.etag[e] = w)), 204 === a || "HEAD" === k.type ? x = "nocontent" : 304 === a ? x = "notmodified" : (x = u.state, r = u.data, s = u.error, j = !s)) : (s = x, (a || !x) && (x = "error", 0 > a && (a = 0))), v.status = a, v.statusText = (b || x) + "", j ? o.resolveWith(l, [r, x, v]) : o.rejectWith(l, [v, x, s]), v.statusCode(q), q = void 0, h && m.trigger(j ? "ajaxSuccess" : "ajaxError", [v, k, j ? r : s]), p.fireWith(l, [v, x]), h && (m.trigger("ajaxComplete", [v, k]), --n.active || n.event.trigger("ajaxStop")))
			}
			return v
		},
		getJSON: function(a, b, c) {
			return n.get(a, b, c, "json")
		},
		getScript: function(a, b) {
			return n.get(a, void 0, b, "script")
		}
	}), n.each(["get", "post"], function(a, b) {
		n[b] = function(a, c, d, e) {
			return n.isFunction(c) && (e = e || d, d = c, c = void 0), n.ajax({
				url: a,
				type: b,
				dataType: e,
				data: c,
				success: d
			})
		}
	}), n.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(a, b) {
		n.fn[b] = function(a) {
			return this.on(b, a)
		}
	}), n._evalUrl = function(a) {
		return n.ajax({
			url: a,
			type: "GET",
			dataType: "script",
			async: !1,
			global: !1,
			"throws": !0
		})
	}, n.fn.extend({
		wrapAll: function(a) {
			if (n.isFunction(a)) return this.each(function(b) {
				n(this).wrapAll(a.call(this, b))
			});
			if (this[0]) {
				var b = n(a, this[0].ownerDocument).eq(0).clone(!0);
				this[0].parentNode && b.insertBefore(this[0]), b.map(function() {
					var a = this;
					while (a.firstChild && 1 === a.firstChild.nodeType) a = a.firstChild;
					return a
				}).append(this)
			}
			return this
		},
		wrapInner: function(a) {
			return this.each(n.isFunction(a) ? function(b) {
				n(this).wrapInner(a.call(this, b))
			} : function() {
				var b = n(this),
					c = b.contents();
				c.length ? c.wrapAll(a) : b.append(a)
			})
		},
		wrap: function(a) {
			var b = n.isFunction(a);
			return this.each(function(c) {
				n(this).wrapAll(b ? a.call(this, c) : a)
			})
		},
		unwrap: function() {
			return this.parent().each(function() {
				n.nodeName(this, "body") || n(this).replaceWith(this.childNodes)
			}).end()
		}
	}), n.expr.filters.hidden = function(a) {
		return a.offsetWidth <= 0 && a.offsetHeight <= 0 || !l.reliableHiddenOffsets() && "none" === (a.style && a.style.display || n.css(a, "display"))
	}, n.expr.filters.visible = function(a) {
		return !n.expr.filters.hidden(a)
	};
	var Rc = /%20/g,
		Sc = /\[\]$/,
		Tc = /\r?\n/g,
		Uc = /^(?:submit|button|image|reset|file)$/i,
		Vc = /^(?:input|select|textarea|keygen)/i;

	function Wc(a, b, c, d) {
		var e;
		if (n.isArray(b)) n.each(b, function(b, e) {
			c || Sc.test(a) ? d(a, e) : Wc(a + "[" + ("object" == typeof e ? b : "") + "]", e, c, d)
		});
		else if (c || "object" !== n.type(b)) d(a, b);
		else
			for (e in b) Wc(a + "[" + e + "]", b[e], c, d)
	}
	n.param = function(a, b) {
		var c, d = [],
			e = function(a, b) {
				b = n.isFunction(b) ? b() : null == b ? "" : b, d[d.length] = encodeURIComponent(a) + "=" + encodeURIComponent(b)
			};
		if (void 0 === b && (b = n.ajaxSettings && n.ajaxSettings.traditional), n.isArray(a) || a.jquery && !n.isPlainObject(a)) n.each(a, function() {
			e(this.name, this.value)
		});
		else
			for (c in a) Wc(c, a[c], b, e);
		return d.join("&").replace(Rc, "+")
	}, n.fn.extend({
		serialize: function() {
			return n.param(this.serializeArray())
		},
		serializeArray: function() {
			return this.map(function() {
				var a = n.prop(this, "elements");
				return a ? n.makeArray(a) : this
			}).filter(function() {
				var a = this.type;
				return this.name && !n(this).is(":disabled") && Vc.test(this.nodeName) && !Uc.test(a) && (this.checked || !X.test(a))
			}).map(function(a, b) {
				var c = n(this).val();
				return null == c ? null : n.isArray(c) ? n.map(c, function(a) {
					return {
						name: b.name,
						value: a.replace(Tc, "\r\n")
					}
				}) : {
					name: b.name,
					value: c.replace(Tc, "\r\n")
				}
			}).get()
		}
	}), n.ajaxSettings.xhr = void 0 !== a.ActiveXObject ? function() {
		return !this.isLocal && /^(get|post|head|put|delete|options)$/i.test(this.type) && $c() || _c()
	} : $c;
	var Xc = 0,
		Yc = {},
		Zc = n.ajaxSettings.xhr();
	a.ActiveXObject && n(a).on("unload", function() {
		for (var a in Yc) Yc[a](void 0, !0)
	}), l.cors = !!Zc && "withCredentials" in Zc, Zc = l.ajax = !!Zc, Zc && n.ajaxTransport(function(a) {
		if (!a.crossDomain || l.cors) {
			var b;
			return {
				send: function(c, d) {
					var e, f = a.xhr(),
						g = ++Xc;
					if (f.open(a.type, a.url, a.async, a.username, a.password), a.xhrFields)
						for (e in a.xhrFields) f[e] = a.xhrFields[e];
					a.mimeType && f.overrideMimeType && f.overrideMimeType(a.mimeType), a.crossDomain || c["X-Requested-With"] || (c["X-Requested-With"] = "XMLHttpRequest");
					for (e in c) void 0 !== c[e] && f.setRequestHeader(e, c[e] + "");
					f.send(a.hasContent && a.data || null), b = function(c, e) {
						var h, i, j;
						if (b && (e || 4 === f.readyState))
							if (delete Yc[g], b = void 0, f.onreadystatechange = n.noop, e) 4 !== f.readyState && f.abort();
							else {
								j = {}, h = f.status, "string" == typeof f.responseText && (j.text = f.responseText);
								try {
									i = f.statusText
								} catch (k) {
									i = ""
								}
								h || !a.isLocal || a.crossDomain ? 1223 === h && (h = 204) : h = j.text ? 200 : 404
							} j && d(h, i, j, f.getAllResponseHeaders())
					}, a.async ? 4 === f.readyState ? setTimeout(b) : f.onreadystatechange = Yc[g] = b : b()
				},
				abort: function() {
					b && b(void 0, !0)
				}
			}
		}
	});

	function $c() {
		try {
			return new a.XMLHttpRequest
		} catch (b) {}
	}

	function _c() {
		try {
			return new a.ActiveXObject("Microsoft.XMLHTTP")
		} catch (b) {}
	}
	n.ajaxSetup({
		accepts: {
			script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
		},
		contents: {
			script: /(?:java|ecma)script/
		},
		converters: {
			"text script": function(a) {
				return n.globalEval(a), a
			}
		}
	}), n.ajaxPrefilter("script", function(a) {
		void 0 === a.cache && (a.cache = !1), a.crossDomain && (a.type = "GET", a.global = !1)
	}), n.ajaxTransport("script", function(a) {
		if (a.crossDomain) {
			var b, c = z.head || n("head")[0] || z.documentElement;
			return {
				send: function(d, e) {
					b = z.createElement("script"), b.async = !0, a.scriptCharset && (b.charset = a.scriptCharset), b.src = a.url, b.onload = b.onreadystatechange = function(a, c) {
						(c || !b.readyState || /loaded|complete/.test(b.readyState)) && (b.onload = b.onreadystatechange = null, b.parentNode && b.parentNode.removeChild(b), b = null, c || e(200, "success"))
					}, c.insertBefore(b, c.firstChild)
				},
				abort: function() {
					b && b.onload(void 0, !0)
				}
			}
		}
	});
	var ad = [],
		bd = /(=)\?(?=&|$)|\?\?/;
	n.ajaxSetup({
		jsonp: "callback",
		jsonpCallback: function() {
			var a = ad.pop() || n.expando + "_" + wc++;
			return this[a] = !0, a
		}
	}), n.ajaxPrefilter("json jsonp", function(b, c, d) {
		var e, f, g, h = b.jsonp !== !1 && (bd.test(b.url) ? "url" : "string" == typeof b.data && !(b.contentType || "").indexOf("application/x-www-form-urlencoded") && bd.test(b.data) && "data");
		return h || "jsonp" === b.dataTypes[0] ? (e = b.jsonpCallback = n.isFunction(b.jsonpCallback) ? b.jsonpCallback() : b.jsonpCallback, h ? b[h] = b[h].replace(bd, "$1" + e) : b.jsonp !== !1 && (b.url += (xc.test(b.url) ? "&" : "?") + b.jsonp + "=" + e), b.converters["script json"] = function() {
			return g || n.error(e + " was not called"), g[0]
		}, b.dataTypes[0] = "json", f = a[e], a[e] = function() {
			g = arguments
		}, d.always(function() {
			a[e] = f, b[e] && (b.jsonpCallback = c.jsonpCallback, ad.push(e)), g && n.isFunction(f) && f(g[0]), g = f = void 0
		}), "script") : void 0
	}), n.parseHTML = function(a, b, c) {
		if (!a || "string" != typeof a) return null;
		"boolean" == typeof b && (c = b, b = !1), b = b || z;
		var d = v.exec(a),
			e = !c && [];
		return d ? [b.createElement(d[1])] : (d = n.buildFragment([a], b, e), e && e.length && n(e).remove(), n.merge([], d.childNodes))
	};
	var cd = n.fn.load;
	n.fn.load = function(a, b, c) {
		if ("string" != typeof a && cd) return cd.apply(this, arguments);
		var d, e, f, g = this,
			h = a.indexOf(" ");
		return h >= 0 && (d = a.slice(h, a.length), a = a.slice(0, h)), n.isFunction(b) ? (c = b, b = void 0) : b && "object" == typeof b && (f = "POST"), g.length > 0 && n.ajax({
			url: a,
			type: f,
			dataType: "html",
			data: b
		}).done(function(a) {
			e = arguments, g.html(d ? n("<div>").append(n.parseHTML(a)).find(d) : a)
		}).complete(c && function(a, b) {
			g.each(c, e || [a.responseText, b, a])
		}), this
	}, n.expr.filters.animated = function(a) {
		return n.grep(n.timers, function(b) {
			return a === b.elem
		}).length
	};
	var dd = a.document.documentElement;

	function ed(a) {
		return n.isWindow(a) ? a : 9 === a.nodeType ? a.defaultView || a.parentWindow : !1
	}
	n.offset = {
		setOffset: function(a, b, c) {
			var d, e, f, g, h, i, j, k = n.css(a, "position"),
				l = n(a),
				m = {};
			"static" === k && (a.style.position = "relative"), h = l.offset(), f = n.css(a, "top"), i = n.css(a, "left"), j = ("absolute" === k || "fixed" === k) && n.inArray("auto", [f, i]) > -1, j ? (d = l.position(), g = d.top, e = d.left) : (g = parseFloat(f) || 0, e = parseFloat(i) || 0), n.isFunction(b) && (b = b.call(a, c, h)), null != b.top && (m.top = b.top - h.top + g), null != b.left && (m.left = b.left - h.left + e), "using" in b ? b.using.call(a, m) : l.css(m)
		}
	}, n.fn.extend({
		offset: function(a) {
			if (arguments.length) return void 0 === a ? this : this.each(function(b) {
				n.offset.setOffset(this, a, b)
			});
			var b, c, d = {
					top: 0,
					left: 0
				},
				e = this[0],
				f = e && e.ownerDocument;
			if (f) return b = f.documentElement, n.contains(b, e) ? (typeof e.getBoundingClientRect !== L && (d = e.getBoundingClientRect()), c = ed(f), {
				top: d.top + (c.pageYOffset || b.scrollTop) - (b.clientTop || 0),
				left: d.left + (c.pageXOffset || b.scrollLeft) - (b.clientLeft || 0)
			}) : d
		},
		position: function() {
			if (this[0]) {
				var a, b, c = {
						top: 0,
						left: 0
					},
					d = this[0];
				return "fixed" === n.css(d, "position") ? b = d.getBoundingClientRect() : (a = this.offsetParent(), b = this.offset(), n.nodeName(a[0], "html") || (c = a.offset()), c.top += n.css(a[0], "borderTopWidth", !0), c.left += n.css(a[0], "borderLeftWidth", !0)), {
					top: b.top - c.top - n.css(d, "marginTop", !0),
					left: b.left - c.left - n.css(d, "marginLeft", !0)
				}
			}
		},
		offsetParent: function() {
			return this.map(function() {
				var a = this.offsetParent || dd;
				while (a && !n.nodeName(a, "html") && "static" === n.css(a, "position")) a = a.offsetParent;
				return a || dd
			})
		}
	}), n.each({
		scrollLeft: "pageXOffset",
		scrollTop: "pageYOffset"
	}, function(a, b) {
		var c = /Y/.test(b);
		n.fn[a] = function(d) {
			return W(this, function(a, d, e) {
				var f = ed(a);
				return void 0 === e ? f ? b in f ? f[b] : f.document.documentElement[d] : a[d] : void(f ? f.scrollTo(c ? n(f).scrollLeft() : e, c ? e : n(f).scrollTop()) : a[d] = e)
			}, a, d, arguments.length, null)
		}
	}), n.each(["top", "left"], function(a, b) {
		n.cssHooks[b] = Mb(l.pixelPosition, function(a, c) {
			return c ? (c = Kb(a, b), Ib.test(c) ? n(a).position()[b] + "px" : c) : void 0
		})
	}), n.each({
		Height: "height",
		Width: "width"
	}, function(a, b) {
		n.each({
			padding: "inner" + a,
			content: b,
			"": "outer" + a
		}, function(c, d) {
			n.fn[d] = function(d, e) {
				var f = arguments.length && (c || "boolean" != typeof d),
					g = c || (d === !0 || e === !0 ? "margin" : "border");
				return W(this, function(b, c, d) {
					var e;
					return n.isWindow(b) ? b.document.documentElement["client" + a] : 9 === b.nodeType ? (e = b.documentElement, Math.max(b.body["scroll" + a], e["scroll" + a], b.body["offset" + a], e["offset" + a], e["client" + a])) : void 0 === d ? n.css(b, c, g) : n.style(b, c, d, g)
				}, b, f ? d : void 0, f, null)
			}
		})
	}), n.fn.size = function() {
		return this.length
	}, n.fn.andSelf = n.fn.addBack, "function" == typeof define && define.amd && define("jquery", [], function() {
		return n
	});
	var fd = a.jQuery,
		gd = a.$;
	return n.noConflict = function(b) {
		return a.$ === n && (a.$ = gd), b && a.jQuery === n && (a.jQuery = fd), n
	}, typeof b === L && (a.jQuery = a.$ = n), n
});
(function(Z, Q, r) {
	"use strict";

	function F(b) {
		return function() {
			var a = arguments[0],
				c, a = "[" + (b ? b + ":" : "") + a + "] http://errors.angularjs.org/1.2.10/" + (b ? b + "/" : "") + a;
			for (c = 1; c < arguments.length; c++) a = a + (1 == c ? "?" : "&") + "p" + (c - 1) + "=" + encodeURIComponent("function" == typeof arguments[c] ? arguments[c].toString().replace(/ \{[\s\S]*$/, "") : "undefined" == typeof arguments[c] ? "undefined" : "string" != typeof arguments[c] ? JSON.stringify(arguments[c]) : arguments[c]);
			return Error(a)
		}
	}

	function rb(b) {
		if (null == b || Aa(b)) return !1;
		var a = b.length;
		return 1 === b.nodeType && a ? !0 : D(b) || K(b) || 0 === a || "number" === typeof a && 0 < a && a - 1 in b
	}

	function q(b, a, c) {
		var d;
		if (b)
			if (L(b))
				for (d in b) "prototype" == d || ("length" == d || "name" == d || b.hasOwnProperty && !b.hasOwnProperty(d)) || a.call(c, b[d], d);
			else if (b.forEach && b.forEach !== q) b.forEach(a, c);
		else if (rb(b))
			for (d = 0; d < b.length; d++) a.call(c, b[d], d);
		else
			for (d in b) b.hasOwnProperty(d) && a.call(c, b[d], d);
		return b
	}

	function Pb(b) {
		var a = [],
			c;
		for (c in b) b.hasOwnProperty(c) && a.push(c);
		return a.sort()
	}

	function Pc(b, a, c) {
		for (var d = Pb(b), e = 0; e < d.length; e++) a.call(c, b[d[e]], d[e]);
		return d
	}

	function Qb(b) {
		return function(a, c) {
			b(c, a)
		}
	}

	function $a() {
		for (var b = ka.length, a; b;) {
			b--;
			a = ka[b].charCodeAt(0);
			if (57 == a) return ka[b] = "A", ka.join("");
			if (90 == a) ka[b] = "0";
			else return ka[b] = String.fromCharCode(a + 1), ka.join("")
		}
		ka.unshift("0");
		return ka.join("")
	}

	function Rb(b, a) {
		a ? b.$$hashKey = a : delete b.$$hashKey
	}

	function t(b) {
		var a = b.$$hashKey;
		q(arguments, function(a) {
			a !== b && q(a, function(a, c) {
				b[c] = a
			})
		});
		Rb(b, a);
		return b
	}

	function S(b) {
		return parseInt(b, 10)
	}

	function Sb(b, a) {
		return t(new(t(function() {}, {
			prototype: b
		})), a)
	}

	function w() {}

	function Ba(b) {
		return b
	}

	function $(b) {
		return function() {
			return b
		}
	}

	function z(b) {
		return "undefined" === typeof b
	}

	function B(b) {
		return "undefined" !== typeof b
	}

	function X(b) {
		return null != b && "object" === typeof b
	}

	function D(b) {
		return "string" === typeof b
	}

	function sb(b) {
		return "number" === typeof b
	}

	function La(b) {
		return "[object Date]" === Ma.call(b)
	}

	function K(b) {
		return "[object Array]" === Ma.call(b)
	}

	function L(b) {
		return "function" === typeof b
	}

	function ab(b) {
		return "[object RegExp]" === Ma.call(b)
	}

	function Aa(b) {
		return b && b.document && b.location && b.alert && b.setInterval
	}

	function Qc(b) {
		return !(!b || !(b.nodeName || b.on && b.find))
	}

	function Rc(b, a, c) {
		var d = [];
		q(b, function(b, g, f) {
			d.push(a.call(c, b, g, f))
		});
		return d
	}

	function bb(b, a) {
		if (b.indexOf) return b.indexOf(a);
		for (var c = 0; c < b.length; c++)
			if (a === b[c]) return c;
		return -1
	}

	function Na(b, a) {
		var c = bb(b, a);
		0 <= c && b.splice(c, 1);
		return a
	}

	function aa(b, a) {
		if (Aa(b) || b && b.$evalAsync && b.$watch) throw Oa("cpws");
		if (a) {
			if (b === a) throw Oa("cpi");
			if (K(b))
				for (var c = a.length = 0; c < b.length; c++) a.push(aa(b[c]));
			else {
				c = a.$$hashKey;
				q(a, function(b, c) {
					delete a[c]
				});
				for (var d in b) a[d] = aa(b[d]);
				Rb(a, c)
			}
		} else(a = b) && (K(b) ? a = aa(b, []) : La(b) ? a = new Date(b.getTime()) : ab(b) ? a = RegExp(b.source) : X(b) && (a = aa(b, {})));
		return a
	}

	function Tb(b, a) {
		a = a || {};
		for (var c in b) b.hasOwnProperty(c) && ("$" !== c.charAt(0) && "$" !== c.charAt(1)) && (a[c] = b[c]);
		return a
	}

	function ua(b, a) {
		if (b === a) return !0;
		if (null === b || null === a) return !1;
		if (b !== b && a !== a) return !0;
		var c = typeof b,
			d;
		if (c == typeof a && "object" == c)
			if (K(b)) {
				if (!K(a)) return !1;
				if ((c = b.length) == a.length) {
					for (d = 0; d < c; d++)
						if (!ua(b[d], a[d])) return !1;
					return !0
				}
			} else {
				if (La(b)) return La(a) && b.getTime() == a.getTime();
				if (ab(b) && ab(a)) return b.toString() == a.toString();
				if (b && b.$evalAsync && b.$watch || a && a.$evalAsync && a.$watch || Aa(b) || Aa(a) || K(a)) return !1;
				c = {};
				for (d in b)
					if ("$" !== d.charAt(0) && !L(b[d])) {
						if (!ua(b[d], a[d])) return !1;
						c[d] = !0
					} for (d in a)
					if (!c.hasOwnProperty(d) && "$" !== d.charAt(0) && a[d] !== r && !L(a[d])) return !1;
				return !0
			} return !1
	}

	function Ub() {
		return Q.securityPolicy && Q.securityPolicy.isActive || Q.querySelector && !(!Q.querySelector("[ng-csp]") && !Q.querySelector("[data-ng-csp]"))
	}

	function cb(b, a) {
		var c = 2 < arguments.length ? va.call(arguments, 2) : [];
		return !L(a) || a instanceof RegExp ? a : c.length ? function() {
			return arguments.length ? a.apply(b, c.concat(va.call(arguments, 0))) : a.apply(b, c)
		} : function() {
			return arguments.length ? a.apply(b, arguments) : a.call(b)
		}
	}

	function Sc(b, a) {
		var c = a;
		"string" === typeof b && "$" === b.charAt(0) ? c = r : Aa(a) ? c = "$WINDOW" : a && Q === a ? c = "$DOCUMENT" : a && (a.$evalAsync && a.$watch) && (c = "$SCOPE");
		return c
	}

	function qa(b, a) {
		return "undefined" === typeof b ? r : JSON.stringify(b, Sc, a ? "  " : null)
	}

	function Vb(b) {
		return D(b) ? JSON.parse(b) : b
	}

	function Pa(b) {
		"function" === typeof b ? b = !0 : b && 0 !== b.length ? (b = x("" + b), b = !("f" == b || "0" == b || "false" == b || "no" == b || "n" == b || "[]" == b)) : b = !1;
		return b
	}

	function ga(b) {
		b = A(b).clone();
		try {
			b.empty()
		} catch (a) {}
		var c = A("<div>").append(b).html();
		try {
			return 3 === b[0].nodeType ? x(c) : c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/, function(a, b) {
				return "<" + x(b)
			})
		} catch (d) {
			return x(c)
		}
	}

	function Wb(b) {
		try {
			return decodeURIComponent(b)
		} catch (a) {}
	}

	function Xb(b) {
		var a = {},
			c, d;
		q((b || "").split("&"), function(b) {
			b && (c = b.split("="), d = Wb(c[0]), B(d) && (b = B(c[1]) ? Wb(c[1]) : !0, a[d] ? K(a[d]) ? a[d].push(b) : a[d] = [a[d], b] : a[d] = b))
		});
		return a
	}

	function Yb(b) {
		var a = [];
		q(b, function(b, d) {
			K(b) ? q(b, function(b) {
				a.push(wa(d, !0) + (!0 === b ? "" : "=" + wa(b, !0)))
			}) : a.push(wa(d, !0) + (!0 === b ? "" : "=" + wa(b, !0)))
		});
		return a.length ? a.join("&") : ""
	}

	function tb(b) {
		return wa(b, !0).replace(/%26/gi, "&").replace(/%3D/gi, "=").replace(/%2B/gi, "+")
	}

	function wa(b, a) {
		return encodeURIComponent(b).replace(/%40/gi, "@").replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, a ? "%20" : "+")
	}

	function Tc(b, a) {
		function c(a) {
			a && d.push(a)
		}
		var d = [b],
			e, g, f = ["ng:app", "ng-app", "x-ng-app", "data-ng-app"],
			h = /\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;
		q(f, function(a) {
			f[a] = !0;
			c(Q.getElementById(a));
			a = a.replace(":", "\\:");
			b.querySelectorAll && (q(b.querySelectorAll("." + a), c), q(b.querySelectorAll("." + a + "\\:"), c), q(b.querySelectorAll("[" + a + "]"), c))
		});
		q(d, function(a) {
			if (!e) {
				var b = h.exec(" " + a.className + " ");
				b ? (e = a, g = (b[2] || "").replace(/\s+/g, ",")) : q(a.attributes, function(b) {
					!e && f[b.name] && (e = a, g = b.value)
				})
			}
		});
		e && a(e, g ? [g] : [])
	}

	function Zb(b, a) {
		var c = function() {
				b = A(b);
				if (b.injector()) {
					var c = b[0] === Q ? "document" : ga(b);
					throw Oa("btstrpd", c)
				}
				a = a || [];
				a.unshift(["$provide", function(a) {
					a.value("$rootElement", b)
				}]);
				a.unshift("ng");
				c = $b(a);
				c.invoke(["$rootScope", "$rootElement", "$compile", "$injector", "$animate", function(a, b, c, d, e) {
					a.$apply(function() {
						b.data("$injector", d);
						c(b)(a)
					})
				}]);
				return c
			},
			d = /^NG_DEFER_BOOTSTRAP!/;
		if (Z && !d.test(Z.name)) return c();
		Z.name = Z.name.replace(d, "");
		Ca.resumeBootstrap = function(b) {
			q(b, function(b) {
				a.push(b)
			});
			c()
		}
	}

	function db(b, a) {
		a = a || "_";
		return b.replace(Uc, function(b, d) {
			return (d ? a : "") + b.toLowerCase()
		})
	}

	function ub(b, a, c) {
		if (!b) throw Oa("areq", a || "?", c || "required");
		return b
	}

	function Qa(b, a, c) {
		c && K(b) && (b = b[b.length - 1]);
		ub(L(b), a, "not a function, got " + (b && "object" == typeof b ? b.constructor.name || "Object" : typeof b));
		return b
	}

	function xa(b, a) {
		if ("hasOwnProperty" === b) throw Oa("badname", a)
	}

	function vb(b, a, c) {
		if (!a) return b;
		a = a.split(".");
		for (var d, e = b, g = a.length, f = 0; f < g; f++) d = a[f], b && (b = (e = b)[d]);
		return !c && L(b) ? cb(e, b) : b
	}

	function wb(b) {
		var a = b[0];
		b = b[b.length - 1];
		if (a === b) return A(a);
		var c = [a];
		do {
			a = a.nextSibling;
			if (!a) break;
			c.push(a)
		} while (a !== b);
		return A(c)
	}

	function Vc(b) {
		var a = F("$injector"),
			c = F("ng");
		b = b.angular || (b.angular = {});
		b.$$minErr = b.$$minErr || F;
		return b.module || (b.module = function() {
			var b = {};
			return function(e, g, f) {
				if ("hasOwnProperty" === e) throw c("badname", "module");
				g && b.hasOwnProperty(e) && (b[e] = null);
				return b[e] || (b[e] = function() {
					function b(a, d, e) {
						return function() {
							c[e || "push"]([a, d, arguments]);
							return n
						}
					}
					if (!g) throw a("nomod", e);
					var c = [],
						d = [],
						l = b("$injector", "invoke"),
						n = {
							_invokeQueue: c,
							_runBlocks: d,
							requires: g,
							name: e,
							provider: b("$provide", "provider"),
							factory: b("$provide", "factory"),
							service: b("$provide", "service"),
							value: b("$provide", "value"),
							constant: b("$provide", "constant", "unshift"),
							animation: b("$animateProvider", "register"),
							filter: b("$filterProvider", "register"),
							controller: b("$controllerProvider", "register"),
							directive: b("$compileProvider", "directive"),
							config: l,
							run: function(a) {
								d.push(a);
								return this
							}
						};
					f && l(f);
					return n
				}())
			}
		}())
	}

	function Ra(b) {
		return b.replace(Wc, function(a, b, d, e) {
			return e ? d.toUpperCase() : d
		}).replace(Xc, "Moz$1")
	}

	function xb(b, a, c, d) {
		function e(b) {
			var e = c && b ? [this.filter(b)] : [this],
				m = a,
				k, l, n, p, s, C;
			if (!d || null != b)
				for (; e.length;)
					for (k = e.shift(), l = 0, n = k.length; l < n; l++)
						for (p = A(k[l]), m ? p.triggerHandler("$destroy") : m = !m, s = 0, p = (C = p.children()).length; s < p; s++) e.push(Da(C[s]));
			return g.apply(this, arguments)
		}
		var g = Da.fn[b],
			g = g.$original || g;
		e.$original = g;
		Da.fn[b] = e
	}

	function O(b) {
		if (b instanceof O) return b;
		if (!(this instanceof O)) {
			if (D(b) && "<" != b.charAt(0)) throw yb("nosel");
			return new O(b)
		}
		if (D(b)) {
			var a = Q.createElement("div");
			a.innerHTML = "<div>&#160;</div>" + b;
			a.removeChild(a.firstChild);
			zb(this, a.childNodes);
			A(Q.createDocumentFragment()).append(this)
		} else zb(this, b)
	}

	function Ab(b) {
		return b.cloneNode(!0)
	}

	function Ea(b) {
		ac(b);
		var a = 0;
		for (b = b.childNodes || []; a < b.length; a++) Ea(b[a])
	}

	function bc(b, a, c, d) {
		if (B(d)) throw yb("offargs");
		var e = la(b, "events");
		la(b, "handle") && (z(a) ? q(e, function(a, c) {
			Bb(b, c, a);
			delete e[c]
		}) : q(a.split(" "), function(a) {
			z(c) ? (Bb(b, a, e[a]), delete e[a]) : Na(e[a] || [], c)
		}))
	}

	function ac(b, a) {
		var c = b[eb],
			d = Sa[c];
		d && (a ? delete Sa[c].data[a] : (d.handle && (d.events.$destroy && d.handle({}, "$destroy"), bc(b)), delete Sa[c], b[eb] = r))
	}

	function la(b, a, c) {
		var d = b[eb],
			d = Sa[d || -1];
		if (B(c)) d || (b[eb] = d = ++Yc, d = Sa[d] = {}), d[a] = c;
		else return d && d[a]
	}

	function cc(b, a, c) {
		var d = la(b, "data"),
			e = B(c),
			g = !e && B(a),
			f = g && !X(a);
		d || f || la(b, "data", d = {});
		if (e) d[a] = c;
		else if (g) {
			if (f) return d && d[a];
			t(d, a)
		} else return d
	}

	function Cb(b, a) {
		return b.getAttribute ? -1 < (" " + (b.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ").indexOf(" " + a + " ") : !1
	}

	function Db(b, a) {
		a && b.setAttribute && q(a.split(" "), function(a) {
			b.setAttribute("class", ba((" " + (b.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ").replace(" " + ba(a) + " ", " ")))
		})
	}

	function Eb(b, a) {
		if (a && b.setAttribute) {
			var c = (" " + (b.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ");
			q(a.split(" "), function(a) {
				a = ba(a); - 1 === c.indexOf(" " + a + " ") && (c += a + " ")
			});
			b.setAttribute("class", ba(c))
		}
	}

	function zb(b, a) {
		if (a) {
			a = a.nodeName || !B(a.length) || Aa(a) ? [a] : a;
			for (var c = 0; c < a.length; c++) b.push(a[c])
		}
	}

	function dc(b, a) {
		return fb(b, "$" + (a || "ngController") + "Controller")
	}

	function fb(b, a, c) {
		b = A(b);
		9 == b[0].nodeType && (b = b.find("html"));
		for (a = K(a) ? a : [a]; b.length;) {
			for (var d = 0, e = a.length; d < e; d++)
				if ((c = b.data(a[d])) !== r) return c;
			b = b.parent()
		}
	}

	function ec(b) {
		for (var a = 0, c = b.childNodes; a < c.length; a++) Ea(c[a]);
		for (; b.firstChild;) b.removeChild(b.firstChild)
	}

	function fc(b, a) {
		var c = gb[a.toLowerCase()];
		return c && gc[b.nodeName] && c
	}

	function Zc(b, a) {
		var c = function(c, e) {
			c.preventDefault || (c.preventDefault = function() {
				c.returnValue = !1
			});
			c.stopPropagation || (c.stopPropagation = function() {
				c.cancelBubble = !0
			});
			c.target || (c.target = c.srcElement || Q);
			if (z(c.defaultPrevented)) {
				var g = c.preventDefault;
				c.preventDefault = function() {
					c.defaultPrevented = !0;
					g.call(c)
				};
				c.defaultPrevented = !1
			}
			c.isDefaultPrevented = function() {
				return c.defaultPrevented || !1 === c.returnValue
			};
			var f = Tb(a[e || c.type] || []);
			q(f, function(a) {
				a.call(b, c)
			});
			8 >= M ? (c.preventDefault = null, c.stopPropagation = null, c.isDefaultPrevented = null) : (delete c.preventDefault, delete c.stopPropagation, delete c.isDefaultPrevented)
		};
		c.elem = b;
		return c
	}

	function Fa(b) {
		var a = typeof b,
			c;
		"object" == a && null !== b ? "function" == typeof(c = b.$$hashKey) ? c = b.$$hashKey() : c === r && (c = b.$$hashKey = $a()) : c = b;
		return a + ":" + c
	}

	function Ta(b) {
		q(b, this.put, this)
	}

	function hc(b) {
		var a, c;
		"function" == typeof b ? (a = b.$inject) || (a = [], b.length && (c = b.toString().replace($c, ""), c = c.match(ad), q(c[1].split(bd), function(b) {
			b.replace(cd, function(b, c, d) {
				a.push(d)
			})
		})), b.$inject = a) : K(b) ? (c = b.length - 1, Qa(b[c], "fn"), a = b.slice(0, c)) : Qa(b, "fn", !0);
		return a
	}

	function $b(b) {
		function a(a) {
			return function(b, c) {
				if (X(b)) q(b, Qb(a));
				else return a(b, c)
			}
		}

		function c(a, b) {
			xa(a, "service");
			if (L(b) || K(b)) b = n.instantiate(b);
			if (!b.$get) throw Ua("pget", a);
			return l[a + h] = b
		}

		function d(a, b) {
			return c(a, {
				$get: b
			})
		}

		function e(a) {
			var b = [],
				c, d, g, h;
			q(a, function(a) {
				if (!k.get(a)) {
					k.put(a, !0);
					try {
						if (D(a))
							for (c = Va(a), b = b.concat(e(c.requires)).concat(c._runBlocks), d = c._invokeQueue, g = 0, h = d.length; g < h; g++) {
								var f = d[g],
									m = n.get(f[0]);
								m[f[1]].apply(m, f[2])
							} else L(a) ? b.push(n.invoke(a)) : K(a) ? b.push(n.invoke(a)) : Qa(a, "module")
					} catch (s) {
						throw K(a) && (a = a[a.length - 1]), s.message && (s.stack && -1 == s.stack.indexOf(s.message)) && (s = s.message + "\n" + s.stack), Ua("modulerr", a, s.stack || s.message || s)
					}
				}
			});
			return b
		}

		function g(a, b) {
			function c(d) {
				if (a.hasOwnProperty(d)) {
					if (a[d] === f) throw Ua("cdep", m.join(" <- "));
					return a[d]
				}
				try {
					return m.unshift(d), a[d] = f, a[d] = b(d)
				} catch (e) {
					throw a[d] === f && delete a[d], e
				} finally {
					m.shift()
				}
			}

			function d(a, b, e) {
				var g = [],
					h = hc(a),
					f, k, m;
				k = 0;
				for (f = h.length; k < f; k++) {
					m = h[k];
					if ("string" !== typeof m) throw Ua("itkn", m);
					g.push(e && e.hasOwnProperty(m) ? e[m] : c(m))
				}
				a.$inject || (a = a[f]);
				return a.apply(b, g)
			}
			return {
				invoke: d,
				instantiate: function(a, b) {
					var c = function() {},
						e;
					c.prototype = (K(a) ? a[a.length - 1] : a).prototype;
					c = new c;
					e = d(a, c, b);
					return X(e) || L(e) ? e : c
				},
				get: c,
				annotate: hc,
				has: function(b) {
					return l.hasOwnProperty(b + h) || a.hasOwnProperty(b)
				}
			}
		}
		var f = {},
			h = "Provider",
			m = [],
			k = new Ta,
			l = {
				$provide: {
					provider: a(c),
					factory: a(d),
					service: a(function(a, b) {
						return d(a, ["$injector", function(a) {
							return a.instantiate(b)
						}])
					}),
					value: a(function(a, b) {
						return d(a, $(b))
					}),
					constant: a(function(a, b) {
						xa(a, "constant");
						l[a] = b;
						p[a] = b
					}),
					decorator: function(a, b) {
						var c = n.get(a + h),
							d = c.$get;
						c.$get = function() {
							var a = s.invoke(d, c);
							return s.invoke(b, null, {
								$delegate: a
							})
						}
					}
				}
			},
			n = l.$injector = g(l, function() {
				throw Ua("unpr", m.join(" <- "))
			}),
			p = {},
			s = p.$injector = g(p, function(a) {
				a = n.get(a + h);
				return s.invoke(a.$get, a)
			});
		q(e(b), function(a) {
			s.invoke(a || w)
		});
		return s
	}

	function dd() {
		var b = !0;
		this.disableAutoScrolling = function() {
			b = !1
		};
		this.$get = ["$window", "$location", "$rootScope", function(a, c, d) {
			function e(a) {
				var b = null;
				q(a, function(a) {
					b || "a" !== x(a.nodeName) || (b = a)
				});
				return b
			}

			function g() {
				var b = c.hash(),
					d;
				b ? (d = f.getElementById(b)) ? d.scrollIntoView() : (d = e(f.getElementsByName(b))) ? d.scrollIntoView() : "top" === b && a.scrollTo(0, 0) : a.scrollTo(0, 0)
			}
			var f = a.document;
			b && d.$watch(function() {
				return c.hash()
			}, function() {
				d.$evalAsync(g)
			});
			return g
		}]
	}

	function ed(b, a, c, d) {
		function e(a) {
			try {
				a.apply(null, va.call(arguments, 1))
			} finally {
				if (C--, 0 === C)
					for (; y.length;) try {
						y.pop()()
					} catch (b) {
						c.error(b)
					}
			}
		}

		function g(a, b) {
			(function T() {
				q(E, function(a) {
					a()
				});
				u = b(T, a)
			})()
		}

		function f() {
			v = null;
			R != h.url() && (R = h.url(), q(ha, function(a) {
				a(h.url())
			}))
		}
		var h = this,
			m = a[0],
			k = b.location,
			l = b.history,
			n = b.setTimeout,
			p = b.clearTimeout,
			s = {};
		h.isMock = !1;
		var C = 0,
			y = [];
		h.$$completeOutstandingRequest = e;
		h.$$incOutstandingRequestCount = function() {
			C++
		};
		h.notifyWhenNoOutstandingRequests = function(a) {
			q(E, function(a) {
				a()
			});
			0 === C ? a() : y.push(a)
		};
		var E = [],
			u;
		h.addPollFn = function(a) {
			z(u) && g(100, n);
			E.push(a);
			return a
		};
		var R = k.href,
			H = a.find("base"),
			v = null;
		h.url = function(a, c) {
			k !== b.location && (k = b.location);
			l !== b.history && (l = b.history);
			if (a) {
				if (R != a) return R = a, d.history ? c ? l.replaceState(null, "", a) : (l.pushState(null, "", a), H.attr("href", H.attr("href"))) : (v = a, c ? k.replace(a) : k.href = a), h
			} else return v || k.href.replace(/%27/g, "'")
		};
		var ha = [],
			N = !1;
		h.onUrlChange = function(a) {
			if (!N) {
				if (d.history) A(b).on("popstate", f);
				if (d.hashchange) A(b).on("hashchange", f);
				else h.addPollFn(f);
				N = !0
			}
			ha.push(a);
			return a
		};
		h.baseHref = function() {
			var a = H.attr("href");
			return a ? a.replace(/^(https?\:)?\/\/[^\/]*/, "") : ""
		};
		var V = {},
			J = "",
			ca = h.baseHref();
		h.cookies = function(a, b) {
			var d, e, g, h;
			if (a) b === r ? m.cookie = escape(a) + "=;path=" + ca + ";expires=Thu, 01 Jan 1970 00:00:00 GMT" : D(b) && (d = (m.cookie = escape(a) + "=" + escape(b) + ";path=" + ca).length + 1, 4096 < d && c.warn("Cookie '" + a + "' possibly not set or overflowed because it was too large (" + d + " > 4096 bytes)!"));
			else {
				if (m.cookie !== J)
					for (J = m.cookie, d = J.split("; "), V = {}, g = 0; g < d.length; g++) e = d[g], h = e.indexOf("="), 0 < h && (a = unescape(e.substring(0, h)), V[a] === r && (V[a] = unescape(e.substring(h + 1))));
				return V
			}
		};
		h.defer = function(a, b) {
			var c;
			C++;
			c = n(function() {
				delete s[c];
				e(a)
			}, b || 0);
			s[c] = !0;
			return c
		};
		h.defer.cancel = function(a) {
			return s[a] ? (delete s[a], p(a), e(w), !0) : !1
		}
	}

	function fd() {
		this.$get = ["$window", "$log", "$sniffer", "$document", function(b, a, c, d) {
			return new ed(b, d, a, c)
		}]
	}

	function gd() {
		this.$get = function() {
			function b(b, d) {
				function e(a) {
					a != n && (p ? p == a && (p = a.n) : p = a, g(a.n, a.p), g(a, n), n = a, n.n = null)
				}

				function g(a, b) {
					a != b && (a && (a.p = b), b && (b.n = a))
				}
				if (b in a) throw F("$cacheFactory")("iid", b);
				var f = 0,
					h = t({}, d, {
						id: b
					}),
					m = {},
					k = d && d.capacity || Number.MAX_VALUE,
					l = {},
					n = null,
					p = null;
				return a[b] = {
					put: function(a, b) {
						var c = l[a] || (l[a] = {
							key: a
						});
						e(c);
						if (!z(b)) return a in m || f++, m[a] = b, f > k && this.remove(p.key), b
					},
					get: function(a) {
						var b = l[a];
						if (b) return e(b), m[a]
					},
					remove: function(a) {
						var b = l[a];
						b && (b == n && (n = b.p), b == p && (p = b.n), g(b.n, b.p), delete l[a], delete m[a], f--)
					},
					removeAll: function() {
						m = {};
						f = 0;
						l = {};
						n = p = null
					},
					destroy: function() {
						l = h = m = null;
						delete a[b]
					},
					info: function() {
						return t({}, h, {
							size: f
						})
					}
				}
			}
			var a = {};
			b.info = function() {
				var b = {};
				q(a, function(a, e) {
					b[e] = a.info()
				});
				return b
			};
			b.get = function(b) {
				return a[b]
			};
			return b
		}
	}

	function hd() {
		this.$get = ["$cacheFactory", function(b) {
			return b("templates")
		}]
	}

	function jc(b, a) {
		var c = {},
			d = "Directive",
			e = /^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/,
			g = /(([\d\w\-_]+)(?:\:([^;]+))?;?)/,
			f = /^(on[a-z]+|formaction)$/;
		this.directive = function m(a, e) {
			xa(a, "directive");
			D(a) ? (ub(e, "directiveFactory"), c.hasOwnProperty(a) || (c[a] = [], b.factory(a + d, ["$injector", "$exceptionHandler", function(b, d) {
				var e = [];
				q(c[a], function(c, g) {
					try {
						var f = b.invoke(c);
						L(f) ? f = {
							compile: $(f)
						} : !f.compile && f.link && (f.compile = $(f.link));
						f.priority = f.priority || 0;
						f.index = g;
						f.name = f.name || a;
						f.require = f.require || f.controller && f.name;
						f.restrict = f.restrict || "A";
						e.push(f)
					} catch (m) {
						d(m)
					}
				});
				return e
			}])), c[a].push(e)) : q(a, Qb(m));
			return this
		};
		this.aHrefSanitizationWhitelist = function(b) {
			return B(b) ? (a.aHrefSanitizationWhitelist(b), this) : a.aHrefSanitizationWhitelist()
		};
		this.imgSrcSanitizationWhitelist = function(b) {
			return B(b) ? (a.imgSrcSanitizationWhitelist(b), this) : a.imgSrcSanitizationWhitelist()
		};
		this.$get = ["$injector", "$interpolate", "$exceptionHandler", "$http", "$templateCache", "$parse", "$controller", "$rootScope", "$document", "$sce", "$animate", "$$sanitizeUri", function(a, b, l, n, p, s, C, y, E, u, R, H) {
			function v(a, b, c, d, e) {
				a instanceof A || (a = A(a));
				q(a, function(b, c) {
					3 == b.nodeType && b.nodeValue.match(/\S+/) && (a[c] = A(b).wrap("<span></span>").parent()[0])
				});
				var g = N(a, b, a, c, d, e);
				ha(a, "ng-scope");
				return function(b, c, d) {
					ub(b, "scope");
					var e = c ? Ga.clone.call(a) : a;
					q(d, function(a, b) {
						e.data("$" + b + "Controller", a)
					});
					d = 0;
					for (var f = e.length; d < f; d++) {
						var m = e[d].nodeType;
						1 !== m && 9 !== m || e.eq(d).data("$scope", b)
					}
					c && c(e, b);
					g && g(b, e, e);
					return e
				}
			}

			function ha(a, b) {
				try {
					a.addClass(b)
				} catch (c) {}
			}

			function N(a, b, c, d, e, g) {
				function f(a, c, d, e) {
					var g, k, s, l, n, p, I;
					g = c.length;
					var C = Array(g);
					for (n = 0; n < g; n++) C[n] = c[n];
					I = n = 0;
					for (p = m.length; n < p; I++) k = C[I], c = m[n++], g = m[n++], s = A(k), c ? (c.scope ? (l = a.$new(), s.data("$scope", l)) : l = a, (s = c.transclude) || !e && b ? c(g, l, k, d, V(a, s || b)) : c(g, l, k, d, e)) : g && g(a, k.childNodes, r, e)
				}
				for (var m = [], k, s, l, n, p = 0; p < a.length; p++) k = new Fb, s = J(a[p], [], k, 0 === p ? d : r, e), (g = s.length ? ia(s, a[p], k, b, c, null, [], [], g) : null) && g.scope && ha(A(a[p]), "ng-scope"), k = g && g.terminal || !(l = a[p].childNodes) || !l.length ? null : N(l, g ? g.transclude : b), m.push(g, k), n = n || g || k, g = null;
				return n ? f : null
			}

			function V(a, b) {
				return function(c, d, e) {
					var g = !1;
					c || (c = a.$new(), g = c.$$transcluded = !0);
					d = b(c, d, e);
					if (g) d.on("$destroy", cb(c, c.$destroy));
					return d
				}
			}

			function J(a, b, c, d, f) {
				var k = c.$attr,
					m;
				switch (a.nodeType) {
					case 1:
						T(b, ma(Ha(a).toLowerCase()), "E", d, f);
						var s, l, n;
						m = a.attributes;
						for (var p = 0, C = m && m.length; p < C; p++) {
							var y = !1,
								R = !1;
							s = m[p];
							if (!M || 8 <= M || s.specified) {
								l = s.name;
								n = ma(l);
								W.test(n) && (l = db(n.substr(6), "-"));
								var v = n.replace(/(Start|End)$/, "");
								n === v + "Start" && (y = l, R = l.substr(0, l.length - 5) + "end", l = l.substr(0, l.length - 6));
								n = ma(l.toLowerCase());
								k[n] = l;
								c[n] = s = ba(s.value);
								fc(a, n) && (c[n] = !0);
								S(a, b, s, n);
								T(b, n, "A", d, f, y, R)
							}
						}
						a = a.className;
						if (D(a) && "" !== a)
							for (; m = g.exec(a);) n = ma(m[2]), T(b, n, "C", d, f) && (c[n] = ba(m[3])), a = a.substr(m.index + m[0].length);
						break;
					case 3:
						F(b, a.nodeValue);
						break;
					case 8:
						try {
							if (m = e.exec(a.nodeValue)) n = ma(m[1]), T(b, n, "M", d, f) && (c[n] = ba(m[2]))
						} catch (E) {}
				}
				b.sort(z);
				return b
			}

			function ca(a, b, c) {
				var d = [],
					e = 0;
				if (b && a.hasAttribute && a.hasAttribute(b)) {
					do {
						if (!a) throw ja("uterdir", b, c);
						1 == a.nodeType && (a.hasAttribute(b) && e++, a.hasAttribute(c) && e--);
						d.push(a);
						a = a.nextSibling
					} while (0 < e)
				} else d.push(a);
				return A(d)
			}

			function P(a, b, c) {
				return function(d, e, g, f, m) {
					e = ca(e[0], b, c);
					return a(d, e, g, f, m)
				}
			}

			function ia(a, c, d, e, g, f, m, n, p) {
				function y(a, b, c, d) {
					if (a) {
						c && (a = P(a, c, d));
						a.require = G.require;
						if (H === G || G.$$isolateScope) a = kc(a, {
							isolateScope: !0
						});
						m.push(a)
					}
					if (b) {
						c && (b = P(b, c, d));
						b.require = G.require;
						if (H === G || G.$$isolateScope) b = kc(b, {
							isolateScope: !0
						});
						n.push(b)
					}
				}

				function R(a, b, c) {
					var d, e = "data",
						g = !1;
					if (D(a)) {
						for (;
							"^" == (d = a.charAt(0)) || "?" == d;) a = a.substr(1), "^" == d && (e = "inheritedData"), g = g || "?" == d;
						d = null;
						c && "data" === e && (d = c[a]);
						d = d || b[e]("$" + a + "Controller");
						if (!d && !g) throw ja("ctreq", a, da)
					} else K(a) && (d = [], q(a, function(a) {
						d.push(R(a, b, c))
					}));
					return d
				}

				function E(a, e, g, f, p) {
					function y(a, b) {
						var c;
						2 > arguments.length && (b = a, a = r);
						z && (c = ca);
						return p(a, b, c)
					}
					var I, v, N, u, P, J, ca = {},
						hb;
					I = c === g ? d : Tb(d, new Fb(A(g), d.$attr));
					v = I.$$element;
					if (H) {
						var T = /^\s*([@=&])(\??)\s*(\w*)\s*$/;
						f = A(g);
						J = e.$new(!0);
						ia && ia === H.$$originalDirective ? f.data("$isolateScope", J) : f.data("$isolateScopeNoTemplate", J);
						ha(f, "ng-isolate-scope");
						q(H.scope, function(a, c) {
							var d = a.match(T) || [],
								g = d[3] || c,
								f = "?" == d[2],
								d = d[1],
								m, l, n, p;
							J.$$isolateBindings[c] = d + g;
							switch (d) {
								case "@":
									I.$observe(g, function(a) {
										J[c] = a
									});
									I.$$observers[g].$$scope = e;
									I[g] && (J[c] = b(I[g])(e));
									break;
								case "=":
									if (f && !I[g]) break;
									l = s(I[g]);
									p = l.literal ? ua : function(a, b) {
										return a === b
									};
									n = l.assign || function() {
										m = J[c] = l(e);
										throw ja("nonassign", I[g], H.name)
									};
									m = J[c] = l(e);
									J.$watch(function() {
										var a = l(e);
										p(a, J[c]) || (p(a, m) ? n(e, a = J[c]) : J[c] = a);
										return m = a
									}, null, l.literal);
									break;
								case "&":
									l = s(I[g]);
									J[c] = function(a) {
										return l(e, a)
									};
									break;
								default:
									throw ja("iscp", H.name, c, a)
							}
						})
					}
					hb = p && y;
					V && q(V, function(a) {
						var b = {
								$scope: a === H || a.$$isolateScope ? J : e,
								$element: v,
								$attrs: I,
								$transclude: hb
							},
							c;
						P = a.controller;
						"@" == P && (P = I[a.name]);
						c = C(P, b);
						ca[a.name] = c;
						z || v.data("$" + a.name + "Controller", c);
						a.controllerAs && (b.$scope[a.controllerAs] = c)
					});
					f = 0;
					for (N = m.length; f < N; f++) try {
						u = m[f], u(u.isolateScope ? J : e, v, I, u.require && R(u.require, v, ca), hb)
					} catch (G) {
						l(G, ga(v))
					}
					f = e;
					H && (H.template || null === H.templateUrl) && (f = J);
					a && a(f, g.childNodes, r, p);
					for (f = n.length - 1; 0 <= f; f--) try {
						u = n[f], u(u.isolateScope ? J : e, v, I, u.require && R(u.require, v, ca), hb)
					} catch (B) {
						l(B, ga(v))
					}
				}
				p = p || {};
				var N = -Number.MAX_VALUE,
					u, V = p.controllerDirectives,
					H = p.newIsolateScopeDirective,
					ia = p.templateDirective;
				p = p.nonTlbTranscludeDirective;
				for (var T = !1, z = !1, t = d.$$element = A(c), G, da, U, F = e, O, M = 0, na = a.length; M < na; M++) {
					G = a[M];
					var Wa = G.$$start,
						S = G.$$end;
					Wa && (t = ca(c, Wa, S));
					U = r;
					if (N > G.priority) break;
					if (U = G.scope) u = u || G, G.templateUrl || (x("new/isolated scope", H, G, t), X(U) && (H = G));
					da = G.name;
					!G.templateUrl && G.controller && (U = G.controller, V = V || {}, x("'" + da + "' controller", V[da], G, t), V[da] = G);
					if (U = G.transclude) T = !0, G.$$tlb || (x("transclusion", p, G, t), p = G), "element" == U ? (z = !0, N = G.priority, U = ca(c, Wa, S), t = d.$$element = A(Q.createComment(" " + da + ": " + d[da] + " ")), c = t[0], ib(g, A(va.call(U, 0)), c), F = v(U, e, N, f && f.name, {
						nonTlbTranscludeDirective: p
					})) : (U = A(Ab(c)).contents(), t.empty(), F = v(U, e));
					if (G.template)
						if (x("template", ia, G, t), ia = G, U = L(G.template) ? G.template(t, d) : G.template, U = Y(U), G.replace) {
							f = G;
							U = A("<div>" + ba(U) + "</div>").contents();
							c = U[0];
							if (1 != U.length || 1 !== c.nodeType) throw ja("tplrt", da, "");
							ib(g, t, c);
							na = {
								$attr: {}
							};
							U = J(c, [], na);
							var W = a.splice(M + 1, a.length - (M + 1));
							H && ic(U);
							a = a.concat(U).concat(W);
							B(d, na);
							na = a.length
						} else t.html(U);
					if (G.templateUrl) x("template", ia, G, t), ia = G, G.replace && (f = G), E = w(a.splice(M, a.length - M), t, d, g, F, m, n, {
						controllerDirectives: V,
						newIsolateScopeDirective: H,
						templateDirective: ia,
						nonTlbTranscludeDirective: p
					}), na = a.length;
					else if (G.compile) try {
						O = G.compile(t, d, F), L(O) ? y(null, O, Wa, S) : O && y(O.pre, O.post, Wa, S)
					} catch (Z) {
						l(Z, ga(t))
					}
					G.terminal && (E.terminal = !0, N = Math.max(N, G.priority))
				}
				E.scope = u && !0 === u.scope;
				E.transclude = T && F;
				return E
			}

			function ic(a) {
				for (var b = 0, c = a.length; b < c; b++) a[b] = Sb(a[b], {
					$$isolateScope: !0
				})
			}

			function T(b, e, g, f, k, s, n) {
				if (e === k) return null;
				k = null;
				if (c.hasOwnProperty(e)) {
					var p;
					e = a.get(e + d);
					for (var C = 0, y = e.length; C < y; C++) try {
						p = e[C], (f === r || f > p.priority) && -1 != p.restrict.indexOf(g) && (s && (p = Sb(p, {
							$$start: s,
							$$end: n
						})), b.push(p), k = p)
					} catch (v) {
						l(v)
					}
				}
				return k
			}

			function B(a, b) {
				var c = b.$attr,
					d = a.$attr,
					e = a.$$element;
				q(a, function(d, e) {
					"$" != e.charAt(0) && (b[e] && (d += ("style" === e ? ";" : " ") + b[e]), a.$set(e, d, !0, c[e]))
				});
				q(b, function(b, g) {
					"class" == g ? (ha(e, b), a["class"] = (a["class"] ? a["class"] + " " : "") + b) : "style" == g ? (e.attr("style", e.attr("style") + ";" + b), a.style = (a.style ? a.style + ";" : "") + b) : "$" == g.charAt(0) || a.hasOwnProperty(g) || (a[g] = b, d[g] = c[g])
				})
			}

			function w(a, b, c, d, e, g, f, m) {
				var k = [],
					s, l, C = b[0],
					y = a.shift(),
					v = t({}, y, {
						templateUrl: null,
						transclude: null,
						replace: null,
						$$originalDirective: y
					}),
					R = L(y.templateUrl) ? y.templateUrl(b, c) : y.templateUrl;
				b.empty();
				n.get(u.getTrustedResourceUrl(R), {
					cache: p
				}).success(function(n) {
					var p, E;
					n = Y(n);
					if (y.replace) {
						n = A("<div>" + ba(n) + "</div>").contents();
						p = n[0];
						if (1 != n.length || 1 !== p.nodeType) throw ja("tplrt", y.name, R);
						n = {
							$attr: {}
						};
						ib(d, b, p);
						var u = J(p, [], n);
						X(y.scope) && ic(u);
						a = u.concat(a);
						B(c, n)
					} else p = C, b.html(n);
					a.unshift(v);
					s = ia(a, p, c, e, b, y, g, f, m);
					q(d, function(a, c) {
						a == p && (d[c] = b[0])
					});
					for (l = N(b[0].childNodes, e); k.length;) {
						n = k.shift();
						E = k.shift();
						var H = k.shift(),
							ha = k.shift(),
							u = b[0];
						E !== C && (u = Ab(p), ib(H, A(E), u));
						E = s.transclude ? V(n, s.transclude) : ha;
						s(l, n, u, d, E)
					}
					k = null
				}).error(function(a, b, c, d) {
					throw ja("tpload", d.url)
				});
				return function(a, b, c, d, e) {
					k ? (k.push(b), k.push(c), k.push(d), k.push(e)) : s(l, b, c, d, e)
				}
			}

			function z(a, b) {
				var c = b.priority - a.priority;
				return 0 !== c ? c : a.name !== b.name ? a.name < b.name ? -1 : 1 : a.index - b.index
			}

			function x(a, b, c, d) {
				if (b) throw ja("multidir", b.name, c.name, a, ga(d))
			}

			function F(a, c) {
				var d = b(c, !0);
				d && a.push({
					priority: 0,
					compile: $(function(a, b) {
						var c = b.parent(),
							e = c.data("$binding") || [];
						e.push(d);
						ha(c.data("$binding", e), "ng-binding");
						a.$watch(d, function(a) {
							b[0].nodeValue = a
						})
					})
				})
			}

			function O(a, b) {
				if ("srcdoc" == b) return u.HTML;
				var c = Ha(a);
				if ("xlinkHref" == b || "FORM" == c && "action" == b || "IMG" != c && ("src" == b || "ngSrc" == b)) return u.RESOURCE_URL
			}

			function S(a, c, d, e) {
				var g = b(d, !0);
				if (g) {
					if ("multiple" === e && "SELECT" === Ha(a)) throw ja("selmulti", ga(a));
					c.push({
						priority: 100,
						compile: function() {
							return {
								pre: function(c, d, m) {
									d = m.$$observers || (m.$$observers = {});
									if (f.test(e)) throw ja("nodomevents");
									if (g = b(m[e], !0, O(a, e))) m[e] = g(c), (d[e] || (d[e] = [])).$$inter = !0, (m.$$observers && m.$$observers[e].$$scope || c).$watch(g, function(a, b) {
										"class" === e && a != b ? m.$updateClass(a, b) : m.$set(e, a)
									})
								}
							}
						}
					})
				}
			}

			function ib(a, b, c) {
				var d = b[0],
					e = b.length,
					g = d.parentNode,
					f, m;
				if (a)
					for (f = 0, m = a.length; f < m; f++)
						if (a[f] == d) {
							a[f++] = c;
							m = f + e - 1;
							for (var k = a.length; f < k; f++, m++) m < k ? a[f] = a[m] : delete a[f];
							a.length -= e - 1;
							break
						} g && g.replaceChild(c, d);
				a = Q.createDocumentFragment();
				a.appendChild(d);
				c[A.expando] = d[A.expando];
				d = 1;
				for (e = b.length; d < e; d++) g = b[d], A(g).remove(), a.appendChild(g), delete b[d];
				b[0] = c;
				b.length = 1
			}

			function kc(a, b) {
				return t(function() {
					return a.apply(null, arguments)
				}, a, b)
			}
			var Fb = function(a, b) {
				this.$$element = a;
				this.$attr = b || {}
			};
			Fb.prototype = {
				$normalize: ma,
				$addClass: function(a) {
					a && 0 < a.length && R.addClass(this.$$element, a)
				},
				$removeClass: function(a) {
					a && 0 < a.length && R.removeClass(this.$$element, a)
				},
				$updateClass: function(a, b) {
					this.$removeClass(lc(b, a));
					this.$addClass(lc(a, b))
				},
				$set: function(a, b, c, d) {
					var e = fc(this.$$element[0], a);
					e && (this.$$element.prop(a, b), d = e);
					this[a] = b;
					d ? this.$attr[a] = d : (d = this.$attr[a]) || (this.$attr[a] = d = db(a, "-"));
					e = Ha(this.$$element);
					if ("A" === e && "href" === a || "IMG" === e && "src" === a) this[a] = b = H(b, "src" === a);
					!1 !== c && (null === b || b === r ? this.$$element.removeAttr(d) : this.$$element.attr(d, b));
					(c = this.$$observers) && q(c[a], function(a) {
						try {
							a(b)
						} catch (c) {
							l(c)
						}
					})
				},
				$observe: function(a, b) {
					var c = this,
						d = c.$$observers || (c.$$observers = {}),
						e = d[a] || (d[a] = []);
					e.push(b);
					y.$evalAsync(function() {
						e.$$inter || b(c[a])
					});
					return b
				}
			};
			var da = b.startSymbol(),
				na = b.endSymbol(),
				Y = "{{" == da || "}}" == na ? Ba : function(a) {
					return a.replace(/\{\{/g, da).replace(/}}/g, na)
				},
				W = /^ngAttr[A-Z]/;
			return v
		}]
	}

	function ma(b) {
		return Ra(b.replace(id, ""))
	}

	function lc(b, a) {
		var c = "",
			d = b.split(/\s+/),
			e = a.split(/\s+/),
			g = 0;
		a: for (; g < d.length; g++) {
			for (var f = d[g], h = 0; h < e.length; h++)
				if (f == e[h]) continue a;
			c += (0 < c.length ? " " : "") + f
		}
		return c
	}

	function jd() {
		var b = {},
			a = /^(\S+)(\s+as\s+(\w+))?$/;
		this.register = function(a, d) {
			xa(a, "controller");
			X(a) ? t(b, a) : b[a] = d
		};
		this.$get = ["$injector", "$window", function(c, d) {
			return function(e, g) {
				var f, h, m;
				D(e) && (f = e.match(a), h = f[1], m = f[3], e = b.hasOwnProperty(h) ? b[h] : vb(g.$scope, h, !0) || vb(d, h, !0), Qa(e, h, !0));
				f = c.instantiate(e, g);
				if (m) {
					if (!g || "object" != typeof g.$scope) throw F("$controller")("noscp", h || e.name, m);
					g.$scope[m] = f
				}
				return f
			}
		}]
	}

	function kd() {
		this.$get = ["$window", function(b) {
			return A(b.document)
		}]
	}

	function ld() {
		this.$get = ["$log", function(b) {
			return function(a, c) {
				b.error.apply(b, arguments)
			}
		}]
	}

	function mc(b) {
		var a = {},
			c, d, e;
		if (!b) return a;
		q(b.split("\n"), function(b) {
			e = b.indexOf(":");
			c = x(ba(b.substr(0, e)));
			d = ba(b.substr(e + 1));
			c && (a[c] = a[c] ? a[c] + (", " + d) : d)
		});
		return a
	}

	function nc(b) {
		var a = X(b) ? b : r;
		return function(c) {
			a || (a = mc(b));
			return c ? a[x(c)] || null : a
		}
	}

	function oc(b, a, c) {
		if (L(c)) return c(b, a);
		q(c, function(c) {
			b = c(b, a)
		});
		return b
	}

	function md() {
		var b = /^\s*(\[|\{[^\{])/,
			a = /[\}\]]\s*$/,
			c = /^\)\]\}',?\n/,
			d = {
				"Content-Type": "application/json;charset=utf-8"
			},
			e = this.defaults = {
				transformResponse: [function(d) {
					D(d) && (d = d.replace(c, ""), b.test(d) && a.test(d) && (d = Vb(d)));
					return d
				}],
				transformRequest: [function(a) {
					return X(a) && "[object File]" !== Ma.call(a) ? qa(a) : a
				}],
				headers: {
					common: {
						Accept: "application/json, text/plain, */*"
					},
					post: aa(d),
					put: aa(d),
					patch: aa(d)
				},
				xsrfCookieName: "XSRF-TOKEN",
				xsrfHeaderName: "X-XSRF-TOKEN"
			},
			g = this.interceptors = [],
			f = this.responseInterceptors = [];
		this.$get = ["$httpBackend", "$browser", "$cacheFactory", "$rootScope", "$q", "$injector", function(a, b, c, d, n, p) {
			function s(a) {
				function c(a) {
					var b = t({}, a, {
						data: oc(a.data, a.headers, d.transformResponse)
					});
					return 200 <= a.status && 300 > a.status ? b : n.reject(b)
				}
				var d = {
						transformRequest: e.transformRequest,
						transformResponse: e.transformResponse
					},
					g = function(a) {
						function b(a) {
							var c;
							q(a, function(b, d) {
								L(b) && (c = b(), null != c ? a[d] = c : delete a[d])
							})
						}
						var c = e.headers,
							d = t({}, a.headers),
							g, f, c = t({}, c.common, c[x(a.method)]);
						b(c);
						b(d);
						a: for (g in c) {
							a = x(g);
							for (f in d)
								if (x(f) === a) continue a;
							d[g] = c[g]
						}
						return d
					}(a);
				t(d, a);
				d.headers = g;
				d.method = Ia(d.method);
				(a = Gb(d.url) ? b.cookies()[d.xsrfCookieName || e.xsrfCookieName] : r) && (g[d.xsrfHeaderName || e.xsrfHeaderName] = a);
				var f = [function(a) {
						g = a.headers;
						var b = oc(a.data, nc(g), a.transformRequest);
						z(a.data) && q(g, function(a, b) {
							"content-type" === x(b) && delete g[b]
						});
						z(a.withCredentials) && !z(e.withCredentials) && (a.withCredentials = e.withCredentials);
						return C(a, b, g).then(c, c)
					}, r],
					h = n.when(d);
				for (q(u, function(a) {
						(a.request || a.requestError) && f.unshift(a.request, a.requestError);
						(a.response || a.responseError) && f.push(a.response, a.responseError)
					}); f.length;) {
					a = f.shift();
					var k = f.shift(),
						h = h.then(a, k)
				}
				h.success = function(a) {
					h.then(function(b) {
						a(b.data, b.status, b.headers, d)
					});
					return h
				};
				h.error = function(a) {
					h.then(null, function(b) {
						a(b.data, b.status, b.headers, d)
					});
					return h
				};
				return h
			}

			function C(b, c, g) {
				function f(a, b, c) {
					u && (200 <= a && 300 > a ? u.put(r, [a, b, mc(c)]) : u.remove(r));
					m(b, a, c);
					d.$$phase || d.$apply()
				}

				function m(a, c, d) {
					c = Math.max(c, 0);
					(200 <= c && 300 > c ? p.resolve : p.reject)({
						data: a,
						status: c,
						headers: nc(d),
						config: b
					})
				}

				function k() {
					var a = bb(s.pendingRequests, b); - 1 !== a && s.pendingRequests.splice(a, 1)
				}
				var p = n.defer(),
					C = p.promise,
					u, q, r = y(b.url, b.params);
				s.pendingRequests.push(b);
				C.then(k, k);
				(b.cache || e.cache) && (!1 !== b.cache && "GET" == b.method) && (u = X(b.cache) ? b.cache : X(e.cache) ? e.cache : E);
				if (u)
					if (q = u.get(r), B(q)) {
						if (q.then) return q.then(k, k), q;
						K(q) ? m(q[1], q[0], aa(q[2])) : m(q, 200, {})
					} else u.put(r, C);
				z(q) && a(b.method, r, c, f, g, b.timeout, b.withCredentials, b.responseType);
				return C
			}

			function y(a, b) {
				if (!b) return a;
				var c = [];
				Pc(b, function(a, b) {
					null === a || z(a) || (K(a) || (a = [a]), q(a, function(a) {
						X(a) && (a = qa(a));
						c.push(wa(b) + "=" + wa(a))
					}))
				});
				return a + (-1 == a.indexOf("?") ? "?" : "&") + c.join("&")
			}
			var E = c("$http"),
				u = [];
			q(g, function(a) {
				u.unshift(D(a) ? p.get(a) : p.invoke(a))
			});
			q(f, function(a, b) {
				var c = D(a) ? p.get(a) : p.invoke(a);
				u.splice(b, 0, {
					response: function(a) {
						return c(n.when(a))
					},
					responseError: function(a) {
						return c(n.reject(a))
					}
				})
			});
			s.pendingRequests = [];
			(function(a) {
				q(arguments, function(a) {
					s[a] = function(b, c) {
						return s(t(c || {}, {
							method: a,
							url: b
						}))
					}
				})
			})("get", "delete", "head", "jsonp");
			(function(a) {
				q(arguments, function(a) {
					s[a] = function(b, c, d) {
						return s(t(d || {}, {
							method: a,
							url: b,
							data: c
						}))
					}
				})
			})("post", "put");
			s.defaults = e;
			return s
		}]
	}

	function nd(b) {
		return 8 >= M && "patch" === x(b) ? new ActiveXObject("Microsoft.XMLHTTP") : new Z.XMLHttpRequest
	}

	function od() {
		this.$get = ["$browser", "$window", "$document", function(b, a, c) {
			return pd(b, nd, b.defer, a.angular.callbacks, c[0])
		}]
	}

	function pd(b, a, c, d, e) {
		function g(a, b) {
			var c = e.createElement("script"),
				d = function() {
					c.onreadystatechange = c.onload = c.onerror = null;
					e.body.removeChild(c);
					b && b()
				};
			c.type = "text/javascript";
			c.src = a;
			M && 8 >= M ? c.onreadystatechange = function() {
				/loaded|complete/.test(c.readyState) && d()
			} : c.onload = c.onerror = function() {
				d()
			};
			e.body.appendChild(c);
			return d
		}
		var f = -1;
		return function(e, m, k, l, n, p, s, C) {
			function y() {
				u = f;
				H && H();
				v && v.abort()
			}

			function E(a, d, e, g) {
				r && c.cancel(r);
				H = v = null;
				d = 0 === d ? e ? 200 : 404 : d;
				a(1223 == d ? 204 : d, e, g);
				b.$$completeOutstandingRequest(w)
			}
			var u;
			b.$$incOutstandingRequestCount();
			m = m || b.url();
			if ("jsonp" == x(e)) {
				var R = "_" + (d.counter++).toString(36);
				d[R] = function(a) {
					d[R].data = a
				};
				var H = g(m.replace("JSON_CALLBACK", "angular.callbacks." + R), function() {
					d[R].data ? E(l, 200, d[R].data) : E(l, u || -2);
					d[R] = Ca.noop
				})
			} else {
				var v = a(e);
				v.open(e, m, !0);
				q(n, function(a, b) {
					B(a) && v.setRequestHeader(b, a)
				});
				v.onreadystatechange = function() {
					if (v && 4 == v.readyState) {
						var a = null,
							b = null;
						u !== f && (a = v.getAllResponseHeaders(), b = "response" in v ? v.response : v.responseText);
						E(l, u || v.status, b, a)
					}
				};
				s && (v.withCredentials = !0);
				C && (v.responseType = C);
				v.send(k || null)
			}
			if (0 < p) var r = c(y, p);
			else p && p.then && p.then(y)
		}
	}

	function qd() {
		var b = "{{",
			a = "}}";
		this.startSymbol = function(a) {
			return a ? (b = a, this) : b
		};
		this.endSymbol = function(b) {
			return b ? (a = b, this) : a
		};
		this.$get = ["$parse", "$exceptionHandler", "$sce", function(c, d, e) {
			function g(g, k, l) {
				for (var n, p, s = 0, C = [], y = g.length, E = !1, u = []; s < y;) - 1 != (n = g.indexOf(b, s)) && -1 != (p = g.indexOf(a, n + f)) ? (s != n && C.push(g.substring(s, n)), C.push(s = c(E = g.substring(n + f, p))), s.exp = E, s = p + h, E = !0) : (s != y && C.push(g.substring(s)), s = y);
				(y = C.length) || (C.push(""), y = 1);
				if (l && 1 < C.length) throw pc("noconcat", g);
				if (!k || E) return u.length = y, s = function(a) {
					try {
						for (var b = 0, c = y, f; b < c; b++) "function" == typeof(f = C[b]) && (f = f(a), f = l ? e.getTrusted(l, f) : e.valueOf(f), null === f || z(f) ? f = "" : "string" != typeof f && (f = qa(f))), u[b] = f;
						return u.join("")
					} catch (h) {
						a = pc("interr", g, h.toString()), d(a)
					}
				}, s.exp = g, s.parts = C, s
			}
			var f = b.length,
				h = a.length;
			g.startSymbol = function() {
				return b
			};
			g.endSymbol = function() {
				return a
			};
			return g
		}]
	}

	function rd() {
		this.$get = ["$rootScope", "$window", "$q", function(b, a, c) {
			function d(d, f, h, m) {
				var k = a.setInterval,
					l = a.clearInterval,
					n = c.defer(),
					p = n.promise,
					s = 0,
					C = B(m) && !m;
				h = B(h) ? h : 0;
				p.then(null, null, d);
				p.$$intervalId = k(function() {
					n.notify(s++);
					0 < h && s >= h && (n.resolve(s), l(p.$$intervalId), delete e[p.$$intervalId]);
					C || b.$apply()
				}, f);
				e[p.$$intervalId] = n;
				return p
			}
			var e = {};
			d.cancel = function(a) {
				return a && a.$$intervalId in e ? (e[a.$$intervalId].reject("canceled"), clearInterval(a.$$intervalId), delete e[a.$$intervalId], !0) : !1
			};
			return d
		}]
	}

	function sd() {
		this.$get = function() {
			return {
				id: "en-us",
				NUMBER_FORMATS: {
					DECIMAL_SEP: ".",
					GROUP_SEP: ",",
					PATTERNS: [{
						minInt: 1,
						minFrac: 0,
						maxFrac: 3,
						posPre: "",
						posSuf: "",
						negPre: "-",
						negSuf: "",
						gSize: 3,
						lgSize: 3
					}, {
						minInt: 1,
						minFrac: 2,
						maxFrac: 2,
						posPre: "¤",
						posSuf: "",
						negPre: "(¤",
						negSuf: ")",
						gSize: 3,
						lgSize: 3
					}],
					CURRENCY_SYM: "$"
				},
				DATETIME_FORMATS: {
					MONTH: "January February March April May June July August September October November December".split(" "),
					SHORTMONTH: "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),
					DAY: "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),
					SHORTDAY: "Sun Mon Tue Wed Thu Fri Sat".split(" "),
					AMPMS: ["AM", "PM"],
					medium: "MMM d, y h:mm:ss a",
					"short": "M/d/yy h:mm a",
					fullDate: "EEEE, MMMM d, y",
					longDate: "MMMM d, y",
					mediumDate: "MMM d, y",
					shortDate: "M/d/yy",
					mediumTime: "h:mm:ss a",
					shortTime: "h:mm a"
				},
				pluralCat: function(b) {
					return 1 === b ? "one" : "other"
				}
			}
		}
	}

	function qc(b) {
		b = b.split("/");
		for (var a = b.length; a--;) b[a] = tb(b[a]);
		return b.join("/")
	}

	function rc(b, a, c) {
		b = ya(b, c);
		a.$$protocol = b.protocol;
		a.$$host = b.hostname;
		a.$$port = S(b.port) || td[b.protocol] || null
	}

	function sc(b, a, c) {
		var d = "/" !== b.charAt(0);
		d && (b = "/" + b);
		b = ya(b, c);
		a.$$path = decodeURIComponent(d && "/" === b.pathname.charAt(0) ? b.pathname.substring(1) : b.pathname);
		a.$$search = Xb(b.search);
		a.$$hash = decodeURIComponent(b.hash);
		a.$$path && "/" != a.$$path.charAt(0) && (a.$$path = "/" + a.$$path)
	}

	function oa(b, a) {
		if (0 === a.indexOf(b)) return a.substr(b.length)
	}

	function Xa(b) {
		var a = b.indexOf("#");
		return -1 == a ? b : b.substr(0, a)
	}

	function Hb(b) {
		return b.substr(0, Xa(b).lastIndexOf("/") + 1)
	}

	function tc(b, a) {
		this.$$html5 = !0;
		a = a || "";
		var c = Hb(b);
		rc(b, this, b);
		this.$$parse = function(a) {
			var e = oa(c, a);
			if (!D(e)) throw Ib("ipthprfx", a, c);
			sc(e, this, b);
			this.$$path || (this.$$path = "/");
			this.$$compose()
		};
		this.$$compose = function() {
			var a = Yb(this.$$search),
				b = this.$$hash ? "#" + tb(this.$$hash) : "";
			this.$$url = qc(this.$$path) + (a ? "?" + a : "") + b;
			this.$$absUrl = c + this.$$url.substr(1)
		};
		this.$$rewrite = function(d) {
			var e;
			if ((e = oa(b, d)) !== r) return d = e, (e = oa(a, e)) !== r ? c + (oa("/", e) || e) : b + d;
			if ((e = oa(c, d)) !== r) return c + e;
			if (c == d + "/") return c
		}
	}

	function Jb(b, a) {
		var c = Hb(b);
		rc(b, this, b);
		this.$$parse = function(d) {
			var e = oa(b, d) || oa(c, d),
				e = "#" == e.charAt(0) ? oa(a, e) : this.$$html5 ? e : "";
			if (!D(e)) throw Ib("ihshprfx", d, a);
			sc(e, this, b);
			d = this.$$path;
			var g = /^\/?.*?:(\/.*)/;
			0 === e.indexOf(b) && (e = e.replace(b, ""));
			g.exec(e) || (d = (e = g.exec(d)) ? e[1] : d);
			this.$$path = d;
			this.$$compose()
		};
		this.$$compose = function() {
			var c = Yb(this.$$search),
				e = this.$$hash ? "#" + tb(this.$$hash) : "";
			this.$$url = qc(this.$$path) + (c ? "?" + c : "") + e;
			this.$$absUrl = b + (this.$$url ? a + this.$$url : "")
		};
		this.$$rewrite = function(a) {
			if (Xa(b) == Xa(a)) return a
		}
	}

	function uc(b, a) {
		this.$$html5 = !0;
		Jb.apply(this, arguments);
		var c = Hb(b);
		this.$$rewrite = function(d) {
			var e;
			if (b == Xa(d)) return d;
			if (e = oa(c, d)) return b + a + e;
			if (c === d + "/") return c
		}
	}

	function jb(b) {
		return function() {
			return this[b]
		}
	}

	function vc(b, a) {
		return function(c) {
			if (z(c)) return this[b];
			this[b] = a(c);
			this.$$compose();
			return this
		}
	}

	function ud() {
		var b = "",
			a = !1;
		this.hashPrefix = function(a) {
			return B(a) ? (b = a, this) : b
		};
		this.html5Mode = function(b) {
			return B(b) ? (a = b, this) : a
		};
		this.$get = ["$rootScope", "$browser", "$sniffer", "$rootElement", function(c, d, e, g) {
			function f(a) {
				c.$broadcast("$locationChangeSuccess", h.absUrl(), a)
			}
			var h, m = d.baseHref(),
				k = d.url();
			a ? (m = k.substring(0, k.indexOf("/", k.indexOf("//") + 2)) + (m || "/"), e = e.history ? tc : uc) : (m = Xa(k), e = Jb);
			h = new e(m, "#" + b);
			h.$$parse(h.$$rewrite(k));
			g.on("click", function(a) {
				if (!a.ctrlKey && !a.metaKey && 2 != a.which) {
					for (var b = A(a.target);
						"a" !== x(b[0].nodeName);)
						if (b[0] === g[0] || !(b = b.parent())[0]) return;
					var e = b.prop("href");
					X(e) && "[object SVGAnimatedString]" === e.toString() && (e = ya(e.animVal).href);
					var f = h.$$rewrite(e);
					e && (!b.attr("target") && f && !a.isDefaultPrevented()) && (a.preventDefault(), f != d.url() && (h.$$parse(f), c.$apply(), Z.angular["ff-684208-preventDefault"] = !0))
				}
			});
			h.absUrl() != k && d.url(h.absUrl(), !0);
			d.onUrlChange(function(a) {
				h.absUrl() != a && (c.$evalAsync(function() {
					var b = h.absUrl();
					h.$$parse(a);
					c.$broadcast("$locationChangeStart", a, b).defaultPrevented ? (h.$$parse(b), d.url(b)) : f(b)
				}), c.$$phase || c.$digest())
			});
			var l = 0;
			c.$watch(function() {
				var a = d.url(),
					b = h.$$replace;
				l && a == h.absUrl() || (l++, c.$evalAsync(function() {
					c.$broadcast("$locationChangeStart", h.absUrl(), a).defaultPrevented ? h.$$parse(a) : (d.url(h.absUrl(), b), f(a))
				}));
				h.$$replace = !1;
				return l
			});
			return h
		}]
	}

	function vd() {
		var b = !0,
			a = this;
		this.debugEnabled = function(a) {
			return B(a) ? (b = a, this) : b
		};
		this.$get = ["$window", function(c) {
			function d(a) {
				a instanceof Error && (a.stack ? a = a.message && -1 === a.stack.indexOf(a.message) ? "Error: " + a.message + "\n" + a.stack : a.stack : a.sourceURL && (a = a.message + "\n" + a.sourceURL + ":" + a.line));
				return a
			}

			function e(a) {
				var b = c.console || {},
					e = b[a] || b.log || w;
				a = !1;
				try {
					a = !!e.apply
				} catch (m) {}
				return a ? function() {
					var a = [];
					q(arguments, function(b) {
						a.push(d(b))
					});
					return e.apply(b, a)
				} : function(a, b) {
					e(a, null == b ? "" : b)
				}
			}
			return {
				log: e("log"),
				info: e("info"),
				warn: e("warn"),
				error: e("error"),
				debug: function() {
					var c = e("debug");
					return function() {
						b && c.apply(a, arguments)
					}
				}()
			}
		}]
	}

	function ea(b, a) {
		if ("constructor" === b) throw za("isecfld", a);
		return b
	}

	function Ya(b, a) {
		if (b) {
			if (b.constructor === b) throw za("isecfn", a);
			if (b.document && b.location && b.alert && b.setInterval) throw za("isecwindow", a);
			if (b.children && (b.nodeName || b.on && b.find)) throw za("isecdom", a)
		}
		return b
	}

	function kb(b, a, c, d, e) {
		e = e || {};
		a = a.split(".");
		for (var g, f = 0; 1 < a.length; f++) {
			g = ea(a.shift(), d);
			var h = b[g];
			h || (h = {}, b[g] = h);
			b = h;
			b.then && e.unwrapPromises && (ra(d), "$$v" in b || function(a) {
				a.then(function(b) {
					a.$$v = b
				})
			}(b), b.$$v === r && (b.$$v = {}), b = b.$$v)
		}
		g = ea(a.shift(), d);
		return b[g] = c
	}

	function wc(b, a, c, d, e, g, f) {
		ea(b, g);
		ea(a, g);
		ea(c, g);
		ea(d, g);
		ea(e, g);
		return f.unwrapPromises ? function(f, m) {
			var k = m && m.hasOwnProperty(b) ? m : f,
				l;
			if (null == k) return k;
			(k = k[b]) && k.then && (ra(g), "$$v" in k || (l = k, l.$$v = r, l.then(function(a) {
				l.$$v = a
			})), k = k.$$v);
			if (!a) return k;
			if (null == k) return r;
			(k = k[a]) && k.then && (ra(g), "$$v" in k || (l = k, l.$$v = r, l.then(function(a) {
				l.$$v = a
			})), k = k.$$v);
			if (!c) return k;
			if (null == k) return r;
			(k = k[c]) && k.then && (ra(g), "$$v" in k || (l = k, l.$$v = r, l.then(function(a) {
				l.$$v = a
			})), k = k.$$v);
			if (!d) return k;
			if (null == k) return r;
			(k = k[d]) && k.then && (ra(g), "$$v" in k || (l = k, l.$$v = r, l.then(function(a) {
				l.$$v = a
			})), k = k.$$v);
			if (!e) return k;
			if (null == k) return r;
			(k = k[e]) && k.then && (ra(g), "$$v" in k || (l = k, l.$$v = r, l.then(function(a) {
				l.$$v = a
			})), k = k.$$v);
			return k
		} : function(g, f) {
			var k = f && f.hasOwnProperty(b) ? f : g;
			if (null == k) return k;
			k = k[b];
			if (!a) return k;
			if (null == k) return r;
			k = k[a];
			if (!c) return k;
			if (null == k) return r;
			k = k[c];
			if (!d) return k;
			if (null == k) return r;
			k = k[d];
			return e ? null == k ? r : k = k[e] : k
		}
	}

	function wd(b, a) {
		ea(b, a);
		return function(a, d) {
			return null == a ? r : (d && d.hasOwnProperty(b) ? d : a)[b]
		}
	}

	function xd(b, a, c) {
		ea(b, c);
		ea(a, c);
		return function(c, e) {
			if (null == c) return r;
			c = (e && e.hasOwnProperty(b) ? e : c)[b];
			return null == c ? r : c[a]
		}
	}

	function xc(b, a, c) {
		if (Kb.hasOwnProperty(b)) return Kb[b];
		var d = b.split("."),
			e = d.length,
			g;
		if (a.unwrapPromises || 1 !== e)
			if (a.unwrapPromises || 2 !== e)
				if (a.csp) g = 6 > e ? wc(d[0], d[1], d[2], d[3], d[4], c, a) : function(b, g) {
					var f = 0,
						h;
					do h = wc(d[f++], d[f++], d[f++], d[f++], d[f++], c, a)(b, g), g = r, b = h; while (f < e);
					return h
				};
				else {
					var f = "var p;\n";
					q(d, function(b, d) {
						ea(b, c);
						f += "if(s == null) return undefined;\ns=" + (d ? "s" : '((k&&k.hasOwnProperty("' + b + '"))?k:s)') + '["' + b + '"];\n' + (a.unwrapPromises ? 'if (s && s.then) {\n pw("' + c.replace(/(["\r\n])/g, "\\$1") + '");\n if (!("$$v" in s)) {\n p=s;\n p.$$v = undefined;\n p.then(function(v) {p.$$v=v;});\n}\n s=s.$$v\n}\n' : "")
					});
					var f = f + "return s;",
						h = new Function("s", "k", "pw", f);
					h.toString = $(f);
					g = a.unwrapPromises ? function(a, b) {
						return h(a, b, ra)
					} : h
				}
		else g = xd(d[0], d[1], c);
		else g = wd(d[0], c);
		"hasOwnProperty" !== b && (Kb[b] = g);
		return g
	}

	function yd() {
		var b = {},
			a = {
				csp: !1,
				unwrapPromises: !1,
				logPromiseWarnings: !0
			};
		this.unwrapPromises = function(b) {
			return B(b) ? (a.unwrapPromises = !!b, this) : a.unwrapPromises
		};
		this.logPromiseWarnings = function(b) {
			return B(b) ? (a.logPromiseWarnings = b, this) : a.logPromiseWarnings
		};
		this.$get = ["$filter", "$sniffer", "$log", function(c, d, e) {
			a.csp = d.csp;
			ra = function(b) {
				a.logPromiseWarnings && !yc.hasOwnProperty(b) && (yc[b] = !0, e.warn("[$parse] Promise found in the expression `" + b + "`. Automatic unwrapping of promises in Angular expressions is deprecated."))
			};
			return function(d) {
				var e;
				switch (typeof d) {
					case "string":
						if (b.hasOwnProperty(d)) return b[d];
						e = new Lb(a);
						e = new Za(e, c, a).parse(d, !1);
						"hasOwnProperty" !== d && (b[d] = e);
						return e;
					case "function":
						return d;
					default:
						return w
				}
			}
		}]
	}

	function zd() {
		this.$get = ["$rootScope", "$exceptionHandler", function(b, a) {
			return Ad(function(a) {
				b.$evalAsync(a)
			}, a)
		}]
	}

	function Ad(b, a) {
		function c(a) {
			return a
		}

		function d(a) {
			return f(a)
		}
		var e = function() {
				var h = [],
					m, k;
				return k = {
					resolve: function(a) {
						if (h) {
							var c = h;
							h = r;
							m = g(a);
							c.length && b(function() {
								for (var a, b = 0, d = c.length; b < d; b++) a = c[b], m.then(a[0], a[1], a[2])
							})
						}
					},
					reject: function(a) {
						k.resolve(f(a))
					},
					notify: function(a) {
						if (h) {
							var c = h;
							h.length && b(function() {
								for (var b, d = 0, e = c.length; d < e; d++) b = c[d], b[2](a)
							})
						}
					},
					promise: {
						then: function(b, g, f) {
							var k = e(),
								C = function(d) {
									try {
										k.resolve((L(b) ? b : c)(d))
									} catch (e) {
										k.reject(e), a(e)
									}
								},
								y = function(b) {
									try {
										k.resolve((L(g) ? g : d)(b))
									} catch (c) {
										k.reject(c), a(c)
									}
								},
								E = function(b) {
									try {
										k.notify((L(f) ? f : c)(b))
									} catch (d) {
										a(d)
									}
								};
							h ? h.push([C, y, E]) : m.then(C, y, E);
							return k.promise
						},
						"catch": function(a) {
							return this.then(null, a)
						},
						"finally": function(a) {
							function b(a, c) {
								var d = e();
								c ? d.resolve(a) : d.reject(a);
								return d.promise
							}

							function d(e, g) {
								var f = null;
								try {
									f = (a || c)()
								} catch (h) {
									return b(h, !1)
								}
								return f && L(f.then) ? f.then(function() {
									return b(e, g)
								}, function(a) {
									return b(a, !1)
								}) : b(e, g)
							}
							return this.then(function(a) {
								return d(a, !0)
							}, function(a) {
								return d(a, !1)
							})
						}
					}
				}
			},
			g = function(a) {
				return a && L(a.then) ? a : {
					then: function(c) {
						var d = e();
						b(function() {
							d.resolve(c(a))
						});
						return d.promise
					}
				}
			},
			f = function(c) {
				return {
					then: function(g, f) {
						var l = e();
						b(function() {
							try {
								l.resolve((L(f) ? f : d)(c))
							} catch (b) {
								l.reject(b), a(b)
							}
						});
						return l.promise
					}
				}
			};
		return {
			defer: e,
			reject: f,
			when: function(h, m, k, l) {
				var n = e(),
					p, s = function(b) {
						try {
							return (L(m) ? m : c)(b)
						} catch (d) {
							return a(d), f(d)
						}
					},
					C = function(b) {
						try {
							return (L(k) ? k : d)(b)
						} catch (c) {
							return a(c), f(c)
						}
					},
					y = function(b) {
						try {
							return (L(l) ? l : c)(b)
						} catch (d) {
							a(d)
						}
					};
				b(function() {
					g(h).then(function(a) {
						p || (p = !0, n.resolve(g(a).then(s, C, y)))
					}, function(a) {
						p || (p = !0, n.resolve(C(a)))
					}, function(a) {
						p || n.notify(y(a))
					})
				});
				return n.promise
			},
			all: function(a) {
				var b = e(),
					c = 0,
					d = K(a) ? [] : {};
				q(a, function(a, e) {
					c++;
					g(a).then(function(a) {
						d.hasOwnProperty(e) || (d[e] = a, --c || b.resolve(d))
					}, function(a) {
						d.hasOwnProperty(e) || b.reject(a)
					})
				});
				0 === c && b.resolve(d);
				return b.promise
			}
		}
	}

	function Bd() {
		var b = 10,
			a = F("$rootScope"),
			c = null;
		this.digestTtl = function(a) {
			arguments.length && (b = a);
			return b
		};
		this.$get = ["$injector", "$exceptionHandler", "$parse", "$browser", function(d, e, g, f) {
			function h() {
				this.$id = $a();
				this.$$phase = this.$parent = this.$$watchers = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = null;
				this["this"] = this.$root = this;
				this.$$destroyed = !1;
				this.$$asyncQueue = [];
				this.$$postDigestQueue = [];
				this.$$listeners = {};
				this.$$listenerCount = {};
				this.$$isolateBindings = {}
			}

			function m(b) {
				if (p.$$phase) throw a("inprog", p.$$phase);
				p.$$phase = b
			}

			function k(a, b) {
				var c = g(a);
				Qa(c, b);
				return c
			}

			function l(a, b, c) {
				do a.$$listenerCount[c] -= b, 0 === a.$$listenerCount[c] && delete a.$$listenerCount[c]; while (a = a.$parent)
			}

			function n() {}
			h.prototype = {
				constructor: h,
				$new: function(a) {
					a ? (a = new h, a.$root = this.$root, a.$$asyncQueue = this.$$asyncQueue, a.$$postDigestQueue = this.$$postDigestQueue) : (a = function() {}, a.prototype = this, a = new a, a.$id = $a());
					a["this"] = a;
					a.$$listeners = {};
					a.$$listenerCount = {};
					a.$parent = this;
					a.$$watchers = a.$$nextSibling = a.$$childHead = a.$$childTail = null;
					a.$$prevSibling = this.$$childTail;
					this.$$childHead ? this.$$childTail = this.$$childTail.$$nextSibling = a : this.$$childHead = this.$$childTail = a;
					return a
				},
				$watch: function(a, b, d) {
					var e = k(a, "watch"),
						g = this.$$watchers,
						f = {
							fn: b,
							last: n,
							get: e,
							exp: a,
							eq: !!d
						};
					c = null;
					if (!L(b)) {
						var h = k(b || w, "listener");
						f.fn = function(a, b, c) {
							h(c)
						}
					}
					if ("string" == typeof a && e.constant) {
						var m = f.fn;
						f.fn = function(a, b, c) {
							m.call(this, a, b, c);
							Na(g, f)
						}
					}
					g || (g = this.$$watchers = []);
					g.unshift(f);
					return function() {
						Na(g, f);
						c = null
					}
				},
				$watchCollection: function(a, b) {
					var c = this,
						d, e, f = 0,
						h = g(a),
						m = [],
						k = {},
						l = 0;
					return this.$watch(function() {
						e = h(c);
						var a, b;
						if (X(e))
							if (rb(e))
								for (d !== m && (d = m, l = d.length = 0, f++), a = e.length, l !== a && (f++, d.length = l = a), b = 0; b < a; b++) d[b] !== e[b] && (f++, d[b] = e[b]);
							else {
								d !== k && (d = k = {}, l = 0, f++);
								a = 0;
								for (b in e) e.hasOwnProperty(b) && (a++, d.hasOwnProperty(b) ? d[b] !== e[b] && (f++, d[b] = e[b]) : (l++, d[b] = e[b], f++));
								if (l > a)
									for (b in f++, d) d.hasOwnProperty(b) && !e.hasOwnProperty(b) && (l--, delete d[b])
							}
						else d !== e && (d = e, f++);
						return f
					}, function() {
						b(e, d, c)
					})
				},
				$digest: function() {
					var d, f, g, h, k = this.$$asyncQueue,
						l = this.$$postDigestQueue,
						q, v, r = b,
						N, V = [],
						J, A, P;
					m("$digest");
					c = null;
					do {
						v = !1;
						for (N = this; k.length;) {
							try {
								P = k.shift(), P.scope.$eval(P.expression)
							} catch (B) {
								p.$$phase = null, e(B)
							}
							c = null
						}
						a: do {
							if (h = N.$$watchers)
								for (q = h.length; q--;) try {
									if (d = h[q])
										if ((f = d.get(N)) !== (g = d.last) && !(d.eq ? ua(f, g) : "number" == typeof f && "number" == typeof g && isNaN(f) && isNaN(g))) v = !0, c = d, d.last = d.eq ? aa(f) : f, d.fn(f, g === n ? f : g, N), 5 > r && (J = 4 - r, V[J] || (V[J] = []), A = L(d.exp) ? "fn: " + (d.exp.name || d.exp.toString()) : d.exp, A += "; newVal: " + qa(f) + "; oldVal: " + qa(g), V[J].push(A));
										else if (d === c) {
										v = !1;
										break a
									}
								} catch (t) {
									p.$$phase = null, e(t)
								}
							if (!(h = N.$$childHead || N !== this && N.$$nextSibling))
								for (; N !== this && !(h = N.$$nextSibling);) N = N.$parent
						} while (N = h);
						if ((v || k.length) && !r--) throw p.$$phase = null, a("infdig", b, qa(V))
					} while (v || k.length);
					for (p.$$phase = null; l.length;) try {
						l.shift()()
					} catch (z) {
						e(z)
					}
				},
				$destroy: function() {
					if (!this.$$destroyed) {
						var a = this.$parent;
						this.$broadcast("$destroy");
						this.$$destroyed = !0;
						this !== p && (q(this.$$listenerCount, cb(null, l, this)), a.$$childHead == this && (a.$$childHead = this.$$nextSibling), a.$$childTail == this && (a.$$childTail = this.$$prevSibling), this.$$prevSibling && (this.$$prevSibling.$$nextSibling = this.$$nextSibling), this.$$nextSibling && (this.$$nextSibling.$$prevSibling = this.$$prevSibling), this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = null)
					}
				},
				$eval: function(a, b) {
					return g(a)(this, b)
				},
				$evalAsync: function(a) {
					p.$$phase || p.$$asyncQueue.length || f.defer(function() {
						p.$$asyncQueue.length && p.$digest()
					});
					this.$$asyncQueue.push({
						scope: this,
						expression: a
					})
				},
				$$postDigest: function(a) {
					this.$$postDigestQueue.push(a)
				},
				$apply: function(a) {
					try {
						return m("$apply"), this.$eval(a)
					} catch (b) {
						e(b)
					} finally {
						p.$$phase = null;
						try {
							p.$digest()
						} catch (c) {
							throw e(c), c
						}
					}
				},
				$on: function(a, b) {
					var c = this.$$listeners[a];
					c || (this.$$listeners[a] = c = []);
					c.push(b);
					var d = this;
					do d.$$listenerCount[a] || (d.$$listenerCount[a] = 0), d.$$listenerCount[a]++; while (d = d.$parent);
					var e = this;
					return function() {
						c[bb(c, b)] = null;
						l(e, 1, a)
					}
				},
				$emit: function(a, b) {
					var c = [],
						d, f = this,
						g = !1,
						h = {
							name: a,
							targetScope: f,
							stopPropagation: function() {
								g = !0
							},
							preventDefault: function() {
								h.defaultPrevented = !0
							},
							defaultPrevented: !1
						},
						m = [h].concat(va.call(arguments, 1)),
						k, l;
					do {
						d = f.$$listeners[a] || c;
						h.currentScope = f;
						k = 0;
						for (l = d.length; k < l; k++)
							if (d[k]) try {
								d[k].apply(null, m)
							} catch (p) {
								e(p)
							} else d.splice(k, 1), k--, l--;
						if (g) break;
						f = f.$parent
					} while (f);
					return h
				},
				$broadcast: function(a, b) {
					for (var c = this, d = this, f = {
							name: a,
							targetScope: this,
							preventDefault: function() {
								f.defaultPrevented = !0
							},
							defaultPrevented: !1
						}, g = [f].concat(va.call(arguments, 1)), h, k; c = d;) {
						f.currentScope = c;
						d = c.$$listeners[a] || [];
						h = 0;
						for (k = d.length; h < k; h++)
							if (d[h]) try {
								d[h].apply(null, g)
							} catch (m) {
								e(m)
							} else d.splice(h, 1), h--, k--;
						if (!(d = c.$$listenerCount[a] && c.$$childHead || c !== this && c.$$nextSibling))
							for (; c !== this && !(d = c.$$nextSibling);) c = c.$parent
					}
					return f
				}
			};
			var p = new h;
			return p
		}]
	}

	function Cd() {
		var b = /^\s*(https?|ftp|mailto|tel|file):/,
			a = /^\s*(https?|ftp|file):|data:image\//;
		this.aHrefSanitizationWhitelist = function(a) {
			return B(a) ? (b = a, this) : b
		};
		this.imgSrcSanitizationWhitelist = function(b) {
			return B(b) ? (a = b, this) : a
		};
		this.$get = function() {
			return function(c, d) {
				var e = d ? a : b,
					g;
				if (!M || 8 <= M)
					if (g = ya(c).href, "" !== g && !g.match(e)) return "unsafe:" + g;
				return c
			}
		}
	}

	function Dd(b) {
		if ("self" === b) return b;
		if (D(b)) {
			if (-1 < b.indexOf("***")) throw sa("iwcard", b);
			b = b.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, "\\$1").replace(/\x08/g, "\\x08").replace("\\*\\*", ".*").replace("\\*", "[^:/.?&;]*");
			return RegExp("^" + b + "$")
		}
		if (ab(b)) return RegExp("^" + b.source + "$");
		throw sa("imatcher")
	}

	function zc(b) {
		var a = [];
		B(b) && q(b, function(b) {
			a.push(Dd(b))
		});
		return a
	}

	function Ed() {
		this.SCE_CONTEXTS = fa;
		var b = ["self"],
			a = [];
		this.resourceUrlWhitelist = function(a) {
			arguments.length && (b = zc(a));
			return b
		};
		this.resourceUrlBlacklist = function(b) {
			arguments.length && (a = zc(b));
			return a
		};
		this.$get = ["$injector", function(c) {
			function d(a) {
				var b = function(a) {
					this.$$unwrapTrustedValue = function() {
						return a
					}
				};
				a && (b.prototype = new a);
				b.prototype.valueOf = function() {
					return this.$$unwrapTrustedValue()
				};
				b.prototype.toString = function() {
					return this.$$unwrapTrustedValue().toString()
				};
				return b
			}
			var e = function(a) {
				throw sa("unsafe")
			};
			c.has("$sanitize") && (e = c.get("$sanitize"));
			var g = d(),
				f = {};
			f[fa.HTML] = d(g);
			f[fa.CSS] = d(g);
			f[fa.URL] = d(g);
			f[fa.JS] = d(g);
			f[fa.RESOURCE_URL] = d(f[fa.URL]);
			return {
				trustAs: function(a, b) {
					var c = f.hasOwnProperty(a) ? f[a] : null;
					if (!c) throw sa("icontext", a, b);
					if (null === b || b === r || "" === b) return b;
					if ("string" !== typeof b) throw sa("itype", a);
					return new c(b)
				},
				getTrusted: function(c, d) {
					if (null === d || d === r || "" === d) return d;
					var g = f.hasOwnProperty(c) ? f[c] : null;
					if (g && d instanceof g) return d.$$unwrapTrustedValue();
					if (c === fa.RESOURCE_URL) {
						var g = ya(d.toString()),
							l, n, p = !1;
						l = 0;
						for (n = b.length; l < n; l++)
							if ("self" === b[l] ? Gb(g) : b[l].exec(g.href)) {
								p = !0;
								break
							} if (p)
							for (l = 0, n = a.length; l < n; l++)
								if ("self" === a[l] ? Gb(g) : a[l].exec(g.href)) {
									p = !1;
									break
								} if (p) return d;
						throw sa("insecurl", d.toString())
					}
					if (c === fa.HTML) return e(d);
					throw sa("unsafe")
				},
				valueOf: function(a) {
					return a instanceof g ? a.$$unwrapTrustedValue() : a
				}
			}
		}]
	}

	function Fd() {
		var b = !0;
		this.enabled = function(a) {
			arguments.length && (b = !!a);
			return b
		};
		this.$get = ["$parse", "$sniffer", "$sceDelegate", function(a, c, d) {
			if (b && c.msie && 8 > c.msieDocumentMode) throw sa("iequirks");
			var e = aa(fa);
			e.isEnabled = function() {
				return b
			};
			e.trustAs = d.trustAs;
			e.getTrusted = d.getTrusted;
			e.valueOf = d.valueOf;
			b || (e.trustAs = e.getTrusted = function(a, b) {
				return b
			}, e.valueOf = Ba);
			e.parseAs = function(b, c) {
				var d = a(c);
				return d.literal && d.constant ? d : function(a, c) {
					return e.getTrusted(b, d(a, c))
				}
			};
			var g = e.parseAs,
				f = e.getTrusted,
				h = e.trustAs;
			q(fa, function(a, b) {
				var c = x(b);
				e[Ra("parse_as_" + c)] = function(b) {
					return g(a, b)
				};
				e[Ra("get_trusted_" + c)] = function(b) {
					return f(a, b)
				};
				e[Ra("trust_as_" + c)] = function(b) {
					return h(a, b)
				}
			});
			return e
		}]
	}

	function Gd() {
		this.$get = ["$window", "$document", function(b, a) {
			var c = {},
				d = S((/android (\d+)/.exec(x((b.navigator || {}).userAgent)) || [])[1]),
				e = /Boxee/i.test((b.navigator || {}).userAgent),
				g = a[0] || {},
				f = g.documentMode,
				h, m = /^(Moz|webkit|O|ms)(?=[A-Z])/,
				k = g.body && g.body.style,
				l = !1,
				n = !1;
			if (k) {
				for (var p in k)
					if (l = m.exec(p)) {
						h = l[0];
						h = h.substr(0, 1).toUpperCase() + h.substr(1);
						break
					} h || (h = "WebkitOpacity" in k && "webkit");
				l = !!("transition" in k || h + "Transition" in k);
				n = !!("animation" in k || h + "Animation" in k);
				!d || l && n || (l = D(g.body.style.webkitTransition), n = D(g.body.style.webkitAnimation))
			}
			return {
				history: !(!b.history || !b.history.pushState || 4 > d || e),
				hashchange: "onhashchange" in b && (!f || 7 < f),
				hasEvent: function(a) {
					if ("input" == a && 9 == M) return !1;
					if (z(c[a])) {
						var b = g.createElement("div");
						c[a] = "on" + a in b
					}
					return c[a]
				},
				csp: Ub(),
				vendorPrefix: h,
				transitions: l,
				animations: n,
				android: d,
				msie: M,
				msieDocumentMode: f
			}
		}]
	}

	function Hd() {
		this.$get = ["$rootScope", "$browser", "$q", "$exceptionHandler", function(b, a, c, d) {
			function e(e, h, m) {
				var k = c.defer(),
					l = k.promise,
					n = B(m) && !m;
				h = a.defer(function() {
					try {
						k.resolve(e())
					} catch (a) {
						k.reject(a), d(a)
					} finally {
						delete g[l.$$timeoutId]
					}
					n || b.$apply()
				}, h);
				l.$$timeoutId = h;
				g[h] = k;
				return l
			}
			var g = {};
			e.cancel = function(b) {
				return b && b.$$timeoutId in g ? (g[b.$$timeoutId].reject("canceled"), delete g[b.$$timeoutId], a.defer.cancel(b.$$timeoutId)) : !1
			};
			return e
		}]
	}

	function ya(b, a) {
		var c = b;
		M && (Y.setAttribute("href", c), c = Y.href);
		Y.setAttribute("href", c);
		return {
			href: Y.href,
			protocol: Y.protocol ? Y.protocol.replace(/:$/, "") : "",
			host: Y.host,
			search: Y.search ? Y.search.replace(/^\?/, "") : "",
			hash: Y.hash ? Y.hash.replace(/^#/, "") : "",
			hostname: Y.hostname,
			port: Y.port,
			pathname: "/" === Y.pathname.charAt(0) ? Y.pathname : "/" + Y.pathname
		}
	}

	function Gb(b) {
		b = D(b) ? ya(b) : b;
		return b.protocol === Ac.protocol && b.host === Ac.host
	}

	function Id() {
		this.$get = $(Z)
	}

	function Bc(b) {
		function a(d, e) {
			if (X(d)) {
				var g = {};
				q(d, function(b, c) {
					g[c] = a(c, b)
				});
				return g
			}
			return b.factory(d + c, e)
		}
		var c = "Filter";
		this.register = a;
		this.$get = ["$injector", function(a) {
			return function(b) {
				return a.get(b + c)
			}
		}];
		a("currency", Cc);
		a("date", Dc);
		a("filter", Jd);
		a("json", Kd);
		a("limitTo", Ld);
		a("lowercase", Md);
		a("number", Ec);
		a("orderBy", Fc);
		a("uppercase", Nd)
	}

	function Jd() {
		return function(b, a, c) {
			if (!K(b)) return b;
			var d = typeof c,
				e = [];
			e.check = function(a) {
				for (var b = 0; b < e.length; b++)
					if (!e[b](a)) return !1;
				return !0
			};
			"function" !== d && (c = "boolean" === d && c ? function(a, b) {
				return Ca.equals(a, b)
			} : function(a, b) {
				b = ("" + b).toLowerCase();
				return -1 < ("" + a).toLowerCase().indexOf(b)
			});
			var g = function(a, b) {
				if ("string" == typeof b && "!" === b.charAt(0)) return !g(a, b.substr(1));
				switch (typeof a) {
					case "boolean":
					case "number":
					case "string":
						return c(a, b);
					case "object":
						switch (typeof b) {
							case "object":
								return c(a, b);
							default:
								for (var d in a)
									if ("$" !== d.charAt(0) && g(a[d], b)) return !0
						}
						return !1;
					case "array":
						for (d = 0; d < a.length; d++)
							if (g(a[d], b)) return !0;
						return !1;
					default:
						return !1
				}
			};
			switch (typeof a) {
				case "boolean":
				case "number":
				case "string":
					a = {
						$: a
					};
				case "object":
					for (var f in a)(function(b) {
						"undefined" != typeof a[b] && e.push(function(c) {
							return g("$" == b ? c : vb(c, b), a[b])
						})
					})(f);
					break;
				case "function":
					e.push(a);
					break;
				default:
					return b
			}
			d = [];
			for (f = 0; f < b.length; f++) {
				var h = b[f];
				e.check(h) && d.push(h)
			}
			return d
		}
	}

	function Cc(b) {
		var a = b.NUMBER_FORMATS;
		return function(b, d) {
			z(d) && (d = a.CURRENCY_SYM);
			return Gc(b, a.PATTERNS[1], a.GROUP_SEP, a.DECIMAL_SEP, 2).replace(/\u00A4/g, d)
		}
	}

	function Ec(b) {
		var a = b.NUMBER_FORMATS;
		return function(b, d) {
			return Gc(b, a.PATTERNS[0], a.GROUP_SEP, a.DECIMAL_SEP, d)
		}
	}

	function Gc(b, a, c, d, e) {
		if (isNaN(b) || !isFinite(b)) return "";
		var g = 0 > b;
		b = Math.abs(b);
		var f = b + "",
			h = "",
			m = [],
			k = !1;
		if (-1 !== f.indexOf("e")) {
			var l = f.match(/([\d\.]+)e(-?)(\d+)/);
			l && "-" == l[2] && l[3] > e + 1 ? f = "0" : (h = f, k = !0)
		}
		if (k) 0 < e && (-1 < b && 1 > b) && (h = b.toFixed(e));
		else {
			f = (f.split(Hc)[1] || "").length;
			z(e) && (e = Math.min(Math.max(a.minFrac, f), a.maxFrac));
			f = Math.pow(10, e);
			b = Math.round(b * f) / f;
			b = ("" + b).split(Hc);
			f = b[0];
			b = b[1] || "";
			var l = 0,
				n = a.lgSize,
				p = a.gSize;
			if (f.length >= n + p)
				for (l = f.length - n, k = 0; k < l; k++) 0 === (l - k) % p && 0 !== k && (h += c), h += f.charAt(k);
			for (k = l; k < f.length; k++) 0 === (f.length - k) % n && 0 !== k && (h += c), h += f.charAt(k);
			for (; b.length < e;) b += "0";
			e && "0" !== e && (h += d + b.substr(0, e))
		}
		m.push(g ? a.negPre : a.posPre);
		m.push(h);
		m.push(g ? a.negSuf : a.posSuf);
		return m.join("")
	}

	function Mb(b, a, c) {
		var d = "";
		0 > b && (d = "-", b = -b);
		for (b = "" + b; b.length < a;) b = "0" + b;
		c && (b = b.substr(b.length - a));
		return d + b
	}

	function W(b, a, c, d) {
		c = c || 0;
		return function(e) {
			e = e["get" + b]();
			if (0 < c || e > -c) e += c;
			0 === e && -12 == c && (e = 12);
			return Mb(e, a, d)
		}
	}

	function lb(b, a) {
		return function(c, d) {
			var e = c["get" + b](),
				g = Ia(a ? "SHORT" + b : b);
			return d[g][e]
		}
	}

	function Dc(b) {
		function a(a) {
			var b;
			if (b = a.match(c)) {
				a = new Date(0);
				var g = 0,
					f = 0,
					h = b[8] ? a.setUTCFullYear : a.setFullYear,
					m = b[8] ? a.setUTCHours : a.setHours;
				b[9] && (g = S(b[9] + b[10]), f = S(b[9] + b[11]));
				h.call(a, S(b[1]), S(b[2]) - 1, S(b[3]));
				g = S(b[4] || 0) - g;
				f = S(b[5] || 0) - f;
				h = S(b[6] || 0);
				b = Math.round(1e3 * parseFloat("0." + (b[7] || 0)));
				m.call(a, g, f, h, b)
			}
			return a
		}
		var c = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
		return function(c, e) {
			var g = "",
				f = [],
				h, m;
			e = e || "mediumDate";
			e = b.DATETIME_FORMATS[e] || e;
			D(c) && (c = Od.test(c) ? S(c) : a(c));
			sb(c) && (c = new Date(c));
			if (!La(c)) return c;
			for (; e;)(m = Pd.exec(e)) ? (f = f.concat(va.call(m, 1)), e = f.pop()) : (f.push(e), e = null);
			q(f, function(a) {
				h = Qd[a];
				g += h ? h(c, b.DATETIME_FORMATS) : a.replace(/(^'|'$)/g, "").replace(/''/g, "'")
			});
			return g
		}
	}

	function Kd() {
		return function(b) {
			return qa(b, !0)
		}
	}

	function Ld() {
		return function(b, a) {
			if (!K(b) && !D(b)) return b;
			a = S(a);
			if (D(b)) return a ? 0 <= a ? b.slice(0, a) : b.slice(a, b.length) : "";
			var c = [],
				d, e;
			a > b.length ? a = b.length : a < -b.length && (a = -b.length);
			0 < a ? (d = 0, e = a) : (d = b.length + a, e = b.length);
			for (; d < e; d++) c.push(b[d]);
			return c
		}
	}

	function Fc(b) {
		return function(a, c, d) {
			function e(a, b) {
				return Pa(b) ? function(b, c) {
					return a(c, b)
				} : a
			}
			if (!K(a) || !c) return a;
			c = K(c) ? c : [c];
			c = Rc(c, function(a) {
				var c = !1,
					d = a || Ba;
				if (D(a)) {
					if ("+" == a.charAt(0) || "-" == a.charAt(0)) c = "-" == a.charAt(0), a = a.substring(1);
					d = b(a)
				}
				return e(function(a, b) {
					var c;
					c = d(a);
					var e = d(b),
						g = typeof c,
						f = typeof e;
					g == f ? ("string" == g && (c = c.toLowerCase(), e = e.toLowerCase()), c = c === e ? 0 : c < e ? -1 : 1) : c = g < f ? -1 : 1;
					return c
				}, c)
			});
			for (var g = [], f = 0; f < a.length; f++) g.push(a[f]);
			return g.sort(e(function(a, b) {
				for (var d = 0; d < c.length; d++) {
					var e = c[d](a, b);
					if (0 !== e) return e
				}
				return 0
			}, d))
		}
	}

	function ta(b) {
		L(b) && (b = {
			link: b
		});
		b.restrict = b.restrict || "AC";
		return $(b)
	}

	function Ic(b, a) {
		function c(a, c) {
			c = c ? "-" + db(c, "-") : "";
			b.removeClass((a ? mb : nb) + c).addClass((a ? nb : mb) + c)
		}
		var d = this,
			e = b.parent().controller("form") || ob,
			g = 0,
			f = d.$error = {},
			h = [];
		d.$name = a.name || a.ngForm;
		d.$dirty = !1;
		d.$pristine = !0;
		d.$valid = !0;
		d.$invalid = !1;
		e.$addControl(d);
		b.addClass(Ja);
		c(!0);
		d.$addControl = function(a) {
			xa(a.$name, "input");
			h.push(a);
			a.$name && (d[a.$name] = a)
		};
		d.$removeControl = function(a) {
			a.$name && d[a.$name] === a && delete d[a.$name];
			q(f, function(b, c) {
				d.$setValidity(c, !0, a)
			});
			Na(h, a)
		};
		d.$setValidity = function(a, b, h) {
			var n = f[a];
			if (b) n && (Na(n, h), n.length || (g--, g || (c(b), d.$valid = !0, d.$invalid = !1), f[a] = !1, c(!0, a), e.$setValidity(a, !0, d)));
			else {
				g || c(b);
				if (n) {
					if (-1 != bb(n, h)) return
				} else f[a] = n = [], g++, c(!1, a), e.$setValidity(a, !1, d);
				n.push(h);
				d.$valid = !1;
				d.$invalid = !0
			}
		};
		d.$setDirty = function() {
			b.removeClass(Ja).addClass(pb);
			d.$dirty = !0;
			d.$pristine = !1;
			e.$setDirty()
		};
		d.$setPristine = function() {
			b.removeClass(pb).addClass(Ja);
			d.$dirty = !1;
			d.$pristine = !0;
			q(h, function(a) {
				a.$setPristine()
			})
		}
	}

	function pa(b, a, c, d) {
		b.$setValidity(a, c);
		return c ? d : r
	}

	function qb(b, a, c, d, e, g) {
		if (!e.android) {
			var f = !1;
			a.on("compositionstart", function(a) {
				f = !0
			});
			a.on("compositionend", function() {
				f = !1
			})
		}
		var h = function() {
			if (!f) {
				var e = a.val();
				Pa(c.ngTrim || "T") && (e = ba(e));
				d.$viewValue !== e && (b.$$phase ? d.$setViewValue(e) : b.$apply(function() {
					d.$setViewValue(e)
				}))
			}
		};
		if (e.hasEvent("input")) a.on("input", h);
		else {
			var m, k = function() {
				m || (m = g.defer(function() {
					h();
					m = null
				}))
			};
			a.on("keydown", function(a) {
				a = a.keyCode;
				91 === a || (15 < a && 19 > a || 37 <= a && 40 >= a) || k()
			});
			if (e.hasEvent("paste")) a.on("paste cut", k)
		}
		a.on("change", h);
		d.$render = function() {
			a.val(d.$isEmpty(d.$viewValue) ? "" : d.$viewValue)
		};
		var l = c.ngPattern;
		l && ((e = l.match(/^\/(.*)\/([gim]*)$/)) ? (l = RegExp(e[1], e[2]), e = function(a) {
			return pa(d, "pattern", d.$isEmpty(a) || l.test(a), a)
		}) : e = function(c) {
			var e = b.$eval(l);
			if (!e || !e.test) throw F("ngPattern")("noregexp", l, e, ga(a));
			return pa(d, "pattern", d.$isEmpty(c) || e.test(c), c)
		}, d.$formatters.push(e), d.$parsers.push(e));
		if (c.ngMinlength) {
			var n = S(c.ngMinlength);
			e = function(a) {
				return pa(d, "minlength", d.$isEmpty(a) || a.length >= n, a)
			};
			d.$parsers.push(e);
			d.$formatters.push(e)
		}
		if (c.ngMaxlength) {
			var p = S(c.ngMaxlength);
			e = function(a) {
				return pa(d, "maxlength", d.$isEmpty(a) || a.length <= p, a)
			};
			d.$parsers.push(e);
			d.$formatters.push(e)
		}
	}

	function Nb(b, a) {
		b = "ngClass" + b;
		return function() {
			return {
				restrict: "AC",
				link: function(c, d, e) {
					function g(b) {
						if (!0 === a || c.$index % 2 === a) {
							var d = f(b || "");
							h ? ua(b, h) || e.$updateClass(d, f(h)) : e.$addClass(d)
						}
						h = aa(b)
					}

					function f(a) {
						if (K(a)) return a.join(" ");
						if (X(a)) {
							var b = [];
							q(a, function(a, c) {
								a && b.push(c)
							});
							return b.join(" ")
						}
						return a
					}
					var h;
					c.$watch(e[b], g, !0);
					e.$observe("class", function(a) {
						g(c.$eval(e[b]))
					});
					"ngClass" !== b && c.$watch("$index", function(d, g) {
						var h = d & 1;
						if (h !== g & 1) {
							var n = f(c.$eval(e[b]));
							h === a ? e.$addClass(n) : e.$removeClass(n)
						}
					})
				}
			}
		}
	}
	var x = function(b) {
			return D(b) ? b.toLowerCase() : b
		},
		Ia = function(b) {
			return D(b) ? b.toUpperCase() : b
		},
		M, A, Da, va = [].slice,
		Rd = [].push,
		Ma = Object.prototype.toString,
		Oa = F("ng"),
		Ca = Z.angular || (Z.angular = {}),
		Va, Ha, ka = ["0", "0", "0"];
	M = S((/msie (\d+)/.exec(x(navigator.userAgent)) || [])[1]);
	isNaN(M) && (M = S((/trident\/.*; rv:(\d+)/.exec(x(navigator.userAgent)) || [])[1]));
	w.$inject = [];
	Ba.$inject = [];
	var ba = function() {
		return String.prototype.trim ? function(b) {
			return D(b) ? b.trim() : b
		} : function(b) {
			return D(b) ? b.replace(/^\s\s*/, "").replace(/\s\s*$/, "") : b
		}
	}();
	Ha = 9 > M ? function(b) {
		b = b.nodeName ? b : b[0];
		return b.scopeName && "HTML" != b.scopeName ? Ia(b.scopeName + ":" + b.nodeName) : b.nodeName
	} : function(b) {
		return b.nodeName ? b.nodeName : b[0].nodeName
	};
	var Uc = /[A-Z]/g,
		Sd = {
			full: "1.2.10",
			major: 1,
			minor: 2,
			dot: 10,
			codeName: "augmented-serendipity"
		},
		Sa = O.cache = {},
		eb = O.expando = "ng-" + (new Date).getTime(),
		Yc = 1,
		Jc = Z.document.addEventListener ? function(b, a, c) {
			b.addEventListener(a, c, !1)
		} : function(b, a, c) {
			b.attachEvent("on" + a, c)
		},
		Bb = Z.document.removeEventListener ? function(b, a, c) {
			b.removeEventListener(a, c, !1)
		} : function(b, a, c) {
			b.detachEvent("on" + a, c)
		},
		Wc = /([\:\-\_]+(.))/g,
		Xc = /^moz([A-Z])/,
		yb = F("jqLite"),
		Ga = O.prototype = {
			ready: function(b) {
				function a() {
					c || (c = !0, b())
				}
				var c = !1;
				"complete" === Q.readyState ? setTimeout(a) : (this.on("DOMContentLoaded", a), O(Z).on("load", a))
			},
			toString: function() {
				var b = [];
				q(this, function(a) {
					b.push("" + a)
				});
				return "[" + b.join(", ") + "]"
			},
			eq: function(b) {
				return 0 <= b ? A(this[b]) : A(this[this.length + b])
			},
			length: 0,
			push: Rd,
			sort: [].sort,
			splice: [].splice
		},
		gb = {};
	q("multiple selected checked disabled readOnly required open".split(" "), function(b) {
		gb[x(b)] = b
	});
	var gc = {};
	q("input select option textarea button form details".split(" "), function(b) {
		gc[Ia(b)] = !0
	});
	q({
		data: cc,
		inheritedData: fb,
		scope: function(b) {
			return A(b).data("$scope") || fb(b.parentNode || b, ["$isolateScope", "$scope"])
		},
		isolateScope: function(b) {
			return A(b).data("$isolateScope") || A(b).data("$isolateScopeNoTemplate")
		},
		controller: dc,
		injector: function(b) {
			return fb(b, "$injector")
		},
		removeAttr: function(b, a) {
			b.removeAttribute(a)
		},
		hasClass: Cb,
		css: function(b, a, c) {
			a = Ra(a);
			if (B(c)) b.style[a] = c;
			else {
				var d;
				8 >= M && (d = b.currentStyle && b.currentStyle[a], "" === d && (d = "auto"));
				d = d || b.style[a];
				8 >= M && (d = "" === d ? r : d);
				return d
			}
		},
		attr: function(b, a, c) {
			var d = x(a);
			if (gb[d])
				if (B(c)) c ? (b[a] = !0, b.setAttribute(a, d)) : (b[a] = !1, b.removeAttribute(d));
				else return b[a] || (b.attributes.getNamedItem(a) || w).specified ? d : r;
			else if (B(c)) b.setAttribute(a, c);
			else if (b.getAttribute) return b = b.getAttribute(a, 2), null === b ? r : b
		},
		prop: function(b, a, c) {
			if (B(c)) b[a] = c;
			else return b[a]
		},
		text: function() {
			function b(b, d) {
				var e = a[b.nodeType];
				if (z(d)) return e ? b[e] : "";
				b[e] = d
			}
			var a = [];
			9 > M ? (a[1] = "innerText", a[3] = "nodeValue") : a[1] = a[3] = "textContent";
			b.$dv = "";
			return b
		}(),
		val: function(b, a) {
			if (z(a)) {
				if ("SELECT" === Ha(b) && b.multiple) {
					var c = [];
					q(b.options, function(a) {
						a.selected && c.push(a.value || a.text)
					});
					return 0 === c.length ? null : c
				}
				return b.value
			}
			b.value = a
		},
		html: function(b, a) {
			if (z(a)) return b.innerHTML;
			for (var c = 0, d = b.childNodes; c < d.length; c++) Ea(d[c]);
			b.innerHTML = a
		},
		empty: ec
	}, function(b, a) {
		O.prototype[a] = function(a, d) {
			var e, g;
			if (b !== ec && (2 == b.length && b !== Cb && b !== dc ? a : d) === r) {
				if (X(a)) {
					for (e = 0; e < this.length; e++)
						if (b === cc) b(this[e], a);
						else
							for (g in a) b(this[e], g, a[g]);
					return this
				}
				e = b.$dv;
				g = e === r ? Math.min(this.length, 1) : this.length;
				for (var f = 0; f < g; f++) {
					var h = b(this[f], a, d);
					e = e ? e + h : h
				}
				return e
			}
			for (e = 0; e < this.length; e++) b(this[e], a, d);
			return this
		}
	});
	q({
		removeData: ac,
		dealoc: Ea,
		on: function a(c, d, e, g) {
			if (B(g)) throw yb("onargs");
			var f = la(c, "events"),
				h = la(c, "handle");
			f || la(c, "events", f = {});
			h || la(c, "handle", h = Zc(c, f));
			q(d.split(" "), function(d) {
				var g = f[d];
				if (!g) {
					if ("mouseenter" == d || "mouseleave" == d) {
						var l = Q.body.contains || Q.body.compareDocumentPosition ? function(a, c) {
							var d = 9 === a.nodeType ? a.documentElement : a,
								e = c && c.parentNode;
							return a === e || !!(e && 1 === e.nodeType && (d.contains ? d.contains(e) : a.compareDocumentPosition && a.compareDocumentPosition(e) & 16))
						} : function(a, c) {
							if (c)
								for (; c = c.parentNode;)
									if (c === a) return !0;
							return !1
						};
						f[d] = [];
						a(c, {
							mouseleave: "mouseout",
							mouseenter: "mouseover"
						} [d], function(a) {
							var c = a.relatedTarget;
							c && (c === this || l(this, c)) || h(a, d)
						})
					} else Jc(c, d, h), f[d] = [];
					g = f[d]
				}
				g.push(e)
			})
		},
		off: bc,
		one: function(a, c, d) {
			a = A(a);
			a.on(c, function g() {
				a.off(c, d);
				a.off(c, g)
			});
			a.on(c, d)
		},
		replaceWith: function(a, c) {
			var d, e = a.parentNode;
			Ea(a);
			q(new O(c), function(c) {
				d ? e.insertBefore(c, d.nextSibling) : e.replaceChild(c, a);
				d = c
			})
		},
		children: function(a) {
			var c = [];
			q(a.childNodes, function(a) {
				1 === a.nodeType && c.push(a)
			});
			return c
		},
		contents: function(a) {
			return a.childNodes || []
		},
		append: function(a, c) {
			q(new O(c), function(c) {
				1 !== a.nodeType && 11 !== a.nodeType || a.appendChild(c)
			})
		},
		prepend: function(a, c) {
			if (1 === a.nodeType) {
				var d = a.firstChild;
				q(new O(c), function(c) {
					a.insertBefore(c, d)
				})
			}
		},
		wrap: function(a, c) {
			c = A(c)[0];
			var d = a.parentNode;
			d && d.replaceChild(c, a);
			c.appendChild(a)
		},
		remove: function(a) {
			Ea(a);
			var c = a.parentNode;
			c && c.removeChild(a)
		},
		after: function(a, c) {
			var d = a,
				e = a.parentNode;
			q(new O(c), function(a) {
				e.insertBefore(a, d.nextSibling);
				d = a
			})
		},
		addClass: Eb,
		removeClass: Db,
		toggleClass: function(a, c, d) {
			z(d) && (d = !Cb(a, c));
			(d ? Eb : Db)(a, c)
		},
		parent: function(a) {
			return (a = a.parentNode) && 11 !== a.nodeType ? a : null
		},
		next: function(a) {
			if (a.nextElementSibling) return a.nextElementSibling;
			for (a = a.nextSibling; null != a && 1 !== a.nodeType;) a = a.nextSibling;
			return a
		},
		find: function(a, c) {
			return a.getElementsByTagName ? a.getElementsByTagName(c) : []
		},
		clone: Ab,
		triggerHandler: function(a, c, d) {
			c = (la(a, "events") || {})[c];
			d = d || [];
			var e = [{
				preventDefault: w,
				stopPropagation: w
			}];
			q(c, function(c) {
				c.apply(a, e.concat(d))
			})
		}
	}, function(a, c) {
		O.prototype[c] = function(c, e, g) {
			for (var f, h = 0; h < this.length; h++) z(f) ? (f = a(this[h], c, e, g), B(f) && (f = A(f))) : zb(f, a(this[h], c, e, g));
			return B(f) ? f : this
		};
		O.prototype.bind = O.prototype.on;
		O.prototype.unbind = O.prototype.off
	});
	Ta.prototype = {
		put: function(a, c) {
			this[Fa(a)] = c
		},
		get: function(a) {
			return this[Fa(a)]
		},
		remove: function(a) {
			var c = this[a = Fa(a)];
			delete this[a];
			return c
		}
	};
	var ad = /^function\s*[^\(]*\(\s*([^\)]*)\)/m,
		bd = /,/,
		cd = /^\s*(_?)(\S+?)\1\s*$/,
		$c = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,
		Ua = F("$injector"),
		Td = F("$animate"),
		Ud = ["$provide", function(a) {
			this.$$selectors = {};
			this.register = function(c, d) {
				var e = c + "-animation";
				if (c && "." != c.charAt(0)) throw Td("notcsel", c);
				this.$$selectors[c.substr(1)] = e;
				a.factory(e, d)
			};
			this.classNameFilter = function(a) {
				1 === arguments.length && (this.$$classNameFilter = a instanceof RegExp ? a : null);
				return this.$$classNameFilter
			};
			this.$get = ["$timeout", function(a) {
				return {
					enter: function(d, e, g, f) {
						g ? g.after(d) : (e && e[0] || (e = g.parent()), e.append(d));
						f && a(f, 0, !1)
					},
					leave: function(d, e) {
						d.remove();
						e && a(e, 0, !1)
					},
					move: function(a, c, g, f) {
						this.enter(a, c, g, f)
					},
					addClass: function(d, e, g) {
						e = D(e) ? e : K(e) ? e.join(" ") : "";
						q(d, function(a) {
							Eb(a, e)
						});
						g && a(g, 0, !1)
					},
					removeClass: function(d, e, g) {
						e = D(e) ? e : K(e) ? e.join(" ") : "";
						q(d, function(a) {
							Db(a, e)
						});
						g && a(g, 0, !1)
					},
					enabled: w
				}
			}]
		}],
		ja = F("$compile");
	jc.$inject = ["$provide", "$$sanitizeUriProvider"];
	var id = /^(x[\:\-_]|data[\:\-_])/i,
		pc = F("$interpolate"),
		Vd = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/,
		td = {
			http: 80,
			https: 443,
			ftp: 21
		},
		Ib = F("$location");
	uc.prototype = Jb.prototype = tc.prototype = {
		$$html5: !1,
		$$replace: !1,
		absUrl: jb("$$absUrl"),
		url: function(a, c) {
			if (z(a)) return this.$$url;
			var d = Vd.exec(a);
			d[1] && this.path(decodeURIComponent(d[1]));
			(d[2] || d[1]) && this.search(d[3] || "");
			this.hash(d[5] || "", c);
			return this
		},
		protocol: jb("$$protocol"),
		host: jb("$$host"),
		port: jb("$$port"),
		path: vc("$$path", function(a) {
			return "/" == a.charAt(0) ? a : "/" + a
		}),
		search: function(a, c) {
			switch (arguments.length) {
				case 0:
					return this.$$search;
				case 1:
					if (D(a)) this.$$search = Xb(a);
					else if (X(a)) this.$$search = a;
					else throw Ib("isrcharg");
					break;
				default:
					z(c) || null === c ? delete this.$$search[a] : this.$$search[a] = c
			}
			this.$$compose();
			return this
		},
		hash: vc("$$hash", Ba),
		replace: function() {
			this.$$replace = !0;
			return this
		}
	};
	var za = F("$parse"),
		yc = {},
		ra, Ka = {
			"null": function() {
				return null
			},
			"true": function() {
				return !0
			},
			"false": function() {
				return !1
			},
			undefined: w,
			"+": function(a, c, d, e) {
				d = d(a, c);
				e = e(a, c);
				return B(d) ? B(e) ? d + e : d : B(e) ? e : r
			},
			"-": function(a, c, d, e) {
				d = d(a, c);
				e = e(a, c);
				return (B(d) ? d : 0) - (B(e) ? e : 0)
			},
			"*": function(a, c, d, e) {
				return d(a, c) * e(a, c)
			},
			"/": function(a, c, d, e) {
				return d(a, c) / e(a, c)
			},
			"%": function(a, c, d, e) {
				return d(a, c) % e(a, c)
			},
			"^": function(a, c, d, e) {
				return d(a, c) ^ e(a, c)
			},
			"=": w,
			"===": function(a, c, d, e) {
				return d(a, c) === e(a, c)
			},
			"!==": function(a, c, d, e) {
				return d(a, c) !== e(a, c)
			},
			"==": function(a, c, d, e) {
				return d(a, c) == e(a, c)
			},
			"!=": function(a, c, d, e) {
				return d(a, c) != e(a, c)
			},
			"<": function(a, c, d, e) {
				return d(a, c) < e(a, c)
			},
			">": function(a, c, d, e) {
				return d(a, c) > e(a, c)
			},
			"<=": function(a, c, d, e) {
				return d(a, c) <= e(a, c)
			},
			">=": function(a, c, d, e) {
				return d(a, c) >= e(a, c)
			},
			"&&": function(a, c, d, e) {
				return d(a, c) && e(a, c)
			},
			"||": function(a, c, d, e) {
				return d(a, c) || e(a, c)
			},
			"&": function(a, c, d, e) {
				return d(a, c) & e(a, c)
			},
			"|": function(a, c, d, e) {
				return e(a, c)(a, c, d(a, c))
			},
			"!": function(a, c, d) {
				return !d(a, c)
			}
		},
		Wd = {
			n: "\n",
			f: "\f",
			r: "\r",
			t: "	",
			v: "",
			"'": "'",
			'"': '"'
		},
		Lb = function(a) {
			this.options = a
		};
	Lb.prototype = {
		constructor: Lb,
		lex: function(a) {
			this.text = a;
			this.index = 0;
			this.ch = r;
			this.lastCh = ":";
			this.tokens = [];
			var c;
			for (a = []; this.index < this.text.length;) {
				this.ch = this.text.charAt(this.index);
				if (this.is("\"'")) this.readString(this.ch);
				else if (this.isNumber(this.ch) || this.is(".") && this.isNumber(this.peek())) this.readNumber();
				else if (this.isIdent(this.ch)) this.readIdent(), this.was("{,") && ("{" === a[0] && (c = this.tokens[this.tokens.length - 1])) && (c.json = -1 === c.text.indexOf("."));
				else if (this.is("(){}[].,;:?")) this.tokens.push({
					index: this.index,
					text: this.ch,
					json: this.was(":[,") && this.is("{[") || this.is("}]:,")
				}), this.is("{[") && a.unshift(this.ch), this.is("}]") && a.shift(), this.index++;
				else if (this.isWhitespace(this.ch)) {
					this.index++;
					continue
				} else {
					var d = this.ch + this.peek(),
						e = d + this.peek(2),
						g = Ka[this.ch],
						f = Ka[d],
						h = Ka[e];
					h ? (this.tokens.push({
						index: this.index,
						text: e,
						fn: h
					}), this.index += 3) : f ? (this.tokens.push({
						index: this.index,
						text: d,
						fn: f
					}), this.index += 2) : g ? (this.tokens.push({
						index: this.index,
						text: this.ch,
						fn: g,
						json: this.was("[,:") && this.is("+-")
					}), this.index += 1) : this.throwError("Unexpected next character ", this.index, this.index + 1)
				}
				this.lastCh = this.ch
			}
			return this.tokens
		},
		is: function(a) {
			return -1 !== a.indexOf(this.ch)
		},
		was: function(a) {
			return -1 !== a.indexOf(this.lastCh)
		},
		peek: function(a) {
			a = a || 1;
			return this.index + a < this.text.length ? this.text.charAt(this.index + a) : !1
		},
		isNumber: function(a) {
			return "0" <= a && "9" >= a
		},
		isWhitespace: function(a) {
			return " " === a || "\r" === a || "	" === a || "\n" === a || "" === a || " " === a
		},
		isIdent: function(a) {
			return "a" <= a && "z" >= a || "A" <= a && "Z" >= a || "_" === a || "$" === a
		},
		isExpOperator: function(a) {
			return "-" === a || "+" === a || this.isNumber(a)
		},
		throwError: function(a, c, d) {
			d = d || this.index;
			c = B(c) ? "s " + c + "-" + this.index + " [" + this.text.substring(c, d) + "]" : " " + d;
			throw za("lexerr", a, c, this.text)
		},
		readNumber: function() {
			for (var a = "", c = this.index; this.index < this.text.length;) {
				var d = x(this.text.charAt(this.index));
				if ("." == d || this.isNumber(d)) a += d;
				else {
					var e = this.peek();
					if ("e" == d && this.isExpOperator(e)) a += d;
					else if (this.isExpOperator(d) && e && this.isNumber(e) && "e" == a.charAt(a.length - 1)) a += d;
					else if (!this.isExpOperator(d) || e && this.isNumber(e) || "e" != a.charAt(a.length - 1)) break;
					else this.throwError("Invalid exponent")
				}
				this.index++
			}
			a *= 1;
			this.tokens.push({
				index: c,
				text: a,
				json: !0,
				fn: function() {
					return a
				}
			})
		},
		readIdent: function() {
			for (var a = this, c = "", d = this.index, e, g, f, h; this.index < this.text.length;) {
				h = this.text.charAt(this.index);
				if ("." === h || this.isIdent(h) || this.isNumber(h)) "." === h && (e = this.index), c += h;
				else break;
				this.index++
			}
			if (e)
				for (g = this.index; g < this.text.length;) {
					h = this.text.charAt(g);
					if ("(" === h) {
						f = c.substr(e - d + 1);
						c = c.substr(0, e - d);
						this.index = g;
						break
					}
					if (this.isWhitespace(h)) g++;
					else break
				}
			d = {
				index: d,
				text: c
			};
			if (Ka.hasOwnProperty(c)) d.fn = Ka[c], d.json = Ka[c];
			else {
				var m = xc(c, this.options, this.text);
				d.fn = t(function(a, c) {
					return m(a, c)
				}, {
					assign: function(d, e) {
						return kb(d, c, e, a.text, a.options)
					}
				})
			}
			this.tokens.push(d);
			f && (this.tokens.push({
				index: e,
				text: ".",
				json: !1
			}), this.tokens.push({
				index: e + 1,
				text: f,
				json: !1
			}))
		},
		readString: function(a) {
			var c = this.index;
			this.index++;
			for (var d = "", e = a, g = !1; this.index < this.text.length;) {
				var f = this.text.charAt(this.index),
					e = e + f;
				if (g) "u" === f ? (f = this.text.substring(this.index + 1, this.index + 5), f.match(/[\da-f]{4}/i) || this.throwError("Invalid unicode escape [\\u" + f + "]"), this.index += 4, d += String.fromCharCode(parseInt(f, 16))) : d = (g = Wd[f]) ? d + g : d + f, g = !1;
				else if ("\\" === f) g = !0;
				else {
					if (f === a) {
						this.index++;
						this.tokens.push({
							index: c,
							text: e,
							string: d,
							json: !0,
							fn: function() {
								return d
							}
						});
						return
					}
					d += f
				}
				this.index++
			}
			this.throwError("Unterminated quote", c)
		}
	};
	var Za = function(a, c, d) {
		this.lexer = a;
		this.$filter = c;
		this.options = d
	};
	Za.ZERO = function() {
		return 0
	};
	Za.prototype = {
		constructor: Za,
		parse: function(a, c) {
			this.text = a;
			this.json = c;
			this.tokens = this.lexer.lex(a);
			c && (this.assignment = this.logicalOR, this.functionCall = this.fieldAccess = this.objectIndex = this.filterChain = function() {
				this.throwError("is not valid json", {
					text: a,
					index: 0
				})
			});
			var d = c ? this.primary() : this.statements();
			0 !== this.tokens.length && this.throwError("is an unexpected token", this.tokens[0]);
			d.literal = !!d.literal;
			d.constant = !!d.constant;
			return d
		},
		primary: function() {
			var a;
			if (this.expect("(")) a = this.filterChain(), this.consume(")");
			else if (this.expect("[")) a = this.arrayDeclaration();
			else if (this.expect("{")) a = this.object();
			else {
				var c = this.expect();
				(a = c.fn) || this.throwError("not a primary expression", c);
				c.json && (a.constant = !0, a.literal = !0)
			}
			for (var d; c = this.expect("(", "[", ".");) "(" === c.text ? (a = this.functionCall(a, d), d = null) : "[" === c.text ? (d = a, a = this.objectIndex(a)) : "." === c.text ? (d = a, a = this.fieldAccess(a)) : this.throwError("IMPOSSIBLE");
			return a
		},
		throwError: function(a, c) {
			throw za("syntax", c.text, a, c.index + 1, this.text, this.text.substring(c.index))
		},
		peekToken: function() {
			if (0 === this.tokens.length) throw za("ueoe", this.text);
			return this.tokens[0]
		},
		peek: function(a, c, d, e) {
			if (0 < this.tokens.length) {
				var g = this.tokens[0],
					f = g.text;
				if (f === a || f === c || f === d || f === e || !(a || c || d || e)) return g
			}
			return !1
		},
		expect: function(a, c, d, e) {
			return (a = this.peek(a, c, d, e)) ? (this.json && !a.json && this.throwError("is not valid json", a), this.tokens.shift(), a) : !1
		},
		consume: function(a) {
			this.expect(a) || this.throwError("is unexpected, expecting [" + a + "]", this.peek())
		},
		unaryFn: function(a, c) {
			return t(function(d, e) {
				return a(d, e, c)
			}, {
				constant: c.constant
			})
		},
		ternaryFn: function(a, c, d) {
			return t(function(e, g) {
				return a(e, g) ? c(e, g) : d(e, g)
			}, {
				constant: a.constant && c.constant && d.constant
			})
		},
		binaryFn: function(a, c, d) {
			return t(function(e, g) {
				return c(e, g, a, d)
			}, {
				constant: a.constant && d.constant
			})
		},
		statements: function() {
			for (var a = [];;)
				if (0 < this.tokens.length && !this.peek("}", ")", ";", "]") && a.push(this.filterChain()), !this.expect(";")) return 1 === a.length ? a[0] : function(c, d) {
					for (var e, g = 0; g < a.length; g++) {
						var f = a[g];
						f && (e = f(c, d))
					}
					return e
				}
		},
		filterChain: function() {
			for (var a = this.expression(), c;;)
				if (c = this.expect("|")) a = this.binaryFn(a, c.fn, this.filter());
				else return a
		},
		filter: function() {
			for (var a = this.expect(), c = this.$filter(a.text), d = [];;)
				if (a = this.expect(":")) d.push(this.expression());
				else {
					var e = function(a, e, h) {
						h = [h];
						for (var m = 0; m < d.length; m++) h.push(d[m](a, e));
						return c.apply(a, h)
					};
					return function() {
						return e
					}
				}
		},
		expression: function() {
			return this.assignment()
		},
		assignment: function() {
			var a = this.ternary(),
				c, d;
			return (d = this.expect("=")) ? (a.assign || this.throwError("implies assignment but [" + this.text.substring(0, d.index) + "] can not be assigned to", d), c = this.ternary(), function(d, g) {
				return a.assign(d, c(d, g), g)
			}) : a
		},
		ternary: function() {
			var a = this.logicalOR(),
				c, d;
			if (this.expect("?")) {
				c = this.ternary();
				if (d = this.expect(":")) return this.ternaryFn(a, c, this.ternary());
				this.throwError("expected :", d)
			} else return a
		},
		logicalOR: function() {
			for (var a = this.logicalAND(), c;;)
				if (c = this.expect("||")) a = this.binaryFn(a, c.fn, this.logicalAND());
				else return a
		},
		logicalAND: function() {
			var a = this.equality(),
				c;
			if (c = this.expect("&&")) a = this.binaryFn(a, c.fn, this.logicalAND());
			return a
		},
		equality: function() {
			var a = this.relational(),
				c;
			if (c = this.expect("==", "!=", "===", "!==")) a = this.binaryFn(a, c.fn, this.equality());
			return a
		},
		relational: function() {
			var a = this.additive(),
				c;
			if (c = this.expect("<", ">", "<=", ">=")) a = this.binaryFn(a, c.fn, this.relational());
			return a
		},
		additive: function() {
			for (var a = this.multiplicative(), c; c = this.expect("+", "-");) a = this.binaryFn(a, c.fn, this.multiplicative());
			return a
		},
		multiplicative: function() {
			for (var a = this.unary(), c; c = this.expect("*", "/", "%");) a = this.binaryFn(a, c.fn, this.unary());
			return a
		},
		unary: function() {
			var a;
			return this.expect("+") ? this.primary() : (a = this.expect("-")) ? this.binaryFn(Za.ZERO, a.fn, this.unary()) : (a = this.expect("!")) ? this.unaryFn(a.fn, this.unary()) : this.primary()
		},
		fieldAccess: function(a) {
			var c = this,
				d = this.expect().text,
				e = xc(d, this.options, this.text);
			return t(function(c, d, h) {
				return e(h || a(c, d))
			}, {
				assign: function(e, f, h) {
					return kb(a(e, h), d, f, c.text, c.options)
				}
			})
		},
		objectIndex: function(a) {
			var c = this,
				d = this.expression();
			this.consume("]");
			return t(function(e, g) {
				var f = a(e, g),
					h = d(e, g),
					m;
				if (!f) return r;
				(f = Ya(f[h], c.text)) && (f.then && c.options.unwrapPromises) && (m = f, "$$v" in f || (m.$$v = r, m.then(function(a) {
					m.$$v = a
				})), f = f.$$v);
				return f
			}, {
				assign: function(e, g, f) {
					var h = d(e, f);
					return Ya(a(e, f), c.text)[h] = g
				}
			})
		},
		functionCall: function(a, c) {
			var d = [];
			if (")" !== this.peekToken().text) {
				do d.push(this.expression()); while (this.expect(","))
			}
			this.consume(")");
			var e = this;
			return function(g, f) {
				for (var h = [], m = c ? c(g, f) : g, k = 0; k < d.length; k++) h.push(d[k](g, f));
				k = a(g, f, m) || w;
				Ya(m, e.text);
				Ya(k, e.text);
				h = k.apply ? k.apply(m, h) : k(h[0], h[1], h[2], h[3], h[4]);
				return Ya(h, e.text)
			}
		},
		arrayDeclaration: function() {
			var a = [],
				c = !0;
			if ("]" !== this.peekToken().text) {
				do {
					var d = this.expression();
					a.push(d);
					d.constant || (c = !1)
				} while (this.expect(","))
			}
			this.consume("]");
			return t(function(c, d) {
				for (var f = [], h = 0; h < a.length; h++) f.push(a[h](c, d));
				return f
			}, {
				literal: !0,
				constant: c
			})
		},
		object: function() {
			var a = [],
				c = !0;
			if ("}" !== this.peekToken().text) {
				do {
					var d = this.expect(),
						d = d.string || d.text;
					this.consume(":");
					var e = this.expression();
					a.push({
						key: d,
						value: e
					});
					e.constant || (c = !1)
				} while (this.expect(","))
			}
			this.consume("}");
			return t(function(c, d) {
				for (var e = {}, m = 0; m < a.length; m++) {
					var k = a[m];
					e[k.key] = k.value(c, d)
				}
				return e
			}, {
				literal: !0,
				constant: c
			})
		}
	};
	var Kb = {},
		sa = F("$sce"),
		fa = {
			HTML: "html",
			CSS: "css",
			URL: "url",
			RESOURCE_URL: "resourceUrl",
			JS: "js"
		},
		Y = Q.createElement("a"),
		Ac = ya(Z.location.href, !0);
	Bc.$inject = ["$provide"];
	Cc.$inject = ["$locale"];
	Ec.$inject = ["$locale"];
	var Hc = ".",
		Qd = {
			yyyy: W("FullYear", 4),
			yy: W("FullYear", 2, 0, !0),
			y: W("FullYear", 1),
			MMMM: lb("Month"),
			MMM: lb("Month", !0),
			MM: W("Month", 2, 1),
			M: W("Month", 1, 1),
			dd: W("Date", 2),
			d: W("Date", 1),
			HH: W("Hours", 2),
			H: W("Hours", 1),
			hh: W("Hours", 2, -12),
			h: W("Hours", 1, -12),
			mm: W("Minutes", 2),
			m: W("Minutes", 1),
			ss: W("Seconds", 2),
			s: W("Seconds", 1),
			sss: W("Milliseconds", 3),
			EEEE: lb("Day"),
			EEE: lb("Day", !0),
			a: function(a, c) {
				return 12 > a.getHours() ? c.AMPMS[0] : c.AMPMS[1]
			},
			Z: function(a) {
				a = -1 * a.getTimezoneOffset();
				return a = (0 <= a ? "+" : "") + (Mb(Math[0 < a ? "floor" : "ceil"](a / 60), 2) + Mb(Math.abs(a % 60), 2))
			}
		},
		Pd = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,
		Od = /^\-?\d+$/;
	Dc.$inject = ["$locale"];
	var Md = $(x),
		Nd = $(Ia);
	Fc.$inject = ["$parse"];
	var Xd = $({
			restrict: "E",
			compile: function(a, c) {
				8 >= M && (c.href || c.name || c.$set("href", ""), a.append(Q.createComment("IE fix")));
				if (!c.href && !c.xlinkHref && !c.name) return function(a, c) {
					var g = "[object SVGAnimatedString]" === Ma.call(c.prop("href")) ? "xlink:href" : "href";
					c.on("click", function(a) {
						c.attr(g) || a.preventDefault()
					})
				}
			}
		}),
		Ob = {};
	q(gb, function(a, c) {
		if ("multiple" != a) {
			var d = ma("ng-" + c);
			Ob[d] = function() {
				return {
					priority: 100,
					link: function(a, g, f) {
						a.$watch(f[d], function(a) {
							f.$set(c, !!a)
						})
					}
				}
			}
		}
	});
	q(["src", "srcset", "href"], function(a) {
		var c = ma("ng-" + a);
		Ob[c] = function() {
			return {
				priority: 99,
				link: function(d, e, g) {
					g.$observe(c, function(c) {
						c && (g.$set(a, c), M && e.prop(a, g[a]))
					})
				}
			}
		}
	});
	var ob = {
		$addControl: w,
		$removeControl: w,
		$setValidity: w,
		$setDirty: w,
		$setPristine: w
	};
	Ic.$inject = ["$element", "$attrs", "$scope"];
	var Kc = function(a) {
			return ["$timeout", function(c) {
				return {
					name: "form",
					restrict: a ? "EAC" : "E",
					controller: Ic,
					compile: function() {
						return {
							pre: function(a, e, g, f) {
								if (!g.action) {
									var h = function(a) {
										a.preventDefault ? a.preventDefault() : a.returnValue = !1
									};
									Jc(e[0], "submit", h);
									e.on("$destroy", function() {
										c(function() {
											Bb(e[0], "submit", h)
										}, 0, !1)
									})
								}
								var m = e.parent().controller("form"),
									k = g.name || g.ngForm;
								k && kb(a, k, f, k);
								if (m) e.on("$destroy", function() {
									m.$removeControl(f);
									k && kb(a, k, r, k);
									t(f, ob)
								})
							}
						}
					}
				}
			}]
		},
		Yd = Kc(),
		Zd = Kc(!0),
		$d = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,
		ae = /^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*$/i,
		be = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,
		Lc = {
			text: qb,
			number: function(a, c, d, e, g, f) {
				qb(a, c, d, e, g, f);
				e.$parsers.push(function(a) {
					var c = e.$isEmpty(a);
					if (c || be.test(a)) return e.$setValidity("number", !0), "" === a ? null : c ? a : parseFloat(a);
					e.$setValidity("number", !1);
					return r
				});
				e.$formatters.push(function(a) {
					return e.$isEmpty(a) ? "" : "" + a
				});
				d.min && (a = function(a) {
					var c = parseFloat(d.min);
					return pa(e, "min", e.$isEmpty(a) || a >= c, a)
				}, e.$parsers.push(a), e.$formatters.push(a));
				d.max && (a = function(a) {
					var c = parseFloat(d.max);
					return pa(e, "max", e.$isEmpty(a) || a <= c, a)
				}, e.$parsers.push(a), e.$formatters.push(a));
				e.$formatters.push(function(a) {
					return pa(e, "number", e.$isEmpty(a) || sb(a), a)
				})
			},
			url: function(a, c, d, e, g, f) {
				qb(a, c, d, e, g, f);
				a = function(a) {
					return pa(e, "url", e.$isEmpty(a) || $d.test(a), a)
				};
				e.$formatters.push(a);
				e.$parsers.push(a)
			},
			email: function(a, c, d, e, g, f) {
				qb(a, c, d, e, g, f);
				a = function(a) {
					return pa(e, "email", e.$isEmpty(a) || ae.test(a), a)
				};
				e.$formatters.push(a);
				e.$parsers.push(a)
			},
			radio: function(a, c, d, e) {
				z(d.name) && c.attr("name", $a());
				c.on("click", function() {
					c[0].checked && a.$apply(function() {
						e.$setViewValue(d.value)
					})
				});
				e.$render = function() {
					c[0].checked = d.value == e.$viewValue
				};
				d.$observe("value", e.$render)
			},
			checkbox: function(a, c, d, e) {
				var g = d.ngTrueValue,
					f = d.ngFalseValue;
				D(g) || (g = !0);
				D(f) || (f = !1);
				c.on("click", function() {
					a.$apply(function() {
						e.$setViewValue(c[0].checked)
					})
				});
				e.$render = function() {
					c[0].checked = e.$viewValue
				};
				e.$isEmpty = function(a) {
					return a !== g
				};
				e.$formatters.push(function(a) {
					return a === g
				});
				e.$parsers.push(function(a) {
					return a ? g : f
				})
			},
			hidden: w,
			button: w,
			submit: w,
			reset: w
		},
		Mc = ["$browser", "$sniffer", function(a, c) {
			return {
				restrict: "E",
				require: "?ngModel",
				link: function(d, e, g, f) {
					f && (Lc[x(g.type)] || Lc.text)(d, e, g, f, c, a)
				}
			}
		}],
		nb = "ng-valid",
		mb = "ng-invalid",
		Ja = "ng-pristine",
		pb = "ng-dirty",
		ce = ["$scope", "$exceptionHandler", "$attrs", "$element", "$parse", function(a, c, d, e, g) {
			function f(a, c) {
				c = c ? "-" + db(c, "-") : "";
				e.removeClass((a ? mb : nb) + c).addClass((a ? nb : mb) + c)
			}
			this.$modelValue = this.$viewValue = Number.NaN;
			this.$parsers = [];
			this.$formatters = [];
			this.$viewChangeListeners = [];
			this.$pristine = !0;
			this.$dirty = !1;
			this.$valid = !0;
			this.$invalid = !1;
			this.$name = d.name;
			var h = g(d.ngModel),
				m = h.assign;
			if (!m) throw F("ngModel")("nonassign", d.ngModel, ga(e));
			this.$render = w;
			this.$isEmpty = function(a) {
				return z(a) || "" === a || null === a || a !== a
			};
			var k = e.inheritedData("$formController") || ob,
				l = 0,
				n = this.$error = {};
			e.addClass(Ja);
			f(!0);
			this.$setValidity = function(a, c) {
				n[a] !== !c && (c ? (n[a] && l--, l || (f(!0), this.$valid = !0, this.$invalid = !1)) : (f(!1), this.$invalid = !0, this.$valid = !1, l++), n[a] = !c, f(c, a), k.$setValidity(a, c, this))
			};
			this.$setPristine = function() {
				this.$dirty = !1;
				this.$pristine = !0;
				e.removeClass(pb).addClass(Ja)
			};
			this.$setViewValue = function(d) {
				this.$viewValue = d;
				this.$pristine && (this.$dirty = !0, this.$pristine = !1, e.removeClass(Ja).addClass(pb), k.$setDirty());
				q(this.$parsers, function(a) {
					d = a(d)
				});
				this.$modelValue !== d && (this.$modelValue = d, m(a, d), q(this.$viewChangeListeners, function(a) {
					try {
						a()
					} catch (d) {
						c(d)
					}
				}))
			};
			var p = this;
			a.$watch(function() {
				var c = h(a);
				if (p.$modelValue !== c) {
					var d = p.$formatters,
						e = d.length;
					for (p.$modelValue = c; e--;) c = d[e](c);
					p.$viewValue !== c && (p.$viewValue = c, p.$render())
				}
				return c
			})
		}],
		de = function() {
			return {
				require: ["ngModel", "^?form"],
				controller: ce,
				link: function(a, c, d, e) {
					var g = e[0],
						f = e[1] || ob;
					f.$addControl(g);
					a.$on("$destroy", function() {
						f.$removeControl(g)
					})
				}
			}
		},
		ee = $({
			require: "ngModel",
			link: function(a, c, d, e) {
				e.$viewChangeListeners.push(function() {
					a.$eval(d.ngChange)
				})
			}
		}),
		Nc = function() {
			return {
				require: "?ngModel",
				link: function(a, c, d, e) {
					if (e) {
						d.required = !0;
						var g = function(a) {
							if (d.required && e.$isEmpty(a)) e.$setValidity("required", !1);
							else return e.$setValidity("required", !0), a
						};
						e.$formatters.push(g);
						e.$parsers.unshift(g);
						d.$observe("required", function() {
							g(e.$viewValue)
						})
					}
				}
			}
		},
		fe = function() {
			return {
				require: "ngModel",
				link: function(a, c, d, e) {
					var g = (a = /\/(.*)\//.exec(d.ngList)) && RegExp(a[1]) || d.ngList || ",";
					e.$parsers.push(function(a) {
						if (!z(a)) {
							var c = [];
							a && q(a.split(g), function(a) {
								a && c.push(ba(a))
							});
							return c
						}
					});
					e.$formatters.push(function(a) {
						return K(a) ? a.join(", ") : r
					});
					e.$isEmpty = function(a) {
						return !a || !a.length
					}
				}
			}
		},
		ge = /^(true|false|\d+)$/,
		he = function() {
			return {
				priority: 100,
				compile: function(a, c) {
					return ge.test(c.ngValue) ? function(a, c, g) {
						g.$set("value", a.$eval(g.ngValue))
					} : function(a, c, g) {
						a.$watch(g.ngValue, function(a) {
							g.$set("value", a)
						})
					}
				}
			}
		},
		ie = ta(function(a, c, d) {
			c.addClass("ng-binding").data("$binding", d.ngBind);
			a.$watch(d.ngBind, function(a) {
				c.text(a == r ? "" : a)
			})
		}),
		je = ["$interpolate", function(a) {
			return function(c, d, e) {
				c = a(d.attr(e.$attr.ngBindTemplate));
				d.addClass("ng-binding").data("$binding", c);
				e.$observe("ngBindTemplate", function(a) {
					d.text(a)
				})
			}
		}],
		ke = ["$sce", "$parse", function(a, c) {
			return function(d, e, g) {
				e.addClass("ng-binding").data("$binding", g.ngBindHtml);
				var f = c(g.ngBindHtml);
				d.$watch(function() {
					return (f(d) || "").toString()
				}, function(c) {
					e.html(a.getTrustedHtml(f(d)) || "")
				})
			}
		}],
		le = Nb("", !0),
		me = Nb("Odd", 0),
		ne = Nb("Even", 1),
		oe = ta({
			compile: function(a, c) {
				c.$set("ngCloak", r);
				a.removeClass("ng-cloak")
			}
		}),
		pe = [function() {
			return {
				scope: !0,
				controller: "@",
				priority: 500
			}
		}],
		Oc = {};
	q("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "), function(a) {
		var c = ma("ng-" + a);
		Oc[c] = ["$parse", function(d) {
			return {
				compile: function(e, g) {
					var f = d(g[c]);
					return function(c, d, e) {
						d.on(x(a), function(a) {
							c.$apply(function() {
								f(c, {
									$event: a
								})
							})
						})
					}
				}
			}
		}]
	});
	var qe = ["$animate", function(a) {
			return {
				transclude: "element",
				priority: 600,
				terminal: !0,
				restrict: "A",
				$$tlb: !0,
				link: function(c, d, e, g, f) {
					var h, m;
					c.$watch(e.ngIf, function(g) {
						Pa(g) ? m || (m = c.$new(), f(m, function(c) {
							c[c.length++] = Q.createComment(" end ngIf: " + e.ngIf + " ");
							h = {
								clone: c
							};
							a.enter(c, d.parent(), d)
						})) : (m && (m.$destroy(), m = null), h && (a.leave(wb(h.clone)), h = null))
					})
				}
			}
		}],
		re = ["$http", "$templateCache", "$anchorScroll", "$animate", "$sce", function(a, c, d, e, g) {
			return {
				restrict: "ECA",
				priority: 400,
				terminal: !0,
				transclude: "element",
				controller: Ca.noop,
				compile: function(f, h) {
					var m = h.ngInclude || h.src,
						k = h.onload || "",
						l = h.autoscroll;
					return function(f, h, q, r, y) {
						var A = 0,
							u, t, H = function() {
								u && (u.$destroy(), u = null);
								t && (e.leave(t), t = null)
							};
						f.$watch(g.parseAsResourceUrl(m), function(g) {
							var m = function() {
									!B(l) || l && !f.$eval(l) || d()
								},
								q = ++A;
							g ? (a.get(g, {
								cache: c
							}).success(function(a) {
								if (q === A) {
									var c = f.$new();
									r.template = a;
									a = y(c, function(a) {
										H();
										e.enter(a, null, h, m)
									});
									u = c;
									t = a;
									u.$emit("$includeContentLoaded");
									f.$eval(k)
								}
							}).error(function() {
								q === A && H()
							}), f.$emit("$includeContentRequested")) : (H(), r.template = null)
						})
					}
				}
			}
		}],
		se = ["$compile", function(a) {
			return {
				restrict: "ECA",
				priority: -400,
				require: "ngInclude",
				link: function(c, d, e, g) {
					d.html(g.template);
					a(d.contents())(c)
				}
			}
		}],
		te = ta({
			priority: 450,
			compile: function() {
				return {
					pre: function(a, c, d) {
						a.$eval(d.ngInit)
					}
				}
			}
		}),
		ue = ta({
			terminal: !0,
			priority: 1e3
		}),
		ve = ["$locale", "$interpolate", function(a, c) {
			var d = /{}/g;
			return {
				restrict: "EA",
				link: function(e, g, f) {
					var h = f.count,
						m = f.$attr.when && g.attr(f.$attr.when),
						k = f.offset || 0,
						l = e.$eval(m) || {},
						n = {},
						p = c.startSymbol(),
						s = c.endSymbol(),
						r = /^when(Minus)?(.+)$/;
					q(f, function(a, c) {
						r.test(c) && (l[x(c.replace("when", "").replace("Minus", "-"))] = g.attr(f.$attr[c]))
					});
					q(l, function(a, e) {
						n[e] = c(a.replace(d, p + h + "-" + k + s))
					});
					e.$watch(function() {
						var c = parseFloat(e.$eval(h));
						if (isNaN(c)) return "";
						c in l || (c = a.pluralCat(c - k));
						return n[c](e, g, !0)
					}, function(a) {
						g.text(a)
					})
				}
			}
		}],
		we = ["$parse", "$animate", function(a, c) {
			var d = F("ngRepeat");
			return {
				transclude: "element",
				priority: 1e3,
				terminal: !0,
				$$tlb: !0,
				link: function(e, g, f, h, m) {
					var k = f.ngRepeat,
						l = k.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),
						n, p, s, r, y, t, u = {
							$id: Fa
						};
					if (!l) throw d("iexp", k);
					f = l[1];
					h = l[2];
					(l = l[3]) ? (n = a(l), p = function(a, c, d) {
						t && (u[t] = a);
						u[y] = c;
						u.$index = d;
						return n(e, u)
					}) : (s = function(a, c) {
						return Fa(c)
					}, r = function(a) {
						return a
					});
					l = f.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);
					if (!l) throw d("iidexp", f);
					y = l[3] || l[1];
					t = l[2];
					var B = {};
					e.$watchCollection(h, function(a) {
						var f, h, l = g[0],
							n, u = {},
							z, P, D, x, T, w, F = [];
						if (rb(a)) T = a, n = p || s;
						else {
							n = p || r;
							T = [];
							for (D in a) a.hasOwnProperty(D) && "$" != D.charAt(0) && T.push(D);
							T.sort()
						}
						z = T.length;
						h = F.length = T.length;
						for (f = 0; f < h; f++)
							if (D = a === T ? f : T[f], x = a[D], x = n(D, x, f), xa(x, "`track by` id"), B.hasOwnProperty(x)) w = B[x], delete B[x], u[x] = w, F[f] = w;
							else {
								if (u.hasOwnProperty(x)) throw q(F, function(a) {
									a && a.scope && (B[a.id] = a)
								}), d("dupes", k, x);
								F[f] = {
									id: x
								};
								u[x] = !1
							} for (D in B) B.hasOwnProperty(D) && (w = B[D], f = wb(w.clone), c.leave(f), q(f, function(a) {
							a.$$NG_REMOVED = !0
						}), w.scope.$destroy());
						f = 0;
						for (h = T.length; f < h; f++) {
							D = a === T ? f : T[f];
							x = a[D];
							w = F[f];
							F[f - 1] && (l = F[f - 1].clone[F[f - 1].clone.length - 1]);
							if (w.scope) {
								P = w.scope;
								n = l;
								do n = n.nextSibling; while (n && n.$$NG_REMOVED);
								w.clone[0] != n && c.move(wb(w.clone), null, A(l));
								l = w.clone[w.clone.length - 1]
							} else P = e.$new();
							P[y] = x;
							t && (P[t] = D);
							P.$index = f;
							P.$first = 0 === f;
							P.$last = f === z - 1;
							P.$middle = !(P.$first || P.$last);
							P.$odd = !(P.$even = 0 === (f & 1));
							w.scope || m(P, function(a) {
								a[a.length++] = Q.createComment(" end ngRepeat: " + k + " ");
								c.enter(a, null, A(l));
								l = a;
								w.scope = P;
								w.clone = a;
								u[w.id] = w
							})
						}
						B = u
					})
				}
			}
		}],
		xe = ["$animate", function(a) {
			return function(c, d, e) {
				c.$watch(e.ngShow, function(c) {
					a[Pa(c) ? "removeClass" : "addClass"](d, "ng-hide")
				})
			}
		}],
		ye = ["$animate", function(a) {
			return function(c, d, e) {
				c.$watch(e.ngHide, function(c) {
					a[Pa(c) ? "addClass" : "removeClass"](d, "ng-hide")
				})
			}
		}],
		ze = ta(function(a, c, d) {
			a.$watch(d.ngStyle, function(a, d) {
				d && a !== d && q(d, function(a, d) {
					c.css(d, "")
				});
				a && c.css(a)
			}, !0)
		}),
		Ae = ["$animate", function(a) {
			return {
				restrict: "EA",
				require: "ngSwitch",
				controller: ["$scope", function() {
					this.cases = {}
				}],
				link: function(c, d, e, g) {
					var f, h, m = [];
					c.$watch(e.ngSwitch || e.on, function(d) {
						for (var l = 0, n = m.length; l < n; l++) m[l].$destroy(), a.leave(h[l]);
						h = [];
						m = [];
						if (f = g.cases["!" + d] || g.cases["?"]) c.$eval(e.change), q(f, function(d) {
							var e = c.$new();
							m.push(e);
							d.transclude(e, function(c) {
								var e = d.element;
								h.push(c);
								a.enter(c, e.parent(), e)
							})
						})
					})
				}
			}
		}],
		Be = ta({
			transclude: "element",
			priority: 800,
			require: "^ngSwitch",
			link: function(a, c, d, e, g) {
				e.cases["!" + d.ngSwitchWhen] = e.cases["!" + d.ngSwitchWhen] || [];
				e.cases["!" + d.ngSwitchWhen].push({
					transclude: g,
					element: c
				})
			}
		}),
		Ce = ta({
			transclude: "element",
			priority: 800,
			require: "^ngSwitch",
			link: function(a, c, d, e, g) {
				e.cases["?"] = e.cases["?"] || [];
				e.cases["?"].push({
					transclude: g,
					element: c
				})
			}
		}),
		De = ta({
			controller: ["$element", "$transclude", function(a, c) {
				if (!c) throw F("ngTransclude")("orphan", ga(a));
				this.$transclude = c
			}],
			link: function(a, c, d, e) {
				e.$transclude(function(a) {
					c.empty();
					c.append(a)
				})
			}
		}),
		Ee = ["$templateCache", function(a) {
			return {
				restrict: "E",
				terminal: !0,
				compile: function(c, d) {
					"text/ng-template" == d.type && a.put(d.id, c[0].text)
				}
			}
		}],
		Fe = F("ngOptions"),
		Ge = $({
			terminal: !0
		}),
		He = ["$compile", "$parse", function(a, c) {
			var d = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,
				e = {
					$setViewValue: w
				};
			return {
				restrict: "E",
				require: ["select", "?ngModel"],
				controller: ["$element", "$scope", "$attrs", function(a, c, d) {
					var m = this,
						k = {},
						l = e,
						n;
					m.databound = d.ngModel;
					m.init = function(a, c, d) {
						l = a;
						n = d
					};
					m.addOption = function(c) {
						xa(c, '"option value"');
						k[c] = !0;
						l.$viewValue == c && (a.val(c), n.parent() && n.remove())
					};
					m.removeOption = function(a) {
						this.hasOption(a) && (delete k[a], l.$viewValue == a && this.renderUnknownOption(a))
					};
					m.renderUnknownOption = function(c) {
						c = "? " + Fa(c) + " ?";
						n.val(c);
						a.prepend(n);
						a.val(c);
						n.prop("selected", !0)
					};
					m.hasOption = function(a) {
						return k.hasOwnProperty(a)
					};
					c.$on("$destroy", function() {
						m.renderUnknownOption = w
					})
				}],
				link: function(e, f, h, m) {
					function k(a, c, d, e) {
						d.$render = function() {
							var a = d.$viewValue;
							e.hasOption(a) ? (x.parent() && x.remove(), c.val(a), "" === a && w.prop("selected", !0)) : z(a) && w ? c.val("") : e.renderUnknownOption(a)
						};
						c.on("change", function() {
							a.$apply(function() {
								x.parent() && x.remove();
								d.$setViewValue(c.val())
							})
						})
					}

					function l(a, c, d) {
						var e;
						d.$render = function() {
							var a = new Ta(d.$viewValue);
							q(c.find("option"), function(c) {
								c.selected = B(a.get(c.value))
							})
						};
						a.$watch(function() {
							ua(e, d.$viewValue) || (e = aa(d.$viewValue), d.$render())
						});
						c.on("change", function() {
							a.$apply(function() {
								var a = [];
								q(c.find("option"), function(c) {
									c.selected && a.push(c.value)
								});
								d.$setViewValue(a)
							})
						})
					}

					function n(e, f, g) {
						function h() {
							var a = {
									"": []
								},
								c = [""],
								d, k, r, t, v;
							t = g.$modelValue;
							v = A(e) || [];
							var C = n ? Pb(v) : v,
								F, I, z;
							I = {};
							r = !1;
							var E, H;
							if (s)
								if (w && K(t))
									for (r = new Ta([]), z = 0; z < t.length; z++) I[m] = t[z], r.put(w(e, I), t[z]);
								else r = new Ta(t);
							for (z = 0; F = C.length, z < F; z++) {
								k = z;
								if (n) {
									k = C[z];
									if ("$" === k.charAt(0)) continue;
									I[n] = k
								}
								I[m] = v[k];
								d = p(e, I) || "";
								(k = a[d]) || (k = a[d] = [], c.push(d));
								s ? d = B(r.remove(w ? w(e, I) : q(e, I))) : (w ? (d = {}, d[m] = t, d = w(e, d) === w(e, I)) : d = t === q(e, I), r = r || d);
								E = l(e, I);
								E = B(E) ? E : "";
								k.push({
									id: w ? w(e, I) : n ? C[z] : z,
									label: E,
									selected: d
								})
							}
							s || (y || null === t ? a[""].unshift({
								id: "",
								label: "",
								selected: !r
							}) : r || a[""].unshift({
								id: "?",
								label: "",
								selected: !0
							}));
							I = 0;
							for (C = c.length; I < C; I++) {
								d = c[I];
								k = a[d];
								x.length <= I ? (t = {
									element: D.clone().attr("label", d),
									label: k.label
								}, v = [t], x.push(v), f.append(t.element)) : (v = x[I], t = v[0], t.label != d && t.element.attr("label", t.label = d));
								E = null;
								z = 0;
								for (F = k.length; z < F; z++) r = k[z], (d = v[z + 1]) ? (E = d.element, d.label !== r.label && E.text(d.label = r.label), d.id !== r.id && E.val(d.id = r.id), E[0].selected !== r.selected && E.prop("selected", d.selected = r.selected)) : ("" === r.id && y ? H = y : (H = u.clone()).val(r.id).attr("selected", r.selected).text(r.label), v.push({
									element: H,
									label: r.label,
									id: r.id,
									selected: r.selected
								}), E ? E.after(H) : t.element.append(H), E = H);
								for (z++; v.length > z;) v.pop().element.remove()
							}
							for (; x.length > I;) x.pop()[0].element.remove()
						}
						var k;
						if (!(k = t.match(d))) throw Fe("iexp", t, ga(f));
						var l = c(k[2] || k[1]),
							m = k[4] || k[6],
							n = k[5],
							p = c(k[3] || ""),
							q = c(k[2] ? k[1] : m),
							A = c(k[7]),
							w = k[8] ? c(k[8]) : null,
							x = [
								[{
									element: f,
									label: ""
								}]
							];
						y && (a(y)(e), y.removeClass("ng-scope"), y.remove());
						f.empty();
						f.on("change", function() {
							e.$apply(function() {
								var a, c = A(e) || [],
									d = {},
									h, k, l, p, t, u, v;
								if (s)
									for (k = [], p = 0, u = x.length; p < u; p++)
										for (a = x[p], l = 1, t = a.length; l < t; l++) {
											if ((h = a[l].element)[0].selected) {
												h = h.val();
												n && (d[n] = h);
												if (w)
													for (v = 0; v < c.length && (d[m] = c[v], w(e, d) != h); v++);
												else d[m] = c[h];
												k.push(q(e, d))
											}
										} else if (h = f.val(), "?" == h) k = r;
										else if ("" === h) k = null;
								else if (w)
									for (v = 0; v < c.length; v++) {
										if (d[m] = c[v], w(e, d) == h) {
											k = q(e, d);
											break
										}
									} else d[m] = c[h], n && (d[n] = h), k = q(e, d);
								g.$setViewValue(k)
							})
						});
						g.$render = h;
						e.$watch(h)
					}
					if (m[1]) {
						var p = m[0];
						m = m[1];
						var s = h.multiple,
							t = h.ngOptions,
							y = !1,
							w, u = A(Q.createElement("option")),
							D = A(Q.createElement("optgroup")),
							x = u.clone();
						h = 0;
						for (var v = f.children(), F = v.length; h < F; h++)
							if ("" === v[h].value) {
								w = y = v.eq(h);
								break
							} p.init(m, y, x);
						s && (m.$isEmpty = function(a) {
							return !a || 0 === a.length
						});
						t ? n(e, f, m) : s ? l(e, f, m) : k(e, f, m, p)
					}
				}
			}
		}],
		Ie = ["$interpolate", function(a) {
			var c = {
				addOption: w,
				removeOption: w
			};
			return {
				restrict: "E",
				priority: 100,
				compile: function(d, e) {
					if (z(e.value)) {
						var g = a(d.text(), !0);
						g || e.$set("value", d.text())
					}
					return function(a, d, e) {
						var k = d.parent(),
							l = k.data("$selectController") || k.parent().data("$selectController");
						l && l.databound ? d.prop("selected", !1) : l = c;
						g ? a.$watch(g, function(a, c) {
							e.$set("value", a);
							a !== c && l.removeOption(c);
							l.addOption(a)
						}) : l.addOption(e.value);
						d.on("$destroy", function() {
							l.removeOption(e.value)
						})
					}
				}
			}
		}],
		Je = $({
			restrict: "E",
			terminal: !0
		});
	(Da = Z.jQuery) ? (A = Da, t(Da.fn, {
		scope: Ga.scope,
		isolateScope: Ga.isolateScope,
		controller: Ga.controller,
		injector: Ga.injector,
		inheritedData: Ga.inheritedData
	}), xb("remove", !0, !0, !1), xb("empty", !1, !1, !1), xb("html", !1, !1, !0)) : A = O;
	Ca.element = A;
	(function(a) {
		t(a, {
			bootstrap: Zb,
			copy: aa,
			extend: t,
			equals: ua,
			element: A,
			forEach: q,
			injector: $b,
			noop: w,
			bind: cb,
			toJson: qa,
			fromJson: Vb,
			identity: Ba,
			isUndefined: z,
			isDefined: B,
			isString: D,
			isFunction: L,
			isObject: X,
			isNumber: sb,
			isElement: Qc,
			isArray: K,
			version: Sd,
			isDate: La,
			lowercase: x,
			uppercase: Ia,
			callbacks: {
				counter: 0
			},
			$$minErr: F,
			$$csp: Ub
		});
		Va = Vc(Z);
		try {
			Va("ngLocale")
		} catch (c) {
			Va("ngLocale", []).provider("$locale", sd)
		}
		Va("ng", ["ngLocale"], ["$provide", function(a) {
			a.provider({
				$$sanitizeUri: Cd
			});
			a.provider("$compile", jc).directive({
				a: Xd,
				input: Mc,
				textarea: Mc,
				form: Yd,
				script: Ee,
				select: He,
				style: Je,
				option: Ie,
				ngBind: ie,
				ngBindHtml: ke,
				ngBindTemplate: je,
				ngClass: le,
				ngClassEven: ne,
				ngClassOdd: me,
				ngCloak: oe,
				ngController: pe,
				ngForm: Zd,
				ngHide: ye,
				ngIf: qe,
				ngInclude: re,
				ngInit: te,
				ngNonBindable: ue,
				ngPluralize: ve,
				ngRepeat: we,
				ngShow: xe,
				ngStyle: ze,
				ngSwitch: Ae,
				ngSwitchWhen: Be,
				ngSwitchDefault: Ce,
				ngOptions: Ge,
				ngTransclude: De,
				ngModel: de,
				ngList: fe,
				ngChange: ee,
				required: Nc,
				ngRequired: Nc,
				ngValue: he
			}).directive({
				ngInclude: se
			}).directive(Ob).directive(Oc);
			a.provider({
				$anchorScroll: dd,
				$animate: Ud,
				$browser: fd,
				$cacheFactory: gd,
				$controller: jd,
				$document: kd,
				$exceptionHandler: ld,
				$filter: Bc,
				$interpolate: qd,
				$interval: rd,
				$http: md,
				$httpBackend: od,
				$location: ud,
				$log: vd,
				$parse: yd,
				$rootScope: Bd,
				$q: zd,
				$sce: Fd,
				$sceDelegate: Ed,
				$sniffer: Gd,
				$templateCache: hd,
				$timeout: Hd,
				$window: Id
			})
		}])
	})(Ca);
	A(Q).ready(function() {
		Tc(Q, Zb)
	})
})(window, document);
!angular.$$csp() && angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}</style>');
angular.module("ui.bootstrap", ["ui.bootstrap.tpls", "ui.bootstrap.transition", "ui.bootstrap.collapse", "ui.bootstrap.accordion", "ui.bootstrap.alert", "ui.bootstrap.bindHtml", "ui.bootstrap.buttons", "ui.bootstrap.carousel", "ui.bootstrap.position", "ui.bootstrap.datepicker", "ui.bootstrap.dropdownToggle", "ui.bootstrap.modal", "ui.bootstrap.pagination", "ui.bootstrap.tooltip", "ui.bootstrap.popover", "ui.bootstrap.progressbar", "ui.bootstrap.rating", "ui.bootstrap.tabs", "ui.bootstrap.timepicker", "ui.bootstrap.typeahead"]), angular.module("ui.bootstrap.tpls", ["template/accordion/accordion-group.html", "template/accordion/accordion.html", "template/alert/alert.html", "template/carousel/carousel.html", "template/carousel/slide.html", "template/datepicker/datepicker.html", "template/datepicker/popup.html", "template/modal/backdrop.html", "template/modal/window.html", "template/pagination/pager.html", "template/pagination/pagination.html", "template/tooltip/tooltip-html-unsafe-popup.html", "template/tooltip/tooltip-popup.html", "template/popover/popover.html", "template/progressbar/bar.html", "template/progressbar/progress.html", "template/progressbar/progressbar.html", "template/rating/rating.html", "template/tabs/tab.html", "template/tabs/tabset.html", "template/timepicker/timepicker.html", "template/typeahead/typeahead-match.html", "template/typeahead/typeahead-popup.html"]), angular.module("ui.bootstrap.transition", []).factory("$transition", ["$q", "$timeout", "$rootScope", function(a, b, c) {
	function d(a) {
		for (var b in a)
			if (void 0 !== f.style[b]) return a[b]
	}
	var e = function(d, f, g) {
			g = g || {};
			var h = a.defer(),
				i = e[g.animation ? "animationEndEventName" : "transitionEndEventName"],
				j = function() {
					c.$apply(function() {
						d.unbind(i, j), h.resolve(d)
					})
				};
			return i && d.bind(i, j), b(function() {
				angular.isString(f) ? d.addClass(f) : angular.isFunction(f) ? f(d) : angular.isObject(f) && d.css(f), i || h.resolve(d)
			}), h.promise.cancel = function() {
				i && d.unbind(i, j), h.reject("Transition cancelled")
			}, h.promise
		},
		f = document.createElement("trans"),
		g = {
			WebkitTransition: "webkitTransitionEnd",
			MozTransition: "transitionend",
			OTransition: "oTransitionEnd",
			transition: "transitionend"
		},
		h = {
			WebkitTransition: "webkitAnimationEnd",
			MozTransition: "animationend",
			OTransition: "oAnimationEnd",
			transition: "animationend"
		};
	return e.transitionEndEventName = d(g), e.animationEndEventName = d(h), e
}]), angular.module("ui.bootstrap.collapse", ["ui.bootstrap.transition"]).directive("collapse", ["$transition", function(a) {
	return {
		link: function(b, c, d) {
			function e(b) {
				function d() {
					j === e && (j = void 0)
				}
				var e = a(c, b);
				return j && j.cancel(), j = e, e.then(d, d), e
			}

			function f() {
				k ? (k = !1, g()) : (c.removeClass("collapse").addClass("collapsing"), e({
					height: c[0].scrollHeight + "px"
				}).then(g))
			}

			function g() {
				c.removeClass("collapsing"), c.addClass("collapse in"), c.css({
					height: "auto"
				})
			}

			function h() {
				if (k) k = !1, i(), c.css({
					height: 0
				});
				else {
					c.css({
						height: c[0].scrollHeight + "px"
					}); {
						c[0].offsetWidth
					}
					c.removeClass("collapse in").addClass("collapsing"), e({
						height: 0
					}).then(i)
				}
			}

			function i() {
				c.removeClass("collapsing"), c.addClass("collapse")
			}
			var j, k = !0;
			b.$watch(d.collapse, function(a) {
				a ? h() : f()
			})
		}
	}
}]), angular.module("ui.bootstrap.accordion", ["ui.bootstrap.collapse"]).constant("accordionConfig", {
	closeOthers: !0
}).controller("AccordionController", ["$scope", "$attrs", "accordionConfig", function(a, b, c) {
	this.groups = [], this.closeOthers = function(d) {
		var e = angular.isDefined(b.closeOthers) ? a.$eval(b.closeOthers) : c.closeOthers;
		e && angular.forEach(this.groups, function(a) {
			a !== d && (a.isOpen = !1)
		})
	}, this.addGroup = function(a) {
		var b = this;
		this.groups.push(a), a.$on("$destroy", function() {
			b.removeGroup(a)
		})
	}, this.removeGroup = function(a) {
		var b = this.groups.indexOf(a); - 1 !== b && this.groups.splice(this.groups.indexOf(a), 1)
	}
}]).directive("accordion", function() {
	return {
		restrict: "EA",
		controller: "AccordionController",
		transclude: !0,
		replace: !1,
		templateUrl: "template/accordion/accordion.html"
	}
}).directive("accordionGroup", ["$parse", function(a) {
	return {
		require: "^accordion",
		restrict: "EA",
		transclude: !0,
		replace: !0,
		templateUrl: "template/accordion/accordion-group.html",
		scope: {
			heading: "@"
		},
		controller: function() {
			this.setHeading = function(a) {
				this.heading = a
			}
		},
		link: function(b, c, d, e) {
			var f, g;
			e.addGroup(b), b.isOpen = !1, d.isOpen && (f = a(d.isOpen), g = f.assign, b.$parent.$watch(f, function(a) {
				b.isOpen = !!a
			})), b.$watch("isOpen", function(a) {
				a && e.closeOthers(b), g && g(b.$parent, a)
			})
		}
	}
}]).directive("accordionHeading", function() {
	return {
		restrict: "EA",
		transclude: !0,
		template: "",
		replace: !0,
		require: "^accordionGroup",
		compile: function(a, b, c) {
			return function(a, b, d, e) {
				e.setHeading(c(a, function() {}))
			}
		}
	}
}).directive("accordionTransclude", function() {
	return {
		require: "^accordionGroup",
		link: function(a, b, c, d) {
			a.$watch(function() {
				return d[c.accordionTransclude]
			}, function(a) {
				a && (b.html(""), b.append(a))
			})
		}
	}
}), angular.module("ui.bootstrap.alert", []).controller("AlertController", ["$scope", "$attrs", function(a, b) {
	a.closeable = "close" in b
}]).directive("alert", function() {
	return {
		restrict: "EA",
		controller: "AlertController",
		templateUrl: "template/alert/alert.html",
		transclude: !0,
		replace: !0,
		scope: {
			type: "=",
			close: "&"
		}
	}
}), angular.module("ui.bootstrap.bindHtml", []).directive("bindHtmlUnsafe", function() {
	return function(a, b, c) {
		b.addClass("ng-binding").data("$binding", c.bindHtmlUnsafe), a.$watch(c.bindHtmlUnsafe, function(a) {
			b.html(a || "")
		})
	}
}), angular.module("ui.bootstrap.buttons", []).constant("buttonConfig", {
	activeClass: "active",
	toggleEvent: "click"
}).controller("ButtonsController", ["buttonConfig", function(a) {
	this.activeClass = a.activeClass || "active", this.toggleEvent = a.toggleEvent || "click"
}]).directive("btnRadio", function() {
	return {
		require: ["btnRadio", "ngModel"],
		controller: "ButtonsController",
		link: function(a, b, c, d) {
			var e = d[0],
				f = d[1];
			f.$render = function() {
				b.toggleClass(e.activeClass, angular.equals(f.$modelValue, a.$eval(c.btnRadio)))
			}, b.bind(e.toggleEvent, function() {
				b.hasClass(e.activeClass) || a.$apply(function() {
					f.$setViewValue(a.$eval(c.btnRadio)), f.$render()
				})
			})
		}
	}
}).directive("btnCheckbox", function() {
	return {
		require: ["btnCheckbox", "ngModel"],
		controller: "ButtonsController",
		link: function(a, b, c, d) {
			function e() {
				return g(c.btnCheckboxTrue, !0)
			}

			function f() {
				return g(c.btnCheckboxFalse, !1)
			}

			function g(b, c) {
				var d = a.$eval(b);
				return angular.isDefined(d) ? d : c
			}
			var h = d[0],
				i = d[1];
			i.$render = function() {
				b.toggleClass(h.activeClass, angular.equals(i.$modelValue, e()))
			}, b.bind(h.toggleEvent, function() {
				a.$apply(function() {
					i.$setViewValue(b.hasClass(h.activeClass) ? f() : e()), i.$render()
				})
			})
		}
	}
}), angular.module("ui.bootstrap.carousel", ["ui.bootstrap.transition"]).controller("CarouselController", ["$scope", "$timeout", "$transition", "$q", function(a, b, c) {
	function d() {
		e();
		var c = +a.interval;
		!isNaN(c) && c >= 0 && (g = b(f, c))
	}

	function e() {
		g && (b.cancel(g), g = null)
	}

	function f() {
		h ? (a.next(), d()) : a.pause()
	}
	var g, h, i = this,
		j = i.slides = [],
		k = -1;
	i.currentSlide = null;
	var l = !1;
	i.select = function(e, f) {
		function g() {
			if (!l) {
				if (i.currentSlide && angular.isString(f) && !a.noTransition && e.$element) {
					e.$element.addClass(f); {
						e.$element[0].offsetWidth
					}
					angular.forEach(j, function(a) {
							angular.extend(a, {
								direction: "",
								entering: !1,
								leaving: !1,
								active: !1
							})
						}), angular.extend(e, {
							direction: f,
							active: !0,
							entering: !0
						}), angular.extend(i.currentSlide || {}, {
							direction: f,
							leaving: !0
						}), a.$currentTransition = c(e.$element, {}),
						function(b, c) {
							a.$currentTransition.then(function() {
								h(b, c)
							}, function() {
								h(b, c)
							})
						}(e, i.currentSlide)
				} else h(e, i.currentSlide);
				i.currentSlide = e, k = m, d()
			}
		}

		function h(b, c) {
			angular.extend(b, {
				direction: "",
				active: !0,
				leaving: !1,
				entering: !1
			}), angular.extend(c || {}, {
				direction: "",
				active: !1,
				leaving: !1,
				entering: !1
			}), a.$currentTransition = null
		}
		var m = j.indexOf(e);
		void 0 === f && (f = m > k ? "next" : "prev"), e && e !== i.currentSlide && (a.$currentTransition ? (a.$currentTransition.cancel(), b(g)) : g())
	}, a.$on("$destroy", function() {
		l = !0
	}), i.indexOfSlide = function(a) {
		return j.indexOf(a)
	}, a.next = function() {
		var b = (k + 1) % j.length;
		return a.$currentTransition ? void 0 : i.select(j[b], "next")
	}, a.prev = function() {
		var b = 0 > k - 1 ? j.length - 1 : k - 1;
		return a.$currentTransition ? void 0 : i.select(j[b], "prev")
	}, a.select = function(a) {
		i.select(a)
	}, a.isActive = function(a) {
		return i.currentSlide === a
	}, a.slides = function() {
		return j
	}, a.$watch("interval", d), a.$on("$destroy", e), a.play = function() {
		h || (h = !0, d())
	}, a.pause = function() {
		a.noPause || (h = !1, e())
	}, i.addSlide = function(b, c) {
		b.$element = c, j.push(b), 1 === j.length || b.active ? (i.select(j[j.length - 1]), 1 == j.length && a.play()) : b.active = !1
	}, i.removeSlide = function(a) {
		var b = j.indexOf(a);
		j.splice(b, 1), j.length > 0 && a.active ? b >= j.length ? i.select(j[b - 1]) : i.select(j[b]) : k > b && k--
	}
}]).directive("carousel", [function() {
	return {
		restrict: "EA",
		transclude: !0,
		replace: !0,
		controller: "CarouselController",
		require: "carousel",
		templateUrl: "template/carousel/carousel.html",
		scope: {
			interval: "=",
			noTransition: "=",
			noPause: "="
		}
	}
}]).directive("slide", ["$parse", function(a) {
	return {
		require: "^carousel",
		restrict: "EA",
		transclude: !0,
		replace: !0,
		templateUrl: "template/carousel/slide.html",
		scope: {},
		link: function(b, c, d, e) {
			if (d.active) {
				var f = a(d.active),
					g = f.assign,
					h = b.active = f(b.$parent);
				b.$watch(function() {
					var a = f(b.$parent);
					return a !== b.active && (a !== h ? h = b.active = a : g(b.$parent, a = h = b.active)), a
				})
			}
			e.addSlide(b, c), b.$on("$destroy", function() {
				e.removeSlide(b)
			}), b.$watch("active", function(a) {
				a && e.select(b)
			})
		}
	}
}]), angular.module("ui.bootstrap.position", []).factory("$position", ["$document", "$window", function(a, b) {
	function c(a, c) {
		return a.currentStyle ? a.currentStyle[c] : b.getComputedStyle ? b.getComputedStyle(a)[c] : a.style[c]
	}

	function d(a) {
		return "static" === (c(a, "position") || "static")
	}
	var e = function(b) {
		for (var c = a[0], e = b.offsetParent || c; e && e !== c && d(e);) e = e.offsetParent;
		return e || c
	};
	return {
		position: function(b) {
			var c = this.offset(b),
				d = {
					top: 0,
					left: 0
				},
				f = e(b[0]);
			f != a[0] && (d = this.offset(angular.element(f)), d.top += f.clientTop - f.scrollTop, d.left += f.clientLeft - f.scrollLeft);
			var g = b[0].getBoundingClientRect();
			return {
				width: g.width || b.prop("offsetWidth"),
				height: g.height || b.prop("offsetHeight"),
				top: c.top - d.top,
				left: c.left - d.left
			}
		},
		offset: function(c) {
			var d = c[0].getBoundingClientRect();
			return {
				width: d.width || c.prop("offsetWidth"),
				height: d.height || c.prop("offsetHeight"),
				top: d.top + (b.pageYOffset || a[0].body.scrollTop || a[0].documentElement.scrollTop),
				left: d.left + (b.pageXOffset || a[0].body.scrollLeft || a[0].documentElement.scrollLeft)
			}
		}
	}
}]), angular.module("ui.bootstrap.datepicker", ["ui.bootstrap.position"]).constant("datepickerConfig", {
	dayFormat: "dd",
	monthFormat: "MMMM",
	yearFormat: "yyyy",
	dayHeaderFormat: "EEE",
	dayTitleFormat: "MMMM yyyy",
	monthTitleFormat: "yyyy",
	showWeeks: !0,
	startingDay: 0,
	yearRange: 20,
	minDate: null,
	maxDate: null
}).controller("DatepickerController", ["$scope", "$attrs", "dateFilter", "datepickerConfig", function(a, b, c, d) {
	function e(b, c) {
		return angular.isDefined(b) ? a.$parent.$eval(b) : c
	}

	function f(a, b) {
		return new Date(a, b, 0).getDate()
	}

	function g(a, b) {
		for (var c = new Array(b), d = a, e = 0; b > e;) c[e++] = new Date(d), d.setDate(d.getDate() + 1);
		return c
	}

	function h(a, b, d, e) {
		return {
			date: a,
			label: c(a, b),
			selected: !!d,
			secondary: !!e
		}
	}
	var i = {
			day: e(b.dayFormat, d.dayFormat),
			month: e(b.monthFormat, d.monthFormat),
			year: e(b.yearFormat, d.yearFormat),
			dayHeader: e(b.dayHeaderFormat, d.dayHeaderFormat),
			dayTitle: e(b.dayTitleFormat, d.dayTitleFormat),
			monthTitle: e(b.monthTitleFormat, d.monthTitleFormat)
		},
		j = e(b.startingDay, d.startingDay),
		k = e(b.yearRange, d.yearRange);
	this.minDate = d.minDate ? new Date(d.minDate) : null, this.maxDate = d.maxDate ? new Date(d.maxDate) : null, this.modes = [{
		name: "day",
		getVisibleDates: function(a, b) {
			var d = a.getFullYear(),
				e = a.getMonth(),
				k = new Date(d, e, 1),
				l = j - k.getDay(),
				m = l > 0 ? 7 - l : -l,
				n = new Date(k),
				o = 0;
			m > 0 && (n.setDate(-m + 1), o += m), o += f(d, e + 1), o += (7 - o % 7) % 7;
			for (var p = g(n, o), q = new Array(7), r = 0; o > r; r++) {
				var s = new Date(p[r]);
				p[r] = h(s, i.day, b && b.getDate() === s.getDate() && b.getMonth() === s.getMonth() && b.getFullYear() === s.getFullYear(), s.getMonth() !== e)
			}
			for (var t = 0; 7 > t; t++) q[t] = c(p[t].date, i.dayHeader);
			return {
				objects: p,
				title: c(a, i.dayTitle),
				labels: q
			}
		},
		compare: function(a, b) {
			return new Date(a.getFullYear(), a.getMonth(), a.getDate()) - new Date(b.getFullYear(), b.getMonth(), b.getDate())
		},
		split: 7,
		step: {
			months: 1
		}
	}, {
		name: "month",
		getVisibleDates: function(a, b) {
			for (var d = new Array(12), e = a.getFullYear(), f = 0; 12 > f; f++) {
				var g = new Date(e, f, 1);
				d[f] = h(g, i.month, b && b.getMonth() === f && b.getFullYear() === e)
			}
			return {
				objects: d,
				title: c(a, i.monthTitle)
			}
		},
		compare: function(a, b) {
			return new Date(a.getFullYear(), a.getMonth()) - new Date(b.getFullYear(), b.getMonth())
		},
		split: 3,
		step: {
			years: 1
		}
	}, {
		name: "year",
		getVisibleDates: function(a, b) {
			for (var c = new Array(k), d = a.getFullYear(), e = parseInt((d - 1) / k, 10) * k + 1, f = 0; k > f; f++) {
				var g = new Date(e + f, 0, 1);
				c[f] = h(g, i.year, b && b.getFullYear() === g.getFullYear())
			}
			return {
				objects: c,
				title: [c[0].label, c[k - 1].label].join(" - ")
			}
		},
		compare: function(a, b) {
			return a.getFullYear() - b.getFullYear()
		},
		split: 5,
		step: {
			years: k
		}
	}], this.isDisabled = function(b, c) {
		var d = this.modes[c || 0];
		return this.minDate && d.compare(b, this.minDate) < 0 || this.maxDate && d.compare(b, this.maxDate) > 0 || a.dateDisabled && a.dateDisabled({
			date: b,
			mode: d.name
		})
	}
}]).directive("datepicker", ["dateFilter", "$parse", "datepickerConfig", "$log", function(a, b, c, d) {
	return {
		restrict: "EA",
		replace: !0,
		templateUrl: "template/datepicker/datepicker.html",
		scope: {
			dateDisabled: "&"
		},
		require: ["datepicker", "?^ngModel"],
		controller: "DatepickerController",
		link: function(a, e, f, g) {
			function h() {
				a.showWeekNumbers = 0 === o && q
			}

			function i(a, b) {
				for (var c = []; a.length > 0;) c.push(a.splice(0, b));
				return c
			}

			function j(b) {
				var c = null,
					e = !0;
				n.$modelValue && (c = new Date(n.$modelValue), isNaN(c) ? (e = !1, d.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')) : b && (p = c)), n.$setValidity("date", e);
				var f = m.modes[o],
					g = f.getVisibleDates(p, c);
				angular.forEach(g.objects, function(a) {
					a.disabled = m.isDisabled(a.date, o)
				}), n.$setValidity("date-disabled", !c || !m.isDisabled(c)), a.rows = i(g.objects, f.split), a.labels = g.labels || [], a.title = g.title
			}

			function k(a) {
				o = a, h(), j()
			}

			function l(a) {
				var b = new Date(a);
				b.setDate(b.getDate() + 4 - (b.getDay() || 7));
				var c = b.getTime();
				return b.setMonth(0), b.setDate(1), Math.floor(Math.round((c - b) / 864e5) / 7) + 1
			}
			var m = g[0],
				n = g[1];
			if (n) {
				var o = 0,
					p = new Date,
					q = c.showWeeks;
				f.showWeeks ? a.$parent.$watch(b(f.showWeeks), function(a) {
					q = !!a, h()
				}) : h(), f.min && a.$parent.$watch(b(f.min), function(a) {
					m.minDate = a ? new Date(a) : null, j()
				}), f.max && a.$parent.$watch(b(f.max), function(a) {
					m.maxDate = a ? new Date(a) : null, j()
				}), n.$render = function() {
					j(!0)
				}, a.select = function(a) {
					if (0 === o) {
						var b = n.$modelValue ? new Date(n.$modelValue) : new Date(0, 0, 0, 0, 0, 0, 0);
						b.setFullYear(a.getFullYear(), a.getMonth(), a.getDate()), n.$setViewValue(b), j(!0)
					} else p = a, k(o - 1)
				}, a.move = function(a) {
					var b = m.modes[o].step;
					p.setMonth(p.getMonth() + a * (b.months || 0)), p.setFullYear(p.getFullYear() + a * (b.years || 0)), j()
				}, a.toggleMode = function() {
					k((o + 1) % m.modes.length)
				}, a.getWeekNumber = function(b) {
					return 0 === o && a.showWeekNumbers && 7 === b.length ? l(b[0].date) : null
				}
			}
		}
	}
}]).constant("datepickerPopupConfig", {
	dateFormat: "yyyy-MM-dd",
	currentText: "Today",
	toggleWeeksText: "Weeks",
	clearText: "Clear",
	closeText: "Done",
	closeOnDateSelection: !0,
	appendToBody: !1,
	showButtonBar: !0
}).directive("datepickerPopup", ["$compile", "$parse", "$document", "$position", "dateFilter", "datepickerPopupConfig", "datepickerConfig", function(a, b, c, d, e, f, g) {
	return {
		restrict: "EA",
		require: "ngModel",
		link: function(h, i, j, k) {
			function l(a) {
				u ? u(h, !!a) : q.isOpen = !!a
			}

			function m(a) {
				if (a) {
					if (angular.isDate(a)) return k.$setValidity("date", !0), a;
					if (angular.isString(a)) {
						var b = new Date(a);
						return isNaN(b) ? (k.$setValidity("date", !1), void 0) : (k.$setValidity("date", !0), b)
					}
					return k.$setValidity("date", !1), void 0
				}
				return k.$setValidity("date", !0), null
			}

			function n(a, c, d) {
				a && (h.$watch(b(a), function(a) {
					q[c] = a
				}), y.attr(d || c, c))
			}

			function o() {
				q.position = s ? d.offset(i) : d.position(i), q.position.top = q.position.top + i.prop("offsetHeight")
			}
			var p, q = h.$new(),
				r = angular.isDefined(j.closeOnDateSelection) ? h.$eval(j.closeOnDateSelection) : f.closeOnDateSelection,
				s = angular.isDefined(j.datepickerAppendToBody) ? h.$eval(j.datepickerAppendToBody) : f.appendToBody;
			j.$observe("datepickerPopup", function(a) {
				p = a || f.dateFormat, k.$render()
			}), q.showButtonBar = angular.isDefined(j.showButtonBar) ? h.$eval(j.showButtonBar) : f.showButtonBar, h.$on("$destroy", function() {
				C.remove(), q.$destroy()
			}), j.$observe("currentText", function(a) {
				q.currentText = angular.isDefined(a) ? a : f.currentText
			}), j.$observe("toggleWeeksText", function(a) {
				q.toggleWeeksText = angular.isDefined(a) ? a : f.toggleWeeksText
			}), j.$observe("clearText", function(a) {
				q.clearText = angular.isDefined(a) ? a : f.clearText
			}), j.$observe("closeText", function(a) {
				q.closeText = angular.isDefined(a) ? a : f.closeText
			});
			var t, u;
			j.isOpen && (t = b(j.isOpen), u = t.assign, h.$watch(t, function(a) {
				q.isOpen = !!a
			})), q.isOpen = t ? t(h) : !1;
			var v = function(a) {
					q.isOpen && a.target !== i[0] && q.$apply(function() {
						l(!1)
					})
				},
				w = function() {
					q.$apply(function() {
						l(!0)
					})
				},
				x = angular.element("<div datepicker-popup-wrap><div datepicker></div></div>");
			x.attr({
				"ng-model": "date",
				"ng-change": "dateSelection()"
			});
			var y = angular.element(x.children()[0]),
				z = {};
			j.datepickerOptions && (z = h.$eval(j.datepickerOptions), y.attr(angular.extend({}, z))), k.$parsers.unshift(m), q.dateSelection = function(a) {
				angular.isDefined(a) && (q.date = a), k.$setViewValue(q.date), k.$render(), r && l(!1)
			}, i.bind("input change keyup", function() {
				q.$apply(function() {
					q.date = k.$modelValue
				})
			}), k.$render = function() {
				var a = k.$viewValue ? e(k.$viewValue, p) : "";
				i.val(a), q.date = k.$modelValue
			}, n(j.min, "min"), n(j.max, "max"), j.showWeeks ? n(j.showWeeks, "showWeeks", "show-weeks") : (q.showWeeks = "show-weeks" in z ? z["show-weeks"] : g.showWeeks, y.attr("show-weeks", "showWeeks")), j.dateDisabled && y.attr("date-disabled", j.dateDisabled);
			var A = !1,
				B = !1;
			q.$watch("isOpen", function(a) {
				a ? (o(), c.bind("click", v), B && i.unbind("focus", w), i[0].focus(), A = !0) : (A && c.unbind("click", v), i.bind("focus", w), B = !0), u && u(h, a)
			}), q.today = function() {
				q.dateSelection(new Date)
			}, q.clear = function() {
				q.dateSelection(null)
			};
			var C = a(x)(q);
			s ? c.find("body").append(C) : i.after(C)
		}
	}
}]).directive("datepickerPopupWrap", function() {
	return {
		restrict: "EA",
		replace: !0,
		transclude: !0,
		templateUrl: "template/datepicker/popup.html",
		link: function(a, b) {
			b.bind("click", function(a) {
				a.preventDefault(), a.stopPropagation()
			})
		}
	}
}), angular.module("ui.bootstrap.dropdownToggle", []).directive("dropdownToggle", ["$document", "$location", function(a) {
	var b = null,
		c = angular.noop;
	return {
		restrict: "CA",
		link: function(d, e) {
			d.$watch("$location.path", function() {
				c()
			}), e.parent().bind("click", function() {
				c()
			}), e.bind("click", function(d) {
				var f = e === b;
				d.preventDefault(), d.stopPropagation(), b && c(), f || e.hasClass("disabled") || e.prop("disabled") || (e.parent().addClass("open"), b = e, c = function(d) {
					d && (d.preventDefault(), d.stopPropagation()), a.unbind("click", c), e.parent().removeClass("open"), c = angular.noop, b = null
				}, a.bind("click", c))
			})
		}
	}
}]), angular.module("ui.bootstrap.modal", ["ui.bootstrap.transition"]).factory("$$stackedMap", function() {
	return {
		createNew: function() {
			var a = [];
			return {
				add: function(b, c) {
					a.push({
						key: b,
						value: c
					})
				},
				get: function(b) {
					for (var c = 0; c < a.length; c++)
						if (b == a[c].key) return a[c]
				},
				keys: function() {
					for (var b = [], c = 0; c < a.length; c++) b.push(a[c].key);
					return b
				},
				top: function() {
					return a[a.length - 1]
				},
				remove: function(b) {
					for (var c = -1, d = 0; d < a.length; d++)
						if (b == a[d].key) {
							c = d;
							break
						} return a.splice(c, 1)[0]
				},
				removeTop: function() {
					return a.splice(a.length - 1, 1)[0]
				},
				length: function() {
					return a.length
				}
			}
		}
	}
}).directive("modalBackdrop", ["$timeout", function(a) {
	return {
		restrict: "EA",
		replace: !0,
		templateUrl: "template/modal/backdrop.html",
		link: function(b) {
			b.animate = !1, a(function() {
				b.animate = !0
			})
		}
	}
}]).directive("modalWindow", ["$modalStack", "$timeout", function(a, b) {
	return {
		restrict: "EA",
		scope: {
			index: "@",
			animate: "="
		},
		replace: !0,
		transclude: !0,
		templateUrl: "template/modal/window.html",
		link: function(c, d, e) {
			c.windowClass = e.windowClass || "", b(function() {
				c.animate = !0, d[0].focus()
			}), c.close = function(b) {
				var c = a.getTop();
				c && c.value.backdrop && "static" != c.value.backdrop && b.target === b.currentTarget && (b.preventDefault(), b.stopPropagation(), a.dismiss(c.key, "backdrop click"))
			}
		}
	}
}]).factory("$modalStack", ["$transition", "$timeout", "$document", "$compile", "$rootScope", "$$stackedMap", function(a, b, c, d, e, f) {
	function g() {
		for (var a = -1, b = n.keys(), c = 0; c < b.length; c++) n.get(b[c]).value.backdrop && (a = c);
		return a
	}

	function h(a) {
		var b = c.find("body").eq(0),
			d = n.get(a).value;
		n.remove(a), j(d.modalDomEl, d.modalScope, 300, i), b.toggleClass(m, n.length() > 0)
	}

	function i() {
		if (k && -1 == g()) {
			var a = l;
			j(k, l, 150, function() {
				a.$destroy(), a = null
			}), k = void 0, l = void 0
		}
	}

	function j(c, d, e, f) {
		function g() {
			g.done || (g.done = !0, c.remove(), f && f())
		}
		d.animate = !1;
		var h = a.transitionEndEventName;
		if (h) {
			var i = b(g, e);
			c.bind(h, function() {
				b.cancel(i), g(), d.$apply()
			})
		} else b(g, 0)
	}
	var k, l, m = "modal-open",
		n = f.createNew(),
		o = {};
	return e.$watch(g, function(a) {
		l && (l.index = a)
	}), c.bind("keydown", function(a) {
		var b;
		27 === a.which && (b = n.top(), b && b.value.keyboard && e.$apply(function() {
			o.dismiss(b.key)
		}))
	}), o.open = function(a, b) {
		n.add(a, {
			deferred: b.deferred,
			modalScope: b.scope,
			backdrop: b.backdrop,
			keyboard: b.keyboard
		});
		var f = c.find("body").eq(0),
			h = g();
		h >= 0 && !k && (l = e.$new(!0), l.index = h, k = d("<div modal-backdrop></div>")(l), f.append(k));
		var i = angular.element("<div modal-window></div>");
		i.attr("window-class", b.windowClass), i.attr("index", n.length() - 1), i.attr("animate", "animate"), i.html(b.content);
		var j = d(i)(b.scope);
		n.top().value.modalDomEl = j, f.append(j), f.addClass(m)
	}, o.close = function(a, b) {
		var c = n.get(a).value;
		c && (c.deferred.resolve(b), h(a))
	}, o.dismiss = function(a, b) {
		var c = n.get(a).value;
		c && (c.deferred.reject(b), h(a))
	}, o.dismissAll = function(a) {
		for (var b = this.getTop(); b;) this.dismiss(b.key, a), b = this.getTop()
	}, o.getTop = function() {
		return n.top()
	}, o
}]).provider("$modal", function() {
	var a = {
		options: {
			backdrop: !0,
			keyboard: !0
		},
		$get: ["$injector", "$rootScope", "$q", "$http", "$templateCache", "$controller", "$modalStack", function(b, c, d, e, f, g, h) {
			function i(a) {
				return a.template ? d.when(a.template) : e.get(a.templateUrl, {
					cache: f
				}).then(function(a) {
					return a.data
				})
			}

			function j(a) {
				var c = [];
				return angular.forEach(a, function(a) {
					(angular.isFunction(a) || angular.isArray(a)) && c.push(d.when(b.invoke(a)))
				}), c
			}
			var k = {};
			return k.open = function(b) {
				var e = d.defer(),
					f = d.defer(),
					k = {
						result: e.promise,
						opened: f.promise,
						close: function(a) {
							h.close(k, a)
						},
						dismiss: function(a) {
							h.dismiss(k, a)
						}
					};
				if (b = angular.extend({}, a.options, b), b.resolve = b.resolve || {}, !b.template && !b.templateUrl) throw new Error("One of template or templateUrl options is required.");
				var l = d.all([i(b)].concat(j(b.resolve)));
				return l.then(function(a) {
					var d = (b.scope || c).$new();
					d.$close = k.close, d.$dismiss = k.dismiss;
					var f, i = {},
						j = 1;
					b.controller && (i.$scope = d, i.$modalInstance = k, angular.forEach(b.resolve, function(b, c) {
						i[c] = a[j++]
					}), f = g(b.controller, i)), h.open(k, {
						scope: d,
						deferred: e,
						content: a[0],
						backdrop: b.backdrop,
						keyboard: b.keyboard,
						windowClass: b.windowClass
					})
				}, function(a) {
					e.reject(a)
				}), l.then(function() {
					f.resolve(!0)
				}, function() {
					f.reject(!1)
				}), k
			}, k
		}]
	};
	return a
}), angular.module("ui.bootstrap.pagination", []).controller("PaginationController", ["$scope", "$attrs", "$parse", "$interpolate", function(a, b, c, d) {
	var e = this,
		f = b.numPages ? c(b.numPages).assign : angular.noop;
	this.init = function(d) {
		b.itemsPerPage ? a.$parent.$watch(c(b.itemsPerPage), function(b) {
			e.itemsPerPage = parseInt(b, 10), a.totalPages = e.calculateTotalPages()
		}) : this.itemsPerPage = d
	}, this.noPrevious = function() {
		return 1 === this.page
	}, this.noNext = function() {
		return this.page === a.totalPages
	}, this.isActive = function(a) {
		return this.page === a
	}, this.calculateTotalPages = function() {
		var b = this.itemsPerPage < 1 ? 1 : Math.ceil(a.totalItems / this.itemsPerPage);
		return Math.max(b || 0, 1)
	}, this.getAttributeValue = function(b, c, e) {
		return angular.isDefined(b) ? e ? d(b)(a.$parent) : a.$parent.$eval(b) : c
	}, this.render = function() {
		this.page = parseInt(a.page, 10) || 1, this.page > 0 && this.page <= a.totalPages && (a.pages = this.getPages(this.page, a.totalPages))
	}, a.selectPage = function(b) {
		!e.isActive(b) && b > 0 && b <= a.totalPages && (a.page = b, a.onSelectPage({
			page: b
		}))
	}, a.$watch("page", function() {
		e.render()
	}), a.$watch("totalItems", function() {
		a.totalPages = e.calculateTotalPages()
	}), a.$watch("totalPages", function(b) {
		f(a.$parent, b), e.page > b ? a.selectPage(b) : e.render()
	})
}]).constant("paginationConfig", {
	itemsPerPage: 10,
	boundaryLinks: !1,
	directionLinks: !0,
	firstText: "First",
	previousText: "Previous",
	nextText: "Next",
	lastText: "Last",
	rotate: !0
}).directive("pagination", ["$parse", "paginationConfig", function(a, b) {
	return {
		restrict: "EA",
		scope: {
			page: "=",
			totalItems: "=",
			onSelectPage: " &"
		},
		controller: "PaginationController",
		templateUrl: "template/pagination/pagination.html",
		replace: !0,
		link: function(c, d, e, f) {
			function g(a, b, c, d) {
				return {
					number: a,
					text: b,
					active: c,
					disabled: d
				}
			}
			var h, i = f.getAttributeValue(e.boundaryLinks, b.boundaryLinks),
				j = f.getAttributeValue(e.directionLinks, b.directionLinks),
				k = f.getAttributeValue(e.firstText, b.firstText, !0),
				l = f.getAttributeValue(e.previousText, b.previousText, !0),
				m = f.getAttributeValue(e.nextText, b.nextText, !0),
				n = f.getAttributeValue(e.lastText, b.lastText, !0),
				o = f.getAttributeValue(e.rotate, b.rotate);
			f.init(b.itemsPerPage), e.maxSize && c.$parent.$watch(a(e.maxSize), function(a) {
				h = parseInt(a, 10), f.render()
			}), f.getPages = function(a, b) {
				var c = [],
					d = 1,
					e = b,
					p = angular.isDefined(h) && b > h;
				p && (o ? (d = Math.max(a - Math.floor(h / 2), 1), e = d + h - 1, e > b && (e = b, d = e - h + 1)) : (d = (Math.ceil(a / h) - 1) * h + 1, e = Math.min(d + h - 1, b)));
				for (var q = d; e >= q; q++) {
					var r = g(q, q, f.isActive(q), !1);
					c.push(r)
				}
				if (p && !o) {
					if (d > 1) {
						var s = g(d - 1, "...", !1, !1);
						c.unshift(s)
					}
					if (b > e) {
						var t = g(e + 1, "...", !1, !1);
						c.push(t)
					}
				}
				if (j) {
					var u = g(a - 1, l, !1, f.noPrevious());
					c.unshift(u);
					var v = g(a + 1, m, !1, f.noNext());
					c.push(v)
				}
				if (i) {
					var w = g(1, k, !1, f.noPrevious());
					c.unshift(w);
					var x = g(b, n, !1, f.noNext());
					c.push(x)
				}
				return c
			}
		}
	}
}]).constant("pagerConfig", {
	itemsPerPage: 10,
	previousText: "« Previous",
	nextText: "Next »",
	align: !0
}).directive("pager", ["pagerConfig", function(a) {
	return {
		restrict: "EA",
		scope: {
			page: "=",
			totalItems: "=",
			onSelectPage: " &"
		},
		controller: "PaginationController",
		templateUrl: "template/pagination/pager.html",
		replace: !0,
		link: function(b, c, d, e) {
			function f(a, b, c, d, e) {
				return {
					number: a,
					text: b,
					disabled: c,
					previous: i && d,
					next: i && e
				}
			}
			var g = e.getAttributeValue(d.previousText, a.previousText, !0),
				h = e.getAttributeValue(d.nextText, a.nextText, !0),
				i = e.getAttributeValue(d.align, a.align);
			e.init(a.itemsPerPage), e.getPages = function(a) {
				return [f(a - 1, g, e.noPrevious(), !0, !1), f(a + 1, h, e.noNext(), !1, !0)]
			}
		}
	}
}]), angular.module("ui.bootstrap.tooltip", ["ui.bootstrap.position", "ui.bootstrap.bindHtml"]).provider("$tooltip", function() {
	function a(a) {
		var b = /[A-Z]/g,
			c = "-";
		return a.replace(b, function(a, b) {
			return (b ? c : "") + a.toLowerCase()
		})
	}
	var b = {
			placement: "top",
			animation: !0,
			popupDelay: 0
		},
		c = {
			mouseenter: "mouseleave",
			click: "click",
			focus: "blur"
		},
		d = {};
	this.options = function(a) {
		angular.extend(d, a)
	}, this.setTriggers = function(a) {
		angular.extend(c, a)
	}, this.$get = ["$window", "$compile", "$timeout", "$parse", "$document", "$position", "$interpolate", function(e, f, g, h, i, j, k) {
		return function(e, l, m) {
			function n(a) {
				var b = a || o.trigger || m,
					d = c[b] || b;
				return {
					show: b,
					hide: d
				}
			}
			var o = angular.extend({}, b, d),
				p = a(e),
				q = k.startSymbol(),
				r = k.endSymbol(),
				s = "<div " + p + '-popup title="' + q + "tt_title" + r + '" content="' + q + "tt_content" + r + '" placement="' + q + "tt_placement" + r + '" animation="tt_animation" is-open="tt_isOpen"></div>';
			return {
				restrict: "EA",
				scope: !0,
				compile: function() {
					var a = f(s);
					return function(b, c, d) {
						function f() {
							b.tt_isOpen ? m() : k()
						}

						function k() {
							(!z || b.$eval(d[l + "Enable"])) && (b.tt_popupDelay ? (v = g(p, b.tt_popupDelay, !1), v.then(function(a) {
								a()
							})) : p()())
						}

						function m() {
							b.$apply(function() {
								q()
							})
						}

						function p() {
							return b.tt_content ? (r(), u && g.cancel(u), t.css({
								top: 0,
								left: 0,
								display: "block"
							}), w ? i.find("body").append(t) : c.after(t), A(), b.tt_isOpen = !0, b.$digest(), A) : angular.noop
						}

						function q() {
							b.tt_isOpen = !1, g.cancel(v), b.tt_animation ? u = g(s, 500) : s()
						}

						function r() {
							t && s(), t = a(b, function() {}), b.$digest()
						}

						function s() {
							t && (t.remove(), t = null)
						}
						var t, u, v, w = angular.isDefined(o.appendToBody) ? o.appendToBody : !1,
							x = n(void 0),
							y = !1,
							z = angular.isDefined(d[l + "Enable"]),
							A = function() {
								var a, d, e, f;
								switch (a = w ? j.offset(c) : j.position(c), d = t.prop("offsetWidth"), e = t.prop("offsetHeight"), b.tt_placement) {
									case "right":
										f = {
											top: a.top + a.height / 2 - e / 2,
											left: a.left + a.width
										};
										break;
									case "bottom":
										f = {
											top: a.top + a.height,
											left: a.left + a.width / 2 - d / 2
										};
										break;
									case "left":
										f = {
											top: a.top + a.height / 2 - e / 2,
											left: a.left - d
										};
										break;
									default:
										f = {
											top: a.top - e,
											left: a.left + a.width / 2 - d / 2
										}
								}
								f.top += "px", f.left += "px", t.css(f)
							};
						b.tt_isOpen = !1, d.$observe(e, function(a) {
							b.tt_content = a, !a && b.tt_isOpen && q()
						}), d.$observe(l + "Title", function(a) {
							b.tt_title = a
						}), d.$observe(l + "Placement", function(a) {
							b.tt_placement = angular.isDefined(a) ? a : o.placement
						}), d.$observe(l + "PopupDelay", function(a) {
							var c = parseInt(a, 10);
							b.tt_popupDelay = isNaN(c) ? o.popupDelay : c
						});
						var B = function() {
							y && (c.unbind(x.show, k), c.unbind(x.hide, m))
						};
						d.$observe(l + "Trigger", function(a) {
							B(), x = n(a), x.show === x.hide ? c.bind(x.show, f) : (c.bind(x.show, k), c.bind(x.hide, m)), y = !0
						});
						var C = b.$eval(d[l + "Animation"]);
						b.tt_animation = angular.isDefined(C) ? !!C : o.animation, d.$observe(l + "AppendToBody", function(a) {
							w = angular.isDefined(a) ? h(a)(b) : w
						}), w && b.$on("$locationChangeSuccess", function() {
							b.tt_isOpen && q()
						}), b.$on("$destroy", function() {
							g.cancel(u), g.cancel(v), B(), s()
						})
					}
				}
			}
		}
	}]
}).directive("tooltipPopup", function() {
	return {
		restrict: "EA",
		replace: !0,
		scope: {
			content: "@",
			placement: "@",
			animation: "&",
			isOpen: "&"
		},
		templateUrl: "template/tooltip/tooltip-popup.html"
	}
}).directive("tooltip", ["$tooltip", function(a) {
	return a("tooltip", "tooltip", "mouseenter")
}]).directive("tooltipHtmlUnsafePopup", function() {
	return {
		restrict: "EA",
		replace: !0,
		scope: {
			content: "@",
			placement: "@",
			animation: "&",
			isOpen: "&"
		},
		templateUrl: "template/tooltip/tooltip-html-unsafe-popup.html"
	}
}).directive("tooltipHtmlUnsafe", ["$tooltip", function(a) {
	return a("tooltipHtmlUnsafe", "tooltip", "mouseenter")
}]), angular.module("ui.bootstrap.popover", ["ui.bootstrap.tooltip"]).directive("popoverPopup", function() {
	return {
		restrict: "EA",
		replace: !0,
		scope: {
			title: "@",
			content: "@",
			placement: "@",
			animation: "&",
			isOpen: "&"
		},
		templateUrl: "template/popover/popover.html"
	}
}).directive("popover", ["$tooltip", function(a) {
	return a("popover", "popover", "click")
}]), angular.module("ui.bootstrap.progressbar", ["ui.bootstrap.transition"]).constant("progressConfig", {
	animate: !0,
	max: 100
}).controller("ProgressController", ["$scope", "$attrs", "progressConfig", "$transition", function(a, b, c, d) {
	var e = this,
		f = [],
		g = angular.isDefined(b.max) ? a.$parent.$eval(b.max) : c.max,
		h = angular.isDefined(b.animate) ? a.$parent.$eval(b.animate) : c.animate;
	this.addBar = function(a, b) {
		var c = 0,
			d = a.$parent.$index;
		angular.isDefined(d) && f[d] && (c = f[d].value), f.push(a), this.update(b, a.value, c), a.$watch("value", function(a, c) {
			a !== c && e.update(b, a, c)
		}), a.$on("$destroy", function() {
			e.removeBar(a)
		})
	}, this.update = function(a, b, c) {
		var e = this.getPercentage(b);
		h ? (a.css("width", this.getPercentage(c) + "%"), d(a, {
			width: e + "%"
		})) : a.css({
			transition: "none",
			width: e + "%"
		})
	}, this.removeBar = function(a) {
		f.splice(f.indexOf(a), 1)
	}, this.getPercentage = function(a) {
		return Math.round(100 * a / g)
	}
}]).directive("progress", function() {
	return {
		restrict: "EA",
		replace: !0,
		transclude: !0,
		controller: "ProgressController",
		require: "progress",
		scope: {},
		template: '<div class="progress" ng-transclude></div>'
	}
}).directive("bar", function() {
	return {
		restrict: "EA",
		replace: !0,
		transclude: !0,
		require: "^progress",
		scope: {
			value: "=",
			type: "@"
		},
		templateUrl: "template/progressbar/bar.html",
		link: function(a, b, c, d) {
			d.addBar(a, b)
		}
	}
}).directive("progressbar", function() {
	return {
		restrict: "EA",
		replace: !0,
		transclude: !0,
		controller: "ProgressController",
		scope: {
			value: "=",
			type: "@"
		},
		templateUrl: "template/progressbar/progressbar.html",
		link: function(a, b, c, d) {
			d.addBar(a, angular.element(b.children()[0]))
		}
	}
}), angular.module("ui.bootstrap.rating", []).constant("ratingConfig", {
	max: 5,
	stateOn: null,
	stateOff: null
}).controller("RatingController", ["$scope", "$attrs", "$parse", "ratingConfig", function(a, b, c, d) {
	this.maxRange = angular.isDefined(b.max) ? a.$parent.$eval(b.max) : d.max, this.stateOn = angular.isDefined(b.stateOn) ? a.$parent.$eval(b.stateOn) : d.stateOn, this.stateOff = angular.isDefined(b.stateOff) ? a.$parent.$eval(b.stateOff) : d.stateOff, this.createRateObjects = function(a) {
		for (var b = {
				stateOn: this.stateOn,
				stateOff: this.stateOff
			}, c = 0, d = a.length; d > c; c++) a[c] = angular.extend({
			index: c
		}, b, a[c]);
		return a
	}, a.range = angular.isDefined(b.ratingStates) ? this.createRateObjects(angular.copy(a.$parent.$eval(b.ratingStates))) : this.createRateObjects(new Array(this.maxRange)), a.rate = function(b) {
		a.value === b || a.readonly || (a.value = b)
	}, a.enter = function(b) {
		a.readonly || (a.val = b), a.onHover({
			value: b
		})
	}, a.reset = function() {
		a.val = angular.copy(a.value), a.onLeave()
	}, a.$watch("value", function(b) {
		a.val = b
	}), a.readonly = !1, b.readonly && a.$parent.$watch(c(b.readonly), function(b) {
		a.readonly = !!b
	})
}]).directive("rating", function() {
	return {
		restrict: "EA",
		scope: {
			value: "=",
			onHover: "&",
			onLeave: "&"
		},
		controller: "RatingController",
		templateUrl: "template/rating/rating.html",
		replace: !0
	}
}), angular.module("ui.bootstrap.tabs", []).controller("TabsetController", ["$scope", function(a) {
	var b = this,
		c = b.tabs = a.tabs = [];
	b.select = function(a) {
		angular.forEach(c, function(a) {
			a.active = !1
		}), a.active = !0
	}, b.addTab = function(a) {
		c.push(a), (1 === c.length || a.active) && b.select(a)
	}, b.removeTab = function(a) {
		var d = c.indexOf(a);
		if (a.active && c.length > 1) {
			var e = d == c.length - 1 ? d - 1 : d + 1;
			b.select(c[e])
		}
		c.splice(d, 1)
	}
}]).directive("tabset", function() {
	return {
		restrict: "EA",
		transclude: !0,
		replace: !0,
		scope: {},
		controller: "TabsetController",
		templateUrl: "template/tabs/tabset.html",
		link: function(a, b, c) {
			a.vertical = angular.isDefined(c.vertical) ? a.$parent.$eval(c.vertical) : !1, a.justified = angular.isDefined(c.justified) ? a.$parent.$eval(c.justified) : !1, a.type = angular.isDefined(c.type) ? a.$parent.$eval(c.type) : "tabs"
		}
	}
}).directive("tab", ["$parse", function(a) {
	return {
		require: "^tabset",
		restrict: "EA",
		replace: !0,
		templateUrl: "template/tabs/tab.html",
		transclude: !0,
		scope: {
			heading: "@",
			onSelect: "&select",
			onDeselect: "&deselect"
		},
		controller: function() {},
		compile: function(b, c, d) {
			return function(b, c, e, f) {
				var g, h;
				e.active ? (g = a(e.active), h = g.assign, b.$parent.$watch(g, function(a, c) {
					a !== c && (b.active = !!a)
				}), b.active = g(b.$parent)) : h = g = angular.noop, b.$watch("active", function(a) {
					h(b.$parent, a), a ? (f.select(b), b.onSelect()) : b.onDeselect()
				}), b.disabled = !1, e.disabled && b.$parent.$watch(a(e.disabled), function(a) {
					b.disabled = !!a
				}), b.select = function() {
					b.disabled || (b.active = !0)
				}, f.addTab(b), b.$on("$destroy", function() {
					f.removeTab(b)
				}), b.$transcludeFn = d
			}
		}
	}
}]).directive("tabHeadingTransclude", [function() {
	return {
		restrict: "A",
		require: "^tab",
		link: function(a, b) {
			a.$watch("headingElement", function(a) {
				a && (b.html(""), b.append(a))
			})
		}
	}
}]).directive("tabContentTransclude", function() {
	function a(a) {
		return a.tagName && (a.hasAttribute("tab-heading") || a.hasAttribute("data-tab-heading") || "tab-heading" === a.tagName.toLowerCase() || "data-tab-heading" === a.tagName.toLowerCase())
	}
	return {
		restrict: "A",
		require: "^tabset",
		link: function(b, c, d) {
			var e = b.$eval(d.tabContentTransclude);
			e.$transcludeFn(e.$parent, function(b) {
				angular.forEach(b, function(b) {
					a(b) ? e.headingElement = b : c.append(b)
				})
			})
		}
	}
}), angular.module("ui.bootstrap.timepicker", []).constant("timepickerConfig", {
	hourStep: 1,
	minuteStep: 1,
	showMeridian: !0,
	meridians: null,
	readonlyInput: !1,
	mousewheel: !0
}).directive("timepicker", ["$parse", "$log", "timepickerConfig", "$locale", function(a, b, c, d) {
	return {
		restrict: "EA",
		require: "?^ngModel",
		replace: !0,
		scope: {},
		templateUrl: "template/timepicker/timepicker.html",
		link: function(e, f, g, h) {
			function i() {
				var a = parseInt(e.hours, 10),
					b = e.showMeridian ? a > 0 && 13 > a : a >= 0 && 24 > a;
				return b ? (e.showMeridian && (12 === a && (a = 0), e.meridian === q[1] && (a += 12)), a) : void 0
			}

			function j() {
				var a = parseInt(e.minutes, 10);
				return a >= 0 && 60 > a ? a : void 0
			}

			function k(a) {
				return angular.isDefined(a) && a.toString().length < 2 ? "0" + a : a
			}

			function l(a) {
				m(), h.$setViewValue(new Date(p)), n(a)
			}

			function m() {
				h.$setValidity("time", !0), e.invalidHours = !1, e.invalidMinutes = !1
			}

			function n(a) {
				var b = p.getHours(),
					c = p.getMinutes();
				e.showMeridian && (b = 0 === b || 12 === b ? 12 : b % 12), e.hours = "h" === a ? b : k(b), e.minutes = "m" === a ? c : k(c), e.meridian = p.getHours() < 12 ? q[0] : q[1]
			}

			function o(a) {
				var b = new Date(p.getTime() + 6e4 * a);
				p.setHours(b.getHours(), b.getMinutes()), l()
			}
			if (h) {
				var p = new Date,
					q = angular.isDefined(g.meridians) ? e.$parent.$eval(g.meridians) : c.meridians || d.DATETIME_FORMATS.AMPMS,
					r = c.hourStep;
				g.hourStep && e.$parent.$watch(a(g.hourStep), function(a) {
					r = parseInt(a, 10)
				});
				var s = c.minuteStep;
				g.minuteStep && e.$parent.$watch(a(g.minuteStep), function(a) {
					s = parseInt(a, 10)
				}), e.showMeridian = c.showMeridian, g.showMeridian && e.$parent.$watch(a(g.showMeridian), function(a) {
					if (e.showMeridian = !!a, h.$error.time) {
						var b = i(),
							c = j();
						angular.isDefined(b) && angular.isDefined(c) && (p.setHours(b), l())
					} else n()
				});
				var t = f.find("input"),
					u = t.eq(0),
					v = t.eq(1),
					w = angular.isDefined(g.mousewheel) ? e.$eval(g.mousewheel) : c.mousewheel;
				if (w) {
					var x = function(a) {
						a.originalEvent && (a = a.originalEvent);
						var b = a.wheelDelta ? a.wheelDelta : -a.deltaY;
						return a.detail || b > 0
					};
					u.bind("mousewheel wheel", function(a) {
						e.$apply(x(a) ? e.incrementHours() : e.decrementHours()), a.preventDefault()
					}), v.bind("mousewheel wheel", function(a) {
						e.$apply(x(a) ? e.incrementMinutes() : e.decrementMinutes()), a.preventDefault()
					})
				}
				if (e.readonlyInput = angular.isDefined(g.readonlyInput) ? e.$eval(g.readonlyInput) : c.readonlyInput, e.readonlyInput) e.updateHours = angular.noop, e.updateMinutes = angular.noop;
				else {
					var y = function(a, b) {
						h.$setViewValue(null), h.$setValidity("time", !1), angular.isDefined(a) && (e.invalidHours = a), angular.isDefined(b) && (e.invalidMinutes = b)
					};
					e.updateHours = function() {
						var a = i();
						angular.isDefined(a) ? (p.setHours(a), l("h")) : y(!0)
					}, u.bind("blur", function() {
						!e.validHours && e.hours < 10 && e.$apply(function() {
							e.hours = k(e.hours)
						})
					}), e.updateMinutes = function() {
						var a = j();
						angular.isDefined(a) ? (p.setMinutes(a), l("m")) : y(void 0, !0)
					}, v.bind("blur", function() {
						!e.invalidMinutes && e.minutes < 10 && e.$apply(function() {
							e.minutes = k(e.minutes)
						})
					})
				}
				h.$render = function() {
					var a = h.$modelValue ? new Date(h.$modelValue) : null;
					isNaN(a) ? (h.$setValidity("time", !1), b.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')) : (a && (p = a), m(), n())
				}, e.incrementHours = function() {
					o(60 * r)
				}, e.decrementHours = function() {
					o(60 * -r)
				}, e.incrementMinutes = function() {
					o(s)
				}, e.decrementMinutes = function() {
					o(-s)
				}, e.toggleMeridian = function() {
					o(720 * (p.getHours() < 12 ? 1 : -1))
				}
			}
		}
	}
}]), angular.module("ui.bootstrap.typeahead", ["ui.bootstrap.position", "ui.bootstrap.bindHtml"]).factory("typeaheadParser", ["$parse", function(a) {
	var b = /^\s*(.*?)(?:\s+as\s+(.*?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+(.*)$/;
	return {
		parse: function(c) {
			var d = c.match(b);
			if (!d) throw new Error("Expected typeahead specification in form of '_modelValue_ (as _label_)? for _item_ in _collection_' but got '" + c + "'.");
			return {
				itemName: d[3],
				source: a(d[4]),
				viewMapper: a(d[2] || d[1]),
				modelMapper: a(d[1])
			}
		}
	}
}]).directive("typeahead", ["$compile", "$parse", "$q", "$timeout", "$document", "$position", "typeaheadParser", function(a, b, c, d, e, f, g) {
	var h = [9, 13, 27, 38, 40];
	return {
		require: "ngModel",
		link: function(i, j, k, l) {
			var m, n = i.$eval(k.typeaheadMinLength) || 1,
				o = i.$eval(k.typeaheadWaitMs) || 0,
				p = i.$eval(k.typeaheadEditable) !== !1,
				q = b(k.typeaheadLoading).assign || angular.noop,
				r = b(k.typeaheadOnSelect),
				s = k.typeaheadInputFormatter ? b(k.typeaheadInputFormatter) : void 0,
				t = k.typeaheadAppendToBody ? b(k.typeaheadAppendToBody) : !1,
				u = b(k.ngModel).assign,
				v = g.parse(k.typeahead),
				w = angular.element("<div typeahead-popup></div>");
			w.attr({
				matches: "matches",
				active: "activeIdx",
				select: "select(activeIdx)",
				query: "query",
				position: "position"
			}), angular.isDefined(k.typeaheadTemplateUrl) && w.attr("template-url", k.typeaheadTemplateUrl);
			var x = i.$new();
			i.$on("$destroy", function() {
				x.$destroy()
			});
			var y = function() {
					x.matches = [], x.activeIdx = -1
				},
				z = function(a) {
					var b = {
						$viewValue: a
					};
					q(i, !0), c.when(v.source(i, b)).then(function(c) {
						if (a === l.$viewValue && m) {
							if (c.length > 0) {
								x.activeIdx = 0, x.matches.length = 0;
								for (var d = 0; d < c.length; d++) b[v.itemName] = c[d], x.matches.push({
									label: v.viewMapper(x, b),
									model: c[d]
								});
								x.query = a, x.position = t ? f.offset(j) : f.position(j), x.position.top = x.position.top + j.prop("offsetHeight")
							} else y();
							q(i, !1)
						}
					}, function() {
						y(), q(i, !1)
					})
				};
			y(), x.query = void 0;
			var A;
			l.$parsers.unshift(function(a) {
				return m = !0, a && a.length >= n ? o > 0 ? (A && d.cancel(A), A = d(function() {
					z(a)
				}, o)) : z(a) : (q(i, !1), y()), p ? a : a ? (l.$setValidity("editable", !1), void 0) : (l.$setValidity("editable", !0), a)
			}), l.$formatters.push(function(a) {
				var b, c, d = {};
				return s ? (d.$model = a, s(i, d)) : (d[v.itemName] = a, b = v.viewMapper(i, d), d[v.itemName] = void 0, c = v.viewMapper(i, d), b !== c ? b : a)
			}), x.select = function(a) {
				var b, c, d = {};
				d[v.itemName] = c = x.matches[a].model, b = v.modelMapper(i, d), u(i, b), l.$setValidity("editable", !0), r(i, {
					$item: c,
					$model: b,
					$label: v.viewMapper(i, d)
				}), y(), j[0].focus()
			}, j.bind("keydown", function(a) {
				0 !== x.matches.length && -1 !== h.indexOf(a.which) && (a.preventDefault(), 40 === a.which ? (x.activeIdx = (x.activeIdx + 1) % x.matches.length, x.$digest()) : 38 === a.which ? (x.activeIdx = (x.activeIdx ? x.activeIdx : x.matches.length) - 1, x.$digest()) : 13 === a.which || 9 === a.which ? x.$apply(function() {
					x.select(x.activeIdx)
				}) : 27 === a.which && (a.stopPropagation(), y(), x.$digest()))
			}), j.bind("blur", function() {
				m = !1
			});
			var B = function(a) {
				j[0] !== a.target && (y(), x.$digest())
			};
			e.bind("click", B), i.$on("$destroy", function() {
				e.unbind("click", B)
			});
			var C = a(w)(x);
			t ? e.find("body").append(C) : j.after(C)
		}
	}
}]).directive("typeaheadPopup", function() {
	return {
		restrict: "EA",
		scope: {
			matches: "=",
			query: "=",
			active: "=",
			position: "=",
			select: "&"
		},
		replace: !0,
		templateUrl: "template/typeahead/typeahead-popup.html",
		link: function(a, b, c) {
			a.templateUrl = c.templateUrl, a.isOpen = function() {
				return a.matches.length > 0
			}, a.isActive = function(b) {
				return a.active == b
			}, a.selectActive = function(b) {
				a.active = b
			}, a.selectMatch = function(b) {
				a.select({
					activeIdx: b
				})
			}
		}
	}
}).directive("typeaheadMatch", ["$http", "$templateCache", "$compile", "$parse", function(a, b, c, d) {
	return {
		restrict: "EA",
		scope: {
			index: "=",
			match: "=",
			query: "="
		},
		link: function(e, f, g) {
			var h = d(g.templateUrl)(e.$parent) || "template/typeahead/typeahead-match.html";
			a.get(h, {
				cache: b
			}).success(function(a) {
				f.replaceWith(c(a.trim())(e))
			})
		}
	}
}]).filter("typeaheadHighlight", function() {
	function a(a) {
		return a.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1")
	}
	return function(b, c) {
		return c ? b.replace(new RegExp(a(c), "gi"), "<strong>$&</strong>") : b
	}
}), angular.module("template/accordion/accordion-group.html", []).run(["$templateCache", function(a) {
	a.put("template/accordion/accordion-group.html", '<div class="panel panel-default">\n  <div class="panel-heading">\n    <h4 class="panel-title">\n      <a class="accordion-toggle" ng-click="isOpen = !isOpen" accordion-transclude="heading">{{heading}}</a>\n    </h4>\n  </div>\n  <div class="panel-collapse" collapse="!isOpen">\n	  <div class="panel-body" ng-transclude></div>\n  </div>\n</div>')
}]), angular.module("template/accordion/accordion.html", []).run(["$templateCache", function(a) {
	a.put("template/accordion/accordion.html", '<div class="panel-group" ng-transclude></div>')
}]), angular.module("template/alert/alert.html", []).run(["$templateCache", function(a) {
	a.put("template/alert/alert.html", "<div class='alert' ng-class='\"alert-\" + (type || \"warning\")'>\n    <button ng-show='closeable' type='button' class='close' ng-click='close()'>&times;</button>\n    <div ng-transclude></div>\n</div>\n")
}]), angular.module("template/carousel/carousel.html", []).run(["$templateCache", function(a) {
	a.put("template/carousel/carousel.html", '<div ng-mouseenter="pause()" ng-mouseleave="play()" class="carousel">\n    <ol class="carousel-indicators" ng-show="slides().length > 1">\n        <li ng-repeat="slide in slides()" ng-class="{active: isActive(slide)}" ng-click="select(slide)"></li>\n    </ol>\n    <div class="carousel-inner" ng-transclude></div>\n    <a class="left carousel-control" ng-click="prev()" ng-show="slides().length > 1"><span class="icon-prev"></span></a>\n    <a class="right carousel-control" ng-click="next()" ng-show="slides().length > 1"><span class="icon-next"></span></a>\n</div>\n')
}]), angular.module("template/carousel/slide.html", []).run(["$templateCache", function(a) {
	a.put("template/carousel/slide.html", "<div ng-class=\"{\n    'active': leaving || (active && !entering),\n    'prev': (next || active) && direction=='prev',\n    'next': (next || active) && direction=='next',\n    'right': direction=='prev',\n    'left': direction=='next'\n  }\" class=\"item text-center\" ng-transclude></div>\n")
}]), angular.module("template/datepicker/datepicker.html", []).run(["$templateCache", function(a) {
	a.put("template/datepicker/datepicker.html", '<table>\n  <thead>\n    <tr>\n      <th><button type="button" class="btn btn-default btn-sm pull-left" ng-click="move(-1)"><i class="glyphicon glyphicon-chevron-left"></i></button></th>\n      <th colspan="{{rows[0].length - 2 + showWeekNumbers}}"><button type="button" class="btn btn-default btn-sm btn-block" ng-click="toggleMode()"><strong>{{title}}</strong></button></th>\n      <th><button type="button" class="btn btn-default btn-sm pull-right" ng-click="move(1)"><i class="glyphicon glyphicon-chevron-right"></i></button></th>\n    </tr>\n    <tr ng-show="labels.length > 0" class="h6">\n      <th ng-show="showWeekNumbers" class="text-center">#</th>\n      <th ng-repeat="label in labels" class="text-center">{{label}}</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr ng-repeat="row in rows">\n      <td ng-show="showWeekNumbers" class="text-center"><em>{{ getWeekNumber(row) }}</em></td>\n      <td ng-repeat="dt in row" class="text-center">\n        <button type="button" style="width:100%;" class="btn btn-default btn-sm" ng-class="{\'btn-info\': dt.selected}" ng-click="select(dt.date)" ng-disabled="dt.disabled"><span ng-class="{\'text-muted\': dt.secondary}">{{dt.label}}</span></button>\n      </td>\n    </tr>\n  </tbody>\n</table>\n')
}]), angular.module("template/datepicker/popup.html", []).run(["$templateCache", function(a) {
	a.put("template/datepicker/popup.html", "<ul class=\"dropdown-menu\" ng-style=\"{display: (isOpen && 'block') || 'none', top: position.top+'px', left: position.left+'px'}\">\n	<li ng-transclude></li>\n" + '	<li ng-show="showButtonBar" style="padding:10px 9px 2px">\n		<span class="btn-group">\n			<button type="button" class="btn btn-sm btn-info" ng-click="today()">{{currentText}}</button>\n			<button type="button" class="btn btn-sm btn-default" ng-click="showWeeks = ! showWeeks" ng-class="{active: showWeeks}">{{toggleWeeksText}}</button>\n			<button type="button" class="btn btn-sm btn-danger" ng-click="clear()">{{clearText}}</button>\n		</span>\n		<button type="button" class="btn btn-sm btn-success pull-right" ng-click="isOpen = false">{{closeText}}</button>\n	</li>\n</ul>\n')
}]), angular.module("template/modal/backdrop.html", []).run(["$templateCache", function(a) {
	a.put("template/modal/backdrop.html", '<div class="modal-backdrop fade" ng-class="{in: animate}" ng-style="{\'z-index\': 1040 + index*10}"></div>')
}]), angular.module("template/modal/window.html", []).run(["$templateCache", function(a) {
	a.put("template/modal/window.html", '<div tabindex="-1" class="modal fade {{ windowClass }}" ng-class="{in: animate}" ng-style="{\'z-index\': 1050 + index*10, display: \'block\'}" ng-click="close($event)">\n    <div class="modal-dialog"><div class="modal-content" ng-transclude></div></div>\n</div>')
}]), angular.module("template/pagination/pager.html", []).run(["$templateCache", function(a) {
	a.put("template/pagination/pager.html", '<ul class="pager">\n  <li ng-repeat="page in pages" ng-class="{disabled: page.disabled, previous: page.previous, next: page.next}"><a ng-click="selectPage(page.number)">{{page.text}}</a></li>\n</ul>')
}]), angular.module("template/pagination/pagination.html", []).run(["$templateCache", function(a) {
	a.put("template/pagination/pagination.html", '<ul class="pagination">\n  <li ng-repeat="page in pages" ng-class="{active: page.active, disabled: page.disabled}"><a ng-click="selectPage(page.number)">{{page.text}}</a></li>\n</ul>')
}]), angular.module("template/tooltip/tooltip-html-unsafe-popup.html", []).run(["$templateCache", function(a) {
	a.put("template/tooltip/tooltip-html-unsafe-popup.html", '<div class="tooltip {{placement}}" ng-class="{ in: isOpen(), fade: animation() }">\n  <div class="tooltip-arrow"></div>\n  <div class="tooltip-inner" bind-html-unsafe="content"></div>\n</div>\n')
}]), angular.module("template/tooltip/tooltip-popup.html", []).run(["$templateCache", function(a) {
	a.put("template/tooltip/tooltip-popup.html", '<div class="tooltip {{placement}}" ng-class="{ in: isOpen(), fade: animation() }">\n  <div class="tooltip-arrow"></div>\n  <div class="tooltip-inner" ng-bind="content"></div>\n</div>\n')
}]), angular.module("template/popover/popover.html", []).run(["$templateCache", function(a) {
	a.put("template/popover/popover.html", '<div class="popover {{placement}}" ng-class="{ in: isOpen(), fade: animation() }">\n  <div class="arrow"></div>\n\n  <div class="popover-inner">\n      <h3 class="popover-title" ng-bind="title" ng-show="title"></h3>\n      <div class="popover-content" ng-bind="content"></div>\n  </div>\n</div>\n')
}]), angular.module("template/progressbar/bar.html", []).run(["$templateCache", function(a) {
	a.put("template/progressbar/bar.html", '<div class="progress-bar" ng-class="type && \'progress-bar-\' + type" ng-transclude></div>')
}]), angular.module("template/progressbar/progress.html", []).run(["$templateCache", function(a) {
	a.put("template/progressbar/progress.html", '<div class="progress" ng-transclude></div>')
}]), angular.module("template/progressbar/progressbar.html", []).run(["$templateCache", function(a) {
	a.put("template/progressbar/progressbar.html", '<div class="progress"><div class="progress-bar" ng-class="type && \'progress-bar-\' + type" ng-transclude></div></div>')
}]), angular.module("template/rating/rating.html", []).run(["$templateCache", function(a) {
	a.put("template/rating/rating.html", '<span ng-mouseleave="reset()">\n    <i ng-repeat="r in range" ng-mouseenter="enter($index + 1)" ng-click="rate($index + 1)" class="glyphicon" ng-class="$index < val && (r.stateOn || \'glyphicon-star\') || (r.stateOff || \'glyphicon-star-empty\')"></i>\n</span>')
}]), angular.module("template/tabs/tab.html", []).run(["$templateCache", function(a) {
	a.put("template/tabs/tab.html", '<li ng-class="{active: active, disabled: disabled}">\n  <a ng-click="select()" tab-heading-transclude>{{heading}}</a>\n</li>\n')
}]), angular.module("template/tabs/tabset-titles.html", []).run(["$templateCache", function(a) {
	a.put("template/tabs/tabset-titles.html", "<ul class=\"nav {{type && 'nav-' + type}}\" ng-class=\"{'nav-stacked': vertical}\">\n</ul>\n")
}]), angular.module("template/tabs/tabset.html", []).run(["$templateCache", function(a) {
	a.put("template/tabs/tabset.html", '\n<div class="tabbable">\n  <ul class="nav {{type && \'nav-\' + type}}" ng-class="{\'nav-stacked\': vertical, \'nav-justified\': justified}" ng-transclude></ul>\n  <div class="tab-content">\n    <div class="tab-pane" \n         ng-repeat="tab in tabs" \n         ng-class="{active: tab.active}"\n         tab-content-transclude="tab">\n    </div>\n  </div>\n</div>\n')
}]), angular.module("template/timepicker/timepicker.html", []).run(["$templateCache", function(a) {
	a.put("template/timepicker/timepicker.html", '<table>\n	<tbody>\n		<tr class="text-center">\n			<td><a ng-click="incrementHours()" class="btn btn-link"><span class="glyphicon glyphicon-chevron-up"></span></a></td>\n			<td>&nbsp;</td>\n			<td><a ng-click="incrementMinutes()" class="btn btn-link"><span class="glyphicon glyphicon-chevron-up"></span></a></td>\n			<td ng-show="showMeridian"></td>\n		</tr>\n		<tr>\n			<td style="width:50px;" class="form-group" ng-class="{\'has-error\': invalidHours}">\n				<input type="text" ng-model="hours" ng-change="updateHours()" class="form-control text-center" ng-mousewheel="incrementHours()" ng-readonly="readonlyInput" maxlength="2">\n			</td>\n			<td>:</td>\n			<td style="width:50px;" class="form-group" ng-class="{\'has-error\': invalidMinutes}">\n				<input type="text" ng-model="minutes" ng-change="updateMinutes()" class="form-control text-center" ng-readonly="readonlyInput" maxlength="2">\n			</td>\n			<td ng-show="showMeridian"><button type="button" class="btn btn-default text-center" ng-click="toggleMeridian()">{{meridian}}</button></td>\n		</tr>\n		<tr class="text-center">\n			<td><a ng-click="decrementHours()" class="btn btn-link"><span class="glyphicon glyphicon-chevron-down"></span></a></td>\n			<td>&nbsp;</td>\n			<td><a ng-click="decrementMinutes()" class="btn btn-link"><span class="glyphicon glyphicon-chevron-down"></span></a></td>\n			<td ng-show="showMeridian"></td>\n		</tr>\n	</tbody>\n</table>\n')
}]), angular.module("template/typeahead/typeahead-match.html", []).run(["$templateCache", function(a) {
	a.put("template/typeahead/typeahead-match.html", '<a tabindex="-1" bind-html-unsafe="match.label | typeaheadHighlight:query"></a>')
}]), angular.module("template/typeahead/typeahead-popup.html", []).run(["$templateCache", function(a) {
	a.put("template/typeahead/typeahead-popup.html", "<ul class=\"dropdown-menu\" ng-style=\"{display: isOpen()&&'block' || 'none', top: position.top+'px', left: position.left+'px'}\">\n" + '    <li ng-repeat="match in matches" ng-class="{active: isActive($index) }" ng-mouseenter="selectActive($index)" ng-click="selectMatch($index)">\n        <div typeahead-match index="$index" match="match" query="query" template-url="templateUrl"></div>\n    </li>\n</ul>')
}]);
this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a, b, c) {
				this.initialize(a, b, c)
			},
			b = a.prototype;
		b.type = null, b.target = null, b.currentTarget = null, b.eventPhase = 0, b.bubbles = !1, b.cancelable = !1, b.timeStamp = 0, b.defaultPrevented = !1, b.propagationStopped = !1, b.immediatePropagationStopped = !1, b.removed = !1, b.initialize = function(a, b, c) {
			this.type = a, this.bubbles = b, this.cancelable = c, this.timeStamp = (new Date).getTime()
		}, b.preventDefault = function() {
			this.defaultPrevented = !0
		}, b.stopPropagation = function() {
			this.propagationStopped = !0
		}, b.stopImmediatePropagation = function() {
			this.immediatePropagationStopped = this.propagationStopped = !0
		}, b.remove = function() {
			this.removed = !0
		}, b.clone = function() {
			return new a(this.type, this.bubbles, this.cancelable)
		}, b.toString = function() {
			return "[Event (type=" + this.type + ")]"
		}, createjs.Event = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function() {},
			b = a.prototype;
		a.initialize = function(a) {
			a.addEventListener = b.addEventListener, a.on = b.on, a.removeEventListener = a.off = b.removeEventListener, a.removeAllEventListeners = b.removeAllEventListeners, a.hasEventListener = b.hasEventListener, a.dispatchEvent = b.dispatchEvent, a._dispatchEvent = b._dispatchEvent, a.willTrigger = b.willTrigger
		}, b._listeners = null, b._captureListeners = null, b.initialize = function() {}, b.addEventListener = function(a, b, c) {
			var d;
			d = c ? this._captureListeners = this._captureListeners || {} : this._listeners = this._listeners || {};
			var e = d[a];
			return e && this.removeEventListener(a, b, c), e = d[a], e ? e.push(b) : d[a] = [b], b
		}, b.on = function(a, b, c, d, e, f) {
			return b.handleEvent && (c = c || b, b = b.handleEvent), c = c || this, this.addEventListener(a, function(a) {
				b.call(c, a, e), d && a.remove()
			}, f)
		}, b.removeEventListener = function(a, b, c) {
			var d = c ? this._captureListeners : this._listeners;
			if (d) {
				var e = d[a];
				if (e)
					for (var f = 0, g = e.length; g > f; f++)
						if (e[f] == b) {
							1 == g ? delete d[a] : e.splice(f, 1);
							break
						}
			}
		}, b.off = b.removeEventListener, b.removeAllEventListeners = function(a) {
			a ? (this._listeners && delete this._listeners[a], this._captureListeners && delete this._captureListeners[a]) : this._listeners = this._captureListeners = null
		}, b.dispatchEvent = function(a, b) {
			if ("string" == typeof a) {
				var c = this._listeners;
				if (!c || !c[a]) return !1;
				a = new createjs.Event(a)
			}
			if (a.target = b || this, a.bubbles && this.parent) {
				for (var d = this, e = [d]; d.parent;) e.push(d = d.parent);
				var f, g = e.length;
				for (f = g - 1; f >= 0 && !a.propagationStopped; f--) e[f]._dispatchEvent(a, 1 + (0 == f));
				for (f = 1; g > f && !a.propagationStopped; f++) e[f]._dispatchEvent(a, 3)
			} else this._dispatchEvent(a, 2);
			return a.defaultPrevented
		}, b.hasEventListener = function(a) {
			var b = this._listeners,
				c = this._captureListeners;
			return !!(b && b[a] || c && c[a])
		}, b.willTrigger = function(a) {
			for (var b = this; b;) {
				if (b.hasEventListener(a)) return !0;
				b = b.parent
			}
			return !1
		}, b.toString = function() {
			return "[EventDispatcher]"
		}, b._dispatchEvent = function(a, b) {
			var c, d = 1 == b ? this._captureListeners : this._listeners;
			if (a && d) {
				var e = d[a.type];
				if (!e || !(c = e.length)) return;
				a.currentTarget = this, a.eventPhase = b, a.removed = !1, e = e.slice();
				for (var f = 0; c > f && !a.immediatePropagationStopped; f++) {
					var g = e[f];
					g.handleEvent ? g.handleEvent(a) : g(a), a.removed && (this.off(a.type, g, 1 == b), a.removed = !1)
				}
			}
		}, createjs.EventDispatcher = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		createjs.indexOf = function(a, b) {
			for (var c = 0, d = a.length; d > c; c++)
				if (b === a[c]) return c;
			return -1
		}
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function() {
			throw "UID cannot be instantiated"
		};
		a._nextID = 0, a.get = function() {
			return a._nextID++
		}, createjs.UID = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function() {
			throw "Ticker cannot be instantiated."
		};
		a.RAF_SYNCHED = "synched", a.RAF = "raf", a.TIMEOUT = "timeout", a.useRAF = !1, a.timingMode = null, a.maxDelta = 0, a.removeEventListener = null, a.removeAllEventListeners = null, a.dispatchEvent = null, a.hasEventListener = null, a._listeners = null, createjs.EventDispatcher.initialize(a), a._addEventListener = a.addEventListener, a.addEventListener = function() {
			return !a._inited && a.init(), a._addEventListener.apply(a, arguments)
		}, a._paused = !1, a._inited = !1, a._startTime = 0, a._pausedTime = 0, a._ticks = 0, a._pausedTicks = 0, a._interval = 50, a._lastTime = 0, a._times = null, a._tickTimes = null, a._timerId = null, a._raf = !0, a.init = function() {
			a._inited || (a._inited = !0, a._times = [], a._tickTimes = [], a._startTime = a._getTime(), a._times.push(a._lastTime = 0), a.setInterval(a._interval))
		}, a.reset = function() {
			if (a._raf) {
				var b = window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || window.msCancelAnimationFrame;
				b && b(a._timerId)
			} else clearTimeout(a._timerId);
			a.removeAllEventListeners("tick")
		}, a.setInterval = function(b) {
			a._interval = b, a._inited && a._setupTick()
		}, a.getInterval = function() {
			return a._interval
		}, a.setFPS = function(b) {
			a.setInterval(1e3 / b)
		}, a.getFPS = function() {
			return 1e3 / a._interval
		}, a.getMeasuredTickTime = function(b) {
			var c = 0,
				d = a._tickTimes;
			if (d.length < 1) return -1;
			b = Math.min(d.length, b || 0 | a.getFPS());
			for (var e = 0; b > e; e++) c += d[e];
			return c / b
		}, a.getMeasuredFPS = function(b) {
			var c = a._times;
			return c.length < 2 ? -1 : (b = Math.min(c.length - 1, b || 0 | a.getFPS()), 1e3 / ((c[0] - c[b]) / b))
		}, a.setPaused = function(b) {
			a._paused = b
		}, a.getPaused = function() {
			return a._paused
		}, a.getTime = function(b) {
			return a._getTime() - a._startTime - (b ? a._pausedTime : 0)
		}, a.getEventTime = function(b) {
			return (a._lastTime || a._startTime) - (b ? a._pausedTime : 0)
		}, a.getTicks = function(b) {
			return a._ticks - (b ? a._pausedTicks : 0)
		}, a._handleSynch = function() {
			var b = a._getTime() - a._startTime;
			a._timerId = null, a._setupTick(), b - a._lastTime >= .97 * (a._interval - 1) && a._tick()
		}, a._handleRAF = function() {
			a._timerId = null, a._setupTick(), a._tick()
		}, a._handleTimeout = function() {
			a._timerId = null, a._setupTick(), a._tick()
		}, a._setupTick = function() {
			if (null == a._timerId) {
				var b = a.timingMode || a.useRAF && a.RAF_SYNCHED;
				if (b == a.RAF_SYNCHED || b == a.RAF) {
					var c = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame;
					if (c) return a._timerId = c(b == a.RAF ? a._handleRAF : a._handleSynch), a._raf = !0, void 0
				}
				a._raf = !1, a._timerId = setTimeout(a._handleTimeout, a._interval)
			}
		}, a._tick = function() {
			var b = a._getTime() - a._startTime,
				c = b - a._lastTime,
				d = a._paused;
			if (a._ticks++, d && (a._pausedTicks++, a._pausedTime += c), a._lastTime = b, a.hasEventListener("tick")) {
				var e = new createjs.Event("tick"),
					f = a.maxDelta;
				e.delta = f && c > f ? f : c, e.paused = d, e.time = b, e.runTime = b - a._pausedTime, a.dispatchEvent(e)
			}
			for (a._tickTimes.unshift(a._getTime() - b); a._tickTimes.length > 100;) a._tickTimes.pop();
			for (a._times.unshift(b); a._times.length > 100;) a._times.pop()
		};
		var b = window.performance && (performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow);
		a._getTime = function() {
			return b && b.call(performance) || (new Date).getTime()
		}, createjs.Ticker = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a, b, c, d, e, f, g, h, i, j) {
				this.initialize(a, b, c, d, e, f, g, h, i, j)
			},
			b = a.prototype = new createjs.Event;
		b.stageX = 0, b.stageY = 0, b.rawX = 0, b.rawY = 0, b.nativeEvent = null, b.pointerID = 0, b.primary = !1, b.addEventListener = null, b.removeEventListener = null, b.removeAllEventListeners = null, b.dispatchEvent = null, b.hasEventListener = null, b._listeners = null, createjs.EventDispatcher.initialize(b), b._get_localX = function() {
			return this.currentTarget.globalToLocal(this.rawX, this.rawY).x
		}, b._get_localY = function() {
			return this.currentTarget.globalToLocal(this.rawX, this.rawY).y
		};
		try {
			Object.defineProperties(b, {
				localX: {
					get: b._get_localX
				},
				localY: {
					get: b._get_localY
				}
			})
		} catch (c) {}
		b.Event_initialize = b.initialize, b.initialize = function(a, b, c, d, e, f, g, h, i, j) {
			this.Event_initialize(a, b, c), this.stageX = d, this.stageY = e, this.nativeEvent = f, this.pointerID = g, this.primary = h, this.rawX = null == i ? d : i, this.rawY = null == j ? e : j
		}, b.clone = function() {
			return new a(this.type, this.bubbles, this.cancelable, this.stageX, this.stageY, this.target, this.nativeEvent, this.pointerID, this.primary, this.rawX, this.rawY)
		}, b.toString = function() {
			return "[MouseEvent (type=" + this.type + " stageX=" + this.stageX + " stageY=" + this.stageY + ")]"
		}, createjs.MouseEvent = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a, b, c, d, e, f) {
				this.initialize(a, b, c, d, e, f)
			},
			b = a.prototype;
		a.identity = null, a.DEG_TO_RAD = Math.PI / 180, b.a = 1, b.b = 0, b.c = 0, b.d = 1, b.tx = 0, b.ty = 0, b.alpha = 1, b.shadow = null, b.compositeOperation = null, b.initialize = function(a, b, c, d, e, f) {
			return this.a = null == a ? 1 : a, this.b = b || 0, this.c = c || 0, this.d = null == d ? 1 : d, this.tx = e || 0, this.ty = f || 0, this
		}, b.prepend = function(a, b, c, d, e, f) {
			var g = this.tx;
			if (1 != a || 0 != b || 0 != c || 1 != d) {
				var h = this.a,
					i = this.c;
				this.a = h * a + this.b * c, this.b = h * b + this.b * d, this.c = i * a + this.d * c, this.d = i * b + this.d * d
			}
			return this.tx = g * a + this.ty * c + e, this.ty = g * b + this.ty * d + f, this
		}, b.append = function(a, b, c, d, e, f) {
			var g = this.a,
				h = this.b,
				i = this.c,
				j = this.d;
			return this.a = a * g + b * i, this.b = a * h + b * j, this.c = c * g + d * i, this.d = c * h + d * j, this.tx = e * g + f * i + this.tx, this.ty = e * h + f * j + this.ty, this
		}, b.prependMatrix = function(a) {
			return this.prepend(a.a, a.b, a.c, a.d, a.tx, a.ty), this.prependProperties(a.alpha, a.shadow, a.compositeOperation), this
		}, b.appendMatrix = function(a) {
			return this.append(a.a, a.b, a.c, a.d, a.tx, a.ty), this.appendProperties(a.alpha, a.shadow, a.compositeOperation), this
		}, b.prependTransform = function(b, c, d, e, f, g, h, i, j) {
			if (f % 360) var k = f * a.DEG_TO_RAD,
				l = Math.cos(k),
				m = Math.sin(k);
			else l = 1, m = 0;
			return (i || j) && (this.tx -= i, this.ty -= j), g || h ? (g *= a.DEG_TO_RAD, h *= a.DEG_TO_RAD, this.prepend(l * d, m * d, -m * e, l * e, 0, 0), this.prepend(Math.cos(h), Math.sin(h), -Math.sin(g), Math.cos(g), b, c)) : this.prepend(l * d, m * d, -m * e, l * e, b, c), this
		}, b.appendTransform = function(b, c, d, e, f, g, h, i, j) {
			if (f % 360) var k = f * a.DEG_TO_RAD,
				l = Math.cos(k),
				m = Math.sin(k);
			else l = 1, m = 0;
			return g || h ? (g *= a.DEG_TO_RAD, h *= a.DEG_TO_RAD, this.append(Math.cos(h), Math.sin(h), -Math.sin(g), Math.cos(g), b, c), this.append(l * d, m * d, -m * e, l * e, 0, 0)) : this.append(l * d, m * d, -m * e, l * e, b, c), (i || j) && (this.tx -= i * this.a + j * this.c, this.ty -= i * this.b + j * this.d), this
		}, b.rotate = function(a) {
			var b = Math.cos(a),
				c = Math.sin(a),
				d = this.a,
				e = this.c,
				f = this.tx;
			return this.a = d * b - this.b * c, this.b = d * c + this.b * b, this.c = e * b - this.d * c, this.d = e * c + this.d * b, this.tx = f * b - this.ty * c, this.ty = f * c + this.ty * b, this
		}, b.skew = function(b, c) {
			return b *= a.DEG_TO_RAD, c *= a.DEG_TO_RAD, this.append(Math.cos(c), Math.sin(c), -Math.sin(b), Math.cos(b), 0, 0), this
		}, b.scale = function(a, b) {
			return this.a *= a, this.d *= b, this.c *= a, this.b *= b, this.tx *= a, this.ty *= b, this
		}, b.translate = function(a, b) {
			return this.tx += a, this.ty += b, this
		}, b.identity = function() {
			return this.alpha = this.a = this.d = 1, this.b = this.c = this.tx = this.ty = 0, this.shadow = this.compositeOperation = null, this
		}, b.invert = function() {
			var a = this.a,
				b = this.b,
				c = this.c,
				d = this.d,
				e = this.tx,
				f = a * d - b * c;
			return this.a = d / f, this.b = -b / f, this.c = -c / f, this.d = a / f, this.tx = (c * this.ty - d * e) / f, this.ty = -(a * this.ty - b * e) / f, this
		}, b.isIdentity = function() {
			return 0 == this.tx && 0 == this.ty && 1 == this.a && 0 == this.b && 0 == this.c && 1 == this.d
		}, b.transformPoint = function(a, b, c) {
			return c = c || {}, c.x = a * this.a + b * this.c + this.tx, c.y = a * this.b + b * this.d + this.ty, c
		}, b.decompose = function(b) {
			null == b && (b = {}), b.x = this.tx, b.y = this.ty, b.scaleX = Math.sqrt(this.a * this.a + this.b * this.b), b.scaleY = Math.sqrt(this.c * this.c + this.d * this.d);
			var c = Math.atan2(-this.c, this.d),
				d = Math.atan2(this.b, this.a);
			return c == d ? (b.rotation = d / a.DEG_TO_RAD, this.a < 0 && this.d >= 0 && (b.rotation += b.rotation <= 0 ? 180 : -180), b.skewX = b.skewY = 0) : (b.skewX = c / a.DEG_TO_RAD, b.skewY = d / a.DEG_TO_RAD), b
		}, b.reinitialize = function(a, b, c, d, e, f, g, h, i) {
			return this.initialize(a, b, c, d, e, f), this.alpha = null == g ? 1 : g, this.shadow = h, this.compositeOperation = i, this
		}, b.copy = function(a) {
			return this.reinitialize(a.a, a.b, a.c, a.d, a.tx, a.ty, a.alpha, a.shadow, a.compositeOperation)
		}, b.appendProperties = function(a, b, c) {
			return this.alpha *= a, this.shadow = b || this.shadow, this.compositeOperation = c || this.compositeOperation, this
		}, b.prependProperties = function(a, b, c) {
			return this.alpha *= a, this.shadow = this.shadow || b, this.compositeOperation = this.compositeOperation || c, this
		}, b.clone = function() {
			return (new a).copy(this)
		}, b.toString = function() {
			return "[Matrix2D (a=" + this.a + " b=" + this.b + " c=" + this.c + " d=" + this.d + " tx=" + this.tx + " ty=" + this.ty + ")]"
		}, a.identity = new a, createjs.Matrix2D = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a, b) {
				this.initialize(a, b)
			},
			b = a.prototype;
		b.x = 0, b.y = 0, b.initialize = function(a, b) {
			return this.x = null == a ? 0 : a, this.y = null == b ? 0 : b, this
		}, b.copy = function(a) {
			return this.initialize(a.x, a.y)
		}, b.clone = function() {
			return new a(this.x, this.y)
		}, b.toString = function() {
			return "[Point (x=" + this.x + " y=" + this.y + ")]"
		}, createjs.Point = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a, b, c, d) {
				this.initialize(a, b, c, d)
			},
			b = a.prototype;
		b.x = 0, b.y = 0, b.width = 0, b.height = 0, b.initialize = function(a, b, c, d) {
			return this.x = a || 0, this.y = b || 0, this.width = c || 0, this.height = d || 0, this
		}, b.copy = function(a) {
			return this.initialize(a.x, a.y, a.width, a.height)
		}, b.clone = function() {
			return new a(this.x, this.y, this.width, this.height)
		}, b.toString = function() {
			return "[Rectangle (x=" + this.x + " y=" + this.y + " width=" + this.width + " height=" + this.height + ")]"
		}, createjs.Rectangle = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a, b, c, d, e, f, g) {
				this.initialize(a, b, c, d, e, f, g)
			},
			b = a.prototype;
		b.target = null, b.overLabel = null, b.outLabel = null, b.downLabel = null, b.play = !1, b._isPressed = !1, b._isOver = !1, b.initialize = function(a, b, c, d, e, f, g) {
			a.addEventListener && (this.target = a, a.cursor = "pointer", this.overLabel = null == c ? "over" : c, this.outLabel = null == b ? "out" : b, this.downLabel = null == d ? "down" : d, this.play = e, this.setEnabled(!0), this.handleEvent({}), f && (g && (f.actionsEnabled = !1, f.gotoAndStop && f.gotoAndStop(g)), a.hitArea = f))
		}, b.setEnabled = function(a) {
			var b = this.target;
			a ? (b.addEventListener("rollover", this), b.addEventListener("rollout", this), b.addEventListener("mousedown", this), b.addEventListener("pressup", this)) : (b.removeEventListener("rollover", this), b.removeEventListener("rollout", this), b.removeEventListener("mousedown", this), b.removeEventListener("pressup", this))
		}, b.toString = function() {
			return "[ButtonHelper]"
		}, b.handleEvent = function(a) {
			var b, c = this.target,
				d = a.type;
			"mousedown" == d ? (this._isPressed = !0, b = this.downLabel) : "pressup" == d ? (this._isPressed = !1, b = this._isOver ? this.overLabel : this.outLabel) : "rollover" == d ? (this._isOver = !0, b = this._isPressed ? this.downLabel : this.overLabel) : (this._isOver = !1, b = this._isPressed ? this.overLabel : this.outLabel), this.play ? c.gotoAndPlay && c.gotoAndPlay(b) : c.gotoAndStop && c.gotoAndStop(b)
		}, createjs.ButtonHelper = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a, b, c, d) {
				this.initialize(a, b, c, d)
			},
			b = a.prototype;
		a.identity = null, b.color = null, b.offsetX = 0, b.offsetY = 0, b.blur = 0, b.initialize = function(a, b, c, d) {
			this.color = a, this.offsetX = b, this.offsetY = c, this.blur = d
		}, b.toString = function() {
			return "[Shadow]"
		}, b.clone = function() {
			return new a(this.color, this.offsetX, this.offsetY, this.blur)
		}, a.identity = new a("transparent", 0, 0, 0), createjs.Shadow = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a) {
				this.initialize(a)
			},
			b = a.prototype = new createjs.EventDispatcher;
		b.complete = !0, b.framerate = 0, b._animations = null, b._frames = null, b._images = null, b._data = null, b._loadCount = 0, b._frameHeight = 0, b._frameWidth = 0, b._numFrames = 0, b._regX = 0, b._regY = 0, b.initialize = function(a) {
			var b, c, d, e;
			if (null != a) {
				if (this.framerate = a.framerate || 0, a.images && (c = a.images.length) > 0)
					for (e = this._images = [], b = 0; c > b; b++) {
						var f = a.images[b];
						if ("string" == typeof f) {
							var g = f;
							f = document.createElement("img"), f.src = g
						}
						e.push(f), f.getContext || f.complete || (this._loadCount++, this.complete = !1, function(a) {
							f.onload = function() {
								a._handleImageLoad()
							}
						}(this))
					}
				if (null == a.frames);
				else if (a.frames instanceof Array)
					for (this._frames = [], e = a.frames, b = 0, c = e.length; c > b; b++) {
						var h = e[b];
						this._frames.push({
							image: this._images[h[4] ? h[4] : 0],
							rect: new createjs.Rectangle(h[0], h[1], h[2], h[3]),
							regX: h[5] || 0,
							regY: h[6] || 0
						})
					} else d = a.frames, this._frameWidth = d.width, this._frameHeight = d.height, this._regX = d.regX || 0, this._regY = d.regY || 0, this._numFrames = d.count, 0 == this._loadCount && this._calculateFrames();
				if (this._animations = [], null != (d = a.animations)) {
					this._data = {};
					var i;
					for (i in d) {
						var j = {
								name: i
							},
							k = d[i];
						if ("number" == typeof k) e = j.frames = [k];
						else if (k instanceof Array)
							if (1 == k.length) j.frames = [k[0]];
							else
								for (j.speed = k[3], j.next = k[2], e = j.frames = [], b = k[0]; b <= k[1]; b++) e.push(b);
						else {
							j.speed = k.speed, j.next = k.next;
							var l = k.frames;
							e = j.frames = "number" == typeof l ? [l] : l.slice(0)
						}(j.next === !0 || void 0 === j.next) && (j.next = i), (j.next === !1 || e.length < 2 && j.next == i) && (j.next = null), j.speed || (j.speed = 1), this._animations.push(i), this._data[i] = j
					}
				}
			}
		}, b.getNumFrames = function(a) {
			if (null == a) return this._frames ? this._frames.length : this._numFrames;
			var b = this._data[a];
			return null == b ? 0 : b.frames.length
		}, b.getAnimations = function() {
			return this._animations.slice(0)
		}, b.getAnimation = function(a) {
			return this._data[a]
		}, b.getFrame = function(a) {
			var b;
			return this._frames && (b = this._frames[a]) ? b : null
		}, b.getFrameBounds = function(a, b) {
			var c = this.getFrame(a);
			return c ? (b || new createjs.Rectangle).initialize(-c.regX, -c.regY, c.rect.width, c.rect.height) : null
		}, b.toString = function() {
			return "[SpriteSheet]"
		}, b.clone = function() {
			var b = new a;
			return b.complete = this.complete, b._animations = this._animations, b._frames = this._frames, b._images = this._images, b._data = this._data, b._frameHeight = this._frameHeight, b._frameWidth = this._frameWidth, b._numFrames = this._numFrames, b._loadCount = this._loadCount, b
		}, b._handleImageLoad = function() {
			0 == --this._loadCount && (this._calculateFrames(), this.complete = !0, this.dispatchEvent("complete"))
		}, b._calculateFrames = function() {
			if (!this._frames && 0 != this._frameWidth) {
				this._frames = [];
				for (var a = 0, b = this._frameWidth, c = this._frameHeight, d = 0, e = this._images; d < e.length; d++) {
					for (var f = e[d], g = 0 | f.width / b, h = 0 | f.height / c, i = this._numFrames > 0 ? Math.min(this._numFrames - a, g * h) : g * h, j = 0; i > j; j++) this._frames.push({
						image: f,
						rect: new createjs.Rectangle(j % g * b, (0 | j / g) * c, b, c),
						regX: this._regX,
						regY: this._regY
					});
					a += i
				}
				this._numFrames = a
			}
		}, createjs.SpriteSheet = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";

		function a(a, b, c) {
			this.f = a, this.params = b, this.path = null == c ? !0 : c
		}
		a.prototype.exec = function(a) {
			this.f.apply(a, this.params)
		};
		var b = function() {
				this.initialize()
			},
			c = b.prototype;
		b.getRGB = function(a, b, c, d) {
			return null != a && null == c && (d = b, c = 255 & a, b = 255 & a >> 8, a = 255 & a >> 16), null == d ? "rgb(" + a + "," + b + "," + c + ")" : "rgba(" + a + "," + b + "," + c + "," + d + ")"
		}, b.getHSL = function(a, b, c, d) {
			return null == d ? "hsl(" + a % 360 + "," + b + "%," + c + "%)" : "hsla(" + a % 360 + "," + b + "%," + c + "%," + d + ")"
		}, b.Command = a, b.BASE_64 = {
			A: 0,
			B: 1,
			C: 2,
			D: 3,
			E: 4,
			F: 5,
			G: 6,
			H: 7,
			I: 8,
			J: 9,
			K: 10,
			L: 11,
			M: 12,
			N: 13,
			O: 14,
			P: 15,
			Q: 16,
			R: 17,
			S: 18,
			T: 19,
			U: 20,
			V: 21,
			W: 22,
			X: 23,
			Y: 24,
			Z: 25,
			a: 26,
			b: 27,
			c: 28,
			d: 29,
			e: 30,
			f: 31,
			g: 32,
			h: 33,
			i: 34,
			j: 35,
			k: 36,
			l: 37,
			m: 38,
			n: 39,
			o: 40,
			p: 41,
			q: 42,
			r: 43,
			s: 44,
			t: 45,
			u: 46,
			v: 47,
			w: 48,
			x: 49,
			y: 50,
			z: 51,
			0: 52,
			1: 53,
			2: 54,
			3: 55,
			4: 56,
			5: 57,
			6: 58,
			7: 59,
			8: 60,
			9: 61,
			"+": 62,
			"/": 63
		}, b.STROKE_CAPS_MAP = ["butt", "round", "square"], b.STROKE_JOINTS_MAP = ["miter", "round", "bevel"];
		var d = createjs.createCanvas ? createjs.createCanvas() : document.createElement("canvas");
		if (d.getContext) {
			var e = b._ctx = d.getContext("2d");
			b.beginCmd = new a(e.beginPath, [], !1), b.fillCmd = new a(e.fill, [], !1), b.strokeCmd = new a(e.stroke, [], !1), d.width = d.height = 1
		}
		c._strokeInstructions = null, c._strokeStyleInstructions = null, c._strokeIgnoreScale = !1, c._fillInstructions = null, c._fillMatrix = null, c._instructions = null, c._oldInstructions = null, c._activeInstructions = null, c._active = !1, c._dirty = !1, c.initialize = function() {
			this.clear(), this._ctx = b._ctx
		}, c.isEmpty = function() {
			return !(this._instructions.length || this._oldInstructions.length || this._activeInstructions.length)
		}, c.draw = function(a) {
			this._dirty && this._updateInstructions();
			for (var b = this._instructions, c = 0, d = b.length; d > c; c++) b[c].exec(a)
		}, c.drawAsPath = function(a) {
			this._dirty && this._updateInstructions();
			for (var b, c = this._instructions, d = 0, e = c.length; e > d; d++)((b = c[d]).path || 0 == d) && b.exec(a)
		}, c.moveTo = function(b, c) {
			return this._activeInstructions.push(new a(this._ctx.moveTo, [b, c])), this
		}, c.lineTo = function(b, c) {
			return this._dirty = this._active = !0, this._activeInstructions.push(new a(this._ctx.lineTo, [b, c])), this
		}, c.arcTo = function(b, c, d, e, f) {
			return this._dirty = this._active = !0, this._activeInstructions.push(new a(this._ctx.arcTo, [b, c, d, e, f])), this
		}, c.arc = function(b, c, d, e, f, g) {
			return this._dirty = this._active = !0, null == g && (g = !1), this._activeInstructions.push(new a(this._ctx.arc, [b, c, d, e, f, g])), this
		}, c.quadraticCurveTo = function(b, c, d, e) {
			return this._dirty = this._active = !0, this._activeInstructions.push(new a(this._ctx.quadraticCurveTo, [b, c, d, e])), this
		}, c.bezierCurveTo = function(b, c, d, e, f, g) {
			return this._dirty = this._active = !0, this._activeInstructions.push(new a(this._ctx.bezierCurveTo, [b, c, d, e, f, g])), this
		}, c.rect = function(b, c, d, e) {
			return this._dirty = this._active = !0, this._activeInstructions.push(new a(this._ctx.rect, [b, c, d, e])), this
		}, c.closePath = function() {
			return this._active && (this._dirty = !0, this._activeInstructions.push(new a(this._ctx.closePath, []))), this
		}, c.clear = function() {
			return this._instructions = [], this._oldInstructions = [], this._activeInstructions = [], this._strokeStyleInstructions = this._strokeInstructions = this._fillInstructions = this._fillMatrix = null, this._active = this._dirty = this._strokeIgnoreScale = !1, this
		}, c.beginFill = function(b) {
			return this._active && this._newPath(), this._fillInstructions = b ? [new a(this._setProp, ["fillStyle", b], !1)] : null, this._fillMatrix = null, this
		}, c.beginLinearGradientFill = function(b, c, d, e, f, g) {
			this._active && this._newPath();
			for (var h = this._ctx.createLinearGradient(d, e, f, g), i = 0, j = b.length; j > i; i++) h.addColorStop(c[i], b[i]);
			return this._fillInstructions = [new a(this._setProp, ["fillStyle", h], !1)], this._fillMatrix = null, this
		}, c.beginRadialGradientFill = function(b, c, d, e, f, g, h, i) {
			this._active && this._newPath();
			for (var j = this._ctx.createRadialGradient(d, e, f, g, h, i), k = 0, l = b.length; l > k; k++) j.addColorStop(c[k], b[k]);
			return this._fillInstructions = [new a(this._setProp, ["fillStyle", j], !1)], this._fillMatrix = null, this
		}, c.beginBitmapFill = function(b, c, d) {
			this._active && this._newPath(), c = c || "";
			var e = this._ctx.createPattern(b, c);
			return this._fillInstructions = [new a(this._setProp, ["fillStyle", e], !1)], this._fillMatrix = d ? [d.a, d.b, d.c, d.d, d.tx, d.ty] : null, this
		}, c.endFill = function() {
			return this.beginFill()
		}, c.setStrokeStyle = function(c, d, e, f, g) {
			return this._active && this._newPath(), this._strokeStyleInstructions = [new a(this._setProp, ["lineWidth", null == c ? "1" : c], !1), new a(this._setProp, ["lineCap", null == d ? "butt" : isNaN(d) ? d : b.STROKE_CAPS_MAP[d]], !1), new a(this._setProp, ["lineJoin", null == e ? "miter" : isNaN(e) ? e : b.STROKE_JOINTS_MAP[e]], !1), new a(this._setProp, ["miterLimit", null == f ? "10" : f], !1)], this._strokeIgnoreScale = g, this
		}, c.beginStroke = function(b) {
			return this._active && this._newPath(), this._strokeInstructions = b ? [new a(this._setProp, ["strokeStyle", b], !1)] : null, this
		}, c.beginLinearGradientStroke = function(b, c, d, e, f, g) {
			this._active && this._newPath();
			for (var h = this._ctx.createLinearGradient(d, e, f, g), i = 0, j = b.length; j > i; i++) h.addColorStop(c[i], b[i]);
			return this._strokeInstructions = [new a(this._setProp, ["strokeStyle", h], !1)], this
		}, c.beginRadialGradientStroke = function(b, c, d, e, f, g, h, i) {
			this._active && this._newPath();
			for (var j = this._ctx.createRadialGradient(d, e, f, g, h, i), k = 0, l = b.length; l > k; k++) j.addColorStop(c[k], b[k]);
			return this._strokeInstructions = [new a(this._setProp, ["strokeStyle", j], !1)], this
		}, c.beginBitmapStroke = function(b, c) {
			this._active && this._newPath(), c = c || "";
			var d = this._ctx.createPattern(b, c);
			return this._strokeInstructions = [new a(this._setProp, ["strokeStyle", d], !1)], this
		}, c.endStroke = function() {
			return this.beginStroke(), this
		}, c.curveTo = c.quadraticCurveTo, c.drawRect = c.rect, c.drawRoundRect = function(a, b, c, d, e) {
			return this.drawRoundRectComplex(a, b, c, d, e, e, e, e), this
		}, c.drawRoundRectComplex = function(b, c, d, e, f, g, h, i) {
			var j = (e > d ? d : e) / 2,
				k = 0,
				l = 0,
				m = 0,
				n = 0;
			0 > f && (f *= k = -1), f > j && (f = j), 0 > g && (g *= l = -1), g > j && (g = j), 0 > h && (h *= m = -1), h > j && (h = j), 0 > i && (i *= n = -1), i > j && (i = j), this._dirty = this._active = !0;
			var o = this._ctx.arcTo,
				p = this._ctx.lineTo;
			return this._activeInstructions.push(new a(this._ctx.moveTo, [b + d - g, c]), new a(o, [b + d + g * l, c - g * l, b + d, c + g, g]), new a(p, [b + d, c + e - h]), new a(o, [b + d + h * m, c + e + h * m, b + d - h, c + e, h]), new a(p, [b + i, c + e]), new a(o, [b - i * n, c + e + i * n, b, c + e - i, i]), new a(p, [b, c + f]), new a(o, [b - f * k, c - f * k, b + f, c, f]), new a(this._ctx.closePath)), this
		}, c.drawCircle = function(a, b, c) {
			return this.arc(a, b, c, 0, 2 * Math.PI), this
		}, c.drawEllipse = function(b, c, d, e) {
			this._dirty = this._active = !0;
			var f = .5522848,
				g = d / 2 * f,
				h = e / 2 * f,
				i = b + d,
				j = c + e,
				k = b + d / 2,
				l = c + e / 2;
			return this._activeInstructions.push(new a(this._ctx.moveTo, [b, l]), new a(this._ctx.bezierCurveTo, [b, l - h, k - g, c, k, c]), new a(this._ctx.bezierCurveTo, [k + g, c, i, l - h, i, l]), new a(this._ctx.bezierCurveTo, [i, l + h, k + g, j, k, j]), new a(this._ctx.bezierCurveTo, [k - g, j, b, l + h, b, l])), this
		}, c.inject = function(b, c) {
			return this._dirty = this._active = !0, this._activeInstructions.push(new a(b, [c])), this
		}, c.drawPolyStar = function(b, c, d, e, f, g) {
			this._dirty = this._active = !0, null == f && (f = 0), f = 1 - f, null == g ? g = 0 : g /= 180 / Math.PI;
			var h = Math.PI / e;
			this._activeInstructions.push(new a(this._ctx.moveTo, [b + Math.cos(g) * d, c + Math.sin(g) * d]));
			for (var i = 0; e > i; i++) g += h, 1 != f && this._activeInstructions.push(new a(this._ctx.lineTo, [b + Math.cos(g) * d * f, c + Math.sin(g) * d * f])), g += h, this._activeInstructions.push(new a(this._ctx.lineTo, [b + Math.cos(g) * d, c + Math.sin(g) * d]));
			return this
		}, c.decodePath = function(a) {
			for (var c = [this.moveTo, this.lineTo, this.quadraticCurveTo, this.bezierCurveTo, this.closePath], d = [2, 2, 4, 6, 0], e = 0, f = a.length, g = [], h = 0, i = 0, j = b.BASE_64; f > e;) {
				var k = a.charAt(e),
					l = j[k],
					m = l >> 3,
					n = c[m];
				if (!n || 3 & l) throw "bad path data (@" + e + "): " + k;
				var o = d[m];
				m || (h = i = 0), g.length = 0, e++;
				for (var p = (1 & l >> 2) + 2, q = 0; o > q; q++) {
					var r = j[a.charAt(e)],
						s = r >> 5 ? -1 : 1;
					r = (31 & r) << 6 | j[a.charAt(e + 1)], 3 == p && (r = r << 6 | j[a.charAt(e + 2)]), r = s * r / 10, q % 2 ? h = r += h : i = r += i, g[q] = r, e += p
				}
				n.apply(this, g)
			}
			return this
		}, c.clone = function() {
			var a = new b;
			return a._instructions = this._instructions.slice(), a._activeInstructions = this._activeInstructions.slice(), a._oldInstructions = this._oldInstructions.slice(), this._fillInstructions && (a._fillInstructions = this._fillInstructions.slice()), this._strokeInstructions && (a._strokeInstructions = this._strokeInstructions.slice()), this._strokeStyleInstructions && (a._strokeStyleInstructions = this._strokeStyleInstructions.slice()), a._active = this._active, a._dirty = this._dirty, a._fillMatrix = this._fillMatrix, a._strokeIgnoreScale = this._strokeIgnoreScale, a
		}, c.toString = function() {
			return "[Graphics]"
		}, c.mt = c.moveTo, c.lt = c.lineTo, c.at = c.arcTo, c.bt = c.bezierCurveTo, c.qt = c.quadraticCurveTo, c.a = c.arc, c.r = c.rect, c.cp = c.closePath, c.c = c.clear, c.f = c.beginFill, c.lf = c.beginLinearGradientFill, c.rf = c.beginRadialGradientFill, c.bf = c.beginBitmapFill, c.ef = c.endFill, c.ss = c.setStrokeStyle, c.s = c.beginStroke, c.ls = c.beginLinearGradientStroke, c.rs = c.beginRadialGradientStroke, c.bs = c.beginBitmapStroke, c.es = c.endStroke, c.dr = c.drawRect, c.rr = c.drawRoundRect, c.rc = c.drawRoundRectComplex, c.dc = c.drawCircle, c.de = c.drawEllipse, c.dp = c.drawPolyStar, c.p = c.decodePath, c._updateInstructions = function() {
			this._instructions = this._oldInstructions.slice(), this._instructions.push(b.beginCmd), this._appendInstructions(this._fillInstructions), this._appendInstructions(this._strokeInstructions), this._appendInstructions(this._strokeInstructions && this._strokeStyleInstructions), this._appendInstructions(this._activeInstructions), this._fillInstructions && this._appendDraw(b.fillCmd, this._fillMatrix), this._strokeInstructions && this._appendDraw(b.strokeCmd, this._strokeIgnoreScale && [1, 0, 0, 1, 0, 0])
		}, c._appendInstructions = function(a) {
			a && this._instructions.push.apply(this._instructions, a)
		}, c._appendDraw = function(b, c) {
			c ? this._instructions.push(new a(this._ctx.save, [], !1), new a(this._ctx.transform, c, !1), b, new a(this._ctx.restore, [], !1)) : this._instructions.push(b)
		}, c._newPath = function() {
			this._dirty && this._updateInstructions(), this._oldInstructions = this._instructions, this._activeInstructions = [], this._active = this._dirty = !1
		}, c._setProp = function(a, b) {
			this[a] = b
		}, createjs.Graphics = b
	}(), this.createjs = this.createjs || {},
	function() {
		var a = function() {
				this.initialize()
			},
			b = a.prototype = new createjs.EventDispatcher;
		a._MOUSE_EVENTS = ["click", "dblclick", "mousedown", "mouseout", "mouseover", "pressmove", "pressup", "rollout", "rollover"], a.suppressCrossDomainErrors = !1;
		var c = createjs.createCanvas ? createjs.createCanvas() : document.createElement("canvas");
		c.getContext && (a._hitTestCanvas = c, a._hitTestContext = c.getContext("2d"), c.width = c.height = 1), a._nextCacheID = 1, b.alpha = 1, b.cacheCanvas = null, b.id = -1, b.mouseEnabled = !0, b.tickEnabled = !0, b.name = null, b.parent = null, b.regX = 0, b.regY = 0, b.rotation = 0, b.scaleX = 1, b.scaleY = 1, b.skewX = 0, b.skewY = 0, b.shadow = null, b.visible = !0, b.x = 0, b.y = 0, b.compositeOperation = null, b.snapToPixel = !1, b.filters = null, b.cacheID = 0, b.mask = null, b.hitArea = null, b.cursor = null, b._cacheOffsetX = 0, b._cacheOffsetY = 0, b._cacheScale = 1, b._cacheDataURLID = 0, b._cacheDataURL = null, b._matrix = null, b._rectangle = null, b._bounds = null, b.initialize = function() {
			this.id = createjs.UID.get(), this._matrix = new createjs.Matrix2D, this._rectangle = new createjs.Rectangle
		}, b.isVisible = function() {
			return !!(this.visible && this.alpha > 0 && 0 != this.scaleX && 0 != this.scaleY)
		}, b.draw = function(a, b) {
			var c = this.cacheCanvas;
			if (b || !c) return !1;
			var d, e = this._cacheScale,
				f = this._cacheOffsetX,
				g = this._cacheOffsetY;
			return (d = this._applyFilterBounds(f, g, 0, 0)) && (f = d.x, g = d.y), a.drawImage(c, f, g, c.width / e, c.height / e), !0
		}, b.updateContext = function(a) {
			var b, c = this.mask,
				d = this;
			c && c.graphics && !c.graphics.isEmpty() && (b = c.getMatrix(c._matrix), a.transform(b.a, b.b, b.c, b.d, b.tx, b.ty), c.graphics.drawAsPath(a), a.clip(), b.invert(), a.transform(b.a, b.b, b.c, b.d, b.tx, b.ty)), b = d._matrix.identity().appendTransform(d.x, d.y, d.scaleX, d.scaleY, d.rotation, d.skewX, d.skewY, d.regX, d.regY), createjs.Stage._snapToPixelEnabled && d.snapToPixel ? a.transform(b.a, b.b, b.c, b.d, 0 | b.tx + .5, 0 | b.ty + .5) : a.transform(b.a, b.b, b.c, b.d, b.tx, b.ty), a.globalAlpha *= d.alpha, d.compositeOperation && (a.globalCompositeOperation = d.compositeOperation), d.shadow && this._applyShadow(a, d.shadow)
		}, b.cache = function(a, b, c, d, e) {
			e = e || 1, this.cacheCanvas || (this.cacheCanvas = createjs.createCanvas ? createjs.createCanvas() : document.createElement("canvas")), this._cacheWidth = c, this._cacheHeight = d, this._cacheOffsetX = a, this._cacheOffsetY = b, this._cacheScale = e, this.updateCache()
		}, b.updateCache = function(b) {
			var c, d = this.cacheCanvas,
				e = this._cacheScale,
				f = this._cacheOffsetX * e,
				g = this._cacheOffsetY * e,
				h = this._cacheWidth,
				i = this._cacheHeight;
			if (!d) throw "cache() must be called before updateCache()";
			var j = d.getContext("2d");
			(c = this._applyFilterBounds(f, g, h, i)) && (f = c.x, g = c.y, h = c.width, i = c.height), h = Math.ceil(h * e), i = Math.ceil(i * e), h != d.width || i != d.height ? (d.width = h, d.height = i) : b || j.clearRect(0, 0, h + 1, i + 1), j.save(), j.globalCompositeOperation = b, j.setTransform(e, 0, 0, e, -f, -g), this.draw(j, !0), this._applyFilters(), j.restore(), this.cacheID = a._nextCacheID++
		}, b.uncache = function() {
			this._cacheDataURL = this.cacheCanvas = null, this.cacheID = this._cacheOffsetX = this._cacheOffsetY = 0, this._cacheScale = 1
		}, b.getCacheDataURL = function() {
			return this.cacheCanvas ? (this.cacheID != this._cacheDataURLID && (this._cacheDataURL = this.cacheCanvas.toDataURL()), this._cacheDataURL) : null
		}, b.getStage = function() {
			for (var a = this; a.parent;) a = a.parent;
			return a instanceof createjs.Stage ? a : null
		}, b.localToGlobal = function(a, b) {
			var c = this.getConcatenatedMatrix(this._matrix);
			return null == c ? null : (c.append(1, 0, 0, 1, a, b), new createjs.Point(c.tx, c.ty))
		}, b.globalToLocal = function(a, b) {
			var c = this.getConcatenatedMatrix(this._matrix);
			return null == c ? null : (c.invert(), c.append(1, 0, 0, 1, a, b), new createjs.Point(c.tx, c.ty))
		}, b.localToLocal = function(a, b, c) {
			var d = this.localToGlobal(a, b);
			return c.globalToLocal(d.x, d.y)
		}, b.setTransform = function(a, b, c, d, e, f, g, h, i) {
			return this.x = a || 0, this.y = b || 0, this.scaleX = null == c ? 1 : c, this.scaleY = null == d ? 1 : d, this.rotation = e || 0, this.skewX = f || 0, this.skewY = g || 0, this.regX = h || 0, this.regY = i || 0, this
		}, b.getMatrix = function(a) {
			var b = this;
			return (a ? a.identity() : new createjs.Matrix2D).appendTransform(b.x, b.y, b.scaleX, b.scaleY, b.rotation, b.skewX, b.skewY, b.regX, b.regY).appendProperties(b.alpha, b.shadow, b.compositeOperation)
		}, b.getConcatenatedMatrix = function(a) {
			a ? a.identity() : a = new createjs.Matrix2D;
			for (var b = this; null != b;) a.prependTransform(b.x, b.y, b.scaleX, b.scaleY, b.rotation, b.skewX, b.skewY, b.regX, b.regY).prependProperties(b.alpha, b.shadow, b.compositeOperation), b = b.parent;
			return a
		}, b.hitTest = function(b, c) {
			var d = a._hitTestContext;
			d.setTransform(1, 0, 0, 1, -b, -c), this.draw(d);
			var e = this._testHit(d);
			return d.setTransform(1, 0, 0, 1, 0, 0), d.clearRect(0, 0, 2, 2), e
		}, b.set = function(a) {
			for (var b in a) this[b] = a[b];
			return this
		}, b.getBounds = function() {
			if (this._bounds) return this._rectangle.copy(this._bounds);
			var a = this.cacheCanvas;
			if (a) {
				var b = this._cacheScale;
				return this._rectangle.initialize(this._cacheOffsetX, this._cacheOffsetY, a.width / b, a.height / b)
			}
			return null
		}, b.getTransformedBounds = function() {
			return this._getBounds()
		}, b.setBounds = function(a, b, c, d) {
			null == a && (this._bounds = a), this._bounds = (this._bounds || new createjs.Rectangle).initialize(a, b, c, d)
		}, b.clone = function() {
			var b = new a;
			return this.cloneProps(b), b
		}, b.toString = function() {
			return "[DisplayObject (name=" + this.name + ")]"
		}, b.cloneProps = function(a) {
			a.alpha = this.alpha, a.name = this.name, a.regX = this.regX, a.regY = this.regY, a.rotation = this.rotation, a.scaleX = this.scaleX, a.scaleY = this.scaleY, a.shadow = this.shadow, a.skewX = this.skewX, a.skewY = this.skewY, a.visible = this.visible, a.x = this.x, a.y = this.y, a._bounds = this._bounds, a.mouseEnabled = this.mouseEnabled, a.compositeOperation = this.compositeOperation
		}, b._applyShadow = function(a, b) {
			b = b || Shadow.identity, a.shadowColor = b.color, a.shadowOffsetX = b.offsetX, a.shadowOffsetY = b.offsetY, a.shadowBlur = b.blur
		}, b._tick = function(a) {
			var b = this._listeners;
			if (b && b.tick) {
				var c = new createjs.Event("tick");
				c.params = a, this._dispatchEvent(c, this, 2)
			}
		}, b._testHit = function(b) {
			try {
				var c = b.getImageData(0, 0, 1, 1).data[3] > 1
			} catch (d) {
				if (!a.suppressCrossDomainErrors) throw "An error has occurred. This is most likely due to security restrictions on reading canvas pixel data with local or cross-domain images."
			}
			return c
		}, b._applyFilters = function() {
			if (this.filters && 0 != this.filters.length && this.cacheCanvas)
				for (var a = this.filters.length, b = this.cacheCanvas.getContext("2d"), c = this.cacheCanvas.width, d = this.cacheCanvas.height, e = 0; a > e; e++) this.filters[e].applyFilter(b, 0, 0, c, d)
		}, b._applyFilterBounds = function(a, b, c, d) {
			var e, f, g = this.filters;
			if (!g || !(f = g.length)) return null;
			for (var h = 0; f > h; h++) {
				var i = this.filters[h],
					j = i.getBounds && i.getBounds();
				j && (e || (e = this._rectangle.initialize(a, b, c, d)), e.x += j.x, e.y += j.y, e.width += j.width, e.height += j.height)
			}
			return e
		}, b._getBounds = function(a, b) {
			return this._transformBounds(this.getBounds(), a, b)
		}, b._transformBounds = function(a, b, c) {
			if (!a) return a;
			var d = a.x,
				e = a.y,
				f = a.width,
				g = a.height,
				h = c ? this._matrix.identity() : this.getMatrix(this._matrix);
			(d || e) && h.appendTransform(0, 0, 1, 1, 0, 0, 0, -d, -e), b && h.prependMatrix(b);
			var i = f * h.a,
				j = f * h.b,
				k = g * h.c,
				l = g * h.d,
				m = h.tx,
				n = h.ty,
				o = m,
				p = m,
				q = n,
				r = n;
			return (d = i + m) < o ? o = d : d > p && (p = d), (d = i + k + m) < o ? o = d : d > p && (p = d), (d = k + m) < o ? o = d : d > p && (p = d), (e = j + n) < q ? q = e : e > r && (r = e), (e = j + l + n) < q ? q = e : e > r && (r = e), (e = l + n) < q ? q = e : e > r && (r = e), a.initialize(o, q, p - o, r - q)
		}, b._hasMouseEventListener = function() {
			for (var b = a._MOUSE_EVENTS, c = 0, d = b.length; d > c; c++)
				if (this.hasEventListener(b[c])) return !0;
			return !!this.cursor
		}, createjs.DisplayObject = a
	}(), this.createjs = this.createjs || {},
	function() {
		var a = function() {
				this.initialize()
			},
			b = a.prototype = new createjs.DisplayObject;
		b.children = null, b.mouseChildren = !0, b.tickChildren = !0, b.DisplayObject_initialize = b.initialize, b.initialize = function() {
			this.DisplayObject_initialize(), this.children = []
		}, b.isVisible = function() {
			var a = this.cacheCanvas || this.children.length;
			return !!(this.visible && this.alpha > 0 && 0 != this.scaleX && 0 != this.scaleY && a)
		}, b.DisplayObject_draw = b.draw, b.draw = function(a, b) {
			if (this.DisplayObject_draw(a, b)) return !0;
			for (var c = this.children.slice(0), d = 0, e = c.length; e > d; d++) {
				var f = c[d];
				f.isVisible() && (a.save(), f.updateContext(a), f.draw(a), a.restore())
			}
			return !0
		}, b.addChild = function(a) {
			if (null == a) return a;
			var b = arguments.length;
			if (b > 1) {
				for (var c = 0; b > c; c++) this.addChild(arguments[c]);
				return arguments[b - 1]
			}
			return a.parent && a.parent.removeChild(a), a.parent = this, this.children.push(a), a
		}, b.addChildAt = function(a, b) {
			var c = arguments.length,
				d = arguments[c - 1];
			if (0 > d || d > this.children.length) return arguments[c - 2];
			if (c > 2) {
				for (var e = 0; c - 1 > e; e++) this.addChildAt(arguments[e], d + e);
				return arguments[c - 2]
			}
			return a.parent && a.parent.removeChild(a), a.parent = this, this.children.splice(b, 0, a), a
		}, b.removeChild = function(a) {
			var b = arguments.length;
			if (b > 1) {
				for (var c = !0, d = 0; b > d; d++) c = c && this.removeChild(arguments[d]);
				return c
			}
			return this.removeChildAt(createjs.indexOf(this.children, a))
		}, b.removeChildAt = function(a) {
			var b = arguments.length;
			if (b > 1) {
				for (var c = [], d = 0; b > d; d++) c[d] = arguments[d];
				c.sort(function(a, b) {
					return b - a
				});
				for (var e = !0, d = 0; b > d; d++) e = e && this.removeChildAt(c[d]);
				return e
			}
			if (0 > a || a > this.children.length - 1) return !1;
			var f = this.children[a];
			return f && (f.parent = null), this.children.splice(a, 1), !0
		}, b.removeAllChildren = function() {
			for (var a = this.children; a.length;) a.pop().parent = null
		}, b.getChildAt = function(a) {
			return this.children[a]
		}, b.getChildByName = function(a) {
			for (var b = this.children, c = 0, d = b.length; d > c; c++)
				if (b[c].name == a) return b[c];
			return null
		}, b.sortChildren = function(a) {
			this.children.sort(a)
		}, b.getChildIndex = function(a) {
			return createjs.indexOf(this.children, a)
		}, b.getNumChildren = function() {
			return this.children.length
		}, b.swapChildrenAt = function(a, b) {
			var c = this.children,
				d = c[a],
				e = c[b];
			d && e && (c[a] = e, c[b] = d)
		}, b.swapChildren = function(a, b) {
			for (var c, d, e = this.children, f = 0, g = e.length; g > f && (e[f] == a && (c = f), e[f] == b && (d = f), null == c || null == d); f++);
			f != g && (e[c] = b, e[d] = a)
		}, b.setChildIndex = function(a, b) {
			var c = this.children,
				d = c.length;
			if (!(a.parent != this || 0 > b || b >= d)) {
				for (var e = 0; d > e && c[e] != a; e++);
				e != d && e != b && (c.splice(e, 1), c.splice(b, 0, a))
			}
		}, b.contains = function(a) {
			for (; a;) {
				if (a == this) return !0;
				a = a.parent
			}
			return !1
		}, b.hitTest = function(a, b) {
			return null != this.getObjectUnderPoint(a, b)
		}, b.getObjectsUnderPoint = function(a, b) {
			var c = [],
				d = this.localToGlobal(a, b);
			return this._getObjectsUnderPoint(d.x, d.y, c), c
		}, b.getObjectUnderPoint = function(a, b) {
			var c = this.localToGlobal(a, b);
			return this._getObjectsUnderPoint(c.x, c.y)
		}, b.DisplayObject_getBounds = b.getBounds, b.getBounds = function() {
			return this._getBounds(null, !0)
		}, b.getTransformedBounds = function() {
			return this._getBounds()
		}, b.clone = function(b) {
			var c = new a;
			if (this.cloneProps(c), b)
				for (var d = c.children = [], e = 0, f = this.children.length; f > e; e++) {
					var g = this.children[e].clone(b);
					g.parent = c, d.push(g)
				}
			return c
		}, b.toString = function() {
			return "[Container (name=" + this.name + ")]"
		}, b.DisplayObject__tick = b._tick, b._tick = function(a) {
			if (this.tickChildren)
				for (var b = this.children.length - 1; b >= 0; b--) {
					var c = this.children[b];
					c.tickEnabled && c._tick && c._tick(a)
				}
			this.DisplayObject__tick(a)
		}, b._getObjectsUnderPoint = function(b, c, d, e, f) {
			var g = createjs.DisplayObject._hitTestContext,
				h = this._matrix;
			f = f || e && this._hasMouseEventListener();
			for (var i = this.children, j = i.length, k = j - 1; k >= 0; k--) {
				var l = i[k],
					m = l.hitArea;
				if (l.visible && (m || l.isVisible()) && (!e || l.mouseEnabled))
					if (!m && l instanceof a) {
						var n = l._getObjectsUnderPoint(b, c, d, e, f);
						if (!d && n) return e && !this.mouseChildren ? this : n
					} else {
						if (!f && !l._hasMouseEventListener()) continue;
						if (l.getConcatenatedMatrix(h), m && (h.appendTransform(m.x, m.y, m.scaleX, m.scaleY, m.rotation, m.skewX, m.skewY, m.regX, m.regY), h.alpha = m.alpha), g.globalAlpha = h.alpha, g.setTransform(h.a, h.b, h.c, h.d, h.tx - b, h.ty - c), (m || l).draw(g), !this._testHit(g)) continue;
						if (g.setTransform(1, 0, 0, 1, 0, 0), g.clearRect(0, 0, 2, 2), !d) return e && !this.mouseChildren ? this : l;
						d.push(l)
					}
			}
			return null
		}, b._getBounds = function(a, b) {
			var c = this.DisplayObject_getBounds();
			if (c) return this._transformBounds(c, a, b);
			var d, e, f, g, h = b ? this._matrix.identity() : this.getMatrix(this._matrix);
			a && h.prependMatrix(a);
			for (var i = this.children.length, j = 0; i > j; j++) {
				var k = this.children[j];
				if (k.visible && (c = k._getBounds(h))) {
					var l = c.x,
						m = c.y,
						n = l + c.width,
						o = m + c.height;
					(d > l || null == d) && (d = l), (n > e || null == e) && (e = n), (f > m || null == f) && (f = m), (o > g || null == g) && (g = o)
				}
			}
			return null == e ? null : this._rectangle.initialize(d, f, e - d, g - f)
		}, createjs.Container = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a) {
				this.initialize(a)
			},
			b = a.prototype = new createjs.Container;
		a._snapToPixelEnabled = !1, b.autoClear = !0, b.canvas = null, b.mouseX = 0, b.mouseY = 0, b.snapToPixelEnabled = !1, b.mouseInBounds = !1, b.tickOnUpdate = !0, b.mouseMoveOutside = !1, b.nextStage = null, b._pointerData = null, b._pointerCount = 0, b._primaryPointerID = null, b._mouseOverIntervalID = null, b.Container_initialize = b.initialize, b.initialize = function(a) {
			this.Container_initialize(), this.canvas = "string" == typeof a ? document.getElementById(a) : a, this._pointerData = {}, this.enableDOMEvents(!0)
		}, b.update = function() {
			if (this.canvas) {
				this.tickOnUpdate && (this.dispatchEvent("tickstart"), this.tickEnabled && this._tick(arguments.length ? arguments : null), this.dispatchEvent("tickend")), this.dispatchEvent("drawstart"), a._snapToPixelEnabled = this.snapToPixelEnabled, this.autoClear && this.clear();
				var b = this.canvas.getContext("2d");
				b.save(), this.updateContext(b), this.draw(b, !1), b.restore(), this.dispatchEvent("drawend")
			}
		}, b.handleEvent = function(a) {
			"tick" == a.type && this.update(a)
		}, b.clear = function() {
			if (this.canvas) {
				var a = this.canvas.getContext("2d");
				a.setTransform(1, 0, 0, 1, 0, 0), a.clearRect(0, 0, this.canvas.width + 1, this.canvas.height + 1)
			}
		}, b.toDataURL = function(a, b) {
			b || (b = "image/png");
			var c, d = this.canvas.getContext("2d"),
				e = this.canvas.width,
				f = this.canvas.height;
			if (a) {
				c = d.getImageData(0, 0, e, f);
				var g = d.globalCompositeOperation;
				d.globalCompositeOperation = "destination-over", d.fillStyle = a, d.fillRect(0, 0, e, f)
			}
			var h = this.canvas.toDataURL(b);
			return a && (d.clearRect(0, 0, e + 1, f + 1), d.putImageData(c, 0, 0), d.globalCompositeOperation = g), h
		}, b.enableMouseOver = function(a) {
			if (this._mouseOverIntervalID && (clearInterval(this._mouseOverIntervalID), this._mouseOverIntervalID = null, 0 == a && this._testMouseOver(!0)), null == a) a = 20;
			else if (0 >= a) return;
			var b = this;
			this._mouseOverIntervalID = setInterval(function() {
				b._testMouseOver()
			}, 1e3 / Math.min(50, a))
		}, b.enableDOMEvents = function(a) {
			null == a && (a = !0);
			var b, c, d = this._eventListeners;
			if (!a && d) {
				for (b in d) c = d[b], c.t.removeEventListener(b, c.f, !1);
				this._eventListeners = null
			} else if (a && !d && this.canvas) {
				var e = window.addEventListener ? window : document,
					f = this;
				d = this._eventListeners = {}, d.mouseup = {
					t: e,
					f: function(a) {
						f._handleMouseUp(a)
					}
				}, d.mousemove = {
					t: e,
					f: function(a) {
						f._handleMouseMove(a)
					}
				}, d.dblclick = {
					t: this.canvas,
					f: function(a) {
						f._handleDoubleClick(a)
					}
				}, d.mousedown = {
					t: this.canvas,
					f: function(a) {
						f._handleMouseDown(a)
					}
				};
				for (b in d) c = d[b], c.t.addEventListener(b, c.f, !1)
			}
		}, b.clone = function() {
			var b = new a(null);
			return this.cloneProps(b), b
		}, b.toString = function() {
			return "[Stage (name=" + this.name + ")]"
		}, b._getElementRect = function(a) {
			var b;
			try {
				b = a.getBoundingClientRect()
			} catch (c) {
				b = {
					top: a.offsetTop,
					left: a.offsetLeft,
					width: a.offsetWidth,
					height: a.offsetHeight
				}
			}
			var d = (window.pageXOffset || document.scrollLeft || 0) - (document.clientLeft || document.body.clientLeft || 0),
				e = (window.pageYOffset || document.scrollTop || 0) - (document.clientTop || document.body.clientTop || 0),
				f = window.getComputedStyle ? getComputedStyle(a) : a.currentStyle,
				g = parseInt(f.paddingLeft) + parseInt(f.borderLeftWidth),
				h = parseInt(f.paddingTop) + parseInt(f.borderTopWidth),
				i = parseInt(f.paddingRight) + parseInt(f.borderRightWidth),
				j = parseInt(f.paddingBottom) + parseInt(f.borderBottomWidth);
			return {
				left: b.left + d + g,
				right: b.right + d - i,
				top: b.top + e + h,
				bottom: b.bottom + e - j
			}
		}, b._getPointerData = function(a) {
			var b = this._pointerData[a];
			return b || (b = this._pointerData[a] = {
				x: 0,
				y: 0
			}, null == this._primaryPointerID && (this._primaryPointerID = a), (null == this._primaryPointerID || -1 == this._primaryPointerID) && (this._primaryPointerID = a)), b
		}, b._handleMouseMove = function(a) {
			a || (a = window.event), this._handlePointerMove(-1, a, a.pageX, a.pageY)
		}, b._handlePointerMove = function(a, b, c, d) {
			if (this.canvas) {
				var e = this._getPointerData(a),
					f = e.inBounds;
				if (this._updatePointerPosition(a, b, c, d), f || e.inBounds || this.mouseMoveOutside) {
					-1 == a && e.inBounds == !f && this._dispatchMouseEvent(this, f ? "mouseleave" : "mouseenter", !1, a, e, b), this._dispatchMouseEvent(this, "stagemousemove", !1, a, e, b), this._dispatchMouseEvent(e.target, "pressmove", !0, a, e, b);
					var g = e.event;
					g && g.hasEventListener("mousemove") && g.dispatchEvent(new createjs.MouseEvent("mousemove", !1, !1, e.x, e.y, b, a, a == this._primaryPointerID, e.rawX, e.rawY), e.target), this.nextStage && this.nextStage._handlePointerMove(a, b, c, d)
				}
			}
		}, b._updatePointerPosition = function(a, b, c, d) {
			var e = this._getElementRect(this.canvas);
			c -= e.left, d -= e.top;
			var f = this.canvas.width,
				g = this.canvas.height;
			c /= (e.right - e.left) / f, d /= (e.bottom - e.top) / g;
			var h = this._getPointerData(a);
			(h.inBounds = c >= 0 && d >= 0 && f - 1 >= c && g - 1 >= d) ? (h.x = c, h.y = d) : this.mouseMoveOutside && (h.x = 0 > c ? 0 : c > f - 1 ? f - 1 : c, h.y = 0 > d ? 0 : d > g - 1 ? g - 1 : d), h.posEvtObj = b, h.rawX = c, h.rawY = d, a == this._primaryPointerID && (this.mouseX = h.x, this.mouseY = h.y, this.mouseInBounds = h.inBounds)
		}, b._handleMouseUp = function(a) {
			this._handlePointerUp(-1, a, !1)
		}, b._handlePointerUp = function(a, b, c) {
			var d = this._getPointerData(a);
			this._dispatchMouseEvent(this, "stagemouseup", !1, a, d, b);
			var e = d.target;
			e && (this._getObjectsUnderPoint(d.x, d.y, null, !0) == e && this._dispatchMouseEvent(e, "click", !0, a, d, b), this._dispatchMouseEvent(e, "pressup", !0, a, d, b));
			var f = d.event;
			f && f.hasEventListener("mouseup") && f.dispatchEvent(new createjs.MouseEvent("mouseup", !1, !1, d.x, d.y, b, a, a == this._primaryPointerID, d.rawX, d.rawY), e), c ? (a == this._primaryPointerID && (this._primaryPointerID = null), delete this._pointerData[a]) : d.event = d.target = null, this.nextStage && this.nextStage._handlePointerUp(a, b, c)
		}, b._handleMouseDown = function(a) {
			this._handlePointerDown(-1, a, a.pageX, a.pageY)
		}, b._handlePointerDown = function(a, b, c, d) {
			null != d && this._updatePointerPosition(a, b, c, d);
			var e = this._getPointerData(a);
			this._dispatchMouseEvent(this, "stagemousedown", !1, a, e, b), e.target = this._getObjectsUnderPoint(e.x, e.y, null, !0), e.event = this._dispatchMouseEvent(e.target, "mousedown", !0, a, e, b), this.nextStage && this.nextStage._handlePointerDown(a, b, c, d)
		}, b._testMouseOver = function(a) {
			if (-1 == this._primaryPointerID && (a || this.mouseX != this._mouseOverX || this.mouseY != this._mouseOverY || !this.mouseInBounds)) {
				var b, c, d, e, f = this._getPointerData(-1),
					g = f.posEvtObj,
					h = -1,
					i = "";
				(a || this.mouseInBounds && g && g.target == this.canvas) && (b = this._getObjectsUnderPoint(this.mouseX, this.mouseY, null, !0), this._mouseOverX = this.mouseX, this._mouseOverY = this.mouseY);
				var j = this._mouseOverTarget || [],
					k = j[j.length - 1],
					l = this._mouseOverTarget = [];
				for (c = b; c;) l.unshift(c), null != c.cursor && (i = c.cursor), c = c.parent;
				for (this.canvas.style.cursor = i, d = 0, e = l.length; e > d && l[d] == j[d]; d++) h = d;
				for (k != b && this._dispatchMouseEvent(k, "mouseout", !0, -1, f, g), d = j.length - 1; d > h; d--) this._dispatchMouseEvent(j[d], "rollout", !1, -1, f, g);
				for (d = l.length - 1; d > h; d--) this._dispatchMouseEvent(l[d], "rollover", !1, -1, f, g);
				k != b && this._dispatchMouseEvent(b, "mouseover", !0, -1, f, g)
			}
		}, b._handleDoubleClick = function(a) {
			var b = this._getPointerData(-1),
				c = this._getObjectsUnderPoint(b.x, b.y, null, !0);
			this._dispatchMouseEvent(c, "dblclick", !0, -1, b, a), this.nextStage && this.nextStage._handleDoubleClick(a)
		}, b._dispatchMouseEvent = function(a, b, c, d, e, f) {
			if (a && (c || a.hasEventListener(b))) {
				var g = new createjs.MouseEvent(b, c, !1, e.x, e.y, f, d, d == this._primaryPointerID, e.rawX, e.rawY);
				return a.dispatchEvent(g), g
			}
		}, createjs.Stage = a
	}(), this.createjs = this.createjs || {},
	function() {
		var a = function(a) {
				this.initialize(a)
			},
			b = a.prototype = new createjs.DisplayObject;
		b.image = null, b.snapToPixel = !0, b.sourceRect = null, b.DisplayObject_initialize = b.initialize, b.initialize = function(a) {
			this.DisplayObject_initialize(), "string" == typeof a ? (this.image = document.createElement("img"), this.image.src = a) : this.image = a
		}, b.isVisible = function() {
			var a = this.cacheCanvas || this.image && (this.image.complete || this.image.getContext || this.image.readyState >= 2);
			return !!(this.visible && this.alpha > 0 && 0 != this.scaleX && 0 != this.scaleY && a)
		}, b.DisplayObject_draw = b.draw, b.draw = function(a, b) {
			if (this.DisplayObject_draw(a, b)) return !0;
			var c = this.sourceRect;
			return c ? a.drawImage(this.image, c.x, c.y, c.width, c.height, 0, 0, c.width, c.height) : a.drawImage(this.image, 0, 0), !0
		}, b.DisplayObject_getBounds = b.getBounds, b.getBounds = function() {
			var a = this.DisplayObject_getBounds();
			if (a) return a;
			var b = this.sourceRect || this.image,
				c = this.image && (this.image.complete || this.image.getContext || this.image.readyState >= 2);
			return c ? this._rectangle.initialize(0, 0, b.width, b.height) : null
		}, b.clone = function() {
			var b = new a(this.image);
			return this.sourceRect && (b.sourceRect = this.sourceRect.clone()), this.cloneProps(b), b
		}, b.toString = function() {
			return "[Bitmap (name=" + this.name + ")]"
		}, createjs.Bitmap = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a, b) {
				this.initialize(a, b)
			},
			b = a.prototype = new createjs.DisplayObject;
		b.currentFrame = 0, b.currentAnimation = null, b.paused = !0, b.spriteSheet = null, b.snapToPixel = !0, b.offset = 0, b.currentAnimationFrame = 0, b.framerate = 0, b._advanceCount = 0, b._animation = null, b._currentFrame = null, b.DisplayObject_initialize = b.initialize, b.initialize = function(a, b) {
			this.DisplayObject_initialize(), this.spriteSheet = a, b && this.gotoAndPlay(b)
		}, b.isVisible = function() {
			var a = this.cacheCanvas || this.spriteSheet.complete;
			return !!(this.visible && this.alpha > 0 && 0 != this.scaleX && 0 != this.scaleY && a)
		}, b.DisplayObject_draw = b.draw, b.draw = function(a, b) {
			if (this.DisplayObject_draw(a, b)) return !0;
			this._normalizeFrame();
			var c = this.spriteSheet.getFrame(0 | this._currentFrame);
			if (!c) return !1;
			var d = c.rect;
			return a.drawImage(c.image, d.x, d.y, d.width, d.height, -c.regX, -c.regY, d.width, d.height), !0
		}, b.play = function() {
			this.paused = !1
		}, b.stop = function() {
			this.paused = !0
		}, b.gotoAndPlay = function(a) {
			this.paused = !1, this._goto(a)
		}, b.gotoAndStop = function(a) {
			this.paused = !0, this._goto(a)
		}, b.advance = function(a) {
			var b = this._animation && this._animation.speed || 1,
				c = this.framerate || this.spriteSheet.framerate,
				d = c && null != a ? a / (1e3 / c) : 1;
			this._animation ? this.currentAnimationFrame += d * b : this._currentFrame += d * b, this._normalizeFrame()
		}, b.DisplayObject_getBounds = b.getBounds, b.getBounds = function() {
			return this.DisplayObject_getBounds() || this.spriteSheet.getFrameBounds(this.currentFrame, this._rectangle)
		}, b.clone = function() {
			var b = new a(this.spriteSheet);
			return this.cloneProps(b), b
		}, b.toString = function() {
			return "[Sprite (name=" + this.name + ")]"
		}, b.DisplayObject__tick = b._tick, b._tick = function(a) {
			this.paused || this.advance(a && a[0] && a[0].delta), this.DisplayObject__tick(a)
		}, b._normalizeFrame = function() {
			var a, b = this._animation,
				c = this.paused,
				d = this._currentFrame,
				e = this.currentAnimationFrame;
			if (b)
				if (a = b.frames.length, (0 | e) >= a) {
					var f = b.next;
					if (this._dispatchAnimationEnd(b, d, c, f, a - 1));
					else {
						if (f) return this._goto(f, e - a);
						this.paused = !0, e = this.currentAnimationFrame = b.frames.length - 1, this._currentFrame = b.frames[e]
					}
				} else this._currentFrame = b.frames[0 | e];
			else if (a = this.spriteSheet.getNumFrames(), d >= a && !this._dispatchAnimationEnd(b, d, c, a - 1) && (this._currentFrame -= a) >= a) return this._normalizeFrame();
			this.currentFrame = 0 | this._currentFrame
		}, b._dispatchAnimationEnd = function(a, b, c, d, e) {
			var f = a ? a.name : null;
			if (this.hasEventListener("animationend")) {
				var g = new createjs.Event("animationend");
				g.name = f, g.next = d, this.dispatchEvent(g)
			}
			var h = this._animation != a || this._currentFrame != b;
			return h || c || !this.paused || (this.currentAnimationFrame = e, h = !0), h
		}, b.DisplayObject_cloneProps = b.cloneProps, b.cloneProps = function(a) {
			this.DisplayObject_cloneProps(a), a.currentFrame = this.currentFrame, a._currentFrame = this._currentFrame, a.currentAnimation = this.currentAnimation, a.paused = this.paused, a._animation = this._animation, a.currentAnimationFrame = this.currentAnimationFrame, a.framerate = this.framerate
		}, b._goto = function(a, b) {
			if (isNaN(a)) {
				var c = this.spriteSheet.getAnimation(a);
				c && (this.currentAnimationFrame = b || 0, this._animation = c, this.currentAnimation = a, this._normalizeFrame())
			} else this.currentAnimationFrame = 0, this.currentAnimation = this._animation = null, this._currentFrame = a, this._normalizeFrame()
		}, createjs.Sprite = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = "BitmapAnimation is deprecated in favour of Sprite. See VERSIONS file for info on changes.";
		if (!createjs.Sprite) throw a;
		(createjs.BitmapAnimation = function(b) {
			console.log(a), this.initialize(b)
		}).prototype = new createjs.Sprite
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a) {
				this.initialize(a)
			},
			b = a.prototype = new createjs.DisplayObject;
		b.graphics = null, b.DisplayObject_initialize = b.initialize, b.initialize = function(a) {
			this.DisplayObject_initialize(), this.graphics = a ? a : new createjs.Graphics
		}, b.isVisible = function() {
			var a = this.cacheCanvas || this.graphics && !this.graphics.isEmpty();
			return !!(this.visible && this.alpha > 0 && 0 != this.scaleX && 0 != this.scaleY && a)
		}, b.DisplayObject_draw = b.draw, b.draw = function(a, b) {
			return this.DisplayObject_draw(a, b) ? !0 : (this.graphics.draw(a), !0)
		}, b.clone = function(b) {
			var c = new a(b && this.graphics ? this.graphics.clone() : this.graphics);
			return this.cloneProps(c), c
		}, b.toString = function() {
			return "[Shape (name=" + this.name + ")]"
		}, createjs.Shape = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a, b, c) {
				this.initialize(a, b, c)
			},
			b = a.prototype = new createjs.DisplayObject,
			c = createjs.createCanvas ? createjs.createCanvas() : document.createElement("canvas");
		c.getContext && (a._workingContext = c.getContext("2d"), c.width = c.height = 1), a.H_OFFSETS = {
			start: 0,
			left: 0,
			center: -.5,
			end: -1,
			right: -1
		}, a.V_OFFSETS = {
			top: 0,
			hanging: -.01,
			middle: -.4,
			alphabetic: -.8,
			ideographic: -.85,
			bottom: -1
		}, b.text = "", b.font = null, b.color = null, b.textAlign = "left", b.textBaseline = "top", b.maxWidth = null, b.outline = 0, b.lineHeight = 0, b.lineWidth = null, b.DisplayObject_initialize = b.initialize, b.initialize = function(a, b, c) {
			this.DisplayObject_initialize(), this.text = a, this.font = b, this.color = c
		}, b.isVisible = function() {
			var a = this.cacheCanvas || null != this.text && "" !== this.text;
			return !!(this.visible && this.alpha > 0 && 0 != this.scaleX && 0 != this.scaleY && a)
		}, b.DisplayObject_draw = b.draw, b.draw = function(a, b) {
			if (this.DisplayObject_draw(a, b)) return !0;
			var c = this.color || "#000";
			return this.outline ? (a.strokeStyle = c, a.lineWidth = 1 * this.outline) : a.fillStyle = c, this._drawText(this._prepContext(a)), !0
		}, b.getMeasuredWidth = function() {
			return this._prepContext(a._workingContext).measureText(this.text).width
		}, b.getMeasuredLineHeight = function() {
			return 1.2 * this._prepContext(a._workingContext).measureText("M").width
		}, b.getMeasuredHeight = function() {
			return this._drawText(null, {}).height
		}, b.DisplayObject_getBounds = b.getBounds, b.getBounds = function() {
			var b = this.DisplayObject_getBounds();
			if (b) return b;
			if (null == this.text || "" == this.text) return null;
			var c = this._drawText(null, {}),
				d = this.maxWidth && this.maxWidth < c.width ? this.maxWidth : c.width,
				e = d * a.H_OFFSETS[this.textAlign || "left"],
				f = this.lineHeight || this.getMeasuredLineHeight(),
				g = f * a.V_OFFSETS[this.textBaseline || "top"];
			return this._rectangle.initialize(e, g, d, c.height)
		}, b.clone = function() {
			var b = new a(this.text, this.font, this.color);
			return this.cloneProps(b), b
		}, b.toString = function() {
			return "[Text (text=" + (this.text.length > 20 ? this.text.substr(0, 17) + "..." : this.text) + ")]"
		}, b.DisplayObject_cloneProps = b.cloneProps, b.cloneProps = function(a) {
			this.DisplayObject_cloneProps(a), a.textAlign = this.textAlign, a.textBaseline = this.textBaseline, a.maxWidth = this.maxWidth, a.outline = this.outline, a.lineHeight = this.lineHeight, a.lineWidth = this.lineWidth
		}, b._prepContext = function(a) {
			return a.font = this.font, a.textAlign = this.textAlign || "left", a.textBaseline = this.textBaseline || "top", a
		}, b._drawText = function(b, c) {
			var d = !!b;
			d || (b = this._prepContext(a._workingContext));
			for (var e = this.lineHeight || this.getMeasuredLineHeight(), f = 0, g = 0, h = String(this.text).split(/(?:\r\n|\r|\n)/), i = 0, j = h.length; j > i; i++) {
				var k = h[i],
					l = null;
				if (null != this.lineWidth && (l = b.measureText(k).width) > this.lineWidth) {
					var m = k.split(/(\s)/);
					k = m[0], l = b.measureText(k).width;
					for (var n = 1, o = m.length; o > n; n += 2) {
						var p = b.measureText(m[n] + m[n + 1]).width;
						l + p > this.lineWidth ? (d && this._drawTextLine(b, k, g * e), l > f && (f = l), k = m[n + 1], l = b.measureText(k).width, g++) : (k += m[n] + m[n + 1], l += p)
					}
				}
				d && this._drawTextLine(b, k, g * e), c && null == l && (l = b.measureText(k).width), l > f && (f = l), g++
			}
			return c && (c.count = g, c.width = f, c.height = g * e), c
		}, b._drawTextLine = function(a, b, c) {
			this.outline ? a.strokeText(b, 0, c, this.maxWidth || 65535) : a.fillText(b, 0, c, this.maxWidth || 65535)
		}, createjs.Text = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";

		function a(a, b) {
			this.initialize(a, b)
		}
		var b = a.prototype = new createjs.DisplayObject;
		b.text = "", b.spriteSheet = null, b.lineHeight = 0, b.letterSpacing = 0, b.spaceWidth = 0, b.DisplayObject_initialize = b.initialize, b.initialize = function(a, b) {
			this.DisplayObject_initialize(), this.text = a, this.spriteSheet = b
		}, b.DisplayObject_draw = b.draw, b.draw = function(a, b) {
			return this.DisplayObject_draw(a, b) ? !0 : (this._drawText(a), void 0)
		}, b.isVisible = function() {
			var a = this.cacheCanvas || this.spriteSheet && this.spriteSheet.complete && this.text;
			return !!(this.visible && this.alpha > 0 && 0 != this.scaleX && 0 != this.scaleY && a)
		}, b.getBounds = function() {
			var a = this._rectangle;
			return this._drawText(null, a), a.width ? a : null
		}, b._getFrame = function(a, b) {
			var c, d = b.getAnimation(a);
			return d || (a != (c = a.toUpperCase()) || a != (c = a.toLowerCase()) || (c = null), c && (d = b.getAnimation(c))), d && b.getFrame(d.frames[0])
		}, b._getLineHeight = function(a) {
			var b = this._getFrame("1", a) || this._getFrame("T", a) || this._getFrame("L", a) || a.getFrame(0);
			return b ? b.rect.height : 1
		}, b._getSpaceWidth = function(a) {
			var b = this._getFrame("1", a) || this._getFrame("l", a) || this._getFrame("e", a) || this._getFrame("a", a) || a.getFrame(0);
			return b ? b.rect.width : 1
		}, b._drawText = function(a, b) {
			var c, d, e, f = 0,
				g = 0,
				h = this.spaceWidth,
				i = this.lineHeight,
				j = this.spriteSheet,
				k = !!this._getFrame(" ", j);
			k || 0 != h || (h = this._getSpaceWidth(j)), 0 == i && (i = this._getLineHeight(j));
			for (var l = 0, m = 0, n = this.text.length; n > m; m++) {
				var o = this.text.charAt(m);
				if (k || " " != o)
					if ("\n" != o && "\r" != o) {
						var p = this._getFrame(o, j);
						if (p) {
							var q = p.rect;
							e = p.regX, c = q.width, a && a.drawImage(p.image, q.x, q.y, c, d = q.height, f - e, g - p.regY, c, d), f += c + this.letterSpacing
						}
					} else "\r" == o && "\n" == this.text.charAt(m + 1) && m++, f - e > l && (l = f - e), f = 0, g += i;
				else f += h
			}
			f - e > l && (l = f - e), b && (b.width = l - this.letterSpacing, b.height = g + i)
		}, createjs.BitmapText = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function() {
				throw "SpriteSheetUtils cannot be instantiated"
			},
			b = createjs.createCanvas ? createjs.createCanvas() : document.createElement("canvas");
		b.getContext && (a._workingCanvas = b, a._workingContext = b.getContext("2d"), b.width = b.height = 1), a.addFlippedFrames = function(b, c, d, e) {
			if (c || d || e) {
				var f = 0;
				c && a._flip(b, ++f, !0, !1), d && a._flip(b, ++f, !1, !0), e && a._flip(b, ++f, !0, !0)
			}
		}, a.extractFrame = function(b, c) {
			isNaN(c) && (c = b.getAnimation(c).frames[0]);
			var d = b.getFrame(c);
			if (!d) return null;
			var e = d.rect,
				f = a._workingCanvas;
			f.width = e.width, f.height = e.height, a._workingContext.drawImage(d.image, e.x, e.y, e.width, e.height, 0, 0, e.width, e.height);
			var g = document.createElement("img");
			return g.src = f.toDataURL("image/png"), g
		}, a.mergeAlpha = function(a, b, c) {
			c || (c = createjs.createCanvas ? createjs.createCanvas() : document.createElement("canvas")), c.width = Math.max(b.width, a.width), c.height = Math.max(b.height, a.height);
			var d = c.getContext("2d");
			return d.save(), d.drawImage(a, 0, 0), d.globalCompositeOperation = "destination-in", d.drawImage(b, 0, 0), d.restore(), c
		}, a._flip = function(b, c, d, e) {
			for (var f = b._images, g = a._workingCanvas, h = a._workingContext, i = f.length / c, j = 0; i > j; j++) {
				var k = f[j];
				k.__tmp = j, h.setTransform(1, 0, 0, 1, 0, 0), h.clearRect(0, 0, g.width + 1, g.height + 1), g.width = k.width, g.height = k.height, h.setTransform(d ? -1 : 1, 0, 0, e ? -1 : 1, d ? k.width : 0, e ? k.height : 0), h.drawImage(k, 0, 0);
				var l = document.createElement("img");
				l.src = g.toDataURL("image/png"), l.width = k.width, l.height = k.height, f.push(l)
			}
			var m = b._frames,
				n = m.length / c;
			for (j = 0; n > j; j++) {
				k = m[j];
				var o = k.rect.clone();
				l = f[k.image.__tmp + i * c];
				var p = {
					image: l,
					rect: o,
					regX: k.regX,
					regY: k.regY
				};
				d && (o.x = l.width - o.x - o.width, p.regX = o.width - k.regX), e && (o.y = l.height - o.y - o.height, p.regY = o.height - k.regY), m.push(p)
			}
			var q = "_" + (d ? "h" : "") + (e ? "v" : ""),
				r = b._animations,
				s = b._data,
				t = r.length / c;
			for (j = 0; t > j; j++) {
				var u = r[j];
				k = s[u];
				var v = {
					name: u + q,
					speed: k.speed,
					next: k.next,
					frames: []
				};
				k.next && (v.next += q), m = k.frames;
				for (var w = 0, x = m.length; x > w; w++) v.frames.push(m[w] + n * c);
				s[v.name] = v, r.push(v.name)
			}
		}, createjs.SpriteSheetUtils = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function() {
				this.initialize()
			},
			b = a.prototype = new createjs.EventDispatcher;
		a.ERR_DIMENSIONS = "frame dimensions exceed max spritesheet dimensions", a.ERR_RUNNING = "a build is already running", b.maxWidth = 2048, b.maxHeight = 2048, b.spriteSheet = null, b.scale = 1, b.padding = 1, b.timeSlice = .3, b.progress = -1, b._frames = null, b._animations = null, b._data = null, b._nextFrameIndex = 0, b._index = 0, b._timerID = null, b._scale = 1, b.initialize = function() {
			this._frames = [], this._animations = {}
		}, b.addFrame = function(b, c, d, e, f, g) {
			if (this._data) throw a.ERR_RUNNING;
			var h = c || b.bounds || b.nominalBounds;
			return !h && b.getBounds && (h = b.getBounds()), h ? (d = d || 1, this._frames.push({
				source: b,
				sourceRect: h,
				scale: d,
				funct: e,
				params: f,
				scope: g,
				index: this._frames.length,
				height: h.height * d
			}) - 1) : null
		}, b.addAnimation = function(b, c, d, e) {
			if (this._data) throw a.ERR_RUNNING;
			this._animations[b] = {
				frames: c,
				next: d,
				frequency: e
			}
		}, b.addMovieClip = function(b, c, d) {
			if (this._data) throw a.ERR_RUNNING;
			var e = b.frameBounds,
				f = c || b.bounds || b.nominalBounds;
			if (!f && b.getBounds && (f = b.getBounds()), !f && !e) return null;
			for (var g = this._frames.length, h = b.timeline.duration, i = 0; h > i; i++) {
				var j = e && e[i] ? e[i] : f;
				this.addFrame(b, j, d, function(a) {
					var b = this.actionsEnabled;
					this.actionsEnabled = !1, this.gotoAndStop(a), this.actionsEnabled = b
				}, [i], b)
			}
			var k = b.timeline._labels,
				l = [];
			for (var m in k) l.push({
				index: k[m],
				label: m
			});
			if (l.length) {
				l.sort(function(a, b) {
					return a.index - b.index
				});
				for (var i = 0, n = l.length; n > i; i++) {
					for (var o = l[i].label, p = g + l[i].index, q = g + (i == n - 1 ? h : l[i + 1].index), r = [], s = p; q > s; s++) r.push(s);
					this.addAnimation(o, r, !0)
				}
			}
		}, b.build = function() {
			if (this._data) throw a.ERR_RUNNING;
			for (this._startBuild(); this._drawNext(););
			return this._endBuild(), this.spriteSheet
		}, b.buildAsync = function(b) {
			if (this._data) throw a.ERR_RUNNING;
			this.timeSlice = b, this._startBuild();
			var c = this;
			this._timerID = setTimeout(function() {
				c._run()
			}, 50 - 50 * Math.max(.01, Math.min(.99, this.timeSlice || .3)))
		}, b.stopAsync = function() {
			clearTimeout(this._timerID), this._data = null
		}, b.clone = function() {
			throw "SpriteSheetBuilder cannot be cloned."
		}, b.toString = function() {
			return "[SpriteSheetBuilder]"
		}, b._startBuild = function() {
			var b = this.padding || 0;
			this.progress = 0, this.spriteSheet = null, this._index = 0, this._scale = this.scale;
			var c = [];
			this._data = {
				images: [],
				frames: c,
				animations: this._animations
			};
			var d = this._frames.slice();
			if (d.sort(function(a, b) {
					return a.height <= b.height ? -1 : 1
				}), d[d.length - 1].height + 2 * b > this.maxHeight) throw a.ERR_DIMENSIONS;
			for (var e = 0, f = 0, g = 0; d.length;) {
				var h = this._fillRow(d, e, g, c, b);
				if (h.w > f && (f = h.w), e += h.h, !h.h || !d.length) {
					var i = createjs.createCanvas ? createjs.createCanvas() : document.createElement("canvas");
					i.width = this._getSize(f, this.maxWidth), i.height = this._getSize(e, this.maxHeight), this._data.images[g] = i, h.h || (f = e = 0, g++)
				}
			}
		}, b._getSize = function(a, b) {
			for (var c = 4; Math.pow(2, ++c) < a;);
			return Math.min(b, Math.pow(2, c))
		}, b._fillRow = function(b, c, d, e, f) {
			var g = this.maxWidth,
				h = this.maxHeight;
			c += f;
			for (var i = h - c, j = f, k = 0, l = b.length - 1; l >= 0; l--) {
				var m = b[l],
					n = this._scale * m.scale,
					o = m.sourceRect,
					p = m.source,
					q = Math.floor(n * o.x - f),
					r = Math.floor(n * o.y - f),
					s = Math.ceil(n * o.height + 2 * f),
					t = Math.ceil(n * o.width + 2 * f);
				if (t > g) throw a.ERR_DIMENSIONS;
				s > i || j + t > g || (m.img = d, m.rect = new createjs.Rectangle(j, c, t, s), k = k || s, b.splice(l, 1), e[m.index] = [j, c, t, s, d, Math.round(-q + n * p.regX - f), Math.round(-r + n * p.regY - f)], j += t)
			}
			return {
				w: j,
				h: k
			}
		}, b._endBuild = function() {
			this.spriteSheet = new createjs.SpriteSheet(this._data), this._data = null, this.progress = 1, this.dispatchEvent("complete")
		}, b._run = function() {
			for (var a = 50 * Math.max(.01, Math.min(.99, this.timeSlice || .3)), b = (new Date).getTime() + a, c = !1; b > (new Date).getTime();)
				if (!this._drawNext()) {
					c = !0;
					break
				} if (c) this._endBuild();
			else {
				var d = this;
				this._timerID = setTimeout(function() {
					d._run()
				}, 50 - a)
			}
			var e = this.progress = this._index / this._frames.length;
			if (this.hasEventListener("progress")) {
				var f = new createjs.Event("progress");
				f.progress = e, this.dispatchEvent(f)
			}
		}, b._drawNext = function() {
			var a = this._frames[this._index],
				b = a.scale * this._scale,
				c = a.rect,
				d = a.sourceRect,
				e = this._data.images[a.img],
				f = e.getContext("2d");
			return a.funct && a.funct.apply(a.scope, a.params), f.save(), f.beginPath(), f.rect(c.x, c.y, c.width, c.height), f.clip(), f.translate(Math.ceil(c.x - d.x * b), Math.ceil(c.y - d.y * b)), f.scale(b, b), a.source.draw(f), f.restore(), ++this._index < this._frames.length
		}, createjs.SpriteSheetBuilder = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a) {
				this.initialize(a)
			},
			b = a.prototype = new createjs.DisplayObject;
		b.htmlElement = null, b._oldMtx = null, b._visible = !1, b.DisplayObject_initialize = b.initialize, b.initialize = function(a) {
			"string" == typeof a && (a = document.getElementById(a)), this.DisplayObject_initialize(), this.mouseEnabled = !1, this.htmlElement = a;
			var b = a.style;
			b.position = "absolute", b.transformOrigin = b.WebkitTransformOrigin = b.msTransformOrigin = b.MozTransformOrigin = b.OTransformOrigin = "0% 0%"
		}, b.isVisible = function() {
			return null != this.htmlElement
		}, b.draw = function() {
			return this.visible && (this._visible = !0), !0
		}, b.cache = function() {}, b.uncache = function() {}, b.updateCache = function() {}, b.hitTest = function() {}, b.localToGlobal = function() {}, b.globalToLocal = function() {}, b.localToLocal = function() {}, b.clone = function() {
			throw "DOMElement cannot be cloned."
		}, b.toString = function() {
			return "[DOMElement (name=" + this.name + ")]"
		}, b.DisplayObject__tick = b._tick, b._tick = function(a) {
			var b = this.getStage();
			this._visible = !1, b && b.on("drawend", this._handleDrawEnd, this, !0), this.DisplayObject__tick(a)
		}, b._handleDrawEnd = function() {
			var a = this.htmlElement;
			if (a) {
				var b = a.style,
					c = this._visible ? "visible" : "hidden";
				if (c != b.visibility && (b.visibility = c), this._visible) {
					var d = this.getConcatenatedMatrix(this._matrix),
						e = this._oldMtx,
						f = 1e4;
					if (e && e.alpha == d.alpha || (b.opacity = "" + (0 | d.alpha * f) / f, e && (e.alpha = d.alpha)), !e || e.tx != d.tx || e.ty != d.ty || e.a != d.a || e.b != d.b || e.c != d.c || e.d != d.d) {
						var g = "matrix(" + (0 | d.a * f) / f + "," + (0 | d.b * f) / f + "," + (0 | d.c * f) / f + "," + (0 | d.d * f) / f + "," + (0 | d.tx + .5);
						b.transform = b.WebkitTransform = b.OTransform = b.msTransform = g + "," + (0 | d.ty + .5) + ")", b.MozTransform = g + "px," + (0 | d.ty + .5) + "px)", this._oldMtx = e ? e.copy(d) : d.clone()
					}
				}
			}
		}, createjs.DOMElement = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function() {
				this.initialize()
			},
			b = a.prototype;
		b.initialize = function() {}, b.getBounds = function() {
			return null
		}, b.applyFilter = function() {}, b.toString = function() {
			return "[Filter]"
		}, b.clone = function() {
			return new a
		}, createjs.Filter = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a, b, c) {
				this.initialize(a, b, c)
			},
			b = a.prototype = new createjs.Filter;
		b.initialize = function(a, b, c) {
			(isNaN(a) || 0 > a) && (a = 0), this.blurX = 0 | a, (isNaN(b) || 0 > b) && (b = 0), this.blurY = 0 | b, (isNaN(c) || 1 > c) && (c = 1), this.quality = 0 | c
		}, b.blurX = 0, b.blurY = 0, b.quality = 1, b.mul_table = [1, 171, 205, 293, 57, 373, 79, 137, 241, 27, 391, 357, 41, 19, 283, 265, 497, 469, 443, 421, 25, 191, 365, 349, 335, 161, 155, 149, 9, 278, 269, 261, 505, 245, 475, 231, 449, 437, 213, 415, 405, 395, 193, 377, 369, 361, 353, 345, 169, 331, 325, 319, 313, 307, 301, 37, 145, 285, 281, 69, 271, 267, 263, 259, 509, 501, 493, 243, 479, 118, 465, 459, 113, 446, 55, 435, 429, 423, 209, 413, 51, 403, 199, 393, 97, 3, 379, 375, 371, 367, 363, 359, 355, 351, 347, 43, 85, 337, 333, 165, 327, 323, 5, 317, 157, 311, 77, 305, 303, 75, 297, 294, 73, 289, 287, 71, 141, 279, 277, 275, 68, 135, 67, 133, 33, 262, 260, 129, 511, 507, 503, 499, 495, 491, 61, 121, 481, 477, 237, 235, 467, 232, 115, 457, 227, 451, 7, 445, 221, 439, 218, 433, 215, 427, 425, 211, 419, 417, 207, 411, 409, 203, 202, 401, 399, 396, 197, 49, 389, 387, 385, 383, 95, 189, 47, 187, 93, 185, 23, 183, 91, 181, 45, 179, 89, 177, 11, 175, 87, 173, 345, 343, 341, 339, 337, 21, 167, 83, 331, 329, 327, 163, 81, 323, 321, 319, 159, 79, 315, 313, 39, 155, 309, 307, 153, 305, 303, 151, 75, 299, 149, 37, 295, 147, 73, 291, 145, 289, 287, 143, 285, 71, 141, 281, 35, 279, 139, 69, 275, 137, 273, 17, 271, 135, 269, 267, 133, 265, 33, 263, 131, 261, 130, 259, 129, 257, 1], b.shg_table = [0, 9, 10, 11, 9, 12, 10, 11, 12, 9, 13, 13, 10, 9, 13, 13, 14, 14, 14, 14, 10, 13, 14, 14, 14, 13, 13, 13, 9, 14, 14, 14, 15, 14, 15, 14, 15, 15, 14, 15, 15, 15, 14, 15, 15, 15, 15, 15, 14, 15, 15, 15, 15, 15, 15, 12, 14, 15, 15, 13, 15, 15, 15, 15, 16, 16, 16, 15, 16, 14, 16, 16, 14, 16, 13, 16, 16, 16, 15, 16, 13, 16, 15, 16, 14, 9, 16, 16, 16, 16, 16, 16, 16, 16, 16, 13, 14, 16, 16, 15, 16, 16, 10, 16, 15, 16, 14, 16, 16, 14, 16, 16, 14, 16, 16, 14, 15, 16, 16, 16, 14, 15, 14, 15, 13, 16, 16, 15, 17, 17, 17, 17, 17, 17, 14, 15, 17, 17, 16, 16, 17, 16, 15, 17, 16, 17, 11, 17, 16, 17, 16, 17, 16, 17, 17, 16, 17, 17, 16, 17, 17, 16, 16, 17, 17, 17, 16, 14, 17, 17, 17, 17, 15, 16, 14, 16, 15, 16, 13, 16, 15, 16, 14, 16, 15, 16, 12, 16, 15, 16, 17, 17, 17, 17, 17, 13, 16, 15, 17, 17, 17, 16, 15, 17, 17, 17, 16, 15, 17, 17, 14, 16, 17, 17, 16, 17, 17, 16, 15, 17, 16, 14, 17, 16, 15, 17, 16, 17, 17, 16, 17, 15, 16, 17, 14, 17, 16, 15, 17, 16, 17, 13, 17, 16, 17, 17, 16, 17, 14, 17, 16, 17, 16, 17, 16, 17, 9], b.getBounds = function() {
			var a = .5 * Math.pow(this.quality, .6);
			return new createjs.Rectangle(-this.blurX * a, -this.blurY * a, 2 * this.blurX * a, 2 * this.blurY * a)
		}, b.applyFilter = function(a, b, c, d, e, f, g, h) {
			f = f || a, null == g && (g = b), null == h && (h = c);
			try {
				var i = a.getImageData(b, c, d, e)
			} catch (j) {
				return !1
			}
			var k = this.blurX / 2;
			if (isNaN(k) || 0 > k) return !1;
			k |= 0;
			var l = this.blurY / 2;
			if (isNaN(l) || 0 > l) return !1;
			if (l |= 0, 0 == k && 0 == l) return !1;
			var m = this.quality;
			(isNaN(m) || 1 > m) && (m = 1), m |= 0, m > 3 && (m = 3), 1 > m && (m = 1);
			var b, c, n, o, p, q, r, s, t, u, v, w, x, y, z, A = i.data,
				B = k + k + 1,
				C = l + l + 1,
				D = d - 1,
				E = e - 1,
				F = k + 1,
				G = l + 1,
				H = {
					r: 0,
					b: 0,
					g: 0,
					a: 0,
					next: null
				},
				I = H;
			for (n = 1; B > n; n++) I = I.next = {
				r: 0,
				b: 0,
				g: 0,
				a: 0,
				next: null
			};
			I.next = H;
			var J = {
					r: 0,
					b: 0,
					g: 0,
					a: 0,
					next: null
				},
				K = J;
			for (n = 1; C > n; n++) K = K.next = {
				r: 0,
				b: 0,
				g: 0,
				a: 0,
				next: null
			};
			K.next = J;
			for (var L = null; m-- > 0;) {
				r = q = 0;
				var M = this.mul_table[k],
					N = this.shg_table[k];
				for (c = e; --c > -1;) {
					for (s = F * (w = A[q]), t = F * (x = A[q + 1]), u = F * (y = A[q + 2]), v = F * (z = A[q + 3]), I = H, n = F; --n > -1;) I.r = w, I.g = x, I.b = y, I.a = z, I = I.next;
					for (n = 1; F > n; n++) o = q + ((n > D ? D : n) << 2), s += I.r = A[o], t += I.g = A[o + 1], u += I.b = A[o + 2], v += I.a = A[o + 3], I = I.next;
					for (L = H, b = 0; d > b; b++) A[q++] = s * M >>> N, A[q++] = t * M >>> N, A[q++] = u * M >>> N, A[q++] = v * M >>> N, o = r + ((o = b + k + 1) < D ? o : D) << 2, s -= L.r - (L.r = A[o]), t -= L.g - (L.g = A[o + 1]), u -= L.b - (L.b = A[o + 2]), v -= L.a - (L.a = A[o + 3]), L = L.next;
					r += d
				}
				for (M = this.mul_table[l], N = this.shg_table[l], b = 0; d > b; b++) {
					for (q = b << 2, s = G * (w = A[q]), t = G * (x = A[q + 1]), u = G * (y = A[q + 2]), v = G * (z = A[q + 3]), K = J, n = 0; G > n; n++) K.r = w, K.g = x, K.b = y, K.a = z, K = K.next;
					for (p = d, n = 1; l >= n; n++) q = p + b << 2, s += K.r = A[q], t += K.g = A[q + 1], u += K.b = A[q + 2], v += K.a = A[q + 3], K = K.next, E > n && (p += d);
					if (q = b, L = J, m > 0)
						for (c = 0; e > c; c++) o = q << 2, A[o + 3] = z = v * M >>> N, z > 0 ? (A[o] = s * M >>> N, A[o + 1] = t * M >>> N, A[o + 2] = u * M >>> N) : A[o] = A[o + 1] = A[o + 2] = 0, o = b + ((o = c + G) < E ? o : E) * d << 2, s -= L.r - (L.r = A[o]), t -= L.g - (L.g = A[o + 1]), u -= L.b - (L.b = A[o + 2]), v -= L.a - (L.a = A[o + 3]), L = L.next, q += d;
					else
						for (c = 0; e > c; c++) o = q << 2, A[o + 3] = z = v * M >>> N, z > 0 ? (z = 255 / z, A[o] = (s * M >>> N) * z, A[o + 1] = (t * M >>> N) * z, A[o + 2] = (u * M >>> N) * z) : A[o] = A[o + 1] = A[o + 2] = 0, o = b + ((o = c + G) < E ? o : E) * d << 2, s -= L.r - (L.r = A[o]), t -= L.g - (L.g = A[o + 1]), u -= L.b - (L.b = A[o + 2]), v -= L.a - (L.a = A[o + 3]), L = L.next, q += d
				}
			}
			return f.putImageData(i, g, h), !0
		}, b.clone = function() {
			return new a(this.blurX, this.blurY, this.quality)
		}, b.toString = function() {
			return "[BlurFilter]"
		}, createjs.BlurFilter = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a) {
				this.initialize(a)
			},
			b = a.prototype = new createjs.Filter;
		b.initialize = function(a) {
			this.alphaMap = a
		}, b.alphaMap = null, b._alphaMap = null, b._mapData = null, b.applyFilter = function(a, b, c, d, e, f, g, h) {
			if (!this.alphaMap) return !0;
			if (!this._prepAlphaMap()) return !1;
			f = f || a, null == g && (g = b), null == h && (h = c);
			try {
				var i = a.getImageData(b, c, d, e)
			} catch (j) {
				return !1
			}
			for (var k = i.data, l = this._mapData, m = k.length, n = 0; m > n; n += 4) k[n + 3] = l[n] || 0;
			return f.putImageData(i, g, h), !0
		}, b.clone = function() {
			return new a(this.alphaMap)
		}, b.toString = function() {
			return "[AlphaMapFilter]"
		}, b._prepAlphaMap = function() {
			if (!this.alphaMap) return !1;
			if (this.alphaMap == this._alphaMap && this._mapData) return !0;
			this._mapData = null;
			var a, b = this._alphaMap = this.alphaMap,
				c = b;
			b instanceof HTMLCanvasElement ? a = c.getContext("2d") : (c = createjs.createCanvas ? createjs.createCanvas() : document.createElement("canvas"), c.width = b.width, c.height = b.height, a = c.getContext("2d"), a.drawImage(b, 0, 0));
			try {
				var d = a.getImageData(0, 0, b.width, b.height)
			} catch (e) {
				return !1
			}
			return this._mapData = d.data, !0
		}, createjs.AlphaMapFilter = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a) {
				this.initialize(a)
			},
			b = a.prototype = new createjs.Filter;
		b.initialize = function(a) {
			this.mask = a
		}, b.mask = null, b.applyFilter = function(a, b, c, d, e, f, g, h) {
			return this.mask ? (f = f || a, null == g && (g = b), null == h && (h = c), f.save(), f.globalCompositeOperation = "destination-in", f.drawImage(this.mask, g, h), f.restore(), !0) : !0
		}, b.clone = function() {
			return new a(this.mask)
		}, b.toString = function() {
			return "[AlphaMaskFilter]"
		}, createjs.AlphaMaskFilter = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a, b, c, d, e, f, g, h) {
				this.initialize(a, b, c, d, e, f, g, h)
			},
			b = a.prototype = new createjs.Filter;
		b.redMultiplier = 1, b.greenMultiplier = 1, b.blueMultiplier = 1, b.alphaMultiplier = 1, b.redOffset = 0, b.greenOffset = 0, b.blueOffset = 0, b.alphaOffset = 0, b.initialize = function(a, b, c, d, e, f, g, h) {
			this.redMultiplier = null != a ? a : 1, this.greenMultiplier = null != b ? b : 1, this.blueMultiplier = null != c ? c : 1, this.alphaMultiplier = null != d ? d : 1, this.redOffset = e || 0, this.greenOffset = f || 0, this.blueOffset = g || 0, this.alphaOffset = h || 0
		}, b.applyFilter = function(a, b, c, d, e, f, g, h) {
			f = f || a, null == g && (g = b), null == h && (h = c);
			try {
				var i = a.getImageData(b, c, d, e)
			} catch (j) {
				return !1
			}
			for (var k = i.data, l = k.length, m = 0; l > m; m += 4) k[m] = k[m] * this.redMultiplier + this.redOffset, k[m + 1] = k[m + 1] * this.greenMultiplier + this.greenOffset, k[m + 2] = k[m + 2] * this.blueMultiplier + this.blueOffset, k[m + 3] = k[m + 3] * this.alphaMultiplier + this.alphaOffset;
			return f.putImageData(i, g, h), !0
		}, b.toString = function() {
			return "[ColorFilter]"
		}, b.clone = function() {
			return new a(this.redMultiplier, this.greenMultiplier, this.blueMultiplier, this.alphaMultiplier, this.redOffset, this.greenOffset, this.blueOffset, this.alphaOffset)
		}, createjs.ColorFilter = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a, b, c, d) {
				this.initialize(a, b, c, d)
			},
			b = a.prototype;
		a.DELTA_INDEX = [0, .01, .02, .04, .05, .06, .07, .08, .1, .11, .12, .14, .15, .16, .17, .18, .2, .21, .22, .24, .25, .27, .28, .3, .32, .34, .36, .38, .4, .42, .44, .46, .48, .5, .53, .56, .59, .62, .65, .68, .71, .74, .77, .8, .83, .86, .89, .92, .95, .98, 1, 1.06, 1.12, 1.18, 1.24, 1.3, 1.36, 1.42, 1.48, 1.54, 1.6, 1.66, 1.72, 1.78, 1.84, 1.9, 1.96, 2, 2.12, 2.25, 2.37, 2.5, 2.62, 2.75, 2.87, 3, 3.2, 3.4, 3.6, 3.8, 4, 4.3, 4.7, 4.9, 5, 5.5, 6, 6.5, 6.8, 7, 7.3, 7.5, 7.8, 8, 8.4, 8.7, 9, 9.4, 9.6, 9.8, 10], a.IDENTITY_MATRIX = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1], a.LENGTH = a.IDENTITY_MATRIX.length, b.initialize = function(a, b, c, d) {
			return this.reset(), this.adjustColor(a, b, c, d), this
		}, b.reset = function() {
			return this.copyMatrix(a.IDENTITY_MATRIX)
		}, b.adjustColor = function(a, b, c, d) {
			return this.adjustHue(d), this.adjustContrast(b), this.adjustBrightness(a), this.adjustSaturation(c)
		}, b.adjustBrightness = function(a) {
			return 0 == a || isNaN(a) ? this : (a = this._cleanValue(a, 255), this._multiplyMatrix([1, 0, 0, 0, a, 0, 1, 0, 0, a, 0, 0, 1, 0, a, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1]), this)
		}, b.adjustContrast = function(b) {
			if (0 == b || isNaN(b)) return this;
			b = this._cleanValue(b, 100);
			var c;
			return 0 > b ? c = 127 + 127 * (b / 100) : (c = b % 1, c = 0 == c ? a.DELTA_INDEX[b] : a.DELTA_INDEX[b << 0] * (1 - c) + a.DELTA_INDEX[(b << 0) + 1] * c, c = 127 * c + 127), this._multiplyMatrix([c / 127, 0, 0, 0, .5 * (127 - c), 0, c / 127, 0, 0, .5 * (127 - c), 0, 0, c / 127, 0, .5 * (127 - c), 0, 0, 0, 1, 0, 0, 0, 0, 0, 1]), this
		}, b.adjustSaturation = function(a) {
			if (0 == a || isNaN(a)) return this;
			a = this._cleanValue(a, 100);
			var b = 1 + (a > 0 ? 3 * a / 100 : a / 100),
				c = .3086,
				d = .6094,
				e = .082;
			return this._multiplyMatrix([c * (1 - b) + b, d * (1 - b), e * (1 - b), 0, 0, c * (1 - b), d * (1 - b) + b, e * (1 - b), 0, 0, c * (1 - b), d * (1 - b), e * (1 - b) + b, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1]), this
		}, b.adjustHue = function(a) {
			if (0 == a || isNaN(a)) return this;
			a = this._cleanValue(a, 180) / 180 * Math.PI;
			var b = Math.cos(a),
				c = Math.sin(a),
				d = .213,
				e = .715,
				f = .072;
			return this._multiplyMatrix([d + b * (1 - d) + c * -d, e + b * -e + c * -e, f + b * -f + c * (1 - f), 0, 0, d + b * -d + .143 * c, e + b * (1 - e) + .14 * c, f + b * -f + c * -.283, 0, 0, d + b * -d + c * -(1 - d), e + b * -e + c * e, f + b * (1 - f) + c * f, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1]), this
		}, b.concat = function(b) {
			return b = this._fixMatrix(b), b.length != a.LENGTH ? this : (this._multiplyMatrix(b), this)
		}, b.clone = function() {
			return (new a).copyMatrix(this)
		}, b.toArray = function() {
			for (var b = [], c = 0, d = a.LENGTH; d > c; c++) b[c] = this[c];
			return b
		}, b.copyMatrix = function(b) {
			for (var c = a.LENGTH, d = 0; c > d; d++) this[d] = b[d];
			return this
		}, b.toString = function() {
			return "[ColorMatrix]"
		}, b._multiplyMatrix = function(a) {
			for (var b = [], c = 0; 5 > c; c++) {
				for (var d = 0; 5 > d; d++) b[d] = this[d + 5 * c];
				for (var d = 0; 5 > d; d++) {
					for (var e = 0, f = 0; 5 > f; f++) e += a[d + 5 * f] * b[f];
					this[d + 5 * c] = e
				}
			}
		}, b._cleanValue = function(a, b) {
			return Math.min(b, Math.max(-b, a))
		}, b._fixMatrix = function(b) {
			return b instanceof a && (b = b.toArray()), b.length < a.LENGTH ? b = b.slice(0, b.length).concat(a.IDENTITY_MATRIX.slice(b.length, a.LENGTH)) : b.length > a.LENGTH && (b = b.slice(0, a.LENGTH)), b
		}, createjs.ColorMatrix = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a) {
				this.initialize(a)
			},
			b = a.prototype = new createjs.Filter;
		b.matrix = null, b.initialize = function(a) {
			this.matrix = a
		}, b.applyFilter = function(a, b, c, d, e, f, g, h) {
			f = f || a, null == g && (g = b), null == h && (h = c);
			try {
				var i = a.getImageData(b, c, d, e)
			} catch (j) {
				return !1
			}
			for (var k, l, m, n, o = i.data, p = o.length, q = this.matrix, r = q[0], s = q[1], t = q[2], u = q[3], v = q[4], w = q[5], x = q[6], y = q[7], z = q[8], A = q[9], B = q[10], C = q[11], D = q[12], E = q[13], F = q[14], G = q[15], H = q[16], I = q[17], J = q[18], K = q[19], L = 0; p > L; L += 4) k = o[L], l = o[L + 1], m = o[L + 2], n = o[L + 3], o[L] = k * r + l * s + m * t + n * u + v, o[L + 1] = k * w + l * x + m * y + n * z + A, o[L + 2] = k * B + l * C + m * D + n * E + F, o[L + 3] = k * G + l * H + m * I + n * J + K;
			return f.putImageData(i, g, h), !0
		}, b.toString = function() {
			return "[ColorMatrixFilter]"
		}, b.clone = function() {
			return new a(this.matrix)
		}, createjs.ColorMatrixFilter = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function() {
			throw "Touch cannot be instantiated"
		};
		a.isSupported = function() {
			return "ontouchstart" in window || window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 0 || window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 0
		}, a.enable = function(b, c, d) {
			return b && b.canvas && a.isSupported() ? (b.__touch = {
				pointers: {},
				multitouch: !c,
				preventDefault: !d,
				count: 0
			}, "ontouchstart" in window ? a._IOS_enable(b) : (window.navigator.msPointerEnabled || window.navigator.pointerEnabled) && a._IE_enable(b), !0) : !1
		}, a.disable = function(b) {
			b && ("ontouchstart" in window ? a._IOS_disable(b) : (window.navigator.msPointerEnabled || window.navigator.pointerEnabled) && a._IE_disable(b))
		}, a._IOS_enable = function(b) {
			var c = b.canvas,
				d = b.__touch.f = function(c) {
					a._IOS_handleEvent(b, c)
				};
			c.addEventListener("touchstart", d, !1), c.addEventListener("touchmove", d, !1), c.addEventListener("touchend", d, !1), c.addEventListener("touchcancel", d, !1)
		}, a._IOS_disable = function(a) {
			var b = a.canvas;
			if (b) {
				var c = a.__touch.f;
				b.removeEventListener("touchstart", c, !1), b.removeEventListener("touchmove", c, !1), b.removeEventListener("touchend", c, !1), b.removeEventListener("touchcancel", c, !1)
			}
		}, a._IOS_handleEvent = function(a, b) {
			if (a) {
				a.__touch.preventDefault && b.preventDefault && b.preventDefault();
				for (var c = b.changedTouches, d = b.type, e = 0, f = c.length; f > e; e++) {
					var g = c[e],
						h = g.identifier;
					g.target == a.canvas && ("touchstart" == d ? this._handleStart(a, h, b, g.pageX, g.pageY) : "touchmove" == d ? this._handleMove(a, h, b, g.pageX, g.pageY) : ("touchend" == d || "touchcancel" == d) && this._handleEnd(a, h, b))
				}
			}
		}, a._IE_enable = function(b) {
			var c = b.canvas,
				d = b.__touch.f = function(c) {
					a._IE_handleEvent(b, c)
				};
			void 0 === window.navigator.pointerEnabled ? (c.addEventListener("MSPointerDown", d, !1), window.addEventListener("MSPointerMove", d, !1), window.addEventListener("MSPointerUp", d, !1), window.addEventListener("MSPointerCancel", d, !1), b.__touch.preventDefault && (c.style.msTouchAction = "none")) : (c.addEventListener("pointerdown", d, !1), window.addEventListener("pointermove", d, !1), window.addEventListener("pointerup", d, !1), window.addEventListener("pointercancel", d, !1), b.__touch.preventDefault && (c.style.touchAction = "none")), b.__touch.activeIDs = {}
		}, a._IE_disable = function(a) {
			var b = a.__touch.f;
			void 0 === window.navigator.pointerEnabled ? (window.removeEventListener("MSPointerMove", b, !1), window.removeEventListener("MSPointerUp", b, !1), window.removeEventListener("MSPointerCancel", b, !1), a.canvas && a.canvas.removeEventListener("MSPointerDown", b, !1)) : (window.removeEventListener("pointermove", b, !1), window.removeEventListener("pointerup", b, !1), window.removeEventListener("pointercancel", b, !1), a.canvas && a.canvas.removeEventListener("pointerdown", b, !1))
		}, a._IE_handleEvent = function(a, b) {
			if (a) {
				a.__touch.preventDefault && b.preventDefault && b.preventDefault();
				var c = b.type,
					d = b.pointerId,
					e = a.__touch.activeIDs;
				if ("MSPointerDown" == c || "pointerdown" == c) {
					if (b.srcElement != a.canvas) return;
					e[d] = !0, this._handleStart(a, d, b, b.pageX, b.pageY)
				} else e[d] && ("MSPointerMove" == c || "pointermove" == c ? this._handleMove(a, d, b, b.pageX, b.pageY) : ("MSPointerUp" == c || "MSPointerCancel" == c || "pointerup" == c || "pointercancel" == c) && (delete e[d], this._handleEnd(a, d, b)))
			}
		}, a._handleStart = function(a, b, c, d, e) {
			var f = a.__touch;
			if (f.multitouch || !f.count) {
				var g = f.pointers;
				g[b] || (g[b] = !0, f.count++, a._handlePointerDown(b, c, d, e))
			}
		}, a._handleMove = function(a, b, c, d, e) {
			a.__touch.pointers[b] && a._handlePointerMove(b, c, d, e)
		}, a._handleEnd = function(a, b, c) {
			var d = a.__touch,
				e = d.pointers;
			e[b] && (d.count--, a._handlePointerUp(b, c, !0), delete e[b])
		}, createjs.Touch = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = createjs.EaselJS = createjs.EaselJS || {};
		a.version = "NEXT", a.buildDate = "Thu, 12 Dec 2013 23:37:07 GMT"
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = createjs.PreloadJS = createjs.PreloadJS || {};
		a.version = "NEXT", a.buildDate = "Thu, 12 Dec 2013 23:37:07 GMT"
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		createjs.proxy = function(a, b) {
			var c = Array.prototype.slice.call(arguments, 2);
			return function() {
				return a.apply(b, Array.prototype.slice.call(arguments, 0).concat(c))
			}
		}
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function() {
			this.init()
		};
		a.prototype = new createjs.EventDispatcher;
		var b = a.prototype,
			c = a;
		c.FILE_PATTERN = /^(?:(\w+:)\/{2}(\w+(?:\.\w+)*\/?)|(.{0,2}\/{1}))?([/.]*?(?:[^?]+)?\/)?((?:[^/?]+)\.(\w+))(?:\?(\S+)?)?$/, c.PATH_PATTERN = /^(?:(\w+:)\/{2})|(.{0,2}\/{1})?([/.]*?(?:[^?]+)?\/?)?$/, b.loaded = !1, b.canceled = !1, b.progress = 0, b._item = null, b.getItem = function() {
			return this._item
		}, b.init = function() {}, b.load = function() {}, b.close = function() {}, b._sendLoadStart = function() {
			this._isCanceled() || this.dispatchEvent("loadstart")
		}, b._sendProgress = function(a) {
			if (!this._isCanceled()) {
				var b = null;
				"number" == typeof a ? (this.progress = a, b = new createjs.Event("progress"), b.loaded = this.progress, b.total = 1) : (b = a, this.progress = a.loaded / a.total, (isNaN(this.progress) || 1 / 0 == this.progress) && (this.progress = 0)), b.progress = this.progress, this.hasEventListener("progress") && this.dispatchEvent(b)
			}
		}, b._sendComplete = function() {
			this._isCanceled() || this.dispatchEvent("complete")
		}, b._sendError = function(a) {
			!this._isCanceled() && this.hasEventListener("error") && (null == a && (a = new createjs.Event("error")), this.dispatchEvent(a))
		}, b._isCanceled = function() {
			return null == window.createjs || this.canceled ? !0 : !1
		}, b._parseURI = function(a) {
			return a ? a.match(c.FILE_PATTERN) : null
		}, b._parsePath = function(a) {
			return a ? a.match(c.PATH_PATTERN) : null
		}, b._formatQueryString = function(a, b) {
			if (null == a) throw new Error("You must specify data.");
			var c = [];
			for (var d in a) c.push(d + "=" + escape(a[d]));
			return b && (c = c.concat(b)), c.join("&")
		}, b.buildPath = function(a, b) {
			if (null == b) return a;
			var c = [],
				d = a.indexOf("?");
			if (-1 != d) {
				var e = a.slice(d + 1);
				c = c.concat(e.split("&"))
			}
			return -1 != d ? a.slice(0, d) + "?" + this._formatQueryString(b, c) : a + "?" + this._formatQueryString(b, c)
		}, b._isCrossDomain = function(a) {
			var b = document.createElement("a");
			b.href = a.src;
			var c = document.createElement("a");
			c.href = location.href;
			var d = "" != b.hostname && (b.port != c.port || b.protocol != c.protocol || b.hostname != c.hostname);
			return d
		}, b._isLocal = function(a) {
			var b = document.createElement("a");
			return b.href = a.src, "" == b.hostname && "file:" == b.protocol
		}, b.toString = function() {
			return "[PreloadJS AbstractLoader]"
		}, createjs.AbstractLoader = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a, b, c) {
				this.init(a, b, c)
			},
			b = a.prototype = new createjs.AbstractLoader,
			c = a;
		c.loadTimeout = 8e3, c.LOAD_TIMEOUT = 0, c.BINARY = "binary", c.CSS = "css", c.IMAGE = "image", c.JAVASCRIPT = "javascript", c.JSON = "json", c.JSONP = "jsonp", c.MANIFEST = "manifest", c.SOUND = "sound", c.SVG = "svg", c.TEXT = "text", c.XML = "xml", c.POST = "POST", c.GET = "GET", b._basePath = null, b._crossOrigin = "", b.useXHR = !0, b.stopOnError = !1, b.maintainScriptOrder = !0, b.next = null, b._typeCallbacks = null, b._extensionCallbacks = null, b._loadStartWasDispatched = !1, b._maxConnections = 1, b._currentlyLoadingScript = null, b._currentLoads = null, b._loadQueue = null, b._loadQueueBackup = null, b._loadItemsById = null, b._loadItemsBySrc = null, b._loadedResults = null, b._loadedRawResults = null, b._numItems = 0, b._numItemsLoaded = 0, b._scriptOrder = null, b._loadedScripts = null, b.init = function(a, b, c) {
			this._numItems = this._numItemsLoaded = 0, this._paused = !1, this._loadStartWasDispatched = !1, this._currentLoads = [], this._loadQueue = [], this._loadQueueBackup = [], this._scriptOrder = [], this._loadedScripts = [], this._loadItemsById = {}, this._loadItemsBySrc = {}, this._loadedResults = {}, this._loadedRawResults = {}, this._typeCallbacks = {}, this._extensionCallbacks = {}, this._basePath = b, this.setUseXHR(a), this._crossOrigin = c === !0 ? "Anonymous" : c === !1 || null == c ? "" : c
		}, b.setUseXHR = function(a) {
			return this.useXHR = 0 != a && null != window.XMLHttpRequest, this.useXHR
		}, b.removeAll = function() {
			this.remove()
		}, b.remove = function(a) {
			var b = null;
			if (!a || a instanceof Array) {
				if (a) b = a;
				else if (arguments.length > 0) return
			} else b = [a];
			var c = !1;
			if (b) {
				for (; b.length;) {
					var d = b.pop(),
						e = this.getResult(d);
					for (f = this._loadQueue.length - 1; f >= 0; f--)
						if (g = this._loadQueue[f].getItem(), g.id == d || g.src == d) {
							this._loadQueue.splice(f, 1)[0].cancel();
							break
						} for (f = this._loadQueueBackup.length - 1; f >= 0; f--)
						if (g = this._loadQueueBackup[f].getItem(), g.id == d || g.src == d) {
							this._loadQueueBackup.splice(f, 1)[0].cancel();
							break
						} if (e) delete this._loadItemsById[e.id], delete this._loadItemsBySrc[e.src], this._disposeItem(e);
					else
						for (var f = this._currentLoads.length - 1; f >= 0; f--) {
							var g = this._currentLoads[f].getItem();
							if (g.id == d || g.src == d) {
								this._currentLoads.splice(f, 1)[0].cancel(), c = !0;
								break
							}
						}
				}
				c && this._loadNext()
			} else {
				this.close();
				for (var h in this._loadItemsById) this._disposeItem(this._loadItemsById[h]);
				this.init(this.useXHR)
			}
		}, b.reset = function() {
			this.close();
			for (var a in this._loadItemsById) this._disposeItem(this._loadItemsById[a]);
			for (var b = [], c = 0, d = this._loadQueueBackup.length; d > c; c++) b.push(this._loadQueueBackup[c].getItem());
			this.loadManifest(b, !1)
		}, c.isBinary = function(a) {
			switch (a) {
				case createjs.LoadQueue.IMAGE:
				case createjs.LoadQueue.BINARY:
					return !0;
				default:
					return !1
			}
		}, c.isText = function(a) {
			switch (a) {
				case createjs.LoadQueue.TEXT:
				case createjs.LoadQueue.JSON:
				case createjs.LoadQueue.MANIFEST:
				case createjs.LoadQueue.XML:
				case createjs.LoadQueue.HTML:
				case createjs.LoadQueue.CSS:
				case createjs.LoadQueue.SVG:
				case createjs.LoadQueue.JAVASCRIPT:
					return !0;
				default:
					return !1
			}
		}, b.installPlugin = function(a) {
			if (null != a && null != a.getPreloadHandlers) {
				var b = a.getPreloadHandlers();
				if (b.scope = a, null != b.types)
					for (var c = 0, d = b.types.length; d > c; c++) this._typeCallbacks[b.types[c]] = b;
				if (null != b.extensions)
					for (c = 0, d = b.extensions.length; d > c; c++) this._extensionCallbacks[b.extensions[c]] = b
			}
		}, b.setMaxConnections = function(a) {
			this._maxConnections = a, !this._paused && this._loadQueue.length > 0 && this._loadNext()
		}, b.loadFile = function(a, b, c) {
			if (null == a) {
				var d = new createjs.Event("error");
				return d.text = "PRELOAD_NO_FILE", this._sendError(d), void 0
			}
			this._addItem(a, null, c), b !== !1 ? this.setPaused(!1) : this.setPaused(!0)
		}, b.loadManifest = function(a, b, d) {
			var e = null,
				f = null;
			if (a instanceof Array) {
				if (0 == a.length) {
					var g = new createjs.Event("error");
					return g.text = "PRELOAD_MANIFEST_EMPTY", this._sendError(g), void 0
				}
				e = a
			} else if ("string" == typeof a) e = [{
				src: a,
				type: c.MANIFEST
			}];
			else {
				if ("object" != typeof a) {
					var g = new createjs.Event("error");
					return g.text = "PRELOAD_MANIFEST_NULL", this._sendError(g), void 0
				}
				if (void 0 !== a.src) {
					if (null == a.type) a.type = c.MANIFEST;
					else if (a.type != c.MANIFEST) {
						var g = new createjs.Event("error");
						g.text = "PRELOAD_MANIFEST_ERROR", this._sendError(g)
					}
					e = [a]
				} else void 0 !== a.manifest && (e = a.manifest, f = a.path)
			}
			for (var h = 0, i = e.length; i > h; h++) this._addItem(e[h], f, d);
			b !== !1 ? this.setPaused(!1) : this.setPaused(!0)
		}, b.load = function() {
			this.setPaused(!1)
		}, b.getItem = function(a) {
			return this._loadItemsById[a] || this._loadItemsBySrc[a]
		}, b.getResult = function(a, b) {
			var c = this._loadItemsById[a] || this._loadItemsBySrc[a];
			if (null == c) return null;
			var d = c.id;
			return b && this._loadedRawResults[d] ? this._loadedRawResults[d] : this._loadedResults[d]
		}, b.setPaused = function(a) {
			this._paused = a, this._paused || this._loadNext()
		}, b.close = function() {
			for (; this._currentLoads.length;) this._currentLoads.pop().cancel();
			this._scriptOrder.length = 0, this._loadedScripts.length = 0, this.loadStartWasDispatched = !1
		}, b._addItem = function(a, b, c) {
			var d = this._createLoadItem(a, b, c);
			if (null != d) {
				var e = this._createLoader(d);
				null != e && (this._loadQueue.push(e), this._loadQueueBackup.push(e), this._numItems++, this._updateProgress(), this.maintainScriptOrder && d.type == createjs.LoadQueue.JAVASCRIPT && e instanceof createjs.XHRLoader && (this._scriptOrder.push(d), this._loadedScripts.push(null)))
			}
		}, b._createLoadItem = function(a, b, c) {
			var d = null;
			switch (typeof a) {
				case "string":
					d = {
						src: a
					};
					break;
				case "object":
					d = window.HTMLAudioElement && a instanceof window.HTMLAudioElement ? {
						tag: a,
						src: d.tag.src,
						type: createjs.LoadQueue.SOUND
					} : a;
					break;
				default:
					return null
			}
			var e = this._parseURI(d.src);
			null != e && (d.ext = e[6]), null == d.type && (d.type = this._getTypeByExtension(d.ext));
			var f = "",
				g = c || this._basePath,
				h = d.src;
			if (e && null == e[1] && null == e[3])
				if (b) {
					f = b;
					var i = this._parsePath(b);
					h = b + h, null != g && i && null == i[1] && null == i[2] && (f = g + f)
				} else null != g && (f = g);
			if (d.src = f + d.src, d.path = f, (d.type == createjs.LoadQueue.JSON || d.type == createjs.LoadQueue.MANIFEST) && (d._loadAsJSONP = null != d.callback), d.type == createjs.LoadQueue.JSONP && null == d.callback) throw new Error("callback is required for loading JSONP requests.");
			(void 0 === d.tag || null === d.tag) && (d.tag = this._createTag(d)), (void 0 === d.id || null === d.id || "" === d.id) && (d.id = h);
			var j = this._typeCallbacks[d.type] || this._extensionCallbacks[d.ext];
			if (j) {
				var k = j.callback.call(j.scope, d.src, d.type, d.id, d.data, f, this);
				if (k === !1) return null;
				k === !0 || (null != k.src && (d.src = k.src), null != k.id && (d.id = k.id), null != k.tag && (d.tag = k.tag), null != k.completeHandler && (d.completeHandler = k.completeHandler), k.type && (d.type = k.type), e = this._parseURI(d.src), null != e && null != e[6] && (d.ext = e[6].toLowerCase()))
			}
			return this._loadItemsById[d.id] = d, this._loadItemsBySrc[d.src] = d, d
		}, b._createLoader = function(a) {
			var b = this.useXHR;
			switch (a.type) {
				case createjs.LoadQueue.JSON:
				case createjs.LoadQueue.MANIFEST:
					b = !a._loadAsJSONP;
					break;
				case createjs.LoadQueue.XML:
				case createjs.LoadQueue.TEXT:
					b = !0;
					break;
				case createjs.LoadQueue.SOUND:
				case createjs.LoadQueue.JSONP:
					b = !1;
					break;
				case null:
					return null
			}
			return b ? new createjs.XHRLoader(a, this._crossOrigin) : new createjs.TagLoader(a)
		}, b._loadNext = function() {
			if (!this._paused) {
				this._loadStartWasDispatched || (this._sendLoadStart(), this._loadStartWasDispatched = !0), this._numItems == this._numItemsLoaded ? (this.loaded = !0, this._sendComplete(), this.next && this.next.load && this.next.load()) : this.loaded = !1;
				for (var a = 0; a < this._loadQueue.length && !(this._currentLoads.length >= this._maxConnections); a++) {
					var b = this._loadQueue[a];
					if (this.maintainScriptOrder && b instanceof createjs.TagLoader && b.getItem().type == createjs.LoadQueue.JAVASCRIPT) {
						if (this._currentlyLoadingScript) continue;
						this._currentlyLoadingScript = !0
					}
					this._loadQueue.splice(a, 1), a--, this._loadItem(b)
				}
			}
		}, b._loadItem = function(a) {
			a.on("progress", this._handleProgress, this), a.on("complete", this._handleFileComplete, this), a.on("error", this._handleFileError, this), this._currentLoads.push(a), this._sendFileStart(a.getItem()), a.load()
		}, b._handleFileError = function(a) {
			var b = a.target;
			this._numItemsLoaded++, this._updateProgress();
			var c = new createjs.Event("error");
			c.text = "FILE_LOAD_ERROR", c.item = b.getItem(), this._sendError(c), this.stopOnError || (this._removeLoadItem(b), this._loadNext())
		}, b._handleFileComplete = function(a) {
			var b = a.target,
				c = b.getItem();
			if (this._loadedResults[c.id] = b.getResult(), b instanceof createjs.XHRLoader && (this._loadedRawResults[c.id] = b.getResult(!0)), this._removeLoadItem(b), this.maintainScriptOrder && c.type == createjs.LoadQueue.JAVASCRIPT) {
				if (!(b instanceof createjs.TagLoader)) return this._loadedScripts[createjs.indexOf(this._scriptOrder, c)] = c, this._checkScriptLoadOrder(b), void 0;
				this._currentlyLoadingScript = !1
			}
			if (delete c._loadAsJSONP, c.type == createjs.LoadQueue.MANIFEST) {
				var d = b.getResult();
				null != d && void 0 !== d.manifest && this.loadManifest(d, !0)
			}
			this._processFinishedLoad(c, b)
		}, b._processFinishedLoad = function(a, b) {
			this._numItemsLoaded++, this._updateProgress(), this._sendFileComplete(a, b), this._loadNext()
		}, b._checkScriptLoadOrder = function() {
			for (var a = this._loadedScripts.length, b = 0; a > b; b++) {
				var c = this._loadedScripts[b];
				if (null === c) break;
				if (c !== !0) {
					var d = this._loadedResults[c.id];
					(document.body || document.getElementsByTagName("body")[0]).appendChild(d), this._processFinishedLoad(c), this._loadedScripts[b] = !0
				}
			}
		}, b._removeLoadItem = function(a) {
			for (var b = this._currentLoads.length, c = 0; b > c; c++)
				if (this._currentLoads[c] == a) {
					this._currentLoads.splice(c, 1);
					break
				}
		}, b._handleProgress = function(a) {
			var b = a.target;
			this._sendFileProgress(b.getItem(), b.progress), this._updateProgress()
		}, b._updateProgress = function() {
			var a = this._numItemsLoaded / this._numItems,
				b = this._numItems - this._numItemsLoaded;
			if (b > 0) {
				for (var c = 0, d = 0, e = this._currentLoads.length; e > d; d++) c += this._currentLoads[d].progress;
				a += c / b * (b / this._numItems)
			}
			this._sendProgress(a)
		}, b._disposeItem = function(a) {
			delete this._loadedResults[a.id], delete this._loadedRawResults[a.id], delete this._loadItemsById[a.id], delete this._loadItemsBySrc[a.src]
		}, b._createTag = function(a) {
			var b = null;
			switch (a.type) {
				case createjs.LoadQueue.IMAGE:
					return b = document.createElement("img"), "" == this._crossOrigin || this._isLocal(a) || (b.crossOrigin = this._crossOrigin), b;
				case createjs.LoadQueue.SOUND:
					return b = document.createElement("audio"), b.autoplay = !1, b;
				case createjs.LoadQueue.JSON:
				case createjs.LoadQueue.JSONP:
				case createjs.LoadQueue.JAVASCRIPT:
				case createjs.LoadQueue.MANIFEST:
					return b = document.createElement("script"), b.type = "text/javascript", b;
				case createjs.LoadQueue.CSS:
					return b = this.useXHR ? document.createElement("style") : document.createElement("link"), b.rel = "stylesheet", b.type = "text/css", b;
				case createjs.LoadQueue.SVG:
					return this.useXHR ? b = document.createElement("svg") : (b = document.createElement("object"), b.type = "image/svg+xml"), b
			}
			return null
		}, b._getTypeByExtension = function(a) {
			if (null == a) return createjs.LoadQueue.TEXT;
			switch (a.toLowerCase()) {
				case "jpeg":
				case "jpg":
				case "gif":
				case "png":
				case "webp":
				case "bmp":
					return createjs.LoadQueue.IMAGE;
				case "ogg":
				case "mp3":
				case "wav":
					return createjs.LoadQueue.SOUND;
				case "json":
					return createjs.LoadQueue.JSON;
				case "xml":
					return createjs.LoadQueue.XML;
				case "css":
					return createjs.LoadQueue.CSS;
				case "js":
					return createjs.LoadQueue.JAVASCRIPT;
				case "svg":
					return createjs.LoadQueue.SVG;
				default:
					return createjs.LoadQueue.TEXT
			}
		}, b._sendFileProgress = function(a, b) {
			if (this._isCanceled()) return this._cleanUp(), void 0;
			if (this.hasEventListener("fileprogress")) {
				var c = new createjs.Event("fileprogress");
				c.progress = b, c.loaded = b, c.total = 1, c.item = a, this.dispatchEvent(c)
			}
		}, b._sendFileComplete = function(a, b) {
			if (!this._isCanceled()) {
				var c = new createjs.Event("fileload");
				c.loader = b, c.item = a, c.result = this._loadedResults[a.id], c.rawResult = this._loadedRawResults[a.id], a.completeHandler && a.completeHandler(c), this.hasEventListener("fileload") && this.dispatchEvent(c)
			}
		}, b._sendFileStart = function(a) {
			var b = new createjs.Event("filestart");
			b.item = a, this.hasEventListener("filestart") && this.dispatchEvent(b)
		}, b.toString = function() {
			return "[PreloadJS LoadQueue]"
		}, createjs.LoadQueue = a;
		var d = function() {};
		d.init = function() {
			var a = navigator.userAgent;
			d.isFirefox = a.indexOf("Firefox") > -1, d.isOpera = null != window.opera, d.isChrome = a.indexOf("Chrome") > -1, d.isIOS = a.indexOf("iPod") > -1 || a.indexOf("iPhone") > -1 || a.indexOf("iPad") > -1
		}, d.init(), createjs.LoadQueue.BrowserDetect = d
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a) {
				this.init(a)
			},
			b = a.prototype = new createjs.AbstractLoader;
		b._loadTimeout = null, b._tagCompleteProxy = null, b._isAudio = !1, b._tag = null, b._jsonResult = null, b.init = function(a) {
			this._item = a, this._tag = a.tag, this._isAudio = window.HTMLAudioElement && a.tag instanceof window.HTMLAudioElement, this._tagCompleteProxy = createjs.proxy(this._handleLoad, this)
		}, b.getResult = function() {
			return this._item.type == createjs.LoadQueue.JSONP || this._item.type == createjs.LoadQueue.MANIFEST ? this._jsonResult : this._tag
		}, b.cancel = function() {
			this.canceled = !0, this._clean()
		}, b.load = function() {
			var a = this._item,
				b = this._tag;
			clearTimeout(this._loadTimeout);
			var c = createjs.LoadQueue.LOAD_TIMEOUT;
			0 == c && (c = createjs.LoadQueue.loadTimeout), this._loadTimeout = setTimeout(createjs.proxy(this._handleTimeout, this), c), this._isAudio && (b.src = null, b.preload = "auto"), b.onerror = createjs.proxy(this._handleError, this), this._isAudio ? (b.onstalled = createjs.proxy(this._handleStalled, this), b.addEventListener("canplaythrough", this._tagCompleteProxy, !1)) : (b.onload = createjs.proxy(this._handleLoad, this), b.onreadystatechange = createjs.proxy(this._handleReadyStateChange, this));
			var d = this.buildPath(a.src, a.values);
			switch (a.type) {
				case createjs.LoadQueue.CSS:
					b.href = d;
					break;
				case createjs.LoadQueue.SVG:
					b.data = d;
					break;
				default:
					b.src = d
			}
			if (a.type == createjs.LoadQueue.JSONP || a.type == createjs.LoadQueue.JSON || a.type == createjs.LoadQueue.MANIFEST) {
				if (null == a.callback) throw new Error("callback is required for loading JSONP requests.");
				if (null != window[a.callback]) throw new Error('JSONP callback "' + a.callback + '" already exists on window. You need to specify a different callback. Or re-name the current one.');
				window[a.callback] = createjs.proxy(this._handleJSONPLoad, this)
			}(a.type == createjs.LoadQueue.SVG || a.type == createjs.LoadQueue.JSONP || a.type == createjs.LoadQueue.JSON || a.type == createjs.LoadQueue.MANIFEST || a.type == createjs.LoadQueue.JAVASCRIPT || a.type == createjs.LoadQueue.CSS) && (this._startTagVisibility = b.style.visibility, b.style.visibility = "hidden", (document.body || document.getElementsByTagName("body")[0]).appendChild(b)), null != b.load && b.load()
		}, b._handleJSONPLoad = function(a) {
			this._jsonResult = a
		}, b._handleTimeout = function() {
			this._clean();
			var a = new createjs.Event("error");
			a.text = "PRELOAD_TIMEOUT", this._sendError(a)
		}, b._handleStalled = function() {}, b._handleError = function() {
			this._clean();
			var a = new createjs.Event("error");
			this._sendError(a)
		}, b._handleReadyStateChange = function() {
			clearTimeout(this._loadTimeout);
			var a = this.getItem().tag;
			("loaded" == a.readyState || "complete" == a.readyState) && this._handleLoad()
		}, b._handleLoad = function() {
			if (!this._isCanceled()) {
				var a = this.getItem(),
					b = a.tag;
				if (!(this.loaded || this._isAudio && 4 !== b.readyState)) {
					switch (this.loaded = !0, a.type) {
						case createjs.LoadQueue.SVG:
						case createjs.LoadQueue.JSON:
						case createjs.LoadQueue.JSONP:
						case createjs.LoadQueue.MANIFEST:
						case createjs.LoadQueue.CSS:
							b.style.visibility = this._startTagVisibility, (document.body || document.getElementsByTagName("body")[0]).removeChild(b)
					}
					this._clean(), this._sendComplete()
				}
			}
		}, b._clean = function() {
			clearTimeout(this._loadTimeout);
			var a = this.getItem(),
				b = a.tag;
			null != b && (b.onload = null, b.removeEventListener && b.removeEventListener("canplaythrough", this._tagCompleteProxy, !1), b.onstalled = null, b.onprogress = null, b.onerror = null, null != b.parentNode && a.type == createjs.LoadQueue.SVG && a.type == createjs.LoadQueue.JSON && a.type == createjs.LoadQueue.MANIFEST && a.type == createjs.LoadQueue.CSS && a.type == createjs.LoadQueue.JSONP && b.parentNode.removeChild(b));
			var a = this.getItem();
			(a.type == createjs.LoadQueue.JSONP || a.type == createjs.LoadQueue.MANIFEST) && (window[a.callback] = null)
		}, b.toString = function() {
			return "[PreloadJS TagLoader]"
		}, createjs.TagLoader = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a, b) {
				this.init(a, b)
			},
			b = a.prototype = new createjs.AbstractLoader;
		b._request = null, b._loadTimeout = null, b._xhrLevel = 1, b._response = null, b._rawResponse = null, b._crossOrigin = "", b.init = function(a, b) {
			this._item = a, this._crossOrigin = b, !this._createXHR(a)
		}, b.getResult = function(a) {
			return a && this._rawResponse ? this._rawResponse : this._response
		}, b.cancel = function() {
			this.canceled = !0, this._clean(), this._request.abort()
		}, b.load = function() {
			if (null == this._request) return this._handleError(), void 0;
			if (this._request.onloadstart = createjs.proxy(this._handleLoadStart, this), this._request.onprogress = createjs.proxy(this._handleProgress, this), this._request.onabort = createjs.proxy(this._handleAbort, this), this._request.onerror = createjs.proxy(this._handleError, this), this._request.ontimeout = createjs.proxy(this._handleTimeout, this), 1 == this._xhrLevel) {
				var a = createjs.LoadQueue.LOAD_TIMEOUT;
				if (0 == a) a = createjs.LoadQueue.loadTimeout;
				else try {
					console.warn("LoadQueue.LOAD_TIMEOUT has been deprecated in favor of LoadQueue.loadTimeout")
				} catch (b) {}
				this._loadTimeout = setTimeout(createjs.proxy(this._handleTimeout, this), a)
			}
			this._request.onload = createjs.proxy(this._handleLoad, this), this._request.onreadystatechange = createjs.proxy(this._handleReadyStateChange, this);
			try {
				this._item.values && this._item.method != createjs.LoadQueue.GET ? this._item.method == createjs.LoadQueue.POST && this._request.send(this._formatQueryString(this._item.values)) : this._request.send()
			} catch (c) {
				var d = new createjs.Event("error");
				d.error = c, this._sendError(d)
			}
		}, b.getAllResponseHeaders = function() {
			return this._request.getAllResponseHeaders instanceof Function ? this._request.getAllResponseHeaders() : null
		}, b.getResponseHeader = function(a) {
			return this._request.getResponseHeader instanceof Function ? this._request.getResponseHeader(a) : null
		}, b._handleProgress = function(a) {
			if (a && !(a.loaded > 0 && 0 == a.total)) {
				var b = new createjs.Event("progress");
				b.loaded = a.loaded, b.total = a.total, this._sendProgress(b)
			}
		}, b._handleLoadStart = function() {
			clearTimeout(this._loadTimeout), this._sendLoadStart()
		}, b._handleAbort = function() {
			this._clean();
			var a = new createjs.Event("error");
			a.text = "XHR_ABORTED", this._sendError(a)
		}, b._handleError = function() {
			this._clean();
			var a = new createjs.Event("error");
			this._sendError(a)
		}, b._handleReadyStateChange = function() {
			4 == this._request.readyState && this._handleLoad()
		}, b._handleLoad = function() {
			if (!this.loaded) {
				if (this.loaded = !0, !this._checkError()) return this._handleError(), void 0;
				this._response = this._getResponse(), this._clean();
				var a = this._generateTag();
				a && this._sendComplete()
			}
		}, b._handleTimeout = function(a) {
			this._clean();
			var b = new createjs.Event("error");
			b.text = "PRELOAD_TIMEOUT", this._sendError(a)
		}, b._checkError = function() {
			var a = parseInt(this._request.status);
			switch (a) {
				case 404:
				case 0:
					return !1
			}
			return !0
		}, b._getResponse = function() {
			if (null != this._response) return this._response;
			if (null != this._request.response) return this._request.response;
			try {
				if (null != this._request.responseText) return this._request.responseText
			} catch (a) {}
			try {
				if (null != this._request.responseXML) return this._request.responseXML
			} catch (a) {}
			return null
		}, b._createXHR = function(a) {
			var b = this._isCrossDomain(a),
				c = null;
			if (b && window.XDomainRequest) c = new XDomainRequest;
			else if (window.XMLHttpRequest) c = new XMLHttpRequest;
			else try {
				c = new ActiveXObject("Msxml2.XMLHTTP.6.0")
			} catch (d) {
				try {
					c = new ActiveXObject("Msxml2.XMLHTTP.3.0")
				} catch (d) {
					try {
						c = new ActiveXObject("Msxml2.XMLHTTP")
					} catch (d) {
						return !1
					}
				}
			}
			createjs.LoadQueue.isText(a.type) && c.overrideMimeType && c.overrideMimeType("text/plain; charset=utf-8"), this._xhrLevel = "string" == typeof c.responseType ? 2 : 1;
			var e = null;
			return e = a.method == createjs.LoadQueue.GET ? this.buildPath(a.src, a.values) : a.src, c.open(a.method || createjs.LoadQueue.GET, e, !0), b && c instanceof XMLHttpRequest && 1 == this._xhrLevel && c.setRequestHeader("Origin", location.origin), a.values && a.method == createjs.LoadQueue.POST && c.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"), createjs.LoadQueue.isBinary(a.type) && (c.responseType = "arraybuffer"), this._request = c, !0
		}, b._clean = function() {
			clearTimeout(this._loadTimeout);
			var a = this._request;
			a.onloadstart = null, a.onprogress = null, a.onabort = null, a.onerror = null, a.onload = null, a.ontimeout = null, a.onloadend = null, a.onreadystatechange = null
		}, b._generateTag = function() {
			var a = this._item.type,
				b = this._item.tag;
			switch (a) {
				case createjs.LoadQueue.IMAGE:
					return b.onload = createjs.proxy(this._handleTagReady, this), "" != this._crossOrigin && (b.crossOrigin = "Anonymous"), b.src = this.buildPath(this._item.src, this._item.values), this._rawResponse = this._response, this._response = b, !1;
				case createjs.LoadQueue.JAVASCRIPT:
					return b = document.createElement("script"), b.text = this._response, this._rawResponse = this._response, this._response = b, !0;
				case createjs.LoadQueue.CSS:
					var c = document.getElementsByTagName("head")[0];
					if (c.appendChild(b), b.styleSheet) b.styleSheet.cssText = this._response;
					else {
						var d = document.createTextNode(this._response);
						b.appendChild(d)
					}
					return this._rawResponse = this._response, this._response = b, !0;
				case createjs.LoadQueue.XML:
					var e = this._parseXML(this._response, "text/xml");
					return this._rawResponse = this._response, this._response = e, !0;
				case createjs.LoadQueue.SVG:
					var e = this._parseXML(this._response, "image/svg+xml");
					return this._rawResponse = this._response, null != e.documentElement ? (b.appendChild(e.documentElement), this._response = b) : this._response = e, !0;
				case createjs.LoadQueue.JSON:
				case createjs.LoadQueue.MANIFEST:
					var f = {};
					try {
						f = JSON.parse(this._response)
					} catch (g) {
						f = g
					}
					return this._rawResponse = this._response, this._response = f, !0
			}
			return !0
		}, b._parseXML = function(a, b) {
			var c = null;
			try {
				if (window.DOMParser) {
					var d = new DOMParser;
					c = d.parseFromString(a, b)
				} else c = new ActiveXObject("Microsoft.XMLDOM"), c.async = !1, c.loadXML(a)
			} catch (e) {}
			return c
		}, b._handleTagReady = function() {
			this._sendComplete()
		}, b.toString = function() {
			return "[PreloadJS XHRLoader]"
		}, createjs.XHRLoader = a
	}(), "object" != typeof JSON && (JSON = {}),
	function() {
		"use strict";

		function f(a) {
			return 10 > a ? "0" + a : a
		}

		function quote(a) {
			return escapable.lastIndex = 0, escapable.test(a) ? '"' + a.replace(escapable, function(a) {
				var b = meta[a];
				return "string" == typeof b ? b : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4)
			}) + '"' : '"' + a + '"'
		}

		function str(a, b) {
			var c, d, e, f, g, h = gap,
				i = b[a];
			switch (i && "object" == typeof i && "function" == typeof i.toJSON && (i = i.toJSON(a)), "function" == typeof rep && (i = rep.call(b, a, i)), typeof i) {
				case "string":
					return quote(i);
				case "number":
					return isFinite(i) ? String(i) : "null";
				case "boolean":
				case "null":
					return String(i);
				case "object":
					if (!i) return "null";
					if (gap += indent, g = [], "[object Array]" === Object.prototype.toString.apply(i)) {
						for (f = i.length, c = 0; f > c; c += 1) g[c] = str(c, i) || "null";
						return e = 0 === g.length ? "[]" : gap ? "[\n" + gap + g.join(",\n" + gap) + "\n" + h + "]" : "[" + g.join(",") + "]", gap = h, e
					}
					if (rep && "object" == typeof rep)
						for (f = rep.length, c = 0; f > c; c += 1) "string" == typeof rep[c] && (d = rep[c], e = str(d, i), e && g.push(quote(d) + (gap ? ": " : ":") + e));
					else
						for (d in i) Object.prototype.hasOwnProperty.call(i, d) && (e = str(d, i), e && g.push(quote(d) + (gap ? ": " : ":") + e));
					return e = 0 === g.length ? "{}" : gap ? "{\n" + gap + g.join(",\n" + gap) + "\n" + h + "}" : "{" + g.join(",") + "}", gap = h, e
			}
		}
		"function" != typeof Date.prototype.toJSON && (Date.prototype.toJSON = function() {
			return isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" + f(this.getUTCMonth() + 1) + "-" + f(this.getUTCDate()) + "T" + f(this.getUTCHours()) + ":" + f(this.getUTCMinutes()) + ":" + f(this.getUTCSeconds()) + "Z" : null
		}, String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function() {
			return this.valueOf()
		});
		var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
			escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
			gap, indent, meta = {
				"\b": "\\b",
				"	": "\\t",
				"\n": "\\n",
				"\f": "\\f",
				"\r": "\\r",
				'"': '\\"',
				"\\": "\\\\"
			},
			rep;
		"function" != typeof JSON.stringify && (JSON.stringify = function(a, b, c) {
			var d;
			if (gap = "", indent = "", "number" == typeof c)
				for (d = 0; c > d; d += 1) indent += " ";
			else "string" == typeof c && (indent = c);
			if (rep = b, b && "function" != typeof b && ("object" != typeof b || "number" != typeof b.length)) throw new Error("JSON.stringify");
			return str("", {
				"": a
			})
		}), "function" != typeof JSON.parse && (JSON.parse = function(text, reviver) {
			function walk(a, b) {
				var c, d, e = a[b];
				if (e && "object" == typeof e)
					for (c in e) Object.prototype.hasOwnProperty.call(e, c) && (d = walk(e, c), void 0 !== d ? e[c] = d : delete e[c]);
				return reviver.call(a, b, e)
			}
			var j;
			if (text = String(text), cx.lastIndex = 0, cx.test(text) && (text = text.replace(cx, function(a) {
					return "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4)
				})), /^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) return j = eval("(" + text + ")"), "function" == typeof reviver ? walk({
				"": j
			}, "") : j;
			throw new SyntaxError("JSON.parse")
		})
	}(), this.createjs = this.createjs || {},
	function() {
		var a = createjs.SoundJS = createjs.SoundJS || {};
		a.version = "NEXT", a.buildDate = "Thu, 12 Dec 2013 23:37:06 GMT"
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";

		function a() {
			throw "Sound cannot be instantiated"
		}

		function b(a, b) {
			this.init(a, b)
		}

		function c() {
			this.isDefault = !0, this.addEventListener = this.removeEventListener = this.removeAllEventListeners = this.dispatchEvent = this.hasEventListener = this._listeners = this._interrupt = this._playFailed = this.pause = this.resume = this.play = this._beginPlaying = this._cleanUp = this.stop = this.setMasterVolume = this.setVolume = this.mute = this.setMute = this.getMute = this.setPan = this.getPosition = this.setPosition = this.playFailed = function() {
				return !1
			}, this.getVolume = this.getPan = this.getDuration = function() {
				return 0
			}, this.playState = a.PLAY_FAILED, this.toString = function() {
				return "[Sound Default Sound Instance]"
			}
		}

		function d() {}
		var e = a;
		e.DELIMITER = "|", e.INTERRUPT_ANY = "any", e.INTERRUPT_EARLY = "early", e.INTERRUPT_LATE = "late", e.INTERRUPT_NONE = "none", e.PLAY_INITED = "playInited", e.PLAY_SUCCEEDED = "playSucceeded", e.PLAY_INTERRUPTED = "playInterrupted", e.PLAY_FINISHED = "playFinished", e.PLAY_FAILED = "playFailed", e.SUPPORTED_EXTENSIONS = ["mp3", "ogg", "mpeg", "wav", "m4a", "mp4", "aiff", "wma", "mid"], e.EXTENSION_MAP = {
			m4a: "mp4"
		}, e.FILE_PATTERN = /^(?:(\w+:)\/{2}(\w+(?:\.\w+)*\/?))?([/.]*?(?:[^?]+)?\/)?((?:[^/?]+)\.(\w+))(?:\?(\S+)?)?$/, e.defaultInterruptBehavior = e.INTERRUPT_NONE, e.alternateExtensions = [], e._lastID = 0, e.activePlugin = null, e._pluginsRegistered = !1, e._masterVolume = 1, e._masterMute = !1, e._instances = [], e._idHash = {}, e._preloadHash = {}, e._defaultSoundInstance = null, e.addEventListener = null, e.removeEventListener = null, e.removeAllEventListeners = null, e.dispatchEvent = null, e.hasEventListener = null, e._listeners = null, createjs.EventDispatcher.initialize(e), e._sendFileLoadEvent = function(a) {
			if (e._preloadHash[a])
				for (var b = 0, c = e._preloadHash[a].length; c > b; b++) {
					var d = e._preloadHash[a][b];
					if (e._preloadHash[a][b] = !0, e.hasEventListener("fileload")) {
						var f = new createjs.Event("fileload");
						f.src = d.src, f.id = d.id, f.data = d.data, e.dispatchEvent(f)
					}
				}
		}, e.getPreloadHandlers = function() {
			return {
				callback: createjs.proxy(e.initLoad, e),
				types: ["sound"],
				extensions: e.SUPPORTED_EXTENSIONS
			}
		}, e.registerPlugin = function(a) {
			try {
				console.log("createjs.Sound.registerPlugin has been deprecated. Please use registerPlugins.")
			} catch (b) {}
			return e._registerPlugin(a)
		}, e._registerPlugin = function(a) {
			return e._pluginsRegistered = !0, null == a ? !1 : a.isSupported() ? (e.activePlugin = new a, !0) : !1
		}, e.registerPlugins = function(a) {
			for (var b = 0, c = a.length; c > b; b++) {
				var d = a[b];
				if (e._registerPlugin(d)) return !0
			}
			return !1
		}, e.initializeDefaultPlugins = function() {
			return null != e.activePlugin ? !0 : e._pluginsRegistered ? !1 : e.registerPlugins([createjs.WebAudioPlugin, createjs.HTMLAudioPlugin]) ? !0 : !1
		}, e.isReady = function() {
			return null != e.activePlugin
		}, e.getCapabilities = function() {
			return null == e.activePlugin ? null : e.activePlugin._capabilities
		}, e.getCapability = function(a) {
			return null == e.activePlugin ? null : e.activePlugin._capabilities[a]
		}, e.initLoad = function(a, b, c, d, f) {
			a = a.replace(f, "");
			var g = e.registerSound(a, c, d, !1, f);
			return null == g ? !1 : g
		}, e.registerSound = function(a, c, d, f, g) {
			if (!e.initializeDefaultPlugins()) return !1;
			if (a instanceof Object && (g = c, c = a.id, d = a.data, a = a.src), e.alternateExtensions.length) var h = e._parsePath2(a, "sound", c, d);
			else var h = e._parsePath(a, "sound", c, d);
			if (null == h) return !1;
			null != g && (a = g + a, h.src = g + h.src), null != c && (e._idHash[c] = h.src);
			var i = null;
			null != d && (isNaN(d.channels) ? isNaN(d) || (i = parseInt(d)) : i = parseInt(d.channels));
			var j = e.activePlugin.register(h.src, i);
			if (null != j && (null != j.numChannels && (i = j.numChannels), b.create(h.src, i), null != d && isNaN(d) ? d.channels = h.data.channels = i || b.maxPerChannel() : d = h.data = i || b.maxPerChannel(), null != j.tag ? h.tag = j.tag : j.src && (h.src = j.src), null != j.completeHandler && (h.completeHandler = j.completeHandler), j.type && (h.type = j.type)), 0 != f)
				if (e._preloadHash[h.src] || (e._preloadHash[h.src] = []), e._preloadHash[h.src].push({
						src: a,
						id: c,
						data: d
					}), 1 == e._preloadHash[h.src].length) e.activePlugin.preload(h.src, j);
				else if (1 == e._preloadHash[h.src][0]) return !0;
			return h
		}, e.registerManifest = function(a, b) {
			for (var c = [], d = 0, e = a.length; e > d; d++) c[d] = createjs.Sound.registerSound(a[d].src, a[d].id, a[d].data, a[d].preload, b);
			return c
		}, e.removeSound = function(a, c) {
			if (null == e.activePlugin) return !1;
			if (a instanceof Object && (a = a.src), a = e._getSrcById(a), e.alternateExtensions.length) var d = e._parsePath2(a);
			else var d = e._parsePath(a);
			if (null == d) return !1;
			null != c && (d.src = c + d.src), a = d.src;
			for (var f in e._idHash) e._idHash[f] == a && delete e._idHash[f];
			return b.removeSrc(a), delete e._preloadHash[a], e.activePlugin.removeSound(a), !0
		}, e.removeManifest = function(a, b) {
			for (var c = [], d = 0, e = a.length; e > d; d++) c[d] = createjs.Sound.removeSound(a[d].src, b);
			return c
		}, e.removeAllSounds = function() {
			e._idHash = {}, e._preloadHash = {}, b.removeAll(), e.activePlugin.removeAllSounds()
		}, e.loadComplete = function(a) {
			if (e.alternateExtensions.length) var b = e._parsePath2(a, "sound");
			else var b = e._parsePath(a, "sound");
			return a = b ? e._getSrcById(b.src) : e._getSrcById(a), 1 == e._preloadHash[a][0]
		}, e._parsePath = function(a, b, c, d) {
			"string" != typeof a && (a = a.toString());
			var f = a.split(e.DELIMITER);
			if (f.length > 1) try {
				console.log('createjs.Sound.DELIMITER "|" loading approach has been deprecated. Please use the new alternateExtensions property.')
			} catch (g) {}
			for (var h = {
					type: b || "sound",
					id: c,
					data: d
				}, i = e.getCapabilities(), j = 0, k = f.length; k > j; j++) {
				var l = f[j],
					m = l.match(e.FILE_PATTERN);
				if (null == m) return !1;
				var n = m[4],
					o = m[5];
				if (i[o] && createjs.indexOf(e.SUPPORTED_EXTENSIONS, o) > -1) return h.name = n, h.src = l, h.extension = o, h
			}
			return null
		}, e._parsePath2 = function(a, b, c, d) {
			"string" != typeof a && (a = a.toString());
			var f = a.match(e.FILE_PATTERN);
			if (null == f) return !1;
			for (var g = f[4], h = f[5], i = e.getCapabilities(), j = 0; !i[h];)
				if (h = e.alternateExtensions[j++], j > e.alternateExtensions.length) return null;
			a = a.replace("." + f[5], "." + h);
			var k = {
				type: b || "sound",
				id: c,
				data: d
			};
			return k.name = g, k.src = a, k.extension = h, k
		}, e.play = function(a, b, c, d, f, g, h) {
			var i = e.createInstance(a),
				j = e._playInstance(i, b, c, d, f, g, h);
			return j || i.playFailed(), i
		}, e.createInstance = function(c) {
			if (!e.initializeDefaultPlugins()) return e._defaultSoundInstance;
			if (c = e._getSrcById(c), e.alternateExtensions.length) var d = e._parsePath2(c, "sound");
			else var d = e._parsePath(c, "sound");
			var f = null;
			return null != d && null != d.src ? (b.create(d.src), f = e.activePlugin.create(d.src)) : f = a._defaultSoundInstance, f.uniqueId = e._lastID++, f
		}, e.setVolume = function(a) {
			if (null == Number(a)) return !1;
			if (a = Math.max(0, Math.min(1, a)), e._masterVolume = a, !this.activePlugin || !this.activePlugin.setVolume || !this.activePlugin.setVolume(a))
				for (var b = this._instances, c = 0, d = b.length; d > c; c++) b[c].setMasterVolume(a)
		}, e.getVolume = function() {
			return e._masterVolume
		}, e.setMute = function(a) {
			if (null == a || void 0 == a) return !1;
			if (this._masterMute = a, !this.activePlugin || !this.activePlugin.setMute || !this.activePlugin.setMute(a))
				for (var b = this._instances, c = 0, d = b.length; d > c; c++) b[c].setMasterMute(a);
			return !0
		}, e.getMute = function() {
			return this._masterMute
		}, e.stop = function() {
			for (var a = this._instances, b = a.length; b--;) a[b].stop()
		}, e._playInstance = function(a, b, c, d, f, g, h) {
			if (b instanceof Object && (c = b.delay, d = b.offset, f = b.loop, g = b.volume, h = b.pan, b = b.interrupt), b = b || e.defaultInterruptBehavior, null == c && (c = 0), null == d && (d = a.getPosition()), null == f && (f = 0), null == g && (g = a.volume), null == h && (h = a.pan), 0 == c) {
				var i = e._beginPlaying(a, b, d, f, g, h);
				if (!i) return !1
			} else {
				var j = setTimeout(function() {
					e._beginPlaying(a, b, d, f, g, h)
				}, c);
				a._delayTimeoutId = j
			}
			return this._instances.push(a), !0
		}, e._beginPlaying = function(a, c, d, e, f, g) {
			if (!b.add(a, c)) return !1;
			var h = a._beginPlaying(d, e, f, g);
			if (!h) {
				var i = createjs.indexOf(this._instances, a);
				return i > -1 && this._instances.splice(i, 1), !1
			}
			return !0
		}, e._getSrcById = function(a) {
			return null == e._idHash || null == e._idHash[a] ? a : e._idHash[a]
		}, e._playFinished = function(a) {
			b.remove(a);
			var c = createjs.indexOf(this._instances, a);
			c > -1 && this._instances.splice(c, 1)
		}, createjs.Sound = a, b.channels = {}, b.create = function(a, c) {
			var d = b.get(a);
			return null == d ? (b.channels[a] = new b(a, c), !0) : !1
		}, b.removeSrc = function(a) {
			var c = b.get(a);
			return null == c ? !1 : (c.removeAll(), delete b.channels[a], !0)
		}, b.removeAll = function() {
			for (var a in b.channels) b.channels[a].removeAll();
			b.channels = {}
		}, b.add = function(a, c) {
			var d = b.get(a.src);
			return null == d ? !1 : d.add(a, c)
		}, b.remove = function(a) {
			var c = b.get(a.src);
			return null == c ? !1 : (c.remove(a), !0)
		}, b.maxPerChannel = function() {
			return f.maxDefault
		}, b.get = function(a) {
			return b.channels[a]
		};
		var f = b.prototype;
		f.src = null, f.max = null, f.maxDefault = 100, f.length = 0, f.init = function(a, b) {
			this.src = a, this.max = b || this.maxDefault, -1 == this.max && (this.max = this.maxDefault), this._instances = []
		}, f.get = function(a) {
			return this._instances[a]
		}, f.add = function(a, b) {
			return this.getSlot(b, a) ? (this._instances.push(a), this.length++, !0) : !1
		}, f.remove = function(a) {
			var b = createjs.indexOf(this._instances, a);
			return -1 == b ? !1 : (this._instances.splice(b, 1), this.length--, !0)
		}, f.removeAll = function() {
			for (var a = this.length - 1; a >= 0; a--) this._instances[a].stop()
		}, f.getSlot = function(b) {
			for (var c, d, e = 0, f = this.max; f > e; e++) {
				if (c = this.get(e), null == c) return !0;
				(b != a.INTERRUPT_NONE || c.playState == a.PLAY_FINISHED) && (0 != e ? c.playState == a.PLAY_FINISHED || c.playState == a.PLAY_INTERRUPTED || c.playState == a.PLAY_FAILED ? d = c : (b == a.INTERRUPT_EARLY && c.getPosition() < d.getPosition() || b == a.INTERRUPT_LATE && c.getPosition() > d.getPosition()) && (d = c) : d = c)
			}
			return null != d ? (d._interrupt(), this.remove(d), !0) : !1
		}, f.toString = function() {
			return "[Sound SoundChannel]"
		}, a._defaultSoundInstance = new c, d.init = function() {
			var a = window.navigator.userAgent;
			d.isFirefox = a.indexOf("Firefox") > -1, d.isOpera = null != window.opera, d.isChrome = a.indexOf("Chrome") > -1, d.isIOS = a.indexOf("iPod") > -1 || a.indexOf("iPhone") > -1 || a.indexOf("iPad") > -1, d.isAndroid = a.indexOf("Android") > -1, d.isBlackberry = a.indexOf("Blackberry") > -1
		}, d.init(), createjs.Sound.BrowserDetect = d
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";

		function a() {
			this._init()
		}
		var b = a;
		b._capabilities = null, b.isSupported = function() {
			var a = createjs.Sound.BrowserDetect.isIOS || createjs.Sound.BrowserDetect.isAndroid || createjs.Sound.BrowserDetect.isBlackberry;
			return "file:" != location.protocol || a || this._isFileXHRSupported() ? (b._generateCapabilities(), null == b.context ? !1 : !0) : !1
		}, b._isFileXHRSupported = function() {
			var a = !0,
				b = new XMLHttpRequest;
			try {
				b.open("GET", "fail.fail", !1)
			} catch (c) {
				return a = !1
			}
			b.onerror = function() {
				a = !1
			}, b.onload = function() {
				a = 404 == this.status || 200 == this.status || 0 == this.status && "" != this.response
			};
			try {
				b.send()
			} catch (c) {
				a = !1
			}
			return a
		}, b._generateCapabilities = function() {
			if (null == b._capabilities) {
				var a = document.createElement("audio");
				if (null == a.canPlayType) return null;
				if (window.webkitAudioContext) b.context = new webkitAudioContext;
				else {
					if (!window.AudioContext) return null;
					b.context = new AudioContext
				}
				b._compatibilitySetUp(), b.playEmptySound(), b._capabilities = {
					panning: !0,
					volume: !0,
					tracks: -1
				};
				for (var c = createjs.Sound.SUPPORTED_EXTENSIONS, d = createjs.Sound.EXTENSION_MAP, e = 0, f = c.length; f > e; e++) {
					var g = c[e],
						h = d[g] || g;
					b._capabilities[g] = "no" != a.canPlayType("audio/" + g) && "" != a.canPlayType("audio/" + g) || "no" != a.canPlayType("audio/" + h) && "" != a.canPlayType("audio/" + h)
				}
				b.context.destination.numberOfChannels < 2 && (b._capabilities.panning = !1), b.dynamicsCompressorNode = b.context.createDynamicsCompressor(), b.dynamicsCompressorNode.connect(b.context.destination), b.gainNode = b.context.createGain(), b.gainNode.connect(b.dynamicsCompressorNode)
			}
		}, b._compatibilitySetUp = function() {
			if (!b.context.createGain) {
				b.context.createGain = b.context.createGainNode;
				var a = b.context.createBufferSource();
				a.__proto__.start = a.__proto__.noteGrainOn, a.__proto__.stop = a.__proto__.noteOff, this._panningModel = 0
			}
		}, b.playEmptySound = function() {
			var a = this.context.createBuffer(1, 1, 22050),
				b = this.context.createBufferSource();
			b.buffer = a, b.connect(this.context.destination), b.start(0, 0, 0)
		};
		var c = a.prototype;
		c._capabilities = null, c._volume = 1, c.context = null, c._panningModel = "equalpower", c.dynamicsCompressorNode = null, c.gainNode = null, c._arrayBuffers = null, c._init = function() {
			this._capabilities = b._capabilities, this._arrayBuffers = {}, this.context = b.context, this.gainNode = b.gainNode, this.dynamicsCompressorNode = b.dynamicsCompressorNode
		}, c.register = function(a) {
			this._arrayBuffers[a] = !0;
			var b = new createjs.WebAudioPlugin.Loader(a, this);
			return {
				tag: b
			}
		}, c.isPreloadStarted = function(a) {
			return null != this._arrayBuffers[a]
		}, c.isPreloadComplete = function(a) {
			return !(null == this._arrayBuffers[a] || 1 == this._arrayBuffers[a])
		}, c.removeSound = function(a) {
			delete this._arrayBuffers[a]
		}, c.removeAllSounds = function() {
			this._arrayBuffers = {}
		}, c.addPreloadResults = function(a, b) {
			this._arrayBuffers[a] = b
		}, c._handlePreloadComplete = function() {
			createjs.Sound._sendFileLoadEvent(this.src)
		}, c.preload = function(a) {
			this._arrayBuffers[a] = !0;
			var b = new createjs.WebAudioPlugin.Loader(a, this);
			b.onload = this._handlePreloadComplete, b.load()
		}, c.create = function(a) {
			return this.isPreloadStarted(a) || this.preload(a), new createjs.WebAudioPlugin.SoundInstance(a, this)
		}, c.setVolume = function(a) {
			return this._volume = a, this._updateVolume(), !0
		}, c._updateVolume = function() {
			var a = createjs.Sound._masterMute ? 0 : this._volume;
			a != this.gainNode.gain.value && (this.gainNode.gain.value = a)
		}, c.getVolume = function() {
			return this._volume
		}, c.setMute = function() {
			return this._updateVolume(), !0
		}, c.toString = function() {
			return "[WebAudioPlugin]"
		}, createjs.WebAudioPlugin = a
	}(),
	function() {
		"use strict";

		function a(a, b) {
			this._init(a, b)
		}
		var b = a.prototype = new createjs.EventDispatcher;
		b.src = null, b.uniqueId = -1, b.playState = null, b._owner = null, b._offset = 0, b._delay = 0, b._volume = 1;
		try {
			Object.defineProperty(b, "volume", {
				get: function() {
					return this._volume
				},
				set: function(a) {
					return null == Number(a) ? !1 : (a = Math.max(0, Math.min(1, a)), this._volume = a, this._updateVolume(), void 0)
				}
			})
		} catch (c) {}
		b._pan = 0;
		try {
			Object.defineProperty(b, "pan", {
				get: function() {
					return this._pan
				},
				set: function(a) {
					return this._owner._capabilities.panning && null != Number(a) ? (a = Math.max(-1, Math.min(1, a)), this._pan = a, this.panNode.setPosition(a, 0, -.5), void 0) : !1
				}
			})
		} catch (c) {}
		b._duration = 0, b._remainingLoops = 0, b._delayTimeoutId = null, b._soundCompleteTimeout = null, b.gainNode = null, b.panNode = null, b.sourceNode = null, b._sourceNodeNext = null, b._muted = !1, b._paused = !1, b._startTime = 0, b._endedHandler = null, b._sendEvent = function(a) {
			var b = new createjs.Event(a);
			this.dispatchEvent(b)
		}, b._init = function(a, b) {
			this._owner = b, this.src = a, this.gainNode = this._owner.context.createGain(), this.panNode = this._owner.context.createPanner(), this.panNode.panningModel = this._owner._panningModel, this.panNode.connect(this.gainNode), this._owner.isPreloadComplete(this.src) && (this._duration = 1e3 * this._owner._arrayBuffers[this.src].duration), this._endedHandler = createjs.proxy(this._handleSoundComplete, this)
		}, b._cleanUp = function() {
			this.sourceNode && this.playState == createjs.Sound.PLAY_SUCCEEDED && (this.sourceNode = this._cleanUpAudioNode(this.sourceNode), this._sourceNodeNext = this._cleanUpAudioNode(this._sourceNodeNext)), 0 != this.gainNode.numberOfOutputs && this.gainNode.disconnect(0), clearTimeout(this._delayTimeoutId), clearTimeout(this._soundCompleteTimeout), this._startTime = 0, null != window.createjs && createjs.Sound._playFinished(this)
		}, b._cleanUpAudioNode = function(a) {
			return a && (a.stop(0), a.disconnect(this.panNode), a = null), a
		}, b._interrupt = function() {
			this._cleanUp(), this.playState = createjs.Sound.PLAY_INTERRUPTED, this._paused = !1, this._sendEvent("interrupted")
		}, b._handleSoundReady = function() {
			if (null != window.createjs) {
				if (1e3 * this._offset > this.getDuration()) return this.playFailed(), void 0;
				this._offset < 0 && (this._offset = 0), this.playState = createjs.Sound.PLAY_SUCCEEDED, this._paused = !1, this.gainNode.connect(this._owner.gainNode);
				var a = this._owner._arrayBuffers[this.src].duration;
				this.sourceNode = this._createAndPlayAudioNode(this._owner.context.currentTime - a, this._offset), this._duration = 1e3 * a, this._startTime = this.sourceNode.startTime - this._offset, this._soundCompleteTimeout = setTimeout(this._endedHandler, 1e3 * (a - this._offset)), 0 != this._remainingLoops && (this._sourceNodeNext = this._createAndPlayAudioNode(this._startTime, 0))
			}
		}, b._createAndPlayAudioNode = function(a, b) {
			var c = this._owner.context.createBufferSource();
			return c.buffer = this._owner._arrayBuffers[this.src], c.connect(this.panNode), this._owner.context.currentTime, c.startTime = a + c.buffer.duration, c.start(c.startTime, b, c.buffer.duration - b), c
		}, b.play = function(a, b, c, d, e, f) {
			this._cleanUp(), createjs.Sound._playInstance(this, a, b, c, d, e, f)
		}, b._beginPlaying = function(a, b, c, d) {
			return null != window.createjs && this.src ? (this._offset = a / 1e3, this._remainingLoops = b, this.volume = c, this.pan = d, this._owner.isPreloadComplete(this.src) ? (this._handleSoundReady(null), this._sendEvent("succeeded"), 1) : (this.playFailed(), void 0)) : void 0
		}, b.pause = function() {
			return this._paused || this.playState != createjs.Sound.PLAY_SUCCEEDED ? !1 : (this._paused = !0, this._offset = this._owner.context.currentTime - this._startTime, this._cleanUpAudioNode(this.sourceNode), this._cleanUpAudioNode(this._sourceNodeNext), 0 != this.gainNode.numberOfOutputs && this.gainNode.disconnect(), clearTimeout(this._delayTimeoutId), clearTimeout(this._soundCompleteTimeout), !0)
		}, b.resume = function() {
			return this._paused ? (this._handleSoundReady(null), !0) : !1
		}, b.stop = function() {
			return this._cleanUp(), this.playState = createjs.Sound.PLAY_FINISHED, this._offset = 0, !0
		}, b.setVolume = function(a) {
			return this.volume = a, !0
		}, b._updateVolume = function() {
			var a = this._muted ? 0 : this._volume;
			return a != this.gainNode.gain.value ? (this.gainNode.gain.value = a, !0) : !1
		}, b.getVolume = function() {
			return this.volume
		}, b.setMute = function(a) {
			return null == a || void 0 == a ? !1 : (this._muted = a, this._updateVolume(), !0)
		}, b.getMute = function() {
			return this._muted
		}, b.setPan = function(a) {
			return this.pan = a, this.pan != a ? !1 : void 0
		}, b.getPan = function() {
			return this.pan
		}, b.getPosition = function() {
			if (this._paused || null == this.sourceNode) var a = this._offset;
			else var a = this._owner.context.currentTime - this._startTime;
			return 1e3 * a
		}, b.setPosition = function(a) {
			return this._offset = a / 1e3, this.sourceNode && this.playState == createjs.Sound.PLAY_SUCCEEDED && (this._cleanUpAudioNode(this.sourceNode), this._cleanUpAudioNode(this._sourceNodeNext), clearTimeout(this._soundCompleteTimeout)), this._paused || this.playState != createjs.Sound.PLAY_SUCCEEDED || this._handleSoundReady(null), !0
		}, b.getDuration = function() {
			return this._duration
		}, b._handleSoundComplete = function() {
			return this._offset = 0, 0 != this._remainingLoops ? (this._remainingLoops--, this._sourceNodeNext ? (this._cleanUpAudioNode(this.sourceNode), this.sourceNode = this._sourceNodeNext, this._startTime = this.sourceNode.startTime, this._sourceNodeNext = this._createAndPlayAudioNode(this._startTime, 0), this._soundCompleteTimeout = setTimeout(this._endedHandler, this._duration)) : this._handleSoundReady(null), this._sendEvent("loop"), void 0) : (null != window.createjs && (this._cleanUp(), this.playState = createjs.Sound.PLAY_FINISHED, this._sendEvent("complete")), void 0)
		}, b.playFailed = function() {
			null != window.createjs && (this._cleanUp(), this.playState = createjs.Sound.PLAY_FAILED, this._sendEvent("failed"))
		}, b.toString = function() {
			return "[WebAudioPlugin SoundInstance]"
		}, createjs.WebAudioPlugin.SoundInstance = a
	}(),
	function() {
		"use strict";

		function a(a, b) {
			this._init(a, b)
		}
		var b = a.prototype;
		b.request = null, b.owner = null, b.progress = -1, b.src = null, b.originalSrc = null, b.result = null, b.onload = null, b.onprogress = null, b.onError = null, b._init = function(a, b) {
			this.src = a, this.originalSrc = a, this.owner = b
		}, b.load = function(a) {
			null != a && (this.src = a), this.request = new XMLHttpRequest, this.request.open("GET", this.src, !0), this.request.responseType = "arraybuffer", this.request.onload = createjs.proxy(this.handleLoad, this), this.request.onError = createjs.proxy(this.handleError, this), this.request.onprogress = createjs.proxy(this.handleProgress, this), this.request.send()
		}, b.handleProgress = function(a, b) {
			this.progress = a / b, null != this.onprogress && this.onprogress({
				loaded: a,
				total: b,
				progress: this.progress
			})
		}, b.handleLoad = function() {
			this.owner.context.decodeAudioData(this.request.response, createjs.proxy(this.handleAudioDecoded, this), createjs.proxy(this.handleError, this))
		}, b.handleAudioDecoded = function(a) {
			this.progress = 1, this.result = a, this.src = this.originalSrc, this.owner.addPreloadResults(this.src, this.result), this.onload && this.onload()
		}, b.handleError = function(a) {
			this.owner.removeSound(this.src), this.onerror && this.onerror(a)
		}, b.toString = function() {
			return "[WebAudioPlugin Loader]"
		}, createjs.WebAudioPlugin.Loader = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";

		function a() {
			this._init()
		}
		var b = a;
		b.MAX_INSTANCES = 30, b._AUDIO_READY = "canplaythrough", b._AUDIO_ENDED = "ended", b._AUDIO_SEEKED = "seeked", b._AUDIO_STALLED = "stalled", b._capabilities = null, b.enableIOS = !1, b.isSupported = function() {
			if (createjs.Sound.BrowserDetect.isIOS && !b.enableIOS) return !1;
			b._generateCapabilities();
			var a = b.tag;
			return null == a || null == b._capabilities ? !1 : !0
		}, b._generateCapabilities = function() {
			if (null == b._capabilities) {
				var a = b.tag = document.createElement("audio");
				if (null == a.canPlayType) return null;
				b._capabilities = {
					panning: !0,
					volume: !0,
					tracks: -1
				};
				for (var c = createjs.Sound.SUPPORTED_EXTENSIONS, d = createjs.Sound.EXTENSION_MAP, e = 0, f = c.length; f > e; e++) {
					var g = c[e],
						h = d[g] || g;
					b._capabilities[g] = "no" != a.canPlayType("audio/" + g) && "" != a.canPlayType("audio/" + g) || "no" != a.canPlayType("audio/" + h) && "" != a.canPlayType("audio/" + h)
				}
			}
		};
		var c = a.prototype;
		c._capabilities = null, c._audioSources = null, c.defaultNumChannels = 2, c.loadedHandler = null, c._init = function() {
			this._capabilities = b._capabilities, this._audioSources = {}
		}, c.register = function(a, b) {
			this._audioSources[a] = !0;
			for (var c = createjs.HTMLAudioPlugin.TagPool.get(a), d = null, e = b || this.defaultNumChannels, f = 0; e > f; f++) d = this._createTag(a), c.add(d);
			if (d.id = a, this.loadedHandler = createjs.proxy(this._handleTagLoad, this), d.addEventListener && d.addEventListener("canplaythrough", this.loadedHandler), null == d.onreadystatechange) d.onreadystatechange = this.loadedHandler;
			else {
				var g = d.onreadystatechange;
				d.onreadystatechange = function() {
					g(), this.loadedHandler()
				}
			}
			return {
				tag: d,
				numChannels: e
			}
		}, c._handleTagLoad = function(a) {
			a.target.removeEventListener && a.target.removeEventListener("canplaythrough", this.loadedHandler), a.target.onreadystatechange = null, a.target.src != a.target.id && createjs.HTMLAudioPlugin.TagPool.checkSrc(a.target.id)
		}, c._createTag = function(a) {
			var b = document.createElement("audio");
			return b.autoplay = !1, b.preload = "none", b.src = a, b
		}, c.removeSound = function(a) {
			delete this._audioSources[a], createjs.HTMLAudioPlugin.TagPool.remove(a)
		}, c.removeAllSounds = function() {
			this._audioSources = {}, createjs.HTMLAudioPlugin.TagPool.removeAll()
		}, c.create = function(a) {
			if (!this.isPreloadStarted(a)) {
				var b = createjs.HTMLAudioPlugin.TagPool.get(a),
					c = this._createTag(a);
				c.id = a, b.add(c), this.preload(a, {
					tag: c
				})
			}
			return new createjs.HTMLAudioPlugin.SoundInstance(a, this)
		}, c.isPreloadStarted = function(a) {
			return null != this._audioSources[a]
		}, c.preload = function(a, b) {
			this._audioSources[a] = !0, new createjs.HTMLAudioPlugin.Loader(a, b.tag)
		}, c.toString = function() {
			return "[HTMLAudioPlugin]"
		}, createjs.HTMLAudioPlugin = a
	}(),
	function() {
		"use strict";

		function a(a, b) {
			this._init(a, b)
		}
		var b = a.prototype = new createjs.EventDispatcher;
		b.src = null, b.uniqueId = -1, b.playState = null, b._owner = null, b.loaded = !1, b._offset = 0, b._delay = 0, b._volume = 1;
		try {
			Object.defineProperty(b, "volume", {
				get: function() {
					return this._volume
				},
				set: function(a) {
					null != Number(a) && (a = Math.max(0, Math.min(1, a)), this._volume = a, this._updateVolume())
				}
			})
		} catch (c) {}
		b.pan = 0, b._duration = 0, b._remainingLoops = 0, b._delayTimeoutId = null, b.tag = null, b._muted = !1, b._paused = !1, b._endedHandler = null, b._readyHandler = null, b._stalledHandler = null, b.loopHandler = null, b._init = function(a, b) {
			this.src = a, this._owner = b, this._endedHandler = createjs.proxy(this._handleSoundComplete, this), this._readyHandler = createjs.proxy(this._handleSoundReady, this), this._stalledHandler = createjs.proxy(this._handleSoundStalled, this), this.loopHandler = createjs.proxy(this.handleSoundLoop, this)
		}, b._sendEvent = function(a) {
			var b = new createjs.Event(a);
			this.dispatchEvent(b)
		}, b._cleanUp = function() {
			var a = this.tag;
			if (null != a) {
				a.pause(), a.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_ENDED, this._endedHandler, !1), a.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_READY, this._readyHandler, !1), a.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this.loopHandler, !1);
				try {
					a.currentTime = 0
				} catch (b) {}
				createjs.HTMLAudioPlugin.TagPool.setInstance(this.src, a), this.tag = null
			}
			clearTimeout(this._delayTimeoutId), null != window.createjs && createjs.Sound._playFinished(this)
		}, b._interrupt = function() {
			null != this.tag && (this.playState = createjs.Sound.PLAY_INTERRUPTED, this._cleanUp(), this._paused = !1, this._sendEvent("interrupted"))
		}, b.play = function(a, b, c, d, e, f) {
			this._cleanUp(), createjs.Sound._playInstance(this, a, b, c, d, e, f)
		}, b._beginPlaying = function(a, b, c, d) {
			if (null == window.createjs) return -1;
			var e = this.tag = createjs.HTMLAudioPlugin.TagPool.getInstance(this.src);
			return null == e ? (this.playFailed(), -1) : (e.addEventListener(createjs.HTMLAudioPlugin._AUDIO_ENDED, this._endedHandler, !1), this._offset = a, this.volume = c, this.pan = d, this._updateVolume(), this._remainingLoops = b, 4 !== e.readyState ? (e.addEventListener(createjs.HTMLAudioPlugin._AUDIO_READY, this._readyHandler, !1), e.addEventListener(createjs.HTMLAudioPlugin._AUDIO_STALLED, this._stalledHandler, !1), e.preload = "auto", e.load()) : this._handleSoundReady(null), this._sendEvent("succeeded"), 1)
		}, b._handleSoundStalled = function() {
			this._cleanUp(), this._sendEvent("failed")
		}, b._handleSoundReady = function() {
			if (null != window.createjs) {
				if (this._duration = 1e3 * this.tag.duration, this.playState = createjs.Sound.PLAY_SUCCEEDED, this._paused = !1, this.tag.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_READY, this._readyHandler, !1), this._offset >= this.getDuration()) return this.playFailed(), void 0;
				this._offset > 0 && (this.tag.currentTime = .001 * this._offset), -1 == this._remainingLoops && (this.tag.loop = !0), 0 != this._remainingLoops && (this.tag.addEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this.loopHandler, !1), this.tag.loop = !0), this.tag.play()
			}
		}, b.pause = function() {
			return this._paused || this.playState != createjs.Sound.PLAY_SUCCEEDED || null == this.tag ? !1 : (this._paused = !0, this.tag.pause(), clearTimeout(this._delayTimeoutId), !0)
		}, b.resume = function() {
			return this._paused && null != this.tag ? (this._paused = !1, this.tag.play(), !0) : !1
		}, b.stop = function() {
			return this._offset = 0, this.pause(), this.playState = createjs.Sound.PLAY_FINISHED, this._cleanUp(), !0
		}, b.setMasterVolume = function() {
			return this._updateVolume(), !0
		}, b.setVolume = function(a) {
			return this.volume = a, !0
		}, b._updateVolume = function() {
			if (null != this.tag) {
				var a = this._muted || createjs.Sound._masterMute ? 0 : this._volume * createjs.Sound._masterVolume;
				return a != this.tag.volume && (this.tag.volume = a), !0
			}
			return !1
		}, b.getVolume = function() {
			return this.volume
		}, b.setMasterMute = function() {
			return this._updateVolume(), !0
		}, b.setMute = function(a) {
			return null == a || void 0 == a ? !1 : (this._muted = a, this._updateVolume(), !0)
		}, b.getMute = function() {
			return this._muted
		}, b.setPan = function() {
			return !1
		}, b.getPan = function() {
			return 0
		}, b.getPosition = function() {
			return null == this.tag ? this._offset : 1e3 * this.tag.currentTime
		}, b.setPosition = function(a) {
			if (null == this.tag) this._offset = a;
			else {
				this.tag.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this.loopHandler, !1);
				try {
					this.tag.currentTime = .001 * a
				} catch (b) {
					return !1
				}
				this.tag.addEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this.loopHandler, !1)
			}
			return !0
		}, b.getDuration = function() {
			return this._duration
		}, b._handleSoundComplete = function() {
			this._offset = 0, null != window.createjs && (this.playState = createjs.Sound.PLAY_FINISHED, this._cleanUp(), this._sendEvent("complete"))
		}, b.handleSoundLoop = function() {
			this._offset = 0, this._remainingLoops--, 0 == this._remainingLoops && (this.tag.loop = !1, this.tag.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this.loopHandler, !1)), this._sendEvent("loop")
		}, b.playFailed = function() {
			null != window.createjs && (this.playState = createjs.Sound.PLAY_FAILED, this._cleanUp(), this._sendEvent("failed"))
		}, b.toString = function() {
			return "[HTMLAudioPlugin SoundInstance]"
		}, createjs.HTMLAudioPlugin.SoundInstance = a
	}(),
	function() {
		"use strict";

		function a(a, b) {
			this._init(a, b)
		}
		var b = a.prototype;
		b.src = null, b.tag = null, b.preloadTimer = null, b.loadedHandler = null, b._init = function(a, b) {
			if (this.src = a, this.tag = b, this.preloadTimer = setInterval(createjs.proxy(this.preloadTick, this), 200), this.loadedHandler = createjs.proxy(this.sendLoadedEvent, this), this.tag.addEventListener && this.tag.addEventListener("canplaythrough", this.loadedHandler), null == this.tag.onreadystatechange) this.tag.onreadystatechange = createjs.proxy(this.sendLoadedEvent, this);
			else {
				var c = this.tag.onreadystatechange;
				this.tag.onreadystatechange = function() {
					c(), this.tag.onreadystatechange = createjs.proxy(this.sendLoadedEvent, this)
				}
			}
			this.tag.preload = "auto", this.tag.load()
		}, b.preloadTick = function() {
			var a = this.tag.buffered,
				b = this.tag.duration;
			a.length > 0 && a.end(0) >= b - 1 && this.handleTagLoaded()
		}, b.handleTagLoaded = function() {
			clearInterval(this.preloadTimer)
		}, b.sendLoadedEvent = function() {
			this.tag.removeEventListener && this.tag.removeEventListener("canplaythrough", this.loadedHandler), this.tag.onreadystatechange = null, createjs.Sound._sendFileLoadEvent(this.src)
		}, b.toString = function() {
			return "[HTMLAudioPlugin Loader]"
		}, createjs.HTMLAudioPlugin.Loader = a
	}(),
	function() {
		"use strict";

		function a(a) {
			this._init(a)
		}
		var b = a;
		b.tags = {}, b.get = function(c) {
			var d = b.tags[c];
			return null == d && (d = b.tags[c] = new a(c)), d
		}, b.remove = function(a) {
			var c = b.tags[a];
			return null == c ? !1 : (c.removeAll(), delete b.tags[a], !0)
		}, b.removeAll = function() {
			for (var a in b.tags) b.tags[a].removeAll();
			b.tags = {}
		}, b.getInstance = function(a) {
			var c = b.tags[a];
			return null == c ? null : c.get()
		}, b.setInstance = function(a, c) {
			var d = b.tags[a];
			return null == d ? null : d.set(c)
		}, b.checkSrc = function(a) {
			var c = b.tags[a];
			return null == c ? null : (c.checkSrcChange(), void 0)
		};
		var c = a.prototype;
		c.src = null, c.length = 0, c.available = 0, c.tags = null, c._init = function(a) {
			this.src = a, this.tags = []
		}, c.add = function(a) {
			this.tags.push(a), this.length++, this.available++
		}, c.removeAll = function() {
			for (; this.length--;) delete this.tags[this.length];
			this.src = null, this.tags.length = 0
		}, c.get = function() {
			if (0 == this.tags.length) return null;
			this.available = this.tags.length;
			var a = this.tags.pop();
			return null == a.parentNode && document.body.appendChild(a), a
		}, c.set = function(a) {
			var b = createjs.indexOf(this.tags, a); - 1 == b && this.tags.push(a), this.available = this.tags.length
		}, c.checkSrcChange = function() {
			for (var a = this.tags.length - 1, b = this.tags[a].src; a--;) this.tags[a].src = b
		}, c.toString = function() {
			return "[HTMLAudioPlugin TagPool]"
		}, createjs.HTMLAudioPlugin.TagPool = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a, b, c) {
				this.initialize(a, b, c)
			},
			b = a.prototype = new createjs.EventDispatcher;
		a.NONE = 0, a.LOOP = 1, a.REVERSE = 2, a.IGNORE = {}, a._tweens = [], a._plugins = {}, a.get = function(b, c, d, e) {
			return e && a.removeTweens(b), new a(b, c, d)
		}, a.tick = function(b, c) {
			for (var d = a._tweens.slice(), e = d.length - 1; e >= 0; e--) {
				var f = d[e];
				c && !f.ignoreGlobalPause || f._paused || f.tick(f._useTicks ? 1 : b)
			}
		}, a.handleEvent = function(a) {
			"tick" == a.type && this.tick(a.delta, a.paused)
		}, a.removeTweens = function(b) {
			if (b.tweenjs_count) {
				for (var c = a._tweens, d = c.length - 1; d >= 0; d--) c[d]._target == b && (c[d]._paused = !0, c.splice(d, 1));
				b.tweenjs_count = 0
			}
		}, a.removeAllTweens = function() {
			for (var b = a._tweens, c = 0, d = b.length; d > c; c++) {
				var e = b[c];
				e.paused = !0, e.target.tweenjs_count = 0
			}
			b.length = 0
		}, a.hasActiveTweens = function(b) {
			return b ? b.tweenjs_count : a._tweens && !!a._tweens.length
		}, a.installPlugin = function(b, c) {
			var d = b.priority;
			null == d && (b.priority = d = 0);
			for (var e = 0, f = c.length, g = a._plugins; f > e; e++) {
				var h = c[e];
				if (g[h]) {
					for (var i = g[h], j = 0, k = i.length; k > j && !(d < i[j].priority); j++);
					g[h].splice(j, 0, b)
				} else g[h] = [b]
			}
		}, a._register = function(b, c) {
			var d = b._target,
				e = a._tweens;
			if (c) d && (d.tweenjs_count = d.tweenjs_count ? d.tweenjs_count + 1 : 1), e.push(b), !a._inited && createjs.Ticker && (createjs.Ticker.addEventListener("tick", a), a._inited = !0);
			else {
				d && d.tweenjs_count--;
				for (var f = e.length; f--;)
					if (e[f] == b) return e.splice(f, 1), void 0
			}
		}, b.ignoreGlobalPause = !1, b.loop = !1, b.duration = 0, b.pluginData = null, b.target = null, b.position = null, b.passive = !1, b._paused = !1, b._curQueueProps = null, b._initQueueProps = null, b._steps = null, b._actions = null, b._prevPosition = 0, b._stepPosition = 0, b._prevPos = -1, b._target = null, b._useTicks = !1, b._inited = !1, b.initialize = function(b, c, d) {
			this.target = this._target = b, c && (this._useTicks = c.useTicks, this.ignoreGlobalPause = c.ignoreGlobalPause, this.loop = c.loop, c.onChange && this.addEventListener("change", c.onChange), c.override && a.removeTweens(b)), this.pluginData = d || {}, this._curQueueProps = {}, this._initQueueProps = {}, this._steps = [], this._actions = [], c && c.paused ? this._paused = !0 : a._register(this, !0), c && null != c.position && this.setPosition(c.position, a.NONE)
		}, b.wait = function(a, b) {
			if (null == a || 0 >= a) return this;
			var c = this._cloneProps(this._curQueueProps);
			return this._addStep({
				d: a,
				p0: c,
				e: this._linearEase,
				p1: c,
				v: b
			})
		}, b.to = function(a, b, c) {
			return (isNaN(b) || 0 > b) && (b = 0), this._addStep({
				d: b || 0,
				p0: this._cloneProps(this._curQueueProps),
				e: c,
				p1: this._cloneProps(this._appendQueueProps(a))
			})
		}, b.call = function(a, b, c) {
			return this._addAction({
				f: a,
				p: b ? b : [this],
				o: c ? c : this._target
			})
		}, b.set = function(a, b) {
			return this._addAction({
				f: this._set,
				o: this,
				p: [a, b ? b : this._target]
			})
		}, b.play = function(a) {
			return a || (a = this), this.call(a.setPaused, [!1], a)
		}, b.pause = function(a) {
			return a || (a = this), this.call(a.setPaused, [!0], a)
		}, b.setPosition = function(a, b) {
			0 > a && (a = 0), null == b && (b = 1);
			var c = a,
				d = !1;
			if (c >= this.duration && (this.loop ? c %= this.duration : (c = this.duration, d = !0)), c == this._prevPos) return d;
			var e = this._prevPos;
			if (this.position = this._prevPos = c, this._prevPosition = a, this._target)
				if (d) this._updateTargetProps(null, 1);
				else if (this._steps.length > 0) {
				for (var f = 0, g = this._steps.length; g > f && !(this._steps[f].t > c); f++);
				var h = this._steps[f - 1];
				this._updateTargetProps(h, (this._stepPosition = c - h.t) / h.d)
			}
			return 0 != b && this._actions.length > 0 && (this._useTicks ? this._runActions(c, c) : 1 == b && e > c ? (e != this.duration && this._runActions(e, this.duration), this._runActions(0, c, !0)) : this._runActions(e, c)), d && this.setPaused(!0), this.dispatchEvent("change"), d
		}, b.tick = function(a) {
			this._paused || this.setPosition(this._prevPosition + a)
		}, b.setPaused = function(b) {
			return this._paused = !!b, a._register(this, !b), this
		}, b.w = b.wait, b.t = b.to, b.c = b.call, b.s = b.set, b.toString = function() {
			return "[Tween]"
		}, b.clone = function() {
			throw "Tween can not be cloned."
		}, b._updateTargetProps = function(b, c) {
			var d, e, f, g, h, i;
			if (b || 1 != c) {
				if (this.passive = !!b.v, this.passive) return;
				b.e && (c = b.e(c, 0, 1, 1)), d = b.p0, e = b.p1
			} else this.passive = !1, d = e = this._curQueueProps;
			for (var j in this._initQueueProps) {
				null == (g = d[j]) && (d[j] = g = this._initQueueProps[j]), null == (h = e[j]) && (e[j] = h = g), f = g == h || 0 == c || 1 == c || "number" != typeof g ? 1 == c ? h : g : g + (h - g) * c;
				var k = !1;
				if (i = a._plugins[j])
					for (var l = 0, m = i.length; m > l; l++) {
						var n = i[l].tween(this, j, f, d, e, c, !!b && d == e, !b);
						n == a.IGNORE ? k = !0 : f = n
					}
				k || (this._target[j] = f)
			}
		}, b._runActions = function(a, b, c) {
			var d = a,
				e = b,
				f = -1,
				g = this._actions.length,
				h = 1;
			for (a > b && (d = b, e = a, f = g, g = h = -1);
				(f += h) != g;) {
				var i = this._actions[f],
					j = i.t;
				(j == e || j > d && e > j || c && j == a) && i.f.apply(i.o, i.p)
			}
		}, b._appendQueueProps = function(b) {
			var c, d, e, f, g;
			for (var h in b)
				if (void 0 === this._initQueueProps[h]) {
					if (d = this._target[h], c = a._plugins[h])
						for (e = 0, f = c.length; f > e; e++) d = c[e].init(this, h, d);
					this._initQueueProps[h] = this._curQueueProps[h] = void 0 === d ? null : d
				} else d = this._curQueueProps[h];
			for (var h in b) {
				if (d = this._curQueueProps[h], c = a._plugins[h])
					for (g = g || {}, e = 0, f = c.length; f > e; e++) c[e].step && c[e].step(this, h, d, b[h], g);
				this._curQueueProps[h] = b[h]
			}
			return g && this._appendQueueProps(g), this._curQueueProps
		}, b._cloneProps = function(a) {
			var b = {};
			for (var c in a) b[c] = a[c];
			return b
		}, b._addStep = function(a) {
			return a.d > 0 && (this._steps.push(a), a.t = this.duration, this.duration += a.d), this
		}, b._addAction = function(a) {
			return a.t = this.duration, this._actions.push(a), this
		}, b._set = function(a, b) {
			for (var c in a) b[c] = a[c]
		}, createjs.Tween = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function(a, b, c) {
				this.initialize(a, b, c)
			},
			b = a.prototype = new createjs.EventDispatcher;
		b.ignoreGlobalPause = !1, b.duration = 0, b.loop = !1, b.position = null, b._paused = !1, b._tweens = null, b._labels = null, b._labelList = null, b._prevPosition = 0, b._prevPos = -1, b._useTicks = !1, b.initialize = function(a, b, c) {
			this._tweens = [], c && (this._useTicks = c.useTicks, this.loop = c.loop, this.ignoreGlobalPause = c.ignoreGlobalPause, c.onChange && this.addEventListener("change", c.onChange)), a && this.addTween.apply(this, a), this.setLabels(b), c && c.paused ? this._paused = !0 : createjs.Tween._register(this, !0), c && null != c.position && this.setPosition(c.position, createjs.Tween.NONE)
		}, b.addTween = function(a) {
			var b = arguments.length;
			if (b > 1) {
				for (var c = 0; b > c; c++) this.addTween(arguments[c]);
				return arguments[0]
			}
			return 0 == b ? null : (this.removeTween(a), this._tweens.push(a), a.setPaused(!0), a._paused = !1, a._useTicks = this._useTicks, a.duration > this.duration && (this.duration = a.duration), this._prevPos >= 0 && a.setPosition(this._prevPos, createjs.Tween.NONE), a)
		}, b.removeTween = function(a) {
			var b = arguments.length;
			if (b > 1) {
				for (var c = !0, d = 0; b > d; d++) c = c && this.removeTween(arguments[d]);
				return c
			}
			if (0 == b) return !1;
			for (var e = this._tweens, d = e.length; d--;)
				if (e[d] == a) return e.splice(d, 1), a.duration >= this.duration && this.updateDuration(), !0;
			return !1
		}, b.addLabel = function(a, b) {
			this._labels[a] = b;
			var c = this._labelList;
			if (c) {
				for (var d = 0, e = c.length; e > d && !(b < c[d].position); d++);
				c.splice(d, 0, {
					label: a,
					position: b
				})
			}
		}, b.setLabels = function(a) {
			this._labels = a ? a : {}
		}, b.getLabels = function() {
			var a = this._labelList;
			if (!a) {
				a = this._labelList = [];
				var b = this._labels;
				for (var c in b) a.push({
					label: c,
					position: b[c]
				});
				a.sort(function(a, b) {
					return a.position - b.position
				})
			}
			return a
		}, b.getCurrentLabel = function() {
			var a = this.getLabels(),
				b = this.position,
				c = a.length;
			if (c) {
				for (var d = 0; c > d && !(b < a[d].position); d++);
				return 0 == d ? null : a[d - 1].label
			}
			return null
		}, b.gotoAndPlay = function(a) {
			this.setPaused(!1), this._goto(a)
		}, b.gotoAndStop = function(a) {
			this.setPaused(!0), this._goto(a)
		}, b.setPosition = function(a, b) {
			0 > a && (a = 0);
			var c = this.loop ? a % this.duration : a,
				d = !this.loop && a >= this.duration;
			if (c == this._prevPos) return d;
			this._prevPosition = a, this.position = this._prevPos = c;
			for (var e = 0, f = this._tweens.length; f > e; e++)
				if (this._tweens[e].setPosition(c, b), c != this._prevPos) return !1;
			return d && this.setPaused(!0), this.dispatchEvent("change"), d
		}, b.setPaused = function(a) {
			this._paused = !!a, createjs.Tween._register(this, !a)
		}, b.updateDuration = function() {
			this.duration = 0;
			for (var a = 0, b = this._tweens.length; b > a; a++) {
				var c = this._tweens[a];
				c.duration > this.duration && (this.duration = c.duration)
			}
		}, b.tick = function(a) {
			this.setPosition(this._prevPosition + a)
		}, b.resolve = function(a) {
			var b = parseFloat(a);
			return isNaN(b) && (b = this._labels[a]), b
		}, b.toString = function() {
			return "[Timeline]"
		}, b.clone = function() {
			throw "Timeline can not be cloned."
		}, b._goto = function(a) {
			var b = this.resolve(a);
			null != b && this.setPosition(b)
		}, createjs.Timeline = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function() {
			throw "Ease cannot be instantiated."
		};
		a.linear = function(a) {
			return a
		}, a.none = a.linear, a.get = function(a) {
			return -1 > a && (a = -1), a > 1 && (a = 1),
				function(b) {
					return 0 == a ? b : 0 > a ? b * (b * -a + 1 + a) : b * ((2 - b) * a + (1 - a))
				}
		}, a.getPowIn = function(a) {
			return function(b) {
				return Math.pow(b, a)
			}
		}, a.getPowOut = function(a) {
			return function(b) {
				return 1 - Math.pow(1 - b, a)
			}
		}, a.getPowInOut = function(a) {
			return function(b) {
				return (b *= 2) < 1 ? .5 * Math.pow(b, a) : 1 - .5 * Math.abs(Math.pow(2 - b, a))
			}
		}, a.quadIn = a.getPowIn(2), a.quadOut = a.getPowOut(2), a.quadInOut = a.getPowInOut(2), a.cubicIn = a.getPowIn(3), a.cubicOut = a.getPowOut(3), a.cubicInOut = a.getPowInOut(3), a.quartIn = a.getPowIn(4), a.quartOut = a.getPowOut(4), a.quartInOut = a.getPowInOut(4), a.quintIn = a.getPowIn(5), a.quintOut = a.getPowOut(5), a.quintInOut = a.getPowInOut(5), a.sineIn = function(a) {
			return 1 - Math.cos(a * Math.PI / 2)
		}, a.sineOut = function(a) {
			return Math.sin(a * Math.PI / 2)
		}, a.sineInOut = function(a) {
			return -.5 * (Math.cos(Math.PI * a) - 1)
		}, a.getBackIn = function(a) {
			return function(b) {
				return b * b * ((a + 1) * b - a)
			}
		}, a.backIn = a.getBackIn(1.7), a.getBackOut = function(a) {
			return function(b) {
				return --b * b * ((a + 1) * b + a) + 1
			}
		}, a.backOut = a.getBackOut(1.7), a.getBackInOut = function(a) {
			return a *= 1.525,
				function(b) {
					return (b *= 2) < 1 ? .5 * b * b * ((a + 1) * b - a) : .5 * ((b -= 2) * b * ((a + 1) * b + a) + 2)
				}
		}, a.backInOut = a.getBackInOut(1.7), a.circIn = function(a) {
			return -(Math.sqrt(1 - a * a) - 1)
		}, a.circOut = function(a) {
			return Math.sqrt(1 - --a * a)
		}, a.circInOut = function(a) {
			return (a *= 2) < 1 ? -.5 * (Math.sqrt(1 - a * a) - 1) : .5 * (Math.sqrt(1 - (a -= 2) * a) + 1)
		}, a.bounceIn = function(b) {
			return 1 - a.bounceOut(1 - b)
		}, a.bounceOut = function(a) {
			return 1 / 2.75 > a ? 7.5625 * a * a : 2 / 2.75 > a ? 7.5625 * (a -= 1.5 / 2.75) * a + .75 : 2.5 / 2.75 > a ? 7.5625 * (a -= 2.25 / 2.75) * a + .9375 : 7.5625 * (a -= 2.625 / 2.75) * a + .984375
		}, a.bounceInOut = function(b) {
			return .5 > b ? .5 * a.bounceIn(2 * b) : .5 * a.bounceOut(2 * b - 1) + .5
		}, a.getElasticIn = function(a, b) {
			var c = 2 * Math.PI;
			return function(d) {
				if (0 == d || 1 == d) return d;
				var e = b / c * Math.asin(1 / a);
				return -(a * Math.pow(2, 10 * (d -= 1)) * Math.sin((d - e) * c / b))
			}
		}, a.elasticIn = a.getElasticIn(1, .3), a.getElasticOut = function(a, b) {
			var c = 2 * Math.PI;
			return function(d) {
				if (0 == d || 1 == d) return d;
				var e = b / c * Math.asin(1 / a);
				return a * Math.pow(2, -10 * d) * Math.sin((d - e) * c / b) + 1
			}
		}, a.elasticOut = a.getElasticOut(1, .3), a.getElasticInOut = function(a, b) {
			var c = 2 * Math.PI;
			return function(d) {
				var e = b / c * Math.asin(1 / a);
				return (d *= 2) < 1 ? -.5 * a * Math.pow(2, 10 * (d -= 1)) * Math.sin((d - e) * c / b) : .5 * a * Math.pow(2, -10 * (d -= 1)) * Math.sin((d - e) * c / b) + 1
			}
		}, a.elasticInOut = a.getElasticInOut(1, .3 * 1.5), createjs.Ease = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = function() {
			throw "MotionGuidePlugin cannot be instantiated."
		};
		a.priority = 0, a._rotOffS, a._rotOffE, a._rotNormS, a._rotNormE, a.install = function() {
			return createjs.Tween.installPlugin(a, ["guide", "x", "y", "rotation"]), createjs.Tween.IGNORE
		}, a.init = function(a, b, c) {
			var d = a.target;
			return d.hasOwnProperty("x") || (d.x = 0), d.hasOwnProperty("y") || (d.y = 0), d.hasOwnProperty("rotation") || (d.rotation = 0), "rotation" == b && (a.__needsRot = !0), "guide" == b ? null : c
		}, a.step = function(b, c, d, e, f) {
			if ("rotation" == c && (b.__rotGlobalS = d, b.__rotGlobalE = e, a.testRotData(b, f)), "guide" != c) return e;
			var g, h = e;
			h.hasOwnProperty("path") || (h.path = []);
			var i = h.path;
			if (h.hasOwnProperty("end") || (h.end = 1), h.hasOwnProperty("start") || (h.start = d && d.hasOwnProperty("end") && d.path === i ? d.end : 0), h.hasOwnProperty("_segments") && h._length) return e;
			var j = i.length,
				k = 10;
			if (!(j >= 6 && 0 == (j - 2) % 4)) throw "invalid 'path' data, please see documentation for valid paths";
			h._segments = [], h._length = 0;
			for (var l = 2; j > l; l += 4) {
				for (var m, n, o = i[l - 2], p = i[l - 1], q = i[l + 0], r = i[l + 1], s = i[l + 2], t = i[l + 3], u = o, v = p, w = 0, x = [], y = 1; k >= y; y++) {
					var z = y / k,
						A = 1 - z;
					m = A * A * o + 2 * A * z * q + z * z * s, n = A * A * p + 2 * A * z * r + z * z * t, w += x[x.push(Math.sqrt((g = m - u) * g + (g = n - v) * g)) - 1], u = m, v = n
				}
				h._segments.push(w), h._segments.push(x), h._length += w
			}
			g = h.orient, h.orient = !0;
			var B = {};
			return a.calc(h, h.start, B), b.__rotPathS = Number(B.rotation.toFixed(5)), a.calc(h, h.end, B), b.__rotPathE = Number(B.rotation.toFixed(5)), h.orient = !1, a.calc(h, h.end, f), h.orient = g, h.orient ? (b.__guideData = h, a.testRotData(b, f), e) : e
		}, a.testRotData = function(a, b) {
			if (void 0 === a.__rotGlobalS || void 0 === a.__rotGlobalE) {
				if (a.__needsRot) return;
				a.__rotGlobalS = a.__rotGlobalE = void 0 !== a._curQueueProps.rotation ? a._curQueueProps.rotation : b.rotation = a.target.rotation || 0
			}
			if (void 0 !== a.__guideData) {
				var c = a.__guideData,
					d = a.__rotGlobalE - a.__rotGlobalS,
					e = a.__rotPathE - a.__rotPathS,
					f = d - e;
				if ("auto" == c.orient) f > 180 ? f -= 360 : -180 > f && (f += 360);
				else if ("cw" == c.orient) {
					for (; 0 > f;) f += 360;
					0 == f && d > 0 && 180 != d && (f += 360)
				} else if ("ccw" == c.orient) {
					for (f = d - (e > 180 ? 360 - e : e); f > 0;) f -= 360;
					0 == f && 0 > d && -180 != d && (f -= 360)
				}
				c.rotDelta = f, c.rotOffS = a.__rotGlobalS - a.__rotPathS, a.__rotGlobalS = a.__rotGlobalE = a.__guideData = a.__needsRot = void 0
			}
		}, a.tween = function(b, c, d, e, f, g, h) {
			var i = f.guide;
			if (void 0 == i || i === e.guide) return d;
			if (i.lastRatio != g) {
				var j = (i.end - i.start) * (h ? i.end : g) + i.start;
				switch (a.calc(i, j, b.target), i.orient) {
					case "cw":
					case "ccw":
					case "auto":
						b.target.rotation += i.rotOffS + i.rotDelta * g;
						break;
					case "fixed":
					default:
						b.target.rotation += i.rotOffS
				}
				i.lastRatio = g
			}
			return "rotation" != c || i.orient && "false" != i.orient ? b.target[c] : d
		}, a.calc = function(b, c, d) {
			void 0 == b._segments && a.validate(b), void 0 == d && (d = {
				x: 0,
				y: 0,
				rotation: 0
			});
			for (var e = b._segments, f = b.path, g = b._length * c, h = e.length - 2, i = 0; g > e[i] && h > i;) g -= e[i], i += 2;
			var j = e[i + 1],
				k = 0;
			for (h = j.length - 1; g > j[k] && h > k;) g -= j[k], k++;
			var l = k / ++h + g / (h * j[k]);
			i = 2 * i + 2;
			var m = 1 - l;
			return d.x = m * m * f[i - 2] + 2 * m * l * f[i + 0] + l * l * f[i + 2], d.y = m * m * f[i - 1] + 2 * m * l * f[i + 1] + l * l * f[i + 3], b.orient && (d.rotation = 57.2957795 * Math.atan2((f[i + 1] - f[i - 1]) * m + (f[i + 3] - f[i + 1]) * l, (f[i + 0] - f[i - 2]) * m + (f[i + 2] - f[i + 0]) * l)), d
		}, createjs.MotionGuidePlugin = a
	}(), this.createjs = this.createjs || {},
	function() {
		"use strict";
		var a = createjs.TweenJS = createjs.TweenJS || {};
		a.version = "NEXT", a.buildDate = "Thu, 12 Dec 2013 23:37:07 GMT"
	}();
var scope;
var showTable;
var modalInstance;
var configuratorApp = angular.module("configuratorApp", ["ui.bootstrap"]);
configuratorApp.controller("ConfiguratorCtrl", ["$scope", "$window", "$modal", function($scope, $window, $modal) {
	if (scope == null) scope = $scope;
	$scope.openModal = function() {
		modalInstance = $modal.open({
			templateUrl: "form.html",
			controller: ModalInstanceCtrl,
			scope: $scope,
			dialogClass: "modal form"
		})
	};
	$scope.closeModal = function() {
		modalInstance.dismiss("cancel")
	}
}]);

function angularUpdate(parts) {
	var summaryParts = new Array;
	for (var i = 0; i < parts.length; i++) {
		var part = partsContainer.getChildByName(parts[i]);
		var found = false;
		for (var j = 0; j < summaryParts.length; j++) {
			if (summaryParts[j].sku == part.partData.sku) {
				summaryParts[j].quantity++;
				found = true;
				break
			}
		}
		if (!found) {
			summaryParts.push(summaryEntry(part.partData))
		}
	}
	scope.showTable = showTable;
	scope.parts = summaryParts;
	scope.$apply()
}
var ModalInstanceCtrl = function($scope, $modalInstance) {
	$scope.renderPrintView = function() {
		var printWindow = window.open("", "MsgWindow", "width=960,height=960");
		printWindow.document.write("<link rel='stylesheet' type='text/css' href='css/bootstrap.min.css'><div class='row'><img style='display: block; margin-left: auto; margin-right: auto' src='assets/UDesignLogo.jpg'></div><BR><div class='container'><h4 align='center'>Components in Configuration</h4><div class='container'><table class='table table-bordered table-responsive'><tr><th style='color:red;'>Grainger Stock No.</th><th>Tri-Arc Part #</th><th>Quantity</th><th>Description</th></tr>");
		for (var i = 0; i < scope.parts.length; i++) {
			printWindow.document.write("<tr><td style='color:red;'>" + scope.parts[i].gsku + "</td><td>" + scope.parts[i].sku + "</td><td>" + scope.parts[i].quantity + "</td><td>" + scope.parts[i].description + "</td></tr>")
		}
		printWindow.document.write("</table></div></div><div class='row'><div class='col-sm-12'><table class='table table-responsive'><tr><td><img src='assets/TriArcLogo.jpg'></td><td></td><td><img style='float:right' src='assets/GraingerLogo.jpg'></td></table></div></div>");
		printWindow.document.write("<img src='" + scope.imageData + "'>");
		printWindow.document.write("<img src='" + scope.overviewImage + "'>");
		printWindow.document.focus();
		printWindow.print()
	}
};

function summaryEntry(partData) {
	var entry = {
		sku: partData.sku,
		price: partData.price,
		gsku: partData.gsku,
		description: partData.description,
		quantity: 1,
		cost: partData.price
	};
	return entry
}

function exportImage() {
	focusCanvas();
	scope.imageData = stage.toDataURL();
	stage.update();
	if (system != 3) stage.addChild(TopDownView(true));
	else stage.addChild(MaxTopDownView(true));
	stage.update();
	scope.overviewImage = stage.toDataURL();
	scope.completed = true;
	restoreCanvas();
	if (!VENDOR) {
		scope.openModal();
		scope.$apply()
	} else {
		var printWindow = window.open("", "MsgWindow", "width=960,height=960");
		printWindow.document.write("<link rel='stylesheet' type='text/css' href='css/bootstrap.min.css'><div class='row'><img style='display: block; margin-left: auto; margin-right: auto' src='assets/UDesignLogo.jpg'></div><BR><div class='container'><h4 align='center'>Components in Configuration</h4><div class='container'><table class='table table-bordered table-responsive'><tr><th style='color:red;'>Grainger Stock No.</th><th>Tri-Arc Part #</th><th>Quantity</th><th>Description</th></tr>");
		for (var i = 0; i < scope.parts.length; i++) {
			printWindow.document.write("<tr><td style='color:red;'>" + scope.parts[i].gsku + "</td><td>" + scope.parts[i].sku + "</td><td>" + scope.parts[i].quantity + "</td><td>" + scope.parts[i].description + "</td></tr>")
		}
		printWindow.document.write("</table></div></div><div class='row'><div class='col-sm-12'><table class='table table-responsive'><tr><td><img src='assets/TriArcLogo.jpg'></td><td></td><td><img style='float:right' src='assets/GraingerLogo.jpg'></td></table></div></div>");
		printWindow.document.write("<img src='" + scope.imageData + "'>");
		printWindow.document.write("<img src='" + scope.overviewImage + "'>");
		printWindow.focus();
		printWindow.print();
		scope.$apply()
	}
}

function submitForm(form) {
	form.parts.value = "<table class='table table-bordered table-responsive'><tr><th style='color:red;'>Grainger Stock No.</th><th>Tri-Arc Part #</th><th>Quantity</th><th>Description</th></tr>";
	for (var i = 0; i < scope.parts.length; i++) {
		form.parts.value += "<tr><td style='color:red;'>" + scope.parts[i].gsku + "</td><td>" + scope.parts[i].sku + "</td><td>" + scope.parts[i].quantity + "</td><td>" + scope.parts[i].description + "</td></tr>"
	}
	form.parts.value += "</table>";
	form.image.value = scope.imageData;
	if (form.name.value.length < 1 || form.company.value.length < 1 || form.email.value.length < 1 || form.phone.value.length < 1) return;
	$.ajax({
		url: "http://tri-arc.com/configurator/mailer.php",
		type: "POST",
		data: {
			name: form.name.value,
			company: form.company.value,
			phone: form.phone.value,
			email: form.email.value,
			parts: form.parts.value,
			comments: form.comments.value,
			referrer: form.referrer.value,
			image: form.image.value
		},
		success: function(msg) {
			alert("Email Sent")
		}
	})
}
var stage;
var LadderType = {
	Rooftop: 1,
	Crossover: 2,
	MaxAccess: 3
};
var TreadType = {
	Perforated: 1,
	Grip: 2
};
var system;
var height;
var incline;
var tread;

function init() {
	if (document.getElementById("configuratorCanvas").addEventListener) {
		document.getElementById("configuratorCanvas").addEventListener("mousewheel", MouseWheelHandler(), false);
		document.getElementById("configuratorCanvas").addEventListener("DOMMouseScroll", MouseWheelHandler(), false)
	} else {
		sq.attachEvent("onmousewheel", MouseWheelHandler())
	}
	stage = new createjs.Stage("configuratorCanvas");
	createjs.Touch.enable(stage);
	stage.enableMouseOver(50);
	createjs.DisplayObject.suppressCrossDomainErrors = true;
	stage.setBounds(0, 0, stage.canvas.width, stage.canvas.height);
	stage.setBounds(0, 0, stage.canvas.width, stage.canvas.height);
	createjs.Ticker.addEventListener("tick", handleTick);
	showStartMenu()
}

function handleTick(event) {
	stage.setBounds(0, 0, stage.canvas.width, stage.canvas.height);
	if (system == 3 && showTooltip) {
		updateTooltipPosition()
	}
	stage.update();
	angularUpdate(parts)
}

function showStartMenu() {
	stage.removeAllChildren();
	showTable = false;
	scope.showTable = false;
	scope.parts = [];
	scope.$apply();
	startMenu = StartMenu();
	startMenu.x = stage.getBounds().width / 2;
	stage.addChild(startMenu)
}

function showHeightMenu() {
	stage.removeAllChildren();
	switch (system) {
		case 1:
			heightMenu = RT_HeightMenu();
			break;
		case 2:
			heightMenu = CO_HeightMenu();
			break;
		case 3:
			heightMenu = MA_HeightMenu();
			break;
		default:
			break
	}
	heightMenu.x = stage.getBounds().width / 2;
	stage.addChild(heightMenu)
}

function showSystemOptionsMenu() {
	switch (system) {
		case 1:
			showInclineMenu();
			break;
		case 2:
			showPlatformTypeMenu();
			break;
		case 3:
			showInclineMenu();
			break;
		default:
			showInclineMenu();
			break
	}
}

function showInclineMenu() {
	stage.removeAllChildren();
	inclineMenu = InclineMenu(system != LadderType.Crossover);
	inclineMenu.x = stage.getBounds().width / 2;
	stage.addChild(inclineMenu)
}

function showPlatformSizeMenu() {
	stage.removeAllChildren();
	platformSizeMenu = PlatformSizeMenu();
	platformSizeMenu.x = stage.getBounds().width / 2;
	stage.addChild(platformSizeMenu)
}

function showPlatformTypeMenu() {
	stage.removeAllChildren();
	platformTypeMenu = PlatformTypeMenu();
	platformTypeMenu.x = stage.getBounds().width / 2;
	stage.addChild(platformTypeMenu)
}

function showConfigurator() {
	stage.removeAllChildren();
	stage.addChild(ConfiguratorContainer());
	parts.length = 0;
	length = new Array;
	width = new Array;
	iwidth = 0;
	showTable = true;
	showConfiguratorButtons();
	switch (system) {
		case 1:
			partsContainer.addChild(InitialPart(LADDER(), null));
			break;
		case 2:
			partsContainer.addChild(InitialPart(LADDER(), null));
			break;
		case 3:
			partsContainer.addChild(InitialMaxPart(LADDER()));
			break;
		default:
			break
	}
}

function showSummary() {
	stage.addChild(SummaryMenu())
}

function setIncline(i) {
	incline = i
}

function setHeight(h) {
	height = h
}

function setSystem(s) {
	system = s
}

function MouseWheelHandler() {
	return function(e) {
		if (system == 3) {
			var e = window.event || e;
			var delta = Math.max(-1, Math.min(1, e.wheelDelta || -e.detail));
			scrollPartsBar(delta);
			return false
		}
	}
}
var id = 0;

function Part(data, parent) {
	var container = new createjs.Container;
	if (data.altSkus) {
		switch (treadType) {
			case TreadType.Perforated:
				data.sku = data.sku.substr(0, data.sku.length - 1) + "2";
				data.gsku = data.gSkus[0];
				break;
			case TreadType.Grip:
				data.sku = data.sku.substr(0, data.sku.length - 1) + "6";
				data.gsku = data.gSkus[1];
				break;
			default:
				break
		}
	}
	container.partData = data;
	container.noParent = false;
	container.legSlotFull = !data.hasLegSlot;
	container.mountSlotFull = !data.hasMountSlot;
	if (data.usesSlot == MOUNT_SLOT) parent.mountSlotFull = true;
	else if (data.usesSlot == LEG_SLOT) {
		parent.legSlotFull = true
	}
	container.legsNeeded = data.legsNeeded;
	container.legsLimit = data.legsLimit;
	if (parent.legsNeeded && !parent.legSlotFull) container.legsLimit = Math.min(parent.legsLimit - container.partData.length, container.legsLimit - container.partData.length);
	if (container.legsLimit <= 10 && !data.actsAsLegs && !parent.legSlotFull) {
		container.legsLimit = data.legsLimit;
		partsContainer.addChild(Part(LEGS(), parent));
		if (data.rails) alert("A leg kit was added automatically as it is needed by the rail kit.");
		else alert("A leg kit was added automatically as your span is too long to be unsupported.")
	}
	if (parent.legSlotFull) resetChildLegCounter(parent);
	container.frameOffset = (data.frameOffset + parent.frameOffset + parent.partData.childFrameOffset) % 4;
	if (parent.childFrameOffset != 0) container.rotationOffset = -90 * container.frameOffset;
	else container.rotationOffset = 0;
	container.partData.childFrameOffset = data.childFrameOffset;
	container.currentFrame = (currentFrame + container.frameOffset) % 4;
	container.parentPart = parent;
	container.rotation = container.rotationOffset;
	container.iZOrderMod = data.iZOrderMod[container.currentFrame];
	container.x = parent.x + parent.getChildByName("MOUNT").x - container.partData.connectorPoint[container.currentFrame].x;
	container.y = parent.y + parent.getChildByName("MOUNT").y - container.partData.connectorPoint[container.currentFrame].y;
	if (container.rotationOffset < 0) {
		container.x = parent.x + parent.getChildByName("MOUNT").x + container.partData.connectorPoint[container.currentFrame].x + container.partData.rotationOffsets[(container.rotationOffset / -90 + container.currentFrame) % 4].x;
		container.y = parent.y + parent.getChildByName("MOUNT").y + container.partData.connectorPoint[container.currentFrame].y + container.partData.rotationOffsets[(container.rotationOffset / -90 + container.currentFrame) % 4].y
	}
	var sprite = new createjs.Sprite(data.spriteSheet);
	var spriteButtonHelper = new createjs.ButtonHelper(sprite);
	sprite.addEventListener("click", handlePartClicked);
	sprite.addEventListener("mouseover", handleMouseOver);
	sprite.addEventListener("mouseout", handleMouseOut);
	sprite.name = container.name = id;
	id++;
	sprite.regX = data.spriteCenter.x;
	sprite.regY = data.spriteCenter.y;
	container.addChild(sprite);
	var center = new createjs.Shape;
	center.name = "CENTER";
	center.graphics.beginFill(null).drawCircle(0, 0, 5);
	container.addChild(center);
	var f = new createjs.Shape;
	f.name = "MOUNT";
	f.graphics.beginFill(null).drawCircle(0, 0, 5);
	f.x = container.partData.mountPoint[container.currentFrame].x;
	f.y = container.partData.mountPoint[container.currentFrame].y;
	container.addChild(f);
	var p = new createjs.Shape;
	p.name = "CONNECTOR";
	p.graphics.beginFill(null).drawCircle(0, 0, 5);
	p.x = container.partData.connectorPoint[container.currentFrame].x;
	p.y = container.partData.connectorPoint[container.currentFrame].y;
	container.addChild(p);
	sprite.gotoAndStop(container.currentFrame);
	sprite.rotation = -camAngle - container.rotationOffset;
	parts.push(sprite.name);
	updateDimensions(data.width, data.length, container.currentFrame);
	if (!container.partData.legs) {
		SelectPartMenu(container);
		selectPartMenu.originPart = container
	}
	return container
}

function InitialPart(data) {
	var container = new createjs.Container;
	if (data.altSkus) {
		switch (treadType) {
			case TreadType.Perforated:
				data.sku = data.sku.substr(0, data.sku.length - 1) + "2";
				data.gsku = data.gSkus[0];
				break;
			case TreadType.Grip:
				data.sku = data.sku.substr(0, data.sku.length - 1) + "6";
				data.gsku = data.gSkus[1];
				break;
			default:
				break
		}
	}
	container.partData = data;
	container.noParent = true;
	container.frameOffset = 0;
	container.childFrameOffset = data.childFrameOffset;
	container.rotationOffset = 0;
	container.currentFrame = currentFrame;
	container.legSlotFull = !data.hasLegSlot;
	container.mountSlotFull = !data.hasMountSlot;
	container.zOrderMod = data.zOrderMod[container.currentFrame];
	container.iZOrderMod = data.iZOrderMod[container.currentFrame];
	container.legsLimit = data.legsLimit;
	container.legsNeeded = data.legsNeeded;
	container.x = 0;
	container.y = 0;
	var sprite = new createjs.Sprite(data.spriteSheet);
	var spriteButtonHelper = new createjs.ButtonHelper(sprite);
	sprite.addEventListener("click", handlePartClicked);
	sprite.addEventListener("mouseover", handleMouseOver);
	sprite.addEventListener("mouseout", handleMouseOut);
	sprite.name = container.name = id;
	id++;
	sprite.regX = data.spriteCenter.x;
	sprite.regY = data.spriteCenter.y;
	container.addChild(sprite);
	var center = new createjs.Shape;
	center.name = "CENTER";
	center.graphics.beginFill(null).drawCircle(0, 0, 5);
	container.addChild(center);
	var f = new createjs.Shape;
	f.name = "MOUNT";
	f.graphics.beginFill(null).drawCircle(0, 0, 5);
	f.x = container.partData.mountPoint[container.currentFrame].x;
	f.y = container.partData.mountPoint[container.currentFrame].y;
	container.addChild(f);
	var p = new createjs.Shape;
	p.name = "CONNECTOR";
	p.graphics.beginFill(null).drawCircle(0, 0, 5);
	p.x = container.partData.connectorPoint[container.currentFrame].x;
	p.y = container.partData.connectorPoint[container.currentFrame].y;
	container.addChild(p);
	sprite.gotoAndStop(currentFrame);
	parts.push(sprite.name);
	length.push(data.length);
	iwidth = data.width;
	if (!data.legs) {
		SelectPartMenu(container);
		SelectPartMenu.originPart = container
	}
	return container
}

function updateDimensions(pwidth, plength, frame) {
	switch (frame) {
		case 0:
			length.push(plength);
			if (pwidth > iwidth && width.length == 0) iwidth = pwidth;
			return;
		case 1:
			width.push(-plength);
			return;
		case 2:
			length.push(-plength);
			return;
		case 3:
			width.push(plength);
			return
	}
}

function resetChildLegCounter(parent) {
	for (var i = 0; i < partsContainer.getNumChildren(); i++) {
		childPart = partsContainer.getChildAt(i);
		if (childPart.parentPart == parent && !childPart.legs) {
			childPart.legsLimit = childPart.partData.legsLimit;
			if (parent.legsNeeded && !parent.legSlotFull) childPart.legsLimit = Math.min(parent.legsLimit - childPart.partData.length, childPart.legsLimit - childPart.partData.length);
			if (!childPart.actsAsLegs) resetChildLegCounter(childPart);
			return
		}
	}
}

function handlePartClicked(event) {}

function handleMouseOver(event) {}

function handleMouseOut(event) {}
var configuratorContainer;
var partsContainer;
var minZoom = .5;
var maxZoom = 1.5;
var VENDOR = true;
var parts = new Array;
var camAngle;
var currentFrame;
var length;
var width;
var blength;
var bwidth;
var iwidth;
var partsMenuContainer;
var partsMenuContainerText;
var upperPartsMenuClip;
var heightTintButtonText;

function ConfiguratorContainer() {
	camAngle = 0;
	currentFrame = 0;
	var container = new createjs.Container;
	container.name = "CONFIGURATOR_CONTAINER";
	configuratorContainer = container;
	container.on("mousedown", function(evt) {
		this.offset = {
			x: this.x - evt.stageX,
			y: this.y - evt.stageY
		}
	});
	container.on("pressmove", function(evt) {
		this.x = evt.stageX + this.offset.x;
		this.y = evt.stageY + this.offset.y
	});
	var containerBackground = new createjs.Shape;
	containerBackground.graphics.beginFill("#FFF").drawRect(-2048, -2048, 4096, 4096);
	container.addChild(containerBackground);
	partsContainer = new createjs.Container;
	partsContainer.x = 400;
	partsContainer.y = 400;
	partsContainer.name = "CONFIGURATOR_PARTS_CONTAINER";
	container.addChild(partsContainer);
	return container
}

function showConfiguratorButtons() {
	partsMenuContainer = new createjs.Container;
	partsMenuContainer.name = "PARTS_MENU_CONTAINER";
	partsMenuContainer.x = 700;
	partsMenuContainer.y = 45;
	stage.addChild(partsMenuContainer);
	var partsMenuOutline = new createjs.Shape;
	partsMenuOutline.graphics.beginFill("#ffffff").beginStroke("#e17a0f").drawRoundRect(0, -10, 260, 730, 5);
	partsMenuContainer.addChild(partsMenuOutline);
	upperPartsMenuClip = new createjs.Shape;
	upperPartsMenuClip.graphics.beginFill("#fff").drawRect(5, 1, 250, 17);
	partsMenuContainer.addChild(upperPartsMenuClip);
	partsMenuContainerText = new createjs.Text("Click a part to show available\nparts to connect to it", "15px sans-serif", "#444");
	partsMenuContainerText.x = 130;
	partsMenuContainerText.y = 0;
	partsMenuContainerText.textAlign = "center";
	partsMenuContainer.addChild(partsMenuContainerText);
	var topPartClipping = new createjs.Shape;
	topPartClipping.graphics.beginFill("#fff").drawRect(705, 0, 250, 48);
	stage.addChild(topPartClipping);
	var bottomPartClip = new createjs.Shape;
	bottomPartClip.graphics.beginFill("#fff").drawRect(705, 750, 250, 100);
	stage.addChild(bottomPartClip);
	var resetButton = new createjs.Container;
	resetButton.x = 700;
	resetButton.name = "RESET_BUTTON";
	stage.addChild(resetButton);
	var resetButtonShape = new createjs.Shape;
	resetButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 260, 40, 5);
	resetButton.addChild(resetButtonShape);
	var resetButtonText = new createjs.Text("Reset", "20px sans-serif", "#fff");
	resetButtonText.textAlign = "center";
	resetButtonText.y = 10;
	resetButtonText.x = 130;
	resetButton.addChild(resetButtonText);
	var resetButtonHelper = new createjs.ButtonHelper(resetButton);
	resetButton.addEventListener("click", handleResetButtonClicked);
	var finishButton = new createjs.Container;
	finishButton.name = "FINISH_BUTTON";
	finishButton.x = 700;
	finishButton.y = 760;
	stage.addChild(finishButton);
	var finishButtonShape = new createjs.Shape;
	finishButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 260, 40, 5);
	finishButton.addChild(finishButtonShape);
	var finishButtonText = new createjs.Text("Complete", "20px sans-serif", "#fff");
	finishButtonText.textAlign = "center";
	finishButtonText.y = 10;
	finishButtonText.x = 130;
	finishButton.addChild(finishButtonText);
	var finishButtonHelper = new createjs.ButtonHelper(finishButton);
	finishButton.addEventListener("click", handleFinishButtonClicked);
	var zoomContainer = new createjs.Container;
	zoomContainer.name = "ZOOM_CONTAINER";
	zoomContainer.x = 10;
	zoomContainer.y = 20;
	stage.addChild(zoomContainer);
	var zoomContainerShape = new createjs.Shape;
	zoomContainerShape.graphics.beginFill("#BBB").beginStroke("#e17a0f").drawRoundRect(0, 0, 120, 80, 5);
	zoomContainer.addChild(zoomContainerShape);
	var zoomText = new createjs.Text("Zoom", "20px sans-serif", "#FFF");
	zoomText.textAlign = "center";
	zoomText.x = 60;
	zoomText.y = 10;
	zoomContainer.addChild(zoomText);
	var zoomInButton = new createjs.Container;
	zoomInButton.x = 75;
	zoomInButton.y = 40;
	zoomContainer.addChild(zoomInButton);
	var zoomInButtonShape = new createjs.Shape;
	zoomInButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 25, 25, 5);
	zoomInButton.addChild(zoomInButtonShape);
	var zoomInButtonText = new createjs.Text("+", "30px sans-serif", "#FFF");
	zoomInButtonText.textAlign = "center";
	zoomInButtonText.y = -7;
	zoomInButtonText.x = 12;
	zoomInButton.addChild(zoomInButtonText);
	var zoomInButtonHelper = new createjs.ButtonHelper(zoomInButton);
	zoomInButton.addEventListener("click", handleZoomInClicked);
	var zoomOutButton = new createjs.Container;
	zoomOutButton.x = 20;
	zoomOutButton.y = 40;
	zoomContainer.addChild(zoomOutButton);
	var zoomOutButtonShape = new createjs.Shape;
	zoomOutButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 25, 25, 5);
	zoomOutButton.addChild(zoomOutButtonShape);
	var zoomOutButtonText = new createjs.Text("-", "30px sans-serif", "#FFF");
	zoomOutButtonText.textAlign = "center";
	zoomOutButtonText.y = -7;
	zoomOutButtonText.x = 12;
	zoomOutButton.addChild(zoomOutButtonText);
	var zoomOutButtonHelper = new createjs.ButtonHelper(zoomOutButton);
	zoomOutButton.addEventListener("click", handleZoomOutClicked);
	var bInstructionText = new createjs.Text("Click Anywhere and Drag to Move the Ladder System", "16px sans-serif", "#444");
	bInstructionText.textAlign = "center";
	bInstructionText.x = 480;
	bInstructionText.y = 780;
	bInstructionText.name = "BINSTRUCTION_TEXT";
	stage.addChild(bInstructionText);
	var topDownButton = new createjs.Container;
	topDownButton.name = "TOP_DOWN_BUTTON";
	topDownButton.x = 10;
	topDownButton.y = 100;
	stage.addChild(topDownButton);
	var topDownButtonShape = new createjs.Shape;
	topDownButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 120, 60, 5);
	topDownButton.addChild(topDownButtonShape);
	var topDownButtonText = new createjs.Text("Top-Down\nView", "16px sans-serif", "#FFF");
	topDownButtonText.textAlign = "center";
	topDownButtonText.y = 10;
	topDownButtonText.x = 60;
	topDownButton.addChild(topDownButtonText);
	var topDownButtonHelper = new createjs.ButtonHelper(topDownButton);
	topDownButton.addEventListener("click", handleTopDownButtonClicked);
	if (system == 3) {
		addHeightKeys();
		var heightTintButton = new createjs.Container;
		heightTintButton.name = "HEIGHT_TINT_BUTTON";
		heightTintButton.x = 10;
		heightTintButton.y = 280;
		stage.addChild(heightTintButton);
		var heightTintButtonShape = new createjs.Shape;
		heightTintButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 120, 60, 5);
		heightTintButton.addChild(heightTintButtonShape);
		heightTintButtonText = new createjs.Text("Show\nHeight Tints", "16px sans-serif", "#FFF");
		heightTintButtonText.textAlign = "center";
		heightTintButtonText.y = 10;
		heightTintButtonText.x = 60;
		heightTintButton.addChild(heightTintButtonText);
		var heightTintButtonHelper = new createjs.ButtonHelper(heightTintButton);
		heightTintButton.addEventListener("click", handleHeightTintButtonClicked);
		var autoRailsButton = new createjs.Container;
		autoRailsButton.x = 10;
		autoRailsButton.y = 160;
		autoRailsButton.name = "AUTO_RAILS_BUTTON";
		stage.addChild(autoRailsButton);
		var autoRailsButtonShape = new createjs.Shape;
		autoRailsButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 120, 60, 5);
		autoRailsButton.addChild(autoRailsButtonShape);
		var autoRailsButtonText = new createjs.Text("Auto Add Rails", "16px sans-serif", "#FFF");
		autoRailsButtonText.textAlign = "center";
		autoRailsButtonText.y = 20;
		autoRailsButtonText.x = 60;
		autoRailsButton.addChild(autoRailsButtonText);
		var autoRailsButtonHelper = new createjs.ButtonHelper(autoRailsButton);
		autoRailsButton.addEventListener("click", handleAutoRailsButtonClicked);
		var undoAutoRailsButton = new createjs.Container;
		undoAutoRailsButton.x = 10;
		undoAutoRailsButton.y = 220;
		undoAutoRailsButton.name = "UNDO_AUTO_RAILS_BUTTON";
		stage.addChild(undoAutoRailsButton);
		var undoAutoRailsButtonShape = new createjs.Shape;
		undoAutoRailsButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 120, 60, 5);
		undoAutoRailsButton.addChild(undoAutoRailsButtonShape);
		var undoAutoRailsButtonText = new createjs.Text("Undo Auto\nAdd Rails", "16px sans-serif", "#FFF");
		undoAutoRailsButtonText.textAlign = "center";
		undoAutoRailsButtonText.y = 10;
		undoAutoRailsButtonText.x = 60;
		undoAutoRailsButton.addChild(undoAutoRailsButtonText);
		var undoAutoRailsButtonHelper = new createjs.ButtonHelper(undoAutoRailsButton);
		undoAutoRailsButton.addEventListener("click", handleUndoAutoRailsButtonClicked)
	}
}

function showResetWarning() {
	var resetWarningContainer = new createjs.Container;
	resetWarningContainer.name = "RESET_WARNING_CONTAINER";
	stage.addChild(resetWarningContainer);
	var resetWarningBackground = new createjs.Shape;
	resetWarningBackground.graphics.beginFill("#333").drawRect(0, 0, stage.getBounds().width, stage.getBounds().height);
	resetWarningContainer.addChild(resetWarningBackground);
	var resetWarningText = new createjs.Text("Resetting will lose all progress.\nContinue?", "40px sans-serif", "#F33");
	resetWarningText.y = 50;
	resetWarningText.x = stage.getBounds().width / 2;
	resetWarningText.textAlign = "center";
	resetWarningContainer.addChild(resetWarningText);
	var confirmResetButton = new createjs.Container;
	confirmResetButton.x = 450;
	confirmResetButton.y = 450;
	resetWarningContainer.addChild(confirmResetButton);
	var confirmResetButtonText = new createjs.Text("Continue", "20px sans-serif", "#F44");
	confirmResetButtonText.textAlign = "center";
	confirmResetButtonText.y = 20;
	confirmResetButtonText.x = 50;
	confirmResetButton.addChild(confirmResetButtonText);
	var confirmResetButtonShape = new createjs.Shape;
	confirmResetButtonShape.graphics.beginStroke("#F44").drawRoundRect(0, 0, 100, 60, 5);
	confirmResetButton.addChild(confirmResetButtonShape);
	var confirmResetButtonHelper = new createjs.ButtonHelper(confirmResetButton);
	confirmResetButton.addEventListener("click", handleConfirmResetButtonClicked);
	var cancelResetButton = new createjs.Container;
	cancelResetButton.x = 50;
	cancelResetButton.y = 450;
	resetWarningContainer.addChild(cancelResetButton);
	var cancelResetButtonText = new createjs.Text("Cancel", "20px sans-serif", "#F44");
	cancelResetButtonText.textAlign = "center";
	cancelResetButtonText.y = 20;
	cancelResetButtonText.x = 50;
	cancelResetButton.addChild(cancelResetButtonText);
	var cancelResetButtonShape = new createjs.Shape;
	cancelResetButtonShape.graphics.beginStroke("#F44").drawRoundRect(0, 0, 100, 60, 5);
	cancelResetButton.addChild(cancelResetButtonShape);
	var cancelResetButtonHelper = new createjs.ButtonHelper(cancelResetButton);
	cancelResetButton.addEventListener("click", handleCancelResetButtonClicked)
}

function handleResetButtonClicked(event) {
	showStartMenu()
}

function handleConfirmResetButtonClicked(event) {
	showStartMenu()
}

function handleCancelResetButtonClicked(event) {
	stage.removeChild(stage.getChildByName("RESET_WARNING_CONTAINER"))
}

function handleFinishButtonClicked(event) {
	if (system != 3) exportImage();
	else showAutoRailsPopup(true)
}

function handleZoomInClicked(event) {
	if (configuratorContainer.scaleY < 1.41) {
		configuratorContainer.scaleX += .1;
		configuratorContainer.scaleY += .1
	}
}

function handleZoomOutClicked(event) {
	if (configuratorContainer.scaleY > .51) {
		configuratorContainer.scaleX -= .1;
		configuratorContainer.scaleY -= .1
	}
}

function focusCanvas() {
	stage.removeChild(stage.getChildByName("ZOOM_CONTAINER"));
	stage.removeChild(stage.getChildByName("RESET_BUTTON"));
	stage.removeChild(stage.getChildByName("FINISH_BUTTON"));
	stage.removeChild(stage.getChildByName("INSTRUCTION_TEXT"));
	stage.removeChild(stage.getChildByName("BINSTRUCTION_TEXT"));
	stage.removeChild(stage.getChildByName("PARTS_MENU_CONTAINER"));
	stage.removeChild(stage.getChildByName("TOP_DOWN_BUTTON"));
	if (system == 3) {
		stage.removeChild(stage.getChildByName("HEIGHT_TINT_BUTTON"));
		stage.removeChild(stage.getChildByName("AUTO_RAILS_BUTTON"));
		stage.removeChild(stage.getChildByName("UNDO_AUTO_RAILS_BUTTON"));
		if (LAST_CLICKED_MAX_ACCESS_PART != null) LAST_CLICKED_MAX_ACCESS_PART.highlight.visible = false
	}
	stage.update();
	stage.canvas.width = 1920;
	stage.canvas.height = 1600;
	stage.x = 200;
	stage.y = 100;
	configuratorContainer.x = 0;
	configuratorContainer.y = 0;
	stage.scaleX = stage.scaleY = .75;
	stage.update()
}

function restoreCanvas() {
	if (system != 3) stage.removeChild(topDownView);
	else stage.removeChild(maxTopDownView);
	stage.scaleX = stage.scaleY = 1;
	stage.canvas.width = 960;
	stage.canvas.height = 800;
	stage.x = 0;
	stage.y = 0;
	stage.update();
	showConfiguratorButtons();
	if (system != 3) SelectPartMenu(originalPart);
	else addMaxRemoveButton();
	stage.update()
}

function updateZOrder() {
	if (system != 3) {
		if (camAngle % 360 == -90 || camAngle % 360 == -180 || camAngle % 360 == 180 || camAngle % 360 == 270) defaultZOrdering();
		else inverseZOrdering()
	}
}

function defaultPartsOrder() {
	var sortFunction = function(obj1, obj2, options) {
		if (parts.indexOf(obj1.name) > parts.indexOf(obj2.name)) return 1;
		if (parts.indexOf(obj1.name) < parts.indexOf(obj2.name)) return -1;
		return 0
	};
	partsContainer.sortChildren(sortFunction)
}

function defaultZOrdering() {
	var sortFunction = function(obj1, obj2, options) {
		if (obj1.zOrderMod == obj2.zOrderMod) {
			if (parts.indexOf(obj1.name) > parts.indexOf(obj2.name)) return 1;
			if (parts.indexOf(obj1.name) < parts.indexOf(obj2.name)) return -1;
			return 0
		} else {
			if (obj1.zOrderMod > obj2.zOrderMod) return 1;
			if (obj1.zOrderMod < obj2.zOrderMod) return -1;
			return 0
		}
	};
	partsContainer.sortChildren(sortFunction)
}

function inverseZOrdering() {
	var sortFunction = function(obj1, obj2, options) {
		if (obj1.iZOrderMod == obj2.iZOrderMod) {
			if (parts.indexOf(obj1.name) < parts.indexOf(obj2.name)) return 1;
			if (parts.indexOf(obj1.name) > parts.indexOf(obj2.name)) return -1;
			return 0
		} else {
			if (obj1.iZOrderMod > obj2.iZOrderMod) return 1;
			if (obj1.iZOrderMod < obj2.iZOrderMod) return -1;
			return 0
		}
	};
	partsContainer.sortChildren(sortFunction)
}

function handleTopDownButtonClicked(event) {
	if (system != 3) stage.addChild(TopDownView());
	else stage.addChild(MaxTopDownView())
}

function handleHeightTintButtonClicked(event) {
	showHeightTints = !showHeightTints;
	if (showHeightTints) {
		for (var i = 0; i < heightTints.length; i++) {
			heightTints[i].visible = true
		}
		for (var i = 0; i < heightKeys.length; i++) {
			heightKeys[i].visible = true
		}
		heightTintButtonText.text = "Hide\n Height Tints"
	} else {
		for (var i = 0; i < heightTints.length; i++) {
			heightTints[i].visible = false
		}
		for (var i = 0; i < heightKeys.length; i++) {
			heightKeys[i].visible = false
		}
		heightTintButtonText.text = "Show\n Height Tints"
	}
}

function handleAutoRailsButtonClicked(event) {
	showAutoRailsPopup(false)
}

function handleUndoAutoRailsButtonClicked(event) {
	removeAutoAddedRails()
}

function showAutoRailsPopup(completed) {
	toolTipText.visible = false;
	var popup = new createjs.Container;
	popup.name = "RAILS_POPUP";
	stage.addChild(popup);
	var background = new createjs.Shape;
	background.graphics.beginFill("rgba(64,64,64,0.5").drawRect(0, 0, 1e3, 1e3);
	popup.addChild(background);
	var popupShape = new createjs.Shape;
	popupShape.graphics.beginFill("#FFF").beginStroke("#e17a0f").drawRoundRect(300, 100, 360, 500, 5);
	popup.addChild(popupShape);
	var popupText = new createjs.Text('Platforms at 50" heights or greater require \nhandrails for code compliance.\n\nExceptions can be made if the platform is \nalongside a wall or machine that will otherwise\nprevent falls.', "16px sans-serif", "#444");
	popupText.x = 320;
	popupText.y = 120;
	popup.addChild(popupText);
	var addAllRailsButton = new createjs.Container;
	addAllRailsButton.x = 320;
	addAllRailsButton.y = 300;
	popup.addChild(addAllRailsButton);
	var addAllRailsButtonShape = new createjs.Shape;
	addAllRailsButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 320, 60, 5);
	addAllRailsButton.addChild(addAllRailsButtonShape);
	var addAllRailsButtonText = new createjs.Text("Close Off All Platforms With Rails", "16px sans-serif", "#FFF");
	addAllRailsButtonText.textAlign = "center";
	addAllRailsButtonText.y = 20;
	addAllRailsButtonText.x = 150;
	addAllRailsButton.addChild(addAllRailsButtonText);
	var addAllRailsButtonHelper = new createjs.ButtonHelper(addAllRailsButton);
	if (!completed) addAllRailsButton.addEventListener("click", handleAddAllRailsButtonClicked);
	else addAllRailsButton.addEventListener("click", handleAddAllRailsButtonCompletedClicked);
	var add50RailsButton = new createjs.Container;
	add50RailsButton.x = 320;
	add50RailsButton.y = 380;
	popup.addChild(add50RailsButton);
	var add50RailsButtonShape = new createjs.Shape;
	add50RailsButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 320, 60, 5);
	add50RailsButton.addChild(add50RailsButtonShape);
	var add50RailsButtonText = new createjs.Text('Close Off All Platforms 50" or Higher\n With Rails', "16px sans-serif", "#FFF");
	add50RailsButtonText.textAlign = "center";
	add50RailsButtonText.y = 10;
	add50RailsButtonText.x = 150;
	add50RailsButton.addChild(add50RailsButtonText);
	var add50RailsButtonHelper = new createjs.ButtonHelper(add50RailsButton);
	if (!completed) add50RailsButton.addEventListener("click", handleAdd50RailsButtonClicked);
	else add50RailsButton.addEventListener("click", handleAdd50RailsButtonCompletedClicked);
	var cancelRailsPopupButton = new createjs.Container;
	cancelRailsPopupButton.x = 320;
	cancelRailsPopupButton.y = 460;
	popup.addChild(cancelRailsPopupButton);
	var cancelRailsPopupButtonShape = new createjs.Shape;
	cancelRailsPopupButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 320, 60, 5);
	cancelRailsPopupButton.addChild(cancelRailsPopupButtonShape);
	var cancelRailsPopupButtonText = new createjs.Text("Cancel", "16px sans-serif", "#FFF");
	cancelRailsPopupButtonText.y = 20;
	if (completed) {
		cancelRailsPopupButtonText.y = 10;
		cancelRailsPopupButtonText.text = "I Have Already Added the Rails\nNeeded for Code Compliance"
	}
	cancelRailsPopupButtonText.textAlign = "center";
	cancelRailsPopupButtonText.x = 150;
	cancelRailsPopupButton.addChild(cancelRailsPopupButtonText);
	var cancelRailsPopupButtonHelper = new createjs.ButtonHelper(cancelRailsPopupButton);
	if (!completed) cancelRailsPopupButton.addEventListener("click", handleCancelRailsPopupButtonClicked);
	else cancelRailsPopupButton.addEventListener("click", handleCancelRailsCompleteButtonClicked)
}

function handleAddAllRailsButtonClicked(event) {
	autoAddRails(true);
	stage.removeChild(stage.getChildByName("RAILS_POPUP"))
}

function handleAdd50RailsButtonClicked(event) {
	autoAddRails(false);
	stage.removeChild(stage.getChildByName("RAILS_POPUP"))
}

function handleAddAllRailsButtonCompletedClicked(event) {
	autoAddRails(true);
	stage.removeChild(stage.getChildByName("RAILS_POPUP"));
	exportImage()
}

function handleAdd50RailsButtonCompletedClicked(event) {
	autoAddRails(false);
	stage.removeChild(stage.getChildByName("RAILS_POPUP"));
	exportImage()
}

function handleCancelRailsPopupButtonClicked(event) {
	stage.removeChild(stage.getChildByName("RAILS_POPUP"))
}

function handleCancelRailsCompleteButtonClicked(event) {
	stage.removeChild(stage.getChildByName("RAILS_POPUP"));
	exportImage()
}
var PARTS = {
	URTSB36: URTSB36(true),
	URTL502: URTL502(true),
	URTL502E: URTL502E(true),
	URTL503: URTL503(true),
	URTL503E: URTL503E(true),
	URSL20: URSL20(true),
	URTRK1: URTRK1(true),
	URTOS3636: URTOS3636(true),
	URTTP20L: URTTP20L(true),
	URTTP20R: URTTP20R(true),
	RT_LADDER50END: RT_LADDER50END(true),
	RT_LADDER90END: RT_LADDER90END(true),
	RT_LEGS: RT_LEGS(true),
	RT_LEFTTURN: RT_LEFTTURN(true),
	RT_RIGHTTURN: RT_RIGHTTURN(true),
	UCB30246: UCB30246(true),
	UCB20246: UCB20246(true),
	CO_LEFTTURN: CO_LEFTTURN(true),
	CO_RIGHTTURN: CO_RIGHTTURN(true),
	CO_LADDER50END: CO_LADDER50END(true),
	CO_LADDER75END: CO_LADDER75END(true),
	CO_LADDER90END: CO_LADDER90END(true),
	CO_LEGS: CO_LEGS(true),
	URK: URK(true),
	UAP3636: UAP3636(true),
	UAP0250U: UAP0250U(true),
	UAP0290U: UAP0290U(true),
	UAP0250D: UAP0250D(true),
	UAP0290D: UAP0290D(true),
	UAP0350U: UAP0350U(true),
	UAP0390U: UAP0390U(true),
	UAP0350D: UAP0350D(true),
	UAP0390D: UAP0390D(true),
	UAP0450U: UAP0450U(true),
	UAP0490U: UAP0490U(true),
	UAP0450D: UAP0450D(true),
	UAP0490D: UAP0490D(true),
	UAP0550U: UAP0550U(true),
	UAP0590U: UAP0590U(true),
	UAP0550D: UAP0550D(true),
	UAP0590D: UAP0590D(true),
	UAP0650U: UAP0650U(true),
	UAP0690U: UAP0690U(true),
	UAP0650D: UAP0650D(true),
	UAP0690D: UAP0690D(true),
	UAP0750U: UAP0750U(true),
	UAP0790U: UAP0790U(true),
	UAP0750D: UAP0750D(true),
	UAP0790D: UAP0790D(true),
	UAP0850U: UAP0850U(true),
	UAP0890U: UAP0890U(true),
	UAP0850D: UAP0850D(true),
	UAP0890D: UAP0890D(true),
	UAP0950U: UAP0950U(true),
	UAP0990U: UAP0990U(true),
	UAP0950D: UAP0950D(true),
	UAP0990D: UAP0990D(true),
	UAP1050U: UAP1050U(true),
	UAP1090U: UAP1090U(true),
	UAP1050D: UAP1050D(true),
	UAP1090D: UAP1090D(true),
	UAP1150U: UAP1150U(true),
	UAP1190U: UAP1190U(true),
	UAP1150D: UAP1150D(true),
	UAP1190D: UAP1190D(true),
	UAPHR1: UAPHR1(true)
};

function refreshParts() {
	PARTS["RT_LADDER50END"] = RT_LADDER50END(true);
	PARTS["RT_LADDER90END"] = RT_LADDER90END(true);
	PARTS["RT_LEGS"] = RT_LEGS(true);
	PARTS["RT_LEFTTURN"] = RT_LEFTTURN(true);
	PARTS["RT_RIGHTTURN"] = RT_RIGHTTURN(true);
	PARTS["CO_LEFTTURN"] = CO_LEFTTURN(true);
	PARTS["CO_RIGHTTURN"] = CO_RIGHTTURN(true);
	PARTS["CO_LADDER50END"] = CO_LADDER50END(true);
	PARTS["CO_LADDER75END"] = CO_LADDER75END(true);
	PARTS["CO_LADDER90END"] = CO_LADDER90END(true);
	PARTS["CO_LEGS"] = CO_LEGS(true)
}
var MOUNT_SLOT = 1;
var LEG_SLOT = 2;

function URTSB36(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-32, 26), new createjs.Point(-60, -36), new createjs.Point(38, 60), new createjs.Point(-10, -110)],
		connectorPoint: [new createjs.Point(36, 60), new createjs.Point(-26, 28), new createjs.Point(28, -26), new createjs.Point(60, 36)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(-60, 60), new createjs.Point(16, 42), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTSB36.PNG"],
			frames: {
				width: 141,
				height: 163
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(70, 81),
		altSkus: false,
		length: 40,
		width: 42,
		legsNeeded: true,
		legsLimit: 120,
		actsAsLegs: false,
		frameOffset: 0,
		childFrameOffset: 0,
		description: '40"L Bridge Span',
		name: '40"L Bridge Span',
		sku: "URTSB36",
		gsku: "29RJ32",
		connectableParts: ["URTSB36", "RT_LADDER50END", "RT_LADDER90END", "RT_LEFTTURN", "RT_RIGHTTURN", "URTRK1", "RT_LEGS"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: true,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 1, 1, -1],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: true,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: false
	}
}

function URTL502(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-19, 12), new createjs.Point(-18, -26), new createjs.Point(-26, -18), new createjs.Point(12, -19)],
		connectorPoint: [new createjs.Point(18, -18), new createjs.Point(24, 26), new createjs.Point(26, 26), new createjs.Point(-18, 18)],
		rotationOffsets: [new createjs.Point(0, -40), new createjs.Point(0, -40), new createjs.Point(0, 0), new createjs.Point(20, 70)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTL502.PNG"],
			frames: {
				width: 116,
				height: 189
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(58, 94),
		altSkus: false,
		length: 30,
		width: 46.25,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "2 Step 50° Ladder",
		name: "2 Step 50°\nLadder",
		sku: "URTL502",
		gsku: "29RJ17",
		connectableParts: ["URTSB36", "RT_LEFTTURN", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function URTL502E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(26, 26), new createjs.Point(-18, -26), new createjs.Point(-26, -18), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(24, 26), new createjs.Point(-18, 18), new createjs.Point(18, -12), new createjs.Point(48, 42)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(18, 68), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTL502E.PNG"],
			frames: {
				width: 116,
				height: 189
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(58, 94),
		altSkus: false,
		length: 30,
		width: 46.25,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "2 Step 50° Ladder",
		name: "2 Step 50°\nLadder",
		sku: "URTL502",
		gsku: "29RJ17",
		connectableParts: ["URTSB36", "RT_LEFTTURN", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function URTL902(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 20), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTL902.PNG"],
			frames: {
				width: 111,
				height: 181
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(55, 90),
		altSkus: false,
		length: 10,
		width: 52.25,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "2 Step 90° Ladder",
		name: "2 Step 90°\nLadder",
		sku: "URTL902",
		gsku: "29RJ22",
		connectableParts: ["URTSB36", "RT_LEFTTURN", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function URTL902E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(6, 26), new createjs.Point(20, 74), new createjs.Point(0, -20), new createjs.Point(48, 110)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTL902E.PNG"],
			frames: {
				width: 111,
				height: 181
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(55, 90),
		altSkus: false,
		length: 10,
		width: 52.25,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "2 Step 90° Ladder",
		name: "2 Step 90°\nLadder",
		sku: "URTL902",
		gsku: "29RJ22",
		connectableParts: ["URTSB36", "RT_LEFTTURN", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function URTL503(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-12, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTL503.PNG"],
			frames: {
				width: 150,
				height: 223
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(75, 111),
		altSkus: false,
		length: 40,
		width: 52.75,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "3 Step 50° Ladder",
		name: "3 Step 50°\nLadder",
		sku: "URTL503",
		gsku: "29RJ18",
		connectableParts: ["URTSB36", "RT_LEFTTURN", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function URTL503E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(20, 26), new createjs.Point(10, 100), new createjs.Point(16, 0), new createjs.Point(62, 110)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTL503E.PNG"],
			frames: {
				width: 150,
				height: 223
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(75, 111),
		altSkus: false,
		length: 40,
		width: 52.75,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "3 Step 50° Ladder",
		name: "3 Step 50°\nLadder",
		sku: "URTL503",
		gsku: "29RJ18",
		connectableParts: ["URTSB36", "RT_LEFTTURN", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function URTL903(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 4), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTL903.PNG"],
			frames: {
				width: 110,
				height: 202
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(55, 101),
		altSkus: false,
		length: 10,
		width: 52.25,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "3 Step 90° Ladder",
		name: "3 Step 90°\nLadder",
		sku: "URTL903",
		gsku: "29RJ23",
		connectableParts: ["URTSB36", "RT_LEFTTURN", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function URTL903E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(6, 26), new createjs.Point(20, 74), new createjs.Point(0, -20), new createjs.Point(46, 110)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTL903E.PNG"],
			frames: {
				width: 110,
				height: 202
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(55, 90),
		altSkus: false,
		length: 10,
		width: 52.25,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "3 Step 90° Ladder",
		name: "3 Step 90°\nLadder",
		sku: "URTL903",
		gsku: "29RJ23",
		connectableParts: ["URTSB36", "RT_LEFTTURN", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function URTL504(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-22, -20), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTL504.PNG"],
			frames: {
				width: 165,
				height: 252
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(82, 126),
		altSkus: false,
		length: 50,
		width: 52.75,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "4 Step 50° Ladder",
		name: "4 Step 50°\nLadder",
		sku: "URTL504",
		gsku: "29RJ19",
		connectableParts: ["URTSB36", "RT_LEFTTURN", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function URTL504E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(54, 46), new createjs.Point(-24, 78), new createjs.Point(-4, -16), new createjs.Point(40, 90)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTL504E.PNG"],
			frames: {
				width: 165,
				height: 252
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(58, 94),
		altSkus: false,
		length: 50,
		width: 52.75,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "4 Step 50° Ladder",
		name: "4 Step 50°\nLadder",
		sku: "URTL504",
		gsku: "29RJ19",
		connectableParts: ["URTSB36", "RT_LEFTTURN", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function URTL904(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 20), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTL904.PNG"],
			frames: {
				width: 110,
				height: 223
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(55, 90),
		altSkus: false,
		length: 10,
		width: 52.25,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "4 Step 90° Ladder",
		name: "4 Step 90°\nLadder",
		sku: "URTL904",
		gsku: "29RJ24X",
		connectableParts: ["URTSB36", "RT_LEFTTURN", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function URTL904E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(8, 26), new createjs.Point(20, 74), new createjs.Point(-2, -20), new createjs.Point(48, 110)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTL904E.PNG"],
			frames: {
				width: 110,
				height: 223
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(55, 90),
		altSkus: false,
		length: 10,
		width: 52.25,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "4 Step 90° Ladder",
		name: "4 Step 90°\nLadder",
		sku: "URTL904",
		gsku: "29RJ24X",
		connectableParts: ["URTSB36", "RT_LEFTTURN", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function URTL505(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-32, -30), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTL505.PNG"],
			frames: {
				width: 180,
				height: 280
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(90, 140),
		altSkus: false,
		length: 60,
		width: 52.75,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "5 Step 50° Ladder",
		name: "5 Step 50°\nLadder",
		sku: "URTL505",
		gsku: "29RJ20",
		connectableParts: ["URTSB36", "RT_LEFTTURN", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function URTL505E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(38, 54), new createjs.Point(-8, 74), new createjs.Point(30, -20), new createjs.Point(72, 80)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTL505E.PNG"],
			frames: {
				width: 180,
				height: 280
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(90, 90),
		altSkus: false,
		length: 60,
		width: 52.75,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "5 Step 50° Ladder",
		name: "5 Step 50°\nLadder",
		sku: "URTL505",
		gsku: "29RJ20",
		connectableParts: ["URTSB36", "RT_LEFTTURN", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function URTL905(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 20), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTL905.PNG"],
			frames: {
				width: 110,
				height: 244
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(55, 90),
		altSkus: false,
		length: 10,
		width: 52.25,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "5 Step 90° Ladder",
		name: "5 Step 90°\nLadder",
		sku: "URTL905",
		gsku: "29RJ25",
		connectableParts: ["URTSB36", "RT_LEFTTURN", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function URTL905E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(8, 26), new createjs.Point(20, 74), new createjs.Point(0, -20), new createjs.Point(48, 110)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTL905E.PNG"],
			frames: {
				width: 110,
				height: 244
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(55, 90),
		altSkus: false,
		length: 10,
		width: 52.25,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "5 Step 90° Ladder",
		name: "5 Step 90°\nLadder",
		sku: "URTL905",
		gsku: "29RJ25",
		connectableParts: ["URTSB36", "RT_LEFTTURN", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function URTL506(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-32, -30), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTL506.PNG"],
			frames: {
				width: 195,
				height: 303
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(90, 140),
		altSkus: false,
		length: 70,
		width: 52.75,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "6 Step 50° Ladder",
		name: "6 Step 50°\nLadder",
		sku: "URTL506",
		gsku: "29RJ21",
		connectableParts: ["URTSB36", "RT_LEFTTURN", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function URTL506E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(44, 26), new createjs.Point(-20, 80), new createjs.Point(30, -20), new createjs.Point(80, 110)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTL506E.PNG"],
			frames: {
				width: 195,
				height: 303
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(90, 90),
		altSkus: false,
		length: 70,
		width: 52.75,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "6 Step 50° Ladder",
		name: "6 Step 50°\nLadder",
		sku: "URTL506",
		gsku: "29RJ21",
		connectableParts: ["URTSB36", "RT_LEFTTURN", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function URTL906(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 20), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTL906.PNG"],
			frames: {
				width: 111,
				height: 265
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(55, 90),
		altSkus: false,
		length: 10,
		width: 52.25,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "6 Step 90° Ladder",
		name: "6 Step 90°\nLadder",
		sku: "URTL906",
		gsku: "29RJ26",
		connectableParts: ["URTSB36", "RT_LEFTTURN", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function URTL906E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(6, 26), new createjs.Point(20, 74), new createjs.Point(0, -20), new createjs.Point(48, 110)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTL906E.PNG"],
			frames: {
				width: 111,
				height: 265
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(55, 90),
		altSkus: false,
		length: 10,
		width: 52.25,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "6 Step 90° Ladder",
		name: "6 Step 90°\nLadder",
		sku: "URTL906",
		gsku: "29RJ26",
		connectableParts: ["URTSB36", "RT_LEFTTURN", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function URSL20(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(2, -10), new createjs.Point(30, -36), new createjs.Point(0, -36), new createjs.Point(45, 0)],
		rotationOffsets: [new createjs.Point(-2, 40), new createjs.Point(0, 0), new createjs.Point(-5, 140), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URSL20.PNG"],
			frames: {
				width: 113,
				height: 133
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(56, 66),
		altSkus: false,
		length: 0,
		width: 42,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "Legs Kit",
		name: "Legs Kit",
		sku: "URSL20",
		gsku: "29RJ27",
		connectableParts: [],
		usesSlot: 2,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [-5e4, -5e4, -5e4, -5e4],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: true,
		rails: false,
		ladder: false
	}
}

function URSL30(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(2, -4), new createjs.Point(30, -36), new createjs.Point(0, -36), new createjs.Point(45, 0)],
		rotationOffsets: [new createjs.Point(-2, 40), new createjs.Point(0, 0), new createjs.Point(-5, 140), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URSL30.PNG"],
			frames: {
				width: 113,
				height: 155
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(56, 66),
		altSkus: false,
		length: 0,
		width: 42,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "Legs Kit",
		name: "Legs Kit",
		sku: "URSL30",
		gsku: "29RJ28",
		connectableParts: [],
		usesSlot: 2,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [-5e4, -5e4, -5e4, -5e4],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: true,
		rails: false,
		ladder: false
	}
}

function URSL40(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(2, -4), new createjs.Point(30, -36), new createjs.Point(0, -36), new createjs.Point(45, 0)],
		rotationOffsets: [new createjs.Point(-2, 40), new createjs.Point(0, 0), new createjs.Point(-5, 140), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URSL40.PNG"],
			frames: {
				width: 113,
				height: 176
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(56, 66),
		altSkus: false,
		length: 0,
		width: 42,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "Legs Kit",
		name: "Legs Kit",
		sku: "URSL40",
		gsku: "29RJ29",
		connectableParts: [],
		usesSlot: 2,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [-5e4, -5e4, -5e4, -5e4],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: true,
		rails: false,
		ladder: false
	}
}

function URSL50(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(2, -4), new createjs.Point(30, -36), new createjs.Point(0, -36), new createjs.Point(45, 0)],
		rotationOffsets: [new createjs.Point(-2, 40), new createjs.Point(0, 0), new createjs.Point(-5, 140), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URSL50.PNG"],
			frames: {
				width: 113,
				height: 197
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(56, 66),
		altSkus: false,
		length: 0,
		width: 42,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "Legs Kit",
		name: "Legs Kit",
		sku: "URSL50",
		gsku: "29RJ30",
		connectableParts: [],
		usesSlot: 2,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [-5e4, -5e4, -5e4, -5e4],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: true,
		rails: false,
		ladder: false
	}
}

function URSL60(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(2, -4), new createjs.Point(30, -36), new createjs.Point(0, -36), new createjs.Point(45, 0)],
		rotationOffsets: [new createjs.Point(-2, 40), new createjs.Point(0, 0), new createjs.Point(-5, 140), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URSL60.PNG"],
			frames: {
				width: 113,
				height: 218
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(56, 66),
		altSkus: false,
		length: 0,
		width: 42,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "Legs Kit",
		name: "Legs Kit",
		sku: "URSL60",
		gsku: "29RJ31",
		connectableParts: [],
		usesSlot: 2,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [-5e4, -5e4, -5e4, -5e4],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: true,
		rails: false,
		ladder: false
	}
}

function URTRK1(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(5, 45), new createjs.Point(-45, 0), new createjs.Point(0, -45), new createjs.Point(-24, 40)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(70, 52), new createjs.Point(70, 52), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTRK1-1.PNG"],
			frames: {
				width: 74,
				height: 126
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(37, 63),
		altSkus: false,
		length: 0,
		width: 42,
		legsNeeded: true,
		legsLimit: 0,
		actsAsLegs: false,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "Rail Kit",
		name: "Rail Kit",
		sku: "URTRK1",
		gsku: "29RJ38",
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: true,
		ladder: false
	}
}

function URTOS3636(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false
}

function URTTP20L(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-64, -60), new createjs.Point(54, 36), new createjs.Point(4, -140), new createjs.Point(-40, 6)],
		connectorPoint: [new createjs.Point(32, 36), new createjs.Point(0, 45), new createjs.Point(24, -2), new createjs.Point(110, 52)],
		rotationOffsets: [new createjs.Point(-2, 0), new createjs.Point(-20, 50), new createjs.Point(-20, 50), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTTP20L.PNG"],
			frames: {
				width: 163,
				height: 212
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(81, 106),
		altSkus: false,
		length: 52.75,
		width: 52.75,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 1,
		description: "Turn Platform",
		name: "Turn Platform\n(Left)",
		sku: "URTTP20",
		gsku: "29RJ33",
		canConnectParts: true,
		connectableParts: ["URTSB36", "RT_LADDER50END", "RT_LADDER90END", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 50, 100, -50],
		forceDrawLast: true,
		forceDrawLastFrame: 2,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function URTTP20R(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, -132), new createjs.Point(-20, 0), new createjs.Point(-64, -60), new createjs.Point(32, 36)],
		connectorPoint: [new createjs.Point(48, 40), new createjs.Point(-20, 100), new createjs.Point(40, 0), new createjs.Point(84, 100)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTTP20R.PNG"],
			frames: {
				width: 163,
				height: 212
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(81, 106),
		altSkus: false,
		length: 52.75,
		width: 52.75,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 3,
		description: "Turn Platform",
		name: "Turn Platform\n(Right)",
		sku: "URTTP20",
		gsku: "29RJ33",
		connectableParts: ["URTSB36", "RT_LADDER50END", "RT_LADDER90END", "RT_LEFTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function URTTP30L(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-64, -68), new createjs.Point(52, 28), new createjs.Point(4, -146), new createjs.Point(-40, -6)],
		connectorPoint: [new createjs.Point(30, 30), new createjs.Point(-18, 102), new createjs.Point(24, 6), new createjs.Point(90, 110)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTTP30L.PNG"],
			frames: {
				width: 163,
				height: 233
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(81, 116),
		altSkus: false,
		length: 52.75,
		width: 52.75,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 1,
		description: "Turn Platform",
		name: "Turn Platform\n(Left)",
		sku: "URTTP30",
		gsku: "29RJ34",
		canConnectParts: true,
		connectableParts: ["URTSB36", "RT_LADDER50END", "RT_LADDER90END", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 50, 100, -50],
		forceDrawLast: true,
		forceDrawLastFrame: 2,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function URTTP30R(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, -142), new createjs.Point(-24, -10), new createjs.Point(-64, -68), new createjs.Point(32, 28)],
		connectorPoint: [new createjs.Point(48, 30), new createjs.Point(-20, 100), new createjs.Point(40, 10), new createjs.Point(84, 110)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTTP30R.PNG"],
			frames: {
				width: 163,
				height: 233
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(81, 116),
		altSkus: false,
		length: 52.75,
		width: 52.75,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 3,
		description: "Turn Platform",
		name: "Turn Platform\n(Right)",
		sku: "URTTP30",
		gsku: "29RJ34",
		connectableParts: ["URTSB36", "RT_LADDER50END", "RT_LADDER90END", "RT_LEFTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function URTTP40R(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, -148), new createjs.Point(-20, -8), new createjs.Point(-68, -69), new createjs.Point(28, 27)],
		connectorPoint: [new createjs.Point(48, 26), new createjs.Point(-20, 104), new createjs.Point(40, 10), new createjs.Point(84, 110)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTTP40R.PNG"],
			frames: {
				width: 163,
				height: 253
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(81, 116),
		altSkus: false,
		length: 52.75,
		width: 52.75,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 3,
		description: "Turn Platform",
		name: "Turn Platform\n(Right)",
		sku: "URTTP40",
		gsku: "29RJ35",
		connectableParts: ["URTSB36", "RT_LADDER50END", "RT_LADDER90END", "RT_LEFTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function URTTP40L(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-66, -68), new createjs.Point(52, 28), new createjs.Point(0, -146), new createjs.Point(-40, -6)],
		connectorPoint: [new createjs.Point(30, 26), new createjs.Point(-18, 102), new createjs.Point(24, 10), new createjs.Point(90, 110)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTTP40L.PNG"],
			frames: {
				width: 163,
				height: 253
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(81, 116),
		altSkus: false,
		length: 52.75,
		width: 52.75,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 1,
		description: "Turn Platform",
		name: "Turn Platform\n(Left)",
		sku: "URTTP40",
		gsku: "29RJ35",
		canConnectParts: true,
		connectableParts: ["URTSB36", "RT_LADDER50END", "RT_LADDER90END", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 50, 100, -50],
		forceDrawLast: true,
		forceDrawLastFrame: 2,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function URTTP50R(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, -148), new createjs.Point(-20, -8), new createjs.Point(-68, -69), new createjs.Point(28, 27)],
		connectorPoint: [new createjs.Point(48, 26), new createjs.Point(-20, 104), new createjs.Point(40, 10), new createjs.Point(84, 110)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTTP50R.PNG"],
			frames: {
				width: 163,
				height: 276
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(81, 118),
		altSkus: false,
		length: 52.75,
		width: 52.75,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 3,
		description: "Turn Platform",
		name: "Turn Platform\n(Right)",
		sku: "URTTP50",
		gsku: "29RJ36",
		connectableParts: ["URTSB36", "RT_LADDER50END", "RT_LADDER90END", "RT_LEFTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function URTTP50L(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-66, -68), new createjs.Point(52, 28), new createjs.Point(0, -146), new createjs.Point(-40, -6)],
		connectorPoint: [new createjs.Point(30, 26), new createjs.Point(-18, 108), new createjs.Point(24, 10), new createjs.Point(90, 110)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTTP50L.PNG"],
			frames: {
				width: 163,
				height: 276
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(81, 118),
		altSkus: false,
		length: 52.75,
		width: 52.75,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 1,
		description: "Turn Platform",
		name: "Turn Platform\n(Left)",
		sku: "URTTP50",
		gsku: "29RJ36",
		canConnectParts: true,
		connectableParts: ["URTSB36", "RT_LADDER50END", "RT_LADDER90END", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 50, 100, -50],
		forceDrawLast: true,
		forceDrawLastFrame: 2,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function URTTP60R(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, -148), new createjs.Point(-20, -8), new createjs.Point(-68, -69), new createjs.Point(28, 27)],
		connectorPoint: [new createjs.Point(48, 26), new createjs.Point(-20, 104), new createjs.Point(40, 10), new createjs.Point(84, 110)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTTP50R.PNG"],
			frames: {
				width: 163,
				height: 276
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(81, 118),
		altSkus: false,
		length: 52.75,
		width: 52.75,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 3,
		description: "Turn Platform",
		name: "Turn Platform\n(Right)",
		sku: "URTTP60",
		gsku: "29RJ37",
		connectableParts: ["URTSB36", "RT_LADDER50END", "RT_LADDER90END", "RT_LEFTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function URTTP60L(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-66, -68), new createjs.Point(52, 28), new createjs.Point(0, -146), new createjs.Point(-40, -6)],
		connectorPoint: [new createjs.Point(30, 26), new createjs.Point(-18, 108), new createjs.Point(24, 10), new createjs.Point(90, 110)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URTTP50L.PNG"],
			frames: {
				width: 163,
				height: 276
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(81, 118),
		altSkus: false,
		length: 52.75,
		width: 52.75,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 1,
		description: "Turn Platform",
		name: "Turn Platform\n(Left)",
		sku: "URTTP60",
		gsku: "29RJ37",
		canConnectParts: true,
		connectableParts: ["URTSB36", "RT_LADDER50END", "RT_LADDER90END", "RT_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 50, 100, -50],
		forceDrawLast: true,
		forceDrawLastFrame: 2,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function UCL5003242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-18, 2), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL5003242.PNG"],
			frames: {
				width: 95,
				height: 205
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(47, 102),
		altSkus: true,
		length: 30,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "3 Step 50° Ladder",
		name: "3 Step 50°\nLadder",
		sku: "UCL500324X",
		gsku: "29RJ18",
		gSkus: ["21Y491", "21Y489"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL5003242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(20, 34), new createjs.Point(-22, -16), new createjs.Point(14, -10), new createjs.Point(18, -32)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL5003242E.PNG"],
			frames: {
				width: 95,
				height: 205
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(47, 92),
		altSkus: true,
		length: 30,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "3 Step 50° Ladder",
		name: "3 Step 50°\nLadder",
		sku: "UCL500324X",
		gsku: "29RJ18",
		gSkus: ["21Y491", "21Y489"],
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL7503242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-6, 4), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL7503242.PNG"],
			frames: {
				width: 72,
				height: 192
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(36, 96),
		altSkus: true,
		length: 21,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "3 Step 75° Ladder",
		name: "3 Step 75°\nLadder",
		sku: "UCL750324X",
		gsku: "29RJ18",
		gSkus: ["21Y495", "21Y493"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL7503242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(10, 36), new createjs.Point(-8, -28), new createjs.Point(0, -30), new createjs.Point(8, -34)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL7503242E.PNG"],
			frames: {
				width: 72,
				height: 192
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(36, 76),
		altSkus: true,
		length: 21,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "3 Step 75° Ladder",
		name: "3 Step 75°\nLadder",
		sku: "UCL750324X",
		gsku: "29RJ18",
		gSkus: ["21Y495", "21Y493"],
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL9003242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-6, 6), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL9003246.PNG"],
			frames: {
				width: 65,
				height: 186
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(32, 93),
		altSkus: false,
		length: 3,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "3 Step 90° Ladder",
		name: "3 Step 90°\nLadder",
		sku: "UCL9003246",
		gsku: "21Y497",
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL9003242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(4, 40), new createjs.Point(-4, -32), new createjs.Point(0, -30), new createjs.Point(2, -40)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL9003246E.PNG"],
			frames: {
				width: 65,
				height: 186
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(32, 63),
		altSkus: false,
		length: 3,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "3 Step 90° Ladder",
		name: "3 Step 90°\nLadder",
		sku: "UCL9003246",
		gsku: "21Y497",
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL5004242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-30, -16), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL5004242.PNG"],
			frames: {
				width: 110,
				height: 231
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(55, 115),
		altSkus: true,
		length: 40,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "4 Step 50° Ladder",
		name: "4 Step 50°\nLadder",
		sku: "UCL500424X",
		gsku: "29RJ18",
		gSkus: ["21Y492", "21Y490"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL5004242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(28, 36), new createjs.Point(-28, -12), new createjs.Point(24, -10), new createjs.Point(28, -34)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL5004242E.PNG"],
			frames: {
				width: 110,
				height: 231
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(55, 95),
		altSkus: true,
		length: 40,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "4 Step 50° Ladder",
		name: "4 Step 50°\nLadder",
		sku: "UCL500424X",
		gsku: "29RJ18",
		gSkus: ["21Y492", "21Y490"],
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL7504242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-10, 4), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL7504242.PNG"],
			frames: {
				width: 77,
				height: 215
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(38, 96),
		altSkus: true,
		length: 28,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "4 Step 75° Ladder",
		name: "4 Step 75°\nLadder",
		sku: "UCL750424X",
		gsku: "29RJ18",
		gSkus: ["21Y496", "21Y494"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL7504242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(8, 36), new createjs.Point(-8, -28), new createjs.Point(2, -30), new createjs.Point(8, -36)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL7504242E.PNG"],
			frames: {
				width: 77,
				height: 215
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(38, 76),
		altSkus: true,
		length: 28,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "4 Step 75° Ladder",
		name: "4 Step 75°\nLadder",
		sku: "UCL750424X",
		gsku: "29RJ18",
		gSkus: ["21Y496", "21Y494"],
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL9004242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-6, 6), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL9004246.PNG"],
			frames: {
				width: 66,
				height: 208
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(33, 93),
		altSkus: true,
		length: 3,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "4 Step 90° Ladder",
		name: "4 Step 90°\nLadder",
		sku: "UCL900424X",
		gsku: "21Y498",
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL9004242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(4, 40), new createjs.Point(-4, -32), new createjs.Point(2, -34), new createjs.Point(2, -40)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL9004246E.PNG"],
			frames: {
				width: 66,
				height: 208
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(33, 63),
		altSkus: false,
		length: 3,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "4 Step 90° Ladder",
		name: "4 Step 90°\nLadder",
		sku: "UCL9004246",
		gsku: "21Y498",
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL5005242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-36, -26), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL5005242.PNG"],
			frames: {
				width: 125,
				height: 261
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(62, 130),
		altSkus: true,
		length: 50,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "5 Step 50° Ladder",
		name: "5 Step 50°\nLadder",
		sku: "UCL500524X",
		gsku: "29RJ18",
		gSkus: ["15E905", "15E910"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL5005242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(36, 40), new createjs.Point(-34, -8), new createjs.Point(24, -10), new createjs.Point(34, -38)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL5005242E.PNG"],
			frames: {
				width: 125,
				height: 261
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(62, 95),
		altSkus: true,
		length: 50,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "5 Step 50° Ladder",
		name: "5 Step 50°\nLadder",
		sku: "UCL500524X",
		gsku: "29RJ18",
		gSkus: ["15E905", "15E910"],
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL7505242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-10, 4), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL7505242.PNG"],
			frames: {
				width: 81,
				height: 238
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(38, 96),
		altSkus: true,
		length: 35,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "5 Step 75° Ladder",
		name: "5 Step 75°\nLadder",
		sku: "UCL750524X",
		gsku: "29RJ18",
		gSkus: ["15E914", "15E919"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL7505242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(16, 36), new createjs.Point(-12, -28), new createjs.Point(4, -32), new createjs.Point(8, -40)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL7505242E.PNG"],
			frames: {
				width: 81,
				height: 238
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(38, 76),
		altSkus: true,
		length: 35,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "5 Step 75° Ladder",
		name: "5 Step 75°\nLadder",
		sku: "UCL750524X",
		gsku: "29RJ18",
		gSkus: ["15E914", "15E919"],
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL9005242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-6, 31), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL9005246.PNG"],
			frames: {
				width: 66,
				height: 229
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(33, 63),
		altSkus: false,
		length: 3,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "5 Step 90° Ladder",
		name: "5 Step 90°\nLadder",
		sku: "UCL9005246",
		gsku: "15E924",
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL9005242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(4, 40), new createjs.Point(-4, -32), new createjs.Point(0, -30), new createjs.Point(2, -40)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL9005246E.PNG"],
			frames: {
				width: 65,
				height: 229
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(33, 63),
		altSkus: false,
		length: 3,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "5 Step 90° Ladder",
		name: "5 Step 90°\nLadder",
		sku: "UCL9005246",
		gsku: "15E924",
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL5006242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-36, -26), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL5006242.PNG"],
			frames: {
				width: 139,
				height: 288
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(62, 130),
		altSkus: true,
		length: 60,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "6 Step 50° Ladder",
		name: "6 Step 50°\nLadder",
		sku: "UCL500624X",
		gsku: "29RJ18",
		gSkus: ["15E905", "15E910"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL5006242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(48, 50), new createjs.Point(-46, -8), new createjs.Point(28, -10), new createjs.Point(38, -48)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL5006242E.PNG"],
			frames: {
				width: 139,
				height: 288
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(62, 95),
		altSkus: true,
		length: 60,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "6 Step 50° Ladder",
		name: "6 Step 50°\nLadder",
		sku: "UCL500624X",
		gsku: "29RJ18",
		gSkus: ["15E905", "15E910"],
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL7506242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-10, 4), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL7506242.PNG"],
			frames: {
				width: 86,
				height: 262
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(38, 96),
		altSkus: true,
		length: 42,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "6 Step 75° Ladder",
		name: "6 Step 75°\nLadder",
		sku: "UCL750624X",
		gsku: "29RJ18",
		gSkus: ["15E915", "15E920"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL7506242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(16, 40), new createjs.Point(-18, -28), new createjs.Point(2, -30), new createjs.Point(10, -40)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL7506242E.PNG"],
			frames: {
				width: 86,
				height: 262
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(38, 76),
		altSkus: true,
		length: 42,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "6 Step 75° Ladder",
		name: "6 Step 75°\nLadder",
		sku: "UCL750624X",
		gsku: "29RJ18",
		gSkus: ["15E915", "15E920"],
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL9006242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-6, 31), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL9006246.PNG"],
			frames: {
				width: 66,
				height: 250
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(33, 63),
		altSkus: false,
		length: 3,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "6 Step 90° Ladder",
		name: "6 Step 90°\nLadder",
		sku: "UCL9006246",
		gsku: "15E925",
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL9006242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(4, 40), new createjs.Point(-4, -32), new createjs.Point(0, -30), new createjs.Point(2, -40)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL9006246E.PNG"],
			frames: {
				width: 65,
				height: 250
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(33, 63),
		altSkus: false,
		length: 3,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "6 Step 90° Ladder",
		name: "6 Step 90°\nLadder",
		sku: "UCL9006246",
		gsku: "15E925",
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL5007242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-36, -26), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL5007242.PNG"],
			frames: {
				width: 153,
				height: 317
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(62, 130),
		altSkus: true,
		length: 70,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "7 Step 50° Ladder",
		name: "7 Step 50°\nLadder",
		sku: "UCL500724X",
		gsku: "29RJ18",
		gSkus: ["15E906", "15E911"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL5007242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(62, 56), new createjs.Point(-62, -10), new createjs.Point(28, -10), new createjs.Point(38, -54)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL5007242E.PNG"],
			frames: {
				width: 153,
				height: 317
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(62, 95),
		altSkus: true,
		length: 70,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "7 Step 50° Ladder",
		name: "7 Step 50°\nLadder",
		sku: "UCL500724X",
		gsku: "29RJ18",
		gSkus: ["15E906", "15E911"],
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL7507242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-10, 4), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL7507242.PNG"],
			frames: {
				width: 90,
				height: 285
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(38, 96),
		altSkus: true,
		length: 49,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "7 Step 75° Ladder",
		name: "7 Step 75°\nLadder",
		sku: "UCL750724X",
		gsku: "29RJ18",
		gSkus: ["15E916", "15E921"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL7507242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(26, 46), new createjs.Point(-24, -28), new createjs.Point(2, -30), new createjs.Point(10, -44)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL7507242E.PNG"],
			frames: {
				width: 90,
				height: 285
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(38, 76),
		altSkus: true,
		length: 49,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "7 Step 75° Ladder",
		name: "7 Step 75°\nLadder",
		sku: "UCL750724X",
		gsku: "29RJ18",
		gSkus: ["15E916", "15E921"],
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL9007242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-6, 31), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL9007246.PNG"],
			frames: {
				width: 66,
				height: 271
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(33, 63),
		altSkus: false,
		length: 3,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "7 Step 90° Ladder",
		name: "7 Step 90°\nLadder",
		sku: "UCL9007246",
		gsku: "15E926",
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL9007242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(4, 40), new createjs.Point(-4, -36), new createjs.Point(0, -34), new createjs.Point(2, -40)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL9007246E.PNG"],
			frames: {
				width: 65,
				height: 271
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(33, 63),
		altSkus: false,
		length: 3,
		width: 52.75,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "7 Step 90° Ladder",
		name: "7 Step 90°\nLadder",
		sku: "UCL9007246",
		gsku: "15E926",
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL5008242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-36, -26), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL5008242.PNG"],
			frames: {
				width: 168,
				height: 344
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(62, 130),
		altSkus: true,
		length: 80,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "8 Step 50° Ladder",
		name: "8 Step 50°\nLadder",
		sku: "UCL500824X",
		gsku: "29RJ18",
		gSkus: ["15E908", "15E912"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL5008242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(78, 66), new createjs.Point(-80, -8), new createjs.Point(32, -8), new createjs.Point(38, -60)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL5008242E.PNG"],
			frames: {
				width: 168,
				height: 344
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(62, 95),
		altSkus: true,
		length: 80,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "8 Step 50° Ladder",
		name: "8 Step 50°\nLadder",
		sku: "UCL500824X",
		gsku: "29RJ18",
		gSkus: ["15E908", "15E912"],
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL7508242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-10, 4), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL7508242.PNG"],
			frames: {
				width: 94,
				height: 308
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(38, 96),
		altSkus: true,
		length: 56,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "8 Step 75° Ladder",
		name: "8 Step 75°\nLadder",
		sku: "UCL750824X",
		gsku: "29RJ18",
		gSkus: ["15E917", "15E922"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL7508242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(26, 46), new createjs.Point(-26, -28), new createjs.Point(2, -30), new createjs.Point(10, -44)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL7508242E.PNG"],
			frames: {
				width: 94,
				height: 308
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(38, 76),
		altSkus: true,
		length: 56,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "8 Step 75° Ladder",
		name: "8 Step 75°\nLadder",
		sku: "UCL750824X",
		gsku: "29RJ18",
		gSkus: ["15E917", "15E922"],
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL9008242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-6, 31), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL9008246.PNG"],
			frames: {
				width: 66,
				height: 292
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(33, 65),
		altSkus: false,
		length: 3,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "8 Step 90° Ladder",
		name: "8 Step 90°\nLadder",
		sku: "UCL9008246",
		gsku: "15E927",
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL9008242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(4, 40), new createjs.Point(-4, -36), new createjs.Point(0, -36), new createjs.Point(8, -40)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL9008246E.PNG"],
			frames: {
				width: 65,
				height: 292
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(33, 63),
		altSkus: false,
		length: 3,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "8 Step 90° Ladder",
		name: "8 Step 90°\nLadder",
		sku: "UCL9008246",
		gsku: "15E927",
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL5009242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-36, -26), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL5009242.PNG"],
			frames: {
				width: 182,
				height: 373
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(62, 130),
		altSkus: true,
		length: 90,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "9 Step 50° Ladder",
		name: "9 Step 50°\nLadder",
		sku: "UCL500924X",
		gsku: "29RJ18",
		gSkus: ["15E908", "15E913"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL5009242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(92, 74), new createjs.Point(-94, -10), new createjs.Point(28, -8), new createjs.Point(33, -70)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL5009242E.PNG"],
			frames: {
				width: 182,
				height: 373
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(62, 95),
		altSkus: true,
		length: 90,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "9 Step 50° Ladder",
		name: "9 Step 50°\nLadder",
		sku: "UCL500924X",
		gsku: "29RJ18",
		gSkus: ["15E908", "15E913"],
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL7509242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-10, 4), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL7509242.PNG"],
			frames: {
				width: 100,
				height: 331
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(38, 96),
		altSkus: true,
		length: 63,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "9 Step 75° Ladder",
		name: "9 Step 75°\nLadder",
		sku: "UCL750924X",
		gsku: "29RJ18",
		gSkus: ["15E918", "15E923"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL7509242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(34, 48), new createjs.Point(-34, -28), new createjs.Point(2, -30), new createjs.Point(10, -48)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL7509242E.PNG"],
			frames: {
				width: 100,
				height: 331
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(38, 76),
		altSkus: true,
		length: 63,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "9 Step 75° Ladder",
		name: "9 Step 75°\nLadder",
		sku: "UCL750924X",
		gsku: "29RJ18",
		gSkus: ["15E918", "15E923"],
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL9009242(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-8, 31), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL9009246.PNG"],
			frames: {
				width: 65,
				height: 313
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(33, 65),
		altSkus: false,
		length: 3,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "9 Step 90° Ladder",
		name: "9 Step 90°\nLadder",
		sku: "UCL9009246",
		gsku: "15E928",
		connectableParts: ["UCB30246", "UCB20246", "CO_LEFTTURN", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCL9009242E(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(4, 40), new createjs.Point(-6, -40), new createjs.Point(0, -35), new createjs.Point(8, -40)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCL9009246E.PNG"],
			frames: {
				width: 65,
				height: 313
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(33, 63),
		altSkus: false,
		length: 3,
		width: 30,
		legsNeeded: false,
		legsLimit: 4,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "9 Step 90° Ladder",
		name: "9 Step 90°\nLadder",
		sku: "UCL9009246",
		gsku: "15E928",
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: true
	}
}

function UCB30246(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-26, 27), new createjs.Point(-28, 58), new createjs.Point(32, 57), new createjs.Point(27, 25)],
		connectorPoint: [new createjs.Point(26, 54), new createjs.Point(-24, -32), new createjs.Point(18, -32), new createjs.Point(26, -52)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(51, 72),
		altSkus: true,
		length: 30,
		width: 30,
		legsNeeded: true,
		legsLimit: 90,
		actsAsLegs: false,
		frameOffset: 0,
		childFrameOffset: 0,
		description: '30"L Bridge Span',
		name: '30"L Bridge Span',
		sku: "UCB0324X",
		gsku: "29RJ18",
		gSkus: ["15E931", "15E929"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LADDER50END", "CO_LADDER75END", "CO_LADDER90END", "CO_LEFTTURN", "CO_RIGHTTURN", "CO_LEGS", "URK"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: true,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: true,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: false
	}
}

function UCB20246(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-18, 28), new createjs.Point(-19, 50), new createjs.Point(25, 49), new createjs.Point(17, 26)],
		connectorPoint: [new createjs.Point(16, 44), new createjs.Point(-14, -36), new createjs.Point(8, -32), new createjs.Point(20, -44)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB20246.PNG"],
			frames: {
				width: 86,
				height: 137
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(43, 72),
		altSkus: true,
		length: 20,
		width: 30,
		legsNeeded: true,
		legsLimit: 80,
		actsAsLegs: false,
		frameOffset: 0,
		childFrameOffset: 0,
		description: '20"L Bridge Span',
		name: '20"L Bridge Span',
		sku: "UCB2024X",
		gsku: "29RJ18",
		gSkus: ["15E932", "15E930"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LADDER50END", "CO_LADDER75END", "CO_LADDER90END", "CO_LEFTTURN", "CO_RIGHTTURN", "CO_LEGS", "URK"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: true,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: true,
		turnPiece: false,
		legs: false,
		rails: false,
		ladder: false
	}
}

function UCT03246L(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-28, 44), new createjs.Point(34, 44), new createjs.Point(26, 10), new createjs.Point(-28, 14)],
		connectorPoint: [new createjs.Point(24, 38), new createjs.Point(-22, -20), new createjs.Point(18, -18), new createjs.Point(26, -36)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCT03246L.PNG"],
			frames: {
				width: 107,
				height: 206
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(53, 87),
		altSkus: true,
		length: 30,
		width: 30,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 1,
		description: "Turn Platform",
		name: "Turn Platform\n(Left)",
		sku: "UCT0324X",
		gsku: "29RJ34",
		gSkus: ["21Y502", "21Y499"],
		canConnectParts: true,
		connectableParts: ["UCB30246", "UCB20246", "CO_LADDER50END", "CO_LADDER75END", "CO_LADDER90END", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 50, 100, -50],
		forceDrawLast: true,
		forceDrawLastFrame: 2,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function UCT03246R(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(24, 4), new createjs.Point(-22, 8), new createjs.Point(-24, 34), new createjs.Point(32, 34)],
		connectorPoint: [new createjs.Point(26, 32), new createjs.Point(-26, -8), new createjs.Point(20, -8), new createjs.Point(28, -32)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCT03246R.PNG"],
			frames: {
				width: 107,
				height: 206
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(53, 95),
		altSkus: true,
		length: 30,
		width: 30,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 3,
		description: "Turn Platform",
		name: "Turn Platform\n(Right)",
		sku: "UCT0324X",
		gsku: "29RJ34",
		gSkus: ["21Y502", "21Y499"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LADDER50END", "CO_LADDER75END", "CO_LADDER90END", "CO_LEFTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function UCT04246L(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-28, 44), new createjs.Point(34, 44), new createjs.Point(26, 10), new createjs.Point(-28, 14)],
		connectorPoint: [new createjs.Point(24, 38), new createjs.Point(-22, -20), new createjs.Point(18, -18), new createjs.Point(26, -36)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCT04246L.PNG"],
			frames: {
				width: 107,
				height: 227
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(53, 87),
		altSkus: true,
		length: 30,
		width: 30,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 1,
		description: "Turn Platform",
		name: "Turn Platform\n(Left)",
		sku: "UCT0424X",
		gsku: "29RJ34",
		gSkus: ["21Y503", "21Y501"],
		canConnectParts: true,
		connectableParts: ["UCB30246", "UCB20246", "CO_LADDER50END", "CO_LADDER75END", "CO_LADDER90END", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 50, 100, -50],
		forceDrawLast: true,
		forceDrawLastFrame: 2,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function UCT04246R(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(24, 4), new createjs.Point(-22, 8), new createjs.Point(-26, 36), new createjs.Point(32, 34)],
		connectorPoint: [new createjs.Point(26, 32), new createjs.Point(-26, -8), new createjs.Point(22, -6), new createjs.Point(28, -32)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCT04246R.PNG"],
			frames: {
				width: 108,
				height: 227
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(54, 95),
		altSkus: true,
		length: 30,
		width: 30,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 3,
		description: "Turn Platform",
		name: "Turn Platform\n(Right)",
		sku: "UCT0424X",
		gsku: "29RJ34",
		gSkus: ["21Y503", "21Y501"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LADDER50END", "CO_LADDER75END", "CO_LADDER90END", "CO_LEFTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function UCT05246L(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-28, 44), new createjs.Point(34, 44), new createjs.Point(26, 10), new createjs.Point(-28, 14)],
		connectorPoint: [new createjs.Point(24, 38), new createjs.Point(-22, -20), new createjs.Point(18, -18), new createjs.Point(24, -34)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCT05246L.PNG"],
			frames: {
				width: 107,
				height: 248
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(53, 87),
		altSkus: true,
		length: 30,
		width: 30,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 1,
		description: "Turn Platform",
		name: "Turn Platform\n(Left)",
		sku: "UCT0524X",
		gsku: "29RJ34",
		gSkus: ["15E933", "15E938"],
		canConnectParts: true,
		connectableParts: ["UCB30246", "UCB20246", "CO_LADDER50END", "CO_LADDER75END", "CO_LADDER90END", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 50, 100, -50],
		forceDrawLast: true,
		forceDrawLastFrame: 2,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function UCT05246R(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(24, 4), new createjs.Point(-22, 8), new createjs.Point(-26, 36), new createjs.Point(32, 34)],
		connectorPoint: [new createjs.Point(26, 32), new createjs.Point(-26, -8), new createjs.Point(22, -6), new createjs.Point(28, -32)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCT05246R.PNG"],
			frames: {
				width: 107,
				height: 248
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(54, 95),
		altSkus: true,
		length: 30,
		width: 30,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 3,
		description: "Turn Platform",
		name: "Turn Platform\n(Right)",
		sku: "UCT0524X",
		gsku: "29RJ34",
		gSkus: ["15E933", "15E938"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LADDER50END", "CO_LADDER75END", "CO_LADDER90END", "CO_LEFTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function UCT06246L(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-28, 44), new createjs.Point(34, 44), new createjs.Point(26, 10), new createjs.Point(-28, 14)],
		connectorPoint: [new createjs.Point(24, 38), new createjs.Point(-22, -20), new createjs.Point(18, -18), new createjs.Point(24, -34)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCT06246L.PNG"],
			frames: {
				width: 107,
				height: 269
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(53, 87),
		altSkus: true,
		length: 30,
		width: 30,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 1,
		description: "Turn Platform",
		name: "Turn Platform\n(Left)",
		sku: "UCT0624X",
		gsku: "29RJ34",
		gSkus: ["15E934", "15E939"],
		canConnectParts: true,
		connectableParts: ["UCB30246", "UCB20246", "CO_LADDER50END", "CO_LADDER75END", "CO_LADDER90END", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 50, 100, -50],
		forceDrawLast: true,
		forceDrawLastFrame: 2,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function UCT06246R(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(24, 4), new createjs.Point(-22, 8), new createjs.Point(-26, 36), new createjs.Point(32, 34)],
		connectorPoint: [new createjs.Point(26, 32), new createjs.Point(-26, -8), new createjs.Point(22, -6), new createjs.Point(28, -32)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCT06246R.PNG"],
			frames: {
				width: 107,
				height: 269
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(54, 95),
		altSkus: true,
		length: 30,
		width: 30,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 3,
		description: "Turn Platform",
		name: "Turn Platform\n(Right)",
		sku: "UCT0624X",
		gsku: "29RJ34",
		gSkus: ["15E934", "15E939"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LADDER50END", "CO_LADDER75END", "CO_LADDER90END", "CO_LEFTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function UCT07246L(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-28, 42), new createjs.Point(34, 44), new createjs.Point(26, 10), new createjs.Point(-28, 14)],
		connectorPoint: [new createjs.Point(24, 38), new createjs.Point(-22, -20), new createjs.Point(18, -18), new createjs.Point(24, -34)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCT07246L.PNG"],
			frames: {
				width: 107,
				height: 269
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(53, 87),
		altSkus: true,
		length: 30,
		width: 30,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 1,
		description: "Turn Platform",
		name: "Turn Platform\n(Left)",
		sku: "UCT0724X",
		gsku: "29RJ34",
		gSkus: ["15E935", "15E940"],
		canConnectParts: true,
		connectableParts: ["UCB30246", "UCB20246", "CO_LADDER50END", "CO_LADDER75END", "CO_LADDER90END", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 50, 100, -50],
		forceDrawLast: true,
		forceDrawLastFrame: 2,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function UCT07246R(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(24, 4), new createjs.Point(-22, 8), new createjs.Point(-26, 36), new createjs.Point(32, 34)],
		connectorPoint: [new createjs.Point(26, 32), new createjs.Point(-26, -8), new createjs.Point(22, -6), new createjs.Point(28, -32)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCT07246R.PNG"],
			frames: {
				width: 107,
				height: 269
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(54, 95),
		altSkus: true,
		length: 30,
		width: 30,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 3,
		description: "Turn Platform",
		name: "Turn Platform\n(Right)",
		sku: "UCT0724X",
		gsku: "29RJ34",
		gSkus: ["15E935", "15E940"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LADDER50END", "CO_LADDER75END", "CO_LADDER90END", "CO_LEFTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function UCT08246L(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-28, 44), new createjs.Point(34, 44), new createjs.Point(26, 10), new createjs.Point(-28, 14)],
		connectorPoint: [new createjs.Point(24, 38), new createjs.Point(-22, -20), new createjs.Point(18, -18), new createjs.Point(26, -36)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCT08246L.PNG"],
			frames: {
				width: 107,
				height: 312
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(53, 87),
		altSkus: true,
		length: 30,
		width: 30,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 1,
		description: "Turn Platform",
		name: "Turn Platform\n(Left)",
		sku: "UCT0824X",
		gsku: "29RJ34",
		gSkus: ["15E936", "15E941"],
		canConnectParts: true,
		connectableParts: ["UCB30246", "UCB20246", "CO_LADDER50END", "CO_LADDER75END", "CO_LADDER90END", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 50, 100, -50],
		forceDrawLast: true,
		forceDrawLastFrame: 2,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function UCT08246R(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(24, 4), new createjs.Point(-22, 8), new createjs.Point(-26, 36), new createjs.Point(32, 34)],
		connectorPoint: [new createjs.Point(26, 32), new createjs.Point(-26, -8), new createjs.Point(22, -6), new createjs.Point(28, -32)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCT08246R.PNG"],
			frames: {
				width: 107,
				height: 312
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(54, 95),
		altSkus: true,
		length: 30,
		width: 30,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 3,
		description: "Turn Platform",
		name: "Turn Platform\n(Right)",
		sku: "UCT0824X",
		gsku: "29RJ34",
		gSkus: ["15E936", "15E941"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LADDER50END", "CO_LADDER75END", "CO_LADDER90END", "CO_LEFTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function UCT09246L(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(-28, 44), new createjs.Point(34, 44), new createjs.Point(26, 10), new createjs.Point(-28, 14)],
		connectorPoint: [new createjs.Point(24, 38), new createjs.Point(-22, -20), new createjs.Point(18, -18), new createjs.Point(26, -36)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCT09246L.PNG"],
			frames: {
				width: 108,
				height: 333
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(53, 87),
		altSkus: true,
		length: 30,
		width: 30,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 1,
		description: "Turn Platform",
		name: "Turn Platform\n(Left)",
		sku: "UCT0924X",
		gsku: "29RJ34",
		gSkus: ["15E937", "15E942"],
		canConnectParts: true,
		connectableParts: ["UCB30246", "UCB20246", "CO_LADDER50END", "CO_LADDER75END", "CO_LADDER90END", "CO_RIGHTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 50, 100, -50],
		forceDrawLast: true,
		forceDrawLastFrame: 2,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function UCT09246R(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(22, 6), new createjs.Point(-26, 6), new createjs.Point(-26, 36), new createjs.Point(32, 34)],
		connectorPoint: [new createjs.Point(26, 32), new createjs.Point(-26, -8), new createjs.Point(22, -6), new createjs.Point(28, -32)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCT09246R.PNG"],
			frames: {
				width: 108,
				height: 333
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(54, 95),
		altSkus: true,
		length: 30,
		width: 30,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 3,
		description: "Turn Platform",
		name: "Turn Platform\n(Right)",
		sku: "UCT0924X",
		gsku: "29RJ34",
		gSkus: ["15E937", "15E942"],
		connectableParts: ["UCB30246", "UCB20246", "CO_LADDER50END", "CO_LADDER75END", "CO_LADDER90END", "CO_LEFTTURN"],
		usesSlot: 1,
		hasMountSlot: true,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: true,
		legs: false,
		rails: false,
		ladder: false
	}
}

function URK(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(0, 40), new createjs.Point(-66, -98), new createjs.Point(-4, -42), new createjs.Point(-72, -90)],
		rotationOffsets: [new createjs.Point(0, 0), new createjs.Point(70, 52), new createjs.Point(70, 52), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/URK.PNG"],
			frames: {
				width: 55,
				height: 118
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(27, 59),
		altSkus: false,
		length: 0,
		width: 0,
		legsNeeded: true,
		legsLimit: 0,
		actsAsLegs: false,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "Rail Kit",
		name: "Rail Kit",
		sku: "URK",
		gsku: "",
		connectableParts: [],
		usesSlot: 1,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: false,
		rails: true,
		ladder: false
	}
}

function ULK0324(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(2, -10), new createjs.Point(8, -144), new createjs.Point(-4, -38), new createjs.Point(4, -120)],
		rotationOffsets: [new createjs.Point(-2, 40), new createjs.Point(0, 0), new createjs.Point(-5, 140), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/ULK0324.PNG"],
			frames: {
				width: 57,
				height: 133
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(28, 66),
		altSkus: false,
		length: 0,
		width: 42,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "Legs Kit",
		name: "Legs Kit",
		sku: "ULK0324",
		gsku: "21Y504",
		connectableParts: [],
		usesSlot: 2,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [-5e4, -5e4, -5e4, -5e4],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: true,
		rails: false,
		ladder: false
	}
}

function ULK0424(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(2, -10), new createjs.Point(8, -144), new createjs.Point(-4, -38), new createjs.Point(4, -120)],
		rotationOffsets: [new createjs.Point(-2, 40), new createjs.Point(0, 0), new createjs.Point(-5, 140), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/ULK0424.PNG"],
			frames: {
				width: 57,
				height: 154
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(28, 66),
		altSkus: false,
		length: 0,
		width: 42,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "Legs Kit",
		name: "Legs Kit",
		sku: "ULK0424",
		gsku: "21Y505",
		connectableParts: [],
		usesSlot: 2,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [-5e4, -5e4, -5e4, -5e4],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: true,
		rails: false,
		ladder: false
	}
}

function ULK0524(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(2, -10), new createjs.Point(8, -144), new createjs.Point(-4, -38), new createjs.Point(4, -120)],
		rotationOffsets: [new createjs.Point(-2, 40), new createjs.Point(0, 0), new createjs.Point(-5, 140), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/ULK0524.PNG"],
			frames: {
				width: 57,
				height: 175
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(28, 66),
		altSkus: false,
		length: 0,
		width: 42,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "Legs Kit",
		name: "Legs Kit",
		sku: "ULK0524",
		gsku: "15E943",
		connectableParts: [],
		usesSlot: 2,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [-5e4, -5e4, -5e4, -5e4],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: true,
		rails: false,
		ladder: false
	}
}

function ULK0624(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(2, -10), new createjs.Point(8, -144), new createjs.Point(-4, -38), new createjs.Point(4, -120)],
		rotationOffsets: [new createjs.Point(-2, 40), new createjs.Point(0, 0), new createjs.Point(-5, 140), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/ULK0624.PNG"],
			frames: {
				width: 57,
				height: 196
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(28, 66),
		altSkus: false,
		length: 0,
		width: 42,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "Legs Kit",
		name: "Legs Kit",
		sku: "ULK0624",
		gsku: "15E944",
		connectableParts: [],
		usesSlot: 2,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [-5e4, -5e4, -5e4, -5e4],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: true,
		rails: false,
		ladder: false
	}
}

function ULK0724(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(2, -10), new createjs.Point(8, -144), new createjs.Point(-4, -38), new createjs.Point(4, -120)],
		rotationOffsets: [new createjs.Point(-2, 40), new createjs.Point(0, 0), new createjs.Point(-5, 140), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/ULK0724.PNG"],
			frames: {
				width: 57,
				height: 218
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(28, 66),
		altSkus: false,
		length: 0,
		width: 42,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "Legs Kit",
		name: "Legs Kit",
		sku: "ULK0724",
		gsku: "15E945",
		connectableParts: [],
		usesSlot: 2,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [-5e4, -5e4, -5e4, -5e4],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: true,
		rails: false,
		ladder: false
	}
}

function ULK0824(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(2, -10), new createjs.Point(8, -144), new createjs.Point(-4, -38), new createjs.Point(4, -120)],
		rotationOffsets: [new createjs.Point(-2, 40), new createjs.Point(0, 0), new createjs.Point(-5, 140), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/ULK0824.PNG"],
			frames: {
				width: 57,
				height: 239
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(28, 66),
		altSkus: false,
		length: 0,
		width: 42,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "Legs Kit",
		name: "Legs Kit",
		sku: "ULK0824",
		gsku: "15E946",
		connectableParts: [],
		usesSlot: 2,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [-5e4, -5e4, -5e4, -5e4],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: true,
		rails: false,
		ladder: false
	}
}

function ULK0924(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		mountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		connectorPoint: [new createjs.Point(2, -10), new createjs.Point(8, -144), new createjs.Point(-4, -38), new createjs.Point(4, -120)],
		rotationOffsets: [new createjs.Point(-2, 40), new createjs.Point(0, 0), new createjs.Point(-5, 140), new createjs.Point(0, 0)],
		spriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/ULK0924.PNG"],
			frames: {
				width: 57,
				height: 260
			},
			animations: {}
		}),
		spriteCenter: new createjs.Point(28, 66),
		altSkus: false,
		length: 0,
		width: 42,
		legsNeeded: false,
		legsLimit: 3,
		actsAsLegs: true,
		frameOffset: 0,
		childFrameOffset: 0,
		description: "Legs Kit",
		name: "Legs Kit",
		sku: "ULK0924",
		gsku: "15E947",
		connectableParts: [],
		usesSlot: 2,
		hasMountSlot: false,
		hasLegSlot: false,
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [-5e4, -5e4, -5e4, -5e4],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		bridgeSpan: false,
		turnPiece: false,
		legs: true,
		rails: false,
		ladder: false
	}
}

function UAP3636(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 36,
		width: 36,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: '36"x36" Platform',
		name: '36"x36" Platform',
		sprite: "assets/spritesheets/UAP3636.png",
		sku: "UAP3636",
		gsku: "29RJ18",
		connectableParts: ["UAP3636", "UAPHR1"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: false,
		stackable: false,
		platform: true,
		heightMod: 0,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: true
	}
}

function UAP0250U(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 18.375,
		width: 34,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "2-Step 50° Ladder",
		name: "2-Step \n50° Ladder (Up)",
		sprite: "assets/spritesheets/UAP0250U.png",
		sku: "UAP0250",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: 20,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0290U(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 9,
		width: 30,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "2-Step 90° Ladder",
		name: "2-Step \n90° Ladder (Up)",
		sprite: "assets/spritesheets/UAP0290U.png",
		sku: "UAP0290",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: 20,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0350U(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 26.875,
		width: 34,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "3-Step 50° Ladder",
		name: "3-Step \n50° Ladder (Up)",
		sprite: "assets/spritesheets/UAP0350U.png",
		sku: "UAP0350",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: 30,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0390U(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 9,
		width: 30,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "3-Step 90° Ladder",
		name: "3-Step \n90° Ladder (Up)",
		sprite: "assets/spritesheets/UAP0290U.png",
		sku: "UAP0390",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: 30,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0250D(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 18.375,
		width: 34,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "2-Step 50° Ladder",
		name: "2-Step \n50° Ladder (Down)",
		sprite: "assets/spritesheets/UAP0250D.png",
		sku: "UAP0250",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: -20,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0290D(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 9,
		width: 30,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "2-Step 90° Ladder",
		name: "2-Step \n90° Ladder (Down)",
		sprite: "assets/spritesheets/UAP0290D.png",
		sku: "UAP0290",
		gsku: "29RJ18",
		connectableParts: [],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: -20,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0350D(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 26.875,
		width: 34,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "3-Step 50° Ladder",
		name: "3-Step \n50° Ladder (Down)",
		sprite: "assets/spritesheets/UAP0350D.png",
		sku: "UAP0350",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: -30,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0390D(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 9,
		width: 30,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "3-Step 90° Ladder",
		name: "3-Step \n90° Ladder (Down)",
		sprite: "assets/spritesheets/UAP0290D.png",
		sku: "UAP0390",
		gsku: "29RJ18",
		connectableParts: [],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: -30,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0450U(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 35.25,
		width: 34,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "4-Step 50° Ladder",
		name: "4-Step \n50° Ladder (Up)",
		sprite: "assets/spritesheets/UAP0450U.png",
		sku: "UAP0450",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: 40,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0490U(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 9,
		width: 30,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "4-Step 90° Ladder",
		name: "4-Step \n90° Ladder (Up)",
		sprite: "assets/spritesheets/UAP0290U.png",
		sku: "UAP0490",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: false,
		heightMod: 40,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0450D(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 35.25,
		width: 34,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "4-Step 50° Ladder",
		name: "4-Step \n50° Ladder (Down)",
		sprite: "assets/spritesheets/UAP0450D.png",
		sku: "UAP0450",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: -40,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0490D(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 9,
		width: 30,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "4-Step 90° Ladder",
		name: "4-Step \n90° Ladder (Down)",
		sprite: "assets/spritesheets/UAP0290D.png",
		sku: "UAP0490",
		gsku: "29RJ18",
		connectableParts: [],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: false,
		heightMod: -40,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0550U(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 43.625,
		width: 34,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "5-Step 50° Ladder",
		name: "5-Step \n50° Ladder (Up)",
		sprite: "assets/spritesheets/UAP0550U.png",
		sku: "UAP0550",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: 50,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -440), new createjs.Point(-440, 0), new createjs.Point(440, 0), new createjs.Point(0, 440)],
		anchorPoint: new createjs.Point(0, 586),
		spriteAnchor: new createjs.Point(146, 586),
		spriteAnchorOffset: new createjs.Point(0, -146),
		bitmapCenter: new createjs.Point(146, 293),
		gridSize: new createjs.Point(1, 2),
		attachmentCoordinates: [new createjs.Point(0, -2), new createjs.Point(-2, 0), new createjs.Point(2, 0), new createjs.Point(0, 2)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0550D(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 43.625,
		width: 34,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "5-Step 50° Ladder",
		name: "5-Step \n50° Ladder (Down)",
		sprite: "assets/spritesheets/UAP0550D.png",
		sku: "UAP0550",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: -50,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -440), new createjs.Point(-440, 0), new createjs.Point(440, 0), new createjs.Point(0, 440)],
		anchorPoint: new createjs.Point(0, 586),
		spriteAnchor: new createjs.Point(146, 586),
		spriteAnchorOffset: new createjs.Point(0, -146),
		bitmapCenter: new createjs.Point(146, 293),
		gridSize: new createjs.Point(1, 2),
		attachmentCoordinates: [new createjs.Point(0, -2), new createjs.Point(-2, 0), new createjs.Point(2, 0), new createjs.Point(0, 2)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0590U(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 9,
		width: 30,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "5-Step 90° Ladder",
		name: "5-Step \n90° Ladder (Up)",
		sprite: "assets/spritesheets/UAP0290U.png",
		sku: "UAP0590",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: false,
		heightMod: 50,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0590D(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 9,
		width: 30,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "5-Step 90° Ladder",
		name: "5-Step \n90° Ladder (Down)",
		sprite: "assets/spritesheets/UAP0290D.png",
		sku: "UAP0590",
		gsku: "29RJ18",
		connectableParts: [],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: false,
		heightMod: -50,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0650U(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 52,
		width: 34,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "6-Step 50° Ladder",
		name: "6-Step \n50° Ladder (Up)",
		sprite: "assets/spritesheets/UAP0650U.png",
		sku: "UAP0650",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: 60,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -440), new createjs.Point(-440, 0), new createjs.Point(440, 0), new createjs.Point(0, 440)],
		anchorPoint: new createjs.Point(0, 586),
		spriteAnchor: new createjs.Point(146, 586),
		spriteAnchorOffset: new createjs.Point(0, -146),
		bitmapCenter: new createjs.Point(146, 293),
		gridSize: new createjs.Point(1, 2),
		attachmentCoordinates: [new createjs.Point(0, -2), new createjs.Point(-2, 0), new createjs.Point(2, 0), new createjs.Point(0, 2)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0650D(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 52,
		width: 34,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "6-Step 50° Ladder",
		name: "6-Step \n50° Ladder (Down)",
		sprite: "assets/spritesheets/UAP0650D.png",
		sku: "UAP0650",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: -60,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -440), new createjs.Point(-440, 0), new createjs.Point(440, 0), new createjs.Point(0, 440)],
		anchorPoint: new createjs.Point(0, 586),
		spriteAnchor: new createjs.Point(146, 586),
		spriteAnchorOffset: new createjs.Point(0, -146),
		bitmapCenter: new createjs.Point(146, 293),
		gridSize: new createjs.Point(1, 2),
		attachmentCoordinates: [new createjs.Point(0, -2), new createjs.Point(-2, 0), new createjs.Point(2, 0), new createjs.Point(0, 2)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0690U(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 9,
		width: 30,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "6-Step 90° Ladder",
		name: "6-Step \n90° Ladder (Up)",
		sprite: "assets/spritesheets/UAP0290U.png",
		sku: "UAP0690",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: false,
		heightMod: 60,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0690D(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 9,
		width: 30,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "6-Step 90° Ladder",
		name: "6-Step \n90° Ladder (Down)",
		sprite: "assets/spritesheets/UAP0290D.png",
		sku: "UAP0690",
		gsku: "29RJ18",
		connectableParts: [],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: false,
		heightMod: -60,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0750U(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 60.375,
		width: 34,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "7-Step 50° Ladder",
		name: "7-Step \n50° Ladder (Up)",
		sprite: "assets/spritesheets/UAP0750U.png",
		sku: "UAP0750",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: 70,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -440), new createjs.Point(-440, 0), new createjs.Point(440, 0), new createjs.Point(0, 440)],
		anchorPoint: new createjs.Point(0, 586),
		spriteAnchor: new createjs.Point(146, 586),
		spriteAnchorOffset: new createjs.Point(0, -146),
		bitmapCenter: new createjs.Point(146, 293),
		gridSize: new createjs.Point(1, 2),
		attachmentCoordinates: [new createjs.Point(0, -2), new createjs.Point(-2, 0), new createjs.Point(2, 0), new createjs.Point(0, 2)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0750D(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 60.375,
		width: 34,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "7-Step 50° Ladder",
		name: "7-Step \n50° Ladder (Down)",
		sprite: "assets/spritesheets/UAP0750D.png",
		sku: "UAP0750",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: -70,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -440), new createjs.Point(-440, 0), new createjs.Point(440, 0), new createjs.Point(0, 440)],
		anchorPoint: new createjs.Point(0, 586),
		spriteAnchor: new createjs.Point(146, 586),
		spriteAnchorOffset: new createjs.Point(0, -146),
		bitmapCenter: new createjs.Point(146, 293),
		gridSize: new createjs.Point(1, 2),
		attachmentCoordinates: [new createjs.Point(0, -2), new createjs.Point(-2, 0), new createjs.Point(2, 0), new createjs.Point(0, 2)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0790U(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 9,
		width: 30,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "7-Step 90° Ladder",
		name: "7-Step \n90° Ladder (Up)",
		sprite: "assets/spritesheets/UAP0290U.png",
		sku: "UAP0790",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: false,
		heightMod: 70,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0790D(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 9,
		width: 30,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "7-Step 90° Ladder",
		name: "7-Step \n90° Ladder (Down)",
		sprite: "assets/spritesheets/UAP0290D.png",
		sku: "UAP0790",
		gsku: "29RJ18",
		connectableParts: [],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: false,
		heightMod: -70,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0850U(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 68.75,
		width: 34,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "8-Step 50° Ladder",
		name: "8-Step \n50° Ladder (Up)",
		sprite: "assets/spritesheets/UAP0850U.png",
		sku: "UAP0850",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: 80,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -440), new createjs.Point(-440, 0), new createjs.Point(440, 0), new createjs.Point(0, 440)],
		anchorPoint: new createjs.Point(0, 586),
		spriteAnchor: new createjs.Point(146, 586),
		spriteAnchorOffset: new createjs.Point(0, -146),
		bitmapCenter: new createjs.Point(146, 293),
		gridSize: new createjs.Point(1, 2),
		attachmentCoordinates: [new createjs.Point(0, -2), new createjs.Point(-2, 0), new createjs.Point(2, 0), new createjs.Point(0, 2)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0850D(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 68.75,
		width: 34,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "8-Step 50° Ladder",
		name: "8-Step \n50° Ladder (Down)",
		sprite: "assets/spritesheets/UAP0850D.png",
		sku: "UAP0850",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: -80,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -440), new createjs.Point(-440, 0), new createjs.Point(440, 0), new createjs.Point(0, 440)],
		anchorPoint: new createjs.Point(0, 586),
		spriteAnchor: new createjs.Point(146, 586),
		spriteAnchorOffset: new createjs.Point(0, -146),
		bitmapCenter: new createjs.Point(146, 293),
		gridSize: new createjs.Point(1, 2),
		attachmentCoordinates: [new createjs.Point(0, -2), new createjs.Point(-2, 0), new createjs.Point(2, 0), new createjs.Point(0, 2)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0890U(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 9,
		width: 30,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "8-Step 90° Ladder",
		name: "8-Step \n90° Ladder (Up)",
		sprite: "assets/spritesheets/UAP0290U.png",
		sku: "UAP0890",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: false,
		heightMod: 80,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0890D(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 9,
		width: 30,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "8-Step 90° Ladder",
		name: "8-Step \n90° Ladder (Down)",
		sprite: "assets/spritesheets/UAP0290D.png",
		sku: "UAP0890",
		gsku: "29RJ18",
		connectableParts: [],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: false,
		heightMod: -80,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0950U(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 77.125,
		width: 34,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "9-Step 50° Ladder",
		name: "9-Step \n50° Ladder (Up)",
		sprite: "assets/spritesheets/UAP0950U.png",
		sku: "UAP0950",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: 90,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -586), new createjs.Point(-586, 0), new createjs.Point(586, 0), new createjs.Point(0, 586)],
		anchorPoint: new createjs.Point(0, 879),
		spriteAnchor: new createjs.Point(146, 879),
		spriteAnchorOffset: new createjs.Point(0, -293),
		bitmapCenter: new createjs.Point(146, 440),
		gridSize: new createjs.Point(1, 3),
		attachmentCoordinates: [new createjs.Point(0, -3), new createjs.Point(-3, 0), new createjs.Point(3, 0), new createjs.Point(0, 3)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0950D(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 77.125,
		width: 34,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "9-Step 50° Ladder",
		name: "9-Step \n50° Ladder (Down)",
		sprite: "assets/spritesheets/UAP0950D.png",
		sku: "UAP0950",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: -90,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -586), new createjs.Point(-586, 0), new createjs.Point(586, 0), new createjs.Point(0, 586)],
		anchorPoint: new createjs.Point(0, 879),
		spriteAnchor: new createjs.Point(146, 879),
		spriteAnchorOffset: new createjs.Point(0, -293),
		bitmapCenter: new createjs.Point(146, 440),
		gridSize: new createjs.Point(1, 3),
		attachmentCoordinates: [new createjs.Point(0, -3), new createjs.Point(-3, 0), new createjs.Point(3, 0), new createjs.Point(0, 3)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0990U(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 9,
		width: 30,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "9-Step 90° Ladder",
		name: "9-Step \n90° Ladder (Up)",
		sprite: "assets/spritesheets/UAP0290U.png",
		sku: "UAP0990",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: false,
		heightMod: 90,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP0990D(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 9,
		width: 30,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "9-Step 90° Ladder",
		name: "9-Step \n90° Ladder (Down)",
		sprite: "assets/spritesheets/UAP0290D.png",
		sku: "UAP0990",
		gsku: "29RJ18",
		connectableParts: [],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: false,
		heightMod: -90,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP1050U(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 85.5,
		width: 34,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "10-Step 50° Ladder",
		name: "10-Step \n50° Ladder (Up)",
		sprite: "assets/spritesheets/UAP1050U.png",
		sku: "UAP1050",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: 100,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -586), new createjs.Point(-586, 0), new createjs.Point(586, 0), new createjs.Point(0, 586)],
		anchorPoint: new createjs.Point(0, 879),
		spriteAnchor: new createjs.Point(146, 879),
		spriteAnchorOffset: new createjs.Point(0, -293),
		bitmapCenter: new createjs.Point(146, 440),
		gridSize: new createjs.Point(1, 3),
		attachmentCoordinates: [new createjs.Point(0, -3), new createjs.Point(-3, 0), new createjs.Point(3, 0), new createjs.Point(0, 3)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP1050D(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 85.5,
		width: 34,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "10-Step 50° Ladder",
		name: "10-Step \n50° Ladder (Down)",
		sprite: "assets/spritesheets/UAP1050D.png",
		sku: "UAP1050",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: -100,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -586), new createjs.Point(-586, 0), new createjs.Point(586, 0), new createjs.Point(0, 586)],
		anchorPoint: new createjs.Point(0, 879),
		spriteAnchor: new createjs.Point(146, 879),
		spriteAnchorOffset: new createjs.Point(0, -293),
		bitmapCenter: new createjs.Point(146, 440),
		gridSize: new createjs.Point(1, 3),
		attachmentCoordinates: [new createjs.Point(0, -3), new createjs.Point(-3, 0), new createjs.Point(3, 0), new createjs.Point(0, 3)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP1090U(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 9,
		width: 30,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "10-Step 90° Ladder",
		name: "10-Step \n90° Ladder (Up)",
		sprite: "assets/spritesheets/UAP0290U.png",
		sku: "UAP1090",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: false,
		heightMod: 100,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP1090D(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 9,
		width: 30,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "10-Step 90° Ladder",
		name: "10-Step \n90° Ladder (Down)",
		sprite: "assets/spritesheets/UAP0290D.png",
		sku: "UAP1090",
		gsku: "29RJ18",
		connectableParts: [],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: false,
		heightMod: -100,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP1150U(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 94,
		width: 34,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "11-Step 50° Ladder",
		name: "11-Step \n50° Ladder (Up)",
		sprite: "assets/spritesheets/UAP1150U.png",
		sku: "UAP1150",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: 110,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -586), new createjs.Point(-586, 0), new createjs.Point(586, 0), new createjs.Point(0, 586)],
		anchorPoint: new createjs.Point(0, 879),
		spriteAnchor: new createjs.Point(146, 879),
		spriteAnchorOffset: new createjs.Point(0, -293),
		bitmapCenter: new createjs.Point(146, 440),
		gridSize: new createjs.Point(1, 3),
		attachmentCoordinates: [new createjs.Point(0, -3), new createjs.Point(-3, 0), new createjs.Point(3, 0), new createjs.Point(0, 3)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP1150D(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 94,
		width: 34,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "11-Step 50° Ladder",
		name: "11-Step \n50° Ladder (Down)",
		sprite: "assets/spritesheets/UAP1150D.png",
		sku: "UAP1150",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: true,
		heightMod: -110,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -586), new createjs.Point(-586, 0), new createjs.Point(586, 0), new createjs.Point(0, 586)],
		anchorPoint: new createjs.Point(0, 879),
		spriteAnchor: new createjs.Point(146, 879),
		spriteAnchorOffset: new createjs.Point(0, -293),
		bitmapCenter: new createjs.Point(146, 440),
		gridSize: new createjs.Point(1, 3),
		attachmentCoordinates: [new createjs.Point(0, -3), new createjs.Point(-3, 0), new createjs.Point(3, 0), new createjs.Point(0, 3)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP1190U(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 9,
		width: 30,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "11-Step 90° Ladder",
		name: "11-Step \n90° Ladder (Up)",
		sprite: "assets/spritesheets/UAP0290U.png",
		sku: "UAP1190",
		gsku: "29RJ18",
		connectableParts: ["UAP3636"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: false,
		heightMod: 110,
		attachmentSlots: 4,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP1190D(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 9,
		width: 30,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "11-Step 90° Ladder",
		name: "11-Step \n90° Ladder (Down)",
		sprite: "assets/spritesheets/UAP0290D.png",
		sku: "UAP1190",
		gsku: "29RJ18",
		connectableParts: [],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: true,
		stackable: false,
		heightMod: -110,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(146, 146),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 0,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120),
		directionTextPosition: new createjs.Point(0, 0)
	}
}

function UAP020(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 36,
		width: 36,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: '20" Leg Kit',
		name: '20" Leg Kit',
		sprite: "assets/spritesheets/UAP020.png",
		sku: "UAP020",
		gsku: "29RJ18",
		connectableParts: [],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: false,
		stackable: false,
		heightMod: 0,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -220)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(138, 74),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0)],
		renderPriority: -1,
		spriteDoesntRotate: true,
		hiddenSprite: true,
		legs: true
	}
}

function UAP030(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 36,
		width: 36,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: '30" Leg Kit',
		name: '30" Leg Kit',
		sprite: "assets/spritesheets/UAP020.png",
		sku: "UAP030",
		gsku: "29RJ18",
		connectableParts: [],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: false,
		stackable: false,
		heightMod: 0,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -220)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(138, 74),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0)],
		renderPriority: -1,
		spriteDoesntRotate: true,
		hiddenSprite: true,
		legs: true
	}
}

function UAP040(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 36,
		width: 36,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: '40" Leg Kit',
		name: '40" Leg Kit',
		sprite: "assets/spritesheets/UAP020.png",
		sku: "UAP040",
		gsku: "29RJ18",
		connectableParts: [],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: false,
		stackable: false,
		heightMod: 0,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -220)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(138, 74),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0)],
		renderPriority: -1,
		spriteDoesntRotate: true,
		hiddenSprite: true,
		legs: true
	}
}

function UAP050(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 36,
		width: 36,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: '50" Leg Kit',
		name: '50" Leg Kit',
		sprite: "assets/spritesheets/UAP020.png",
		sku: "UAP050",
		gsku: "29RJ18",
		connectableParts: [],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: false,
		stackable: false,
		heightMod: 0,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -220)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(138, 74),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0)],
		renderPriority: -1,
		spriteDoesntRotate: true,
		hiddenSprite: true,
		legs: true
	}
}

function UAP060(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 36,
		width: 36,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: '60" Leg Kit',
		name: '60" Leg Kit',
		sprite: "assets/spritesheets/UAP020.png",
		sku: "UAP060",
		gsku: "29RJ18",
		connectableParts: [],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: false,
		stackable: false,
		heightMod: 0,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -220)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(138, 74),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0)],
		renderPriority: -1,
		spriteDoesntRotate: true,
		hiddenSprite: true,
		legs: true
	}
}

function UAP070(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 36,
		width: 36,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: '70" Leg Kit',
		name: '70" Leg Kit',
		sprite: "assets/spritesheets/UAP020.png",
		sku: "UAP070",
		gsku: "29RJ18",
		connectableParts: [],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: false,
		stackable: false,
		heightMod: 0,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -220)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(138, 74),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0)],
		renderPriority: -1,
		spriteDoesntRotate: true,
		hiddenSprite: true,
		legs: true
	}
}

function UAP080(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 36,
		width: 36,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: '80" Leg Kit',
		name: '80" Leg Kit',
		sprite: "assets/spritesheets/UAP020.png",
		sku: "UAP080",
		gsku: "29RJ18",
		connectableParts: [],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: false,
		stackable: false,
		heightMod: 0,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -220)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(138, 74),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0)],
		renderPriority: -1,
		spriteDoesntRotate: true,
		hiddenSprite: true,
		legs: true
	}
}

function UAP090(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 36,
		width: 36,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: '90" Leg Kit',
		name: '90" Leg Kit',
		sprite: "assets/spritesheets/UAP020.png",
		sku: "UAP090",
		gsku: "29RJ18",
		connectableParts: [],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: false,
		stackable: false,
		heightMod: 0,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -220)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(138, 74),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0)],
		renderPriority: -1,
		spriteDoesntRotate: true,
		hiddenSprite: true,
		legs: true
	}
}

function UAP100(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 36,
		width: 36,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: '100" Leg Kit',
		name: '100" Leg Kit',
		sprite: "assets/spritesheets/UAP020.png",
		sku: "UAP100",
		gsku: "29RJ18",
		connectableParts: [],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: false,
		stackable: false,
		heightMod: 0,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -220)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(138, 74),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0)],
		renderPriority: -1,
		spriteDoesntRotate: true,
		hiddenSprite: true,
		legs: true
	}
}

function UAP110(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 36,
		width: 36,
		legsNeeded: true,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: '110" Leg Kit',
		name: '110" Leg Kit',
		sprite: "assets/spritesheets/UAP020.png",
		sku: "UAP110",
		gsku: "29RJ18",
		connectableParts: [],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: false,
		ladder: false,
		stackable: false,
		heightMod: 0,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -220)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(146, 293),
		spriteAnchorOffset: new createjs.Point(0, 0),
		bitmapCenter: new createjs.Point(138, 74),
		gridSize: new createjs.Point(1, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0)],
		renderPriority: -1,
		spriteDoesntRotate: true,
		hiddenSprite: true,
		legs: true
	}
}

function UAPHR1(selectedFromMenu) {
	selectedFromMenu = selectedFromMenu || false;
	return {
		isoMountPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoConnectorPoint: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoRotationOffsets: [new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0), new createjs.Point(0, 0)],
		isoSpriteSheet: new createjs.SpriteSheet({
			images: ["assets/spritesheets/UCB30246.PNG"],
			frames: {
				width: 103,
				height: 145
			},
			animations: {}
		}),
		isoSpriteCenter: new createjs.Point(51, 72),
		altSkus: false,
		length: 36,
		width: 36,
		legsNeeded: false,
		isoFrameOffset: 0,
		isoChildFrameOffset: 0,
		description: "Rail Kit",
		name: "Rail Kit",
		sprite: "assets/spritesheets/UAPHR1.png",
		sku: "UAPHR1",
		gsku: "29RJ18",
		connectableParts: ["UAPHR1"],
		zOrderMod: [0, 0, 0, 0],
		iZOrderMod: [0, 0, 0, 0],
		forceDrawLast: false,
		forceDrawLastFrame: 0,
		rails: true,
		ladder: false,
		stackable: true,
		heightMod: 0,
		attachmentSlots: 0,
		attachmentPoints: [new createjs.Point(0, -293), new createjs.Point(-293, 0), new createjs.Point(293, 0), new createjs.Point(0, 293)],
		anchorPoint: new createjs.Point(0, 293),
		spriteAnchor: new createjs.Point(142, 8),
		spriteAnchorOffset: new createjs.Point(0, 148),
		bitmapCenter: new createjs.Point(142, 8),
		gridSize: new createjs.Point(0, 1),
		attachmentCoordinates: [new createjs.Point(0, -1), new createjs.Point(-1, 0), new createjs.Point(1, 0), new createjs.Point(0, 1)],
		renderPriority: 1,
		spriteDoesntRotate: false,
		overrideButtonScaling: false,
		buttonScale: .5,
		startTextPosition: new createjs.Point(0, 75),
		endTextPosition: new createjs.Point(0, -120)
	}
}

function RT_LEFTTURN(selectedFromMenu) {
	switch (height) {
		case 20:
			return URTTP20L(selectedFromMenu);
		case 30:
			return URTTP30L(selectedFromMenu);
		case 40:
			return URTTP40L(selectedFromMenu);
		case 50:
			return URTTP50L(selectedFromMenu);
		case 60:
			return URTTP60L(selectedFromMenu);
		default:
			return
	}
}

function RT_RIGHTTURN(selectedFromMenu) {
	switch (height) {
		case 20:
			return URTTP20R(selectedFromMenu);
		case 30:
			return URTTP30R(selectedFromMenu);
		case 40:
			return URTTP40R(selectedFromMenu);
		case 50:
			return URTTP50R(selectedFromMenu);
		case 60:
			return URTTP60R(selectedFromMenu);
		default:
			return
	}
}

function CO_LEFTTURN(selectedFromMenu) {
	switch (height) {
		case 30:
			return UCT03246L(selectedFromMenu);
		case 40:
			return UCT04246L(selectedFromMenu);
		case 50:
			return UCT05246L(selectedFromMenu);
		case 60:
			return UCT06246L(selectedFromMenu);
		case 70:
			return UCT07246L(selectedFromMenu);
		case 80:
			return UCT08246L(selectedFromMenu);
		case 90:
			return UCT09246L(selectedFromMenu);
		default:
			return UCT03246L(selectedFromMenu)
	}
}

function CO_RIGHTTURN(selectedFromMenu) {
	switch (height) {
		case 30:
			return UCT03246R(selectedFromMenu);
		case 40:
			return UCT04246R(selectedFromMenu);
		case 50:
			return UCT05246R(selectedFromMenu);
		case 60:
			return UCT06246R(selectedFromMenu);
		case 70:
			return UCT07246R(selectedFromMenu);
		case 80:
			return UCT08246R(selectedFromMenu);
		case 90:
			return UCT09246R(selectedFromMenu);
		default:
			return UCT03246R(selectedFromMenu)
	}
}

function RT_LADDER50END(selectedFromMenu) {
	switch (height) {
		case 20:
			return URTL502E(selectedFromMenu);
		case 30:
			return URTL503E(selectedFromMenu);
		case 40:
			return URTL504E(selectedFromMenu);
		case 50:
			return URTL505E(selectedFromMenu);
		case 60:
			return URTL506E(selectedFromMenu);
		default:
			return URTL502E(selectedFromMenu)
	}
}

function RT_LADDER90END(selectedFromMenu) {
	switch (height) {
		case 20:
			return URTL902E(selectedFromMenu);
		case 30:
			return URTL903E(selectedFromMenu);
		case 40:
			return URTL904E(selectedFromMenu);
		case 50:
			return URTL905E(selectedFromMenu);
		case 60:
			return URTL906E(selectedFromMenu);
		default:
			return URTL902E(selectedFromMenu)
	}
}

function CO_LADDER50END(selectedFromMenu) {
	switch (height) {
		case 30:
			return UCL5003242E(selectedFromMenu);
		case 40:
			return UCL5004242E(selectedFromMenu);
		case 50:
			return UCL5005242E(selectedFromMenu);
		case 60:
			return UCL5006242E(selectedFromMenu);
		case 70:
			return UCL5007242E(selectedFromMenu);
		case 80:
			return UCL5008242E(selectedFromMenu);
		case 90:
			return UCL5009242E(selectedFromMenu);
		default:
			return UCL5003242E(selectedFromMenu)
	}
}

function CO_LADDER75END(selectedFromMenu) {
	switch (height) {
		case 30:
			return UCL7503242E(selectedFromMenu);
		case 40:
			return UCL7504242E(selectedFromMenu);
		case 50:
			return UCL7505242E(selectedFromMenu);
		case 60:
			return UCL7506242E(selectedFromMenu);
		case 70:
			return UCL7507242E(selectedFromMenu);
		case 80:
			return UCL7508242E(selectedFromMenu);
		case 90:
			return UCL7509242E(selectedFromMenu);
		default:
			return UCL7503242E(selectedFromMenu)
	}
}

function CO_LADDER90END(selectedFromMenu) {
	switch (height) {
		case 30:
			return UCL9003242E(selectedFromMenu);
		case 40:
			return UCL9004242E(selectedFromMenu);
		case 50:
			return UCL9005242E(selectedFromMenu);
		case 60:
			return UCL9006242E(selectedFromMenu);
		case 70:
			return UCL9007242E(selectedFromMenu);
		case 80:
			return UCL9008242E(selectedFromMenu);
		case 90:
			return UCL9009242E(selectedFromMenu);
		default:
			return UCL9003242E(selectedFromMenu)
	}
}

function RT_LEGS(selectedFromMenu) {
	switch (height) {
		case 20:
			return URSL20(true);
		case 30:
			return URSL30(true);
		case 40:
			return URSL40(true);
		case 50:
			return URSL50(true);
		case 60:
			return URSL60(true);
		default:
			return
	}
}

function RT_LADDER50S() {
	switch (height) {
		case 20:
			return URTL502(false);
		case 30:
			return URTL503(false);
		case 40:
			return URTL504(false);
		case 50:
			return URTL505(false);
		case 60:
			return URTL506(false);
		default:
			return
	}
}

function RT_LADDER90S() {
	switch (height) {
		case 20:
			return URTL902(false);
		case 30:
			return URTL903(false);
		case 40:
			return URTL904(false);
		case 50:
			return URTL905(false);
		case 60:
			return URTL906(false);
		default:
			return
	}
}

function CO_LADDER50S() {
	switch (height) {
		case 30:
			return UCL5003242(false);
		case 40:
			return UCL5004242(false);
		case 50:
			return UCL5005242(false);
		case 60:
			return UCL5006242(false);
		case 70:
			return UCL5007242(false);
		case 80:
			return UCL5008242(false);
		case 90:
			return UCL5009242(false);
		default:
			return UCL5003242(false)
	}
}

function CO_LADDER75S() {
	switch (height) {
		case 30:
			return UCL7503242(false);
		case 40:
			return UCL7504242(false);
		case 50:
			return UCL7505242(false);
		case 60:
			return UCL7506242(false);
		case 70:
			return UCL7507242(false);
		case 80:
			return UCL7508242(false);
		case 90:
			return UCL7509242(false);
		default:
			return UCL7503242(false)
	}
}

function CO_LADDER90S() {
	switch (height) {
		case 30:
			return UCL9003242(false);
		case 40:
			return UCL9004242(false);
		case 50:
			return UCL9005242(false);
		case 60:
			return UCL9006242(false);
		case 70:
			return UCL9007242(false);
		case 80:
			return UCL9008242(false);
		case 90:
			return UCL9009242(false);
		default:
			return UCL9003242(false)
	}
}

function CO_LEGS(selectedFromMenu) {
	switch (height) {
		case 30:
			return ULK0324(true);
		case 40:
			return ULK0424(true);
		case 50:
			return ULK0524(true);
		case 60:
			return ULK0624(true);
		case 70:
			return ULK0724(true);
		case 80:
			return ULK0824(true);
		case 90:
			return ULK0924(true);
		default:
			return
	}
}

function MA_LADDER50S() {
	switch (height) {
		case 20:
			return UAP0250U(false);
		case 30:
			return UAP0350U(false);
		case 40:
			return UAP0450U(false);
		case 50:
			return UAP0550U(false);
		case 60:
			return UAP0650U(false);
		case 70:
			return UAP0750U(false);
		case 80:
			return UAP0850U(false);
		case 90:
			return UAP0950U(false);
		case 100:
			return UAP1050U(false);
		case 110:
			return UAP1150U(false);
		default:
			break
	}
}

function MA_LADDER90S() {
	switch (height) {
		case 20:
			return UAP0290U(false);
		case 30:
			return UAP0390U(false);
		case 40:
			return UAP0490U(false);
		case 50:
			return UAP0590U(false);
		case 60:
			return UAP0690U(false);
		case 70:
			return UAP0790U(false);
		case 80:
			return UAP0890U(false);
		case 90:
			return UAP0990U(false);
		case 100:
			return UAP1090U(false);
		case 110:
			return UAP1190U(false);
		default:
			break
	}
}

function LEGS() {
	switch (system) {
		case 1:
			return RT_LEGS(true);
			break;
		case 2:
			return CO_LEGS(true);
			break;
		default:
			break
	}
}

function LADDER() {
	switch (system) {
		case 1:
			switch (incline) {
				case 50:
					return RT_LADDER50S();
				case 90:
					return RT_LADDER90S();
				default:
					return
			}
			case 2:
				switch (incline) {
					case 50:
						return CO_LADDER50S();
					case 75:
						return CO_LADDER75S();
					case 90:
						return CO_LADDER90S();
					default:
						return
				}
				case 3:
					switch (incline) {
						case 50:
							return MA_LADDER50S();
						case 90:
							return MA_LADDER90S()
					}
					default:
						return
	}
}

function MA_LADDERS(currentHeight) {
	var ladders = [];
	switch (currentHeight) {
		case 20:
			ladders = ["UAP0250D", "UAP0290D", "UAP0250U", "UAP0350U", "UAP0450U", "UAP0550U", "UAP0650U", "UAP0750U", "UAP0850U", "UAP0950U", "UAP1050U"];
			break;
		case 30:
			ladders = ["UAP0350D", "UAP0390D", "UAP0250D", "UAP0250U", "UAP0350U", "UAP0450U", "UAP0550U", "UAP0650U", "UAP0750U", "UAP0850U", "UAP0950U"];
			break;
		case 40:
			ladders = ["UAP0450D", "UAP0490D", "UAP0250D", "UAP0350D", "UAP0250U", "UAP0350U", "UAP0450U", "UAP0550U", "UAP0650U", "UAP0750U", "UAP0850U"];
			break;
		case 50:
			ladders = ["UAP0550D", "UAP0590D", "UAP0450D", "UAP0250D", "UAP0350D", "UAP0250U", "UAP0350U", "UAP0450U", "UAP0550U", "UAP0650U", "UAP0750U"];
			break;
		case 60:
			ladders = ["UAP0650D", "UAP0690D", "UAP0550D", "UAP0450D", "UAP0350D", "UAP0250D", "UAP0250U", "UAP0350U", "UAP0450U", "UAP0550U", "UAP0650U"];
			break;
		case 70:
			ladders = ["UAP0750D", "UAP0790D", "UAP0650D", "UAP0550D", "UAP0450D", "UAP0250D", "UAP0350D", "UAP0250U", "UAP0350U", "UAP0450U", "UAP0550U"];
			break;
		case 80:
			ladders = ["UAP0850D", "UAP0890D", "UAP0750D", "UAP0650D", "UAP0550D", "UAP0450D", "UAP0250D", "UAP0350D", "UAP0250U", "UAP0350U", "UAP0450U"];
			break;
		case 90:
			ladders = ["UAP0950D", "UAP0990D", "UAP0850D", "UAP0750D", "UAP0650D", "UAP0550D", "UAP0450D", "UAP0350D", "UAP0250D", "UAP0250U", "UAP0350U"];
			break;
		case 100:
			ladders = ["UAP1050D", "UAP1090D", "UAP0950D", "UAP0850D", "UAP0750D", "UAP0650D", "UAP0550D", "UAP0450D", "UAP0350D", "UAP0250D", "UAP0250U"];
			break;
		case 110:
			ladders = ["UAP1150D", "UAP1190D", "UAP0950D", "UAP0850D", "UAP0750D", "UAP0650D", "UAP0550D", "UAP0450D", "UAP0350D", "UAP0250D", "UAP1050D"];
			break;
		default:
			break
	}
	return ladders
}
var MAX_ACCESS_SCALE_FACTOR = .3;
var MAP;
var LAST_CLICKED_MAX_ACCESS_PART;
var LAST_CLICKED_ATTACHMENT_POINT;
var heightLabels = new Array;
var showHeightLabels = false;
var heightTints = new Array;
var showHeightTints = false;
var heightKeys = new Array;
var legs = new Array;
var showLegs = false;
var autoAddedRails = new Array;
var toolTipText;
var showTooltip = false;
var showRemoveButton = false;
var height20Tint = "rgba(0,31,63,0.7)";
var height30Tint = "rgba(0,116,217,0.7)";
var height40Tint = "rgba(127,219,255,0.7)";
var height50Tint = "rgba(57,204,204,0.7)";
var height60Tint = "rgba(61,153,112,0.7)";
var height70Tint = "rgba(46,204,64,0.7)";
var height80Tint = "rgba(1,255,112,0.7)";
var height90Tint = "rgba(255,220,0,0.7)";
var height100Tint = "rgba(255,133,27,0.7)";
var height110Tint = "rgba(255,65,54,0.7)";

function MaxPart(data, attachmentPoint) {
	var container = new createjs.Container;
	if (attachmentPoint == null) {
		container.partData = data;
		container.name = id;
		parts.push(container.name);
		id++;
		return container
	}
	container.hasLegs = false;
	container.partData = data;
	container.noParent = false;
	container.mountPoint = attachmentPoint;
	container.parentPart = attachmentPoint.parent;
	attachmentPoint.filled = true;
	attachmentPoint.parent.attachmentSlotsUsed++;
	container.startingHeight = attachmentPoint.parent.height;
	container.attachmentSlotsUsed = 0;
	var attachmentPointMod = new createjs.Point(0, 0);
	switch (attachmentPoint.rotOffset) {
		case 0:
			attachmentPointMod = new createjs.Point(data.spriteAnchorOffset.x, data.spriteAnchorOffset.y);
			break;
		case 90:
			attachmentPointMod = new createjs.Point(-data.spriteAnchorOffset.y, data.spriteAnchorOffset.x);
			break;
		case -90:
			attachmentPointMod = new createjs.Point(data.spriteAnchorOffset.y, data.spriteAnchorOffset.x);
			break;
		case 180:
			attachmentPointMod = new createjs.Point(data.spriteAnchorOffset.x, -data.spriteAnchorOffset.y);
			break;
		default:
			break
	}
	container.x = (container.parentPart.x / MAX_ACCESS_SCALE_FACTOR + attachmentPoint.x + attachmentPointMod.x) * MAX_ACCESS_SCALE_FACTOR;
	container.y = (container.parentPart.y / MAX_ACCESS_SCALE_FACTOR + attachmentPoint.y + attachmentPointMod.y) * MAX_ACCESS_SCALE_FACTOR;
	container.coordinates = attachmentPoint.coordinates;
	var sprite = new createjs.Bitmap(data.sprite);
	var spriteButtonHelper = new createjs.ButtonHelper(sprite);
	sprite.addEventListener("click", maxHandlePartClicked);
	sprite.addEventListener("mouseover", maxHandleMouseOver);
	sprite.addEventListener("mouseout", maxHandleMouseOut);
	sprite.name = container.name = id;
	id++;
	container.addChild(sprite);
	var center = new createjs.Shape;
	center.name = "CENTER";
	container.addChild(center);
	container.attachmentSlots = new Array;
	container.attachmentSlotIndices = new Array;
	var count = 0;
	for (var i = 0; i < data.attachmentSlots; i++) {
		if (data.platform || i == 0 && attachmentPoint.rotOffset == 0 || i == 1 && attachmentPoint.rotOffset == -90 || i == 2 && attachmentPoint.rotOffset == 90 || i == 3 && attachmentPoint.rotOffset == 180) {
			var f = new createjs.Shape;
			f.name = i;
			f.graphics.beginFill("#fff").setStrokeStyle(8, "round").beginStroke("rgba(255,192,0,1)").drawRect(-146, 73, 293, 73);
			f.x = container.partData.attachmentPoints[i].x;
			f.y = container.partData.attachmentPoints[i].y;
			f.coordinates = new createjs.Point(container.partData.attachmentCoordinates[i].x + container.coordinates.x, container.partData.attachmentCoordinates[i].y + container.coordinates.y);
			f.visible = false;
			f.filled = false;
			switch (i) {
				case 0:
					f.rotOffset = data.platform ? 0 : 0;
					break;
				case 1:
					f.rotOffset = data.platform ? -90 : 0;
					break;
				case 2:
					f.rotOffset = data.platform ? 90 : 0;
					break;
				case 3:
					f.rotOffset = data.platform ? 180 : 0;
					break;
				default:
					break
			}
			if (data.ladder) f.rotation = f.rotOffset + attachmentPoint.rotOffset;
			else f.rotation = f.rotOffset;
			f.railsOnly = false;
			container.addChild(f);
			container.attachmentSlots[count] = f;
			var attachmentPointButtonHelper = new createjs.ButtonHelper(f);
			f.addEventListener("click", attachmentPointClicked);
			f.addEventListener("mouseover", maxHandleMouseOverAttachmentPoint);
			f.addEventListener("mouseout", maxHandleMouseOutAttachmentPoint);
			count++;
			container.attachmentSlotIndices.push(i)
		}
	}
	container.attachmentCount = count;
	var p = new createjs.Shape;
	p.name = "CONNECTOR";
	p.x = container.partData.anchorPoint.x;
	p.y = container.partData.anchorPoint.y;
	container.addChild(p);
	sprite.regX = data.bitmapCenter.x;
	sprite.regY = data.bitmapCenter.y;
	parts.push(sprite.name);
	container.highlight = new createjs.Shape;
	container.highlight.graphics.beginFill("rgba(255,192,0,0.8)").drawRect(-container.partData.bitmapCenter.x, -container.partData.bitmapCenter.y, 2 * container.partData.bitmapCenter.x, 2 * container.partData.bitmapCenter.y);
	container.addChild(container.highlight);
	container.highlight.visible = false;
	container.highlight.mouseEnabled = false;
	container.height = container.startingHeight + container.partData.heightMod;
	if (container.height != 0 && !container.partData.platform) {
		if (container.partData.heightMod < 0) container.height += 10;
		else container.height -= 10
	}
	if (data.platform) {
		var heightText = new createjs.Text(container.height + '"', "100px sans-serif", "#202020");
		heightText.x = -100;
		heightText.y = -100;
		heightText.visible = showHeightLabels;
		container.addChild(heightText);
		heightLabels.push(heightText);
		var heightTint = new createjs.Shape;
		switch (container.height) {
			case 20:
				heightTint.graphics.beginFill(height20Tint).drawRect(-146, -146, 293, 293);
				break;
			case 30:
				heightTint.graphics.beginFill(height30Tint).drawRect(-146, -146, 293, 293);
				break;
			case 40:
				heightTint.graphics.beginFill(height40Tint).drawRect(-146, -146, 293, 293);
				break;
			case 50:
				heightTint.graphics.beginFill(height50Tint).drawRect(-146, -146, 293, 293);
				break;
			case 60:
				heightTint.graphics.beginFill(height60Tint).drawRect(-146, -146, 293, 293);
				break;
			case 70:
				heightTint.graphics.beginFill(height70Tint).drawRect(-146, -146, 293, 293);
				break;
			case 80:
				heightTint.graphics.beginFill(height80Tint).drawRect(-146, -146, 293, 293);
				break;
			case 90:
				heightTint.graphics.beginFill(height90Tint).drawRect(-146, -146, 293, 293);
				break;
			case 100:
				heightTint.graphics.beginFill(height100Tint).drawRect(-146, -146, 293, 293);
				break;
			case 110:
				heightTint.graphics.beginFill(height110Tint).drawRect(-146, -146, 293, 293);
				break;
			default:
				break
		}
		container.addChild(heightTint);
		heightTint.mouseEnabled = false;
		heightTint.visible = showHeightTints;
		heightTints.push(heightTint)
	} else {
		container.highlight.rotation = sprite.rotation = attachmentPoint.rotOffset
	}
	switch (attachmentPoint.rotOffset) {
		case 0:
			for (var x = 0; x < data.gridSize.x; x++) {
				for (var y = 0; y < data.gridSize.y; y++) {
					if (y == 0) {
						MAP[container.coordinates.x + x][container.coordinates.y - y][4].y = container.partData.length
					}
					MAP[container.coordinates.x + x][container.coordinates.y - y][4].x = container.partData.width;
					MAP[container.coordinates.x + x][container.coordinates.y - y][0] = container.height;
					if (data.platform) MAP[container.coordinates.x + x][container.coordinates.y + y][1] = "P";
					if (data.ladder) MAP[container.coordinates.x + x][container.coordinates.y - y][1] = "L"
				}
			}
			break;
		case -90:
			for (var x = 0; x < data.gridSize.x; x++) {
				for (var y = 0; y < data.gridSize.y; y++) {
					if (y == 0) {
						MAP[container.coordinates.x - y][container.coordinates.y - x][4].x = container.partData.length
					}
					MAP[container.coordinates.x - y][container.coordinates.y - x][4].y = container.partData.width;
					MAP[container.coordinates.x - y][container.coordinates.y - x][0] = container.height;
					if (data.platform) MAP[container.coordinates.x - y][container.coordinates.y - x][1] = "P";
					if (data.ladder) MAP[container.coordinates.x - y][container.coordinates.y - x][1] = "L"
				}
			}
			break;
		case 180:
			for (var x = 0; x < data.gridSize.x; x++) {
				for (var y = 0; y < data.gridSize.y; y++) {
					if (y == 0) {
						MAP[container.coordinates.x + x][container.coordinates.y + y][4].y = container.partData.length
					}
					MAP[container.coordinates.x + x][container.coordinates.y + y][4].x = container.partData.width;
					MAP[container.coordinates.x + x][container.coordinates.y + y][0] = container.height;
					if (data.platform) MAP[container.coordinates.x + x][container.coordinates.y + y][1] = "P";
					if (data.ladder) MAP[container.coordinates.x + x][container.coordinates.y + y][1] = "L"
				}
			}
			break;
		case 90:
			for (var x = 0; x < data.gridSize.x; x++) {
				for (var y = 0; y < data.gridSize.y; y++) {
					if (y == 0) {
						MAP[container.coordinates.x + y][container.coordinates.y - x][4].x = container.partData.length
					}
					MAP[container.coordinates.x + y][container.coordinates.y - x][4].y = container.partData.width;
					MAP[container.coordinates.x + y][container.coordinates.y - x][0] = container.height;
					if (data.platform) MAP[container.coordinates.x + y][container.coordinates.y - x][1] = "P";
					if (data.ladder) MAP[container.coordinates.x + y][container.coordinates.y - x][1] = "L"
				}
			}
			break
	}
	if (data.ladder) {
		startingText = new createjs.Text(container.startingHeight + '"', "40px sans-serif", "#e17a0f");
		startingText.x = data.startTextPosition.x;
		startingText.y = data.startTextPosition.y;
		endText = new createjs.Text(container.height + '"', "40px sans-serif", "#e17a0f");
		startingText.textAlign = "center";
		directionText = new createjs.Text("", "60px sans-serif", "#e17a0f");
		if (data.heightMod > 0) directionText.text = "UP";
		else {
			directionText.text = "DOWN";
			directionText.color = "#1e85f0";
			endText.color = "#1e85f0";
			startingText.color = "#1e85f0"
		}
		directionText.textAlign = "center";
		directionText.x = data.directionTextPosition.x;
		directionText.y = data.directionTextPosition.y;
		endText.x = data.endTextPosition.x;
		endText.y = data.endTextPosition.y;
		endText.textAlign = "center";
		var textContainer = new createjs.Container;
		textContainer.addChild(startingText);
		textContainer.addChild(endText);
		textContainer.addChild(directionText);
		container.addChild(textContainer);
		textContainer.rotation = sprite.rotation;
		if (sprite.rotation == 180) {
			startingText.rotation = 180;
			startingText.y += 50;
			endText.y += 50;
			endText.rotation = 180;
			directionText.rotation = 180
		}
		if (container.height == 0) {
			MAP[container.coordinates.x][container.coordinates.y][3] = container.height - data.heightMod;
			switch (attachmentPoint.rotOffset) {
				case 0:
					MAP[container.coordinates.x][container.coordinates.y][2] = 3;
					break;
				case -90:
					MAP[container.coordinates.x][container.coordinates.y][2] = 2;
					break;
				case 180:
					MAP[container.coordinates.x][container.coordinates.y][2] = 1;
					break;
				case 90:
					MAP[container.coordinates.x][container.coordinates.y][2] = 4;
					break
			}
		} else {
			MAP[container.coordinates.x][container.coordinates.y][3] = 0 < data.heightMod ? 10 - data.heightMod : -data.heightMod - 10;
			switch (attachmentPoint.rotOffset) {
				case 0:
					MAP[container.coordinates.x][container.coordinates.y][2] = 3;
					break;
				case -90:
					MAP[container.coordinates.x][container.coordinates.y][2] = 2;
					break;
				case 180:
					MAP[container.coordinates.x][container.coordinates.y][2] = 1;
					break;
				case 90:
					MAP[container.coordinates.x][container.coordinates.y][2] = 4;
					break
			}
			switch (attachmentPoint.rotOffset) {
				case 0:
					MAP[container.coordinates.x][container.coordinates.y - data.gridSize.y + 1][2] = 1;
					MAP[container.coordinates.x][container.coordinates.y - data.gridSize.y + 1][3] = 0;
					break;
				case -90:
					MAP[container.coordinates.x - data.gridSize.y + 1][container.coordinates.y][2] = 4;
					MAP[container.coordinates.x - data.gridSize.y + 1][container.coordinates.y][3] = 0;
					break;
				case 180:
					MAP[container.coordinates.x][container.coordinates.y + data.gridSize.y - 1][2] = 3;
					MAP[container.coordinates.x][container.coordinates.y + data.gridSize.y - 1][3] = 0;
					break;
				case 90:
					MAP[container.coordinates.x + data.gridSize.y - 1][container.coordinates.y][2] = 2;
					MAP[container.coordinates.x + data.gridSize.y - 1][container.coordinates.y][3] = 0;
					break
			}
		}
	}
	container.scaleX = container.scaleY = MAX_ACCESS_SCALE_FACTOR;
	container.parentPartAttachmentPoint = attachmentPoint;
	updateMap();
	printMAP();
	for (var i = 0; i < attachmentPoint.parent.attachmentCount; i++) {
		attachmentPoint.parent.attachmentSlots[i].visible = false
	}
	if (data.rails) {
		var hitbox = new createjs.Shape;
		hitbox.rotation = attachmentPoint.rotOffset;
		hitbox.graphics.beginFill("rgba(255,255,255,0.01").drawRect(-125, -20, 250, 40);
		var hitboxButtonHelper = new createjs.ButtonHelper(hitbox);
		hitbox.addEventListener("click", maxHandlePartClicked);
		hitbox.addEventListener("mouseover", maxHandleMouseOver);
		hitbox.addEventListener("mouseout", maxHandleMouseOut);
		hitbox.name = container.name;
		container.addChild(hitbox)
	}
	return container
}

function InitialMaxPart(data) {
	partsMenuContainerText.text = "Select a part to build off of";
	toolTipText = new createjs.Text("Mouse over a part", "16px sans-serif", "#202020");
	toolTipText.name = "TOOL_TIP_TEXT";
	addMaxRemoveButton();
	stage.addChild(toolTipText);
	showTooltip = true;
	MAP = new Array;
	for (var x = 0; x < 40; x++) {
		MAP[x] = new Array;
		for (var y = 0; y < 40; y++) {
			MAP[x][y] = new Array;
			MAP[x][y].push(0);
			MAP[x][y].push("E");
			MAP[x][y].push(0);
			MAP[x][y].push(0);
			MAP[x][y].push(new createjs.Point(0, 0))
		}
	}
	var container = new createjs.Container;
	container.partData = data;
	container.noParent = true;
	container.startingHeight = 0;
	container.attachmentSlotsUsed = 0;
	container.legsNeeded = data.legsNeeded;
	container.x = 0;
	container.y = 0;
	container.coordinates = new createjs.Point(20, 20);
	var sprite = new createjs.Bitmap(data.sprite);
	var spriteButtonHelper = new createjs.ButtonHelper(sprite);
	sprite.addEventListener("click", maxHandlePartClicked);
	sprite.addEventListener("mouseover", maxHandleMouseOver);
	sprite.addEventListener("mouseout", maxHandleMouseOut);
	sprite.name = container.name = id;
	id++;
	if (!data.hiddenSprite) container.addChild(sprite);
	var center = new createjs.Shape;
	center.name = "CENTER";
	container.addChild(center);
	container.attachmentSlotIndices = new Array;
	container.attachmentSlots = new Array;
	var count = 0;
	for (var i = 0; i < data.attachmentSlots; i++) {
		if (i == 0) {
			var f = new createjs.Shape;
			f.name = i;
			f.graphics.beginFill("#fff").setStrokeStyle(8, "round").beginStroke("rgba(255,192,0,1)").drawRect(-146, 73, 293, 73);
			f.x = container.partData.attachmentPoints[i].x;
			f.y = container.partData.attachmentPoints[i].y;
			f.coordinates = new createjs.Point(container.partData.attachmentCoordinates[i].x + container.coordinates.x, container.partData.attachmentCoordinates[i].y + container.coordinates.y);
			f.visible = false;
			f.filled = false;
			switch (i) {
				case 0:
					f.rotOffset = 0;
					break;
				case 1:
					f.rotOffset = -90;
					break;
				case 2:
					f.rotOffset = 90;
					break;
				case 3:
					f.rotOffset = 180;
					break;
				default:
					break
			}
			container.addChild(f);
			container.attachmentSlots[count] = f;
			var attachmentPointButtonHelper = new createjs.ButtonHelper(f);
			f.addEventListener("click", attachmentPointClicked);
			f.addEventListener("mouseover", maxHandleMouseOverAttachmentPoint);
			f.addEventListener("mouseout", maxHandleMouseOutAttachmentPoint);
			count++;
			container.attachmentSlotIndices.push(i)
		}
	}
	container.attachmentCount = count;
	var p = new createjs.Shape;
	p.name = "CONNECTOR";
	p.x = container.partData.anchorPoint.x;
	p.y = container.partData.anchorPoint.y;
	container.addChild(p);
	sprite.regX = data.bitmapCenter.x;
	sprite.regY = data.bitmapCenter.y;
	parts.push(sprite.name);
	container.highlight = new createjs.Shape;
	container.highlight.graphics.beginFill("rgba(255,192,0,0.8)").drawRect(-container.partData.bitmapCenter.x, -container.partData.bitmapCenter.y, 2 * container.partData.bitmapCenter.x, 2 * container.partData.bitmapCenter.y);
	container.addChild(container.highlight);
	container.highlight.visible = false;
	container.highlight.mouseEnabled = false;
	container.height = container.startingHeight + container.partData.heightMod;
	for (var x = 0; x < data.gridSize.x; x++) {
		for (var y = 0; y < data.gridSize.y; y++) {
			if (y == 0) {
				MAP[container.coordinates.x + x][container.coordinates.y - y][4].y = container.partData.length
			}
			MAP[container.coordinates.x + x][container.coordinates.y - y][0] = container.height;
			MAP[container.coordinates.x + x][container.coordinates.y - y][4].x = container.partData.width;
			if (data.platform) MAP[container.coordinates.x + x][container.coordinates.y - y][1] = "P";
			if (data.ladder) MAP[container.coordinates.x + x][container.coordinates.y - y][1] = "L"
		}
	}
	if (data.ladder) {
		startingText = new createjs.Text(container.startingHeight + '"', "40px sans-serif", "#e17a0f");
		startingText.x = data.startTextPosition.x;
		startingText.y = data.startTextPosition.y;
		endText = new createjs.Text(container.height + '"', "40px sans-serif", "#e17a0f");
		endText.x = data.endTextPosition.x;
		endText.y = data.endTextPosition.y;
		directionText = new createjs.Text("", "60px sans-serif", "#e17a0f");
		if (data.heightMod > 0) directionText.text = "UP";
		else {
			directionText.text = "DOWN";
			directionText.color = "#1e85f0";
			startingText.color = "#1e85f0";
			endText.color = "#1e85f0"
		}
		directionText.x = data.directionTextPosition.x;
		directionText.y = data.directionTextPosition.y;
		directionText.textAlign = startingText.textAlign = endText.textAlign = "center";
		container.addChild(directionText);
		container.addChild(startingText);
		container.addChild(endText);
		MAP[container.coordinates.x][container.coordinates.y - data.gridSize.y + 1][2] = 1;
		if (container.height == 0) container.attachmentSlotsUsed = 0
	}
	container.scaleX = container.scaleY = MAX_ACCESS_SCALE_FACTOR;
	updateMap();
	printMAP();
	return container
}

function maxHandlePartClicked(event) {
	var clicked = partsContainer.getChildByName(event.target.name);
	if (LAST_CLICKED_MAX_ACCESS_PART == clicked) return;
	if (LAST_CLICKED_MAX_ACCESS_PART != null) {
		LAST_CLICKED_MAX_ACCESS_PART.highlight.visible = false;
		for (var i = 0; i < LAST_CLICKED_MAX_ACCESS_PART.attachmentCount; i++) {
			LAST_CLICKED_MAX_ACCESS_PART.attachmentSlots[i].visible = false
		}
	}
	if (LAST_CLICKED_ATTACHMENT_POINT != null) {
		LAST_CLICKED_ATTACHMENT_POINT.visible = false;
		LAST_CLICKED_ATTACHMENT_POINT = null
	}
	if (partsMenuContainer.getChildByName("PART_BUTTONS_CONTAINER")) {
		partsMenuContainer.removeChild(partsMenuContainer.getChildByName("PART_BUTTONS_CONTAINER"))
	}
	if (scrollbar != null) {
		scrollbar.removeAllChildren();
		partsMenuContainer.removeChild(scrollbar);
		scrollbar = null
	}
	LAST_CLICKED_MAX_ACCESS_PART = clicked;
	if (clicked.height == 0) {
		partsMenuContainerText.text = "Select a part to build off of";
		maxRemoveButton.visible = true;
		return
	}
	if (clicked.attachmentSlotsUsed != clicked.partData.attachmentSlots) {
		var updateText = false;
		for (var i = 0; i < clicked.attachmentCount; i++) {
			k = clicked.attachmentSlotIndices[i];
			if (MAP[clicked.coordinates.x + clicked.partData.attachmentCoordinates[k].x][clicked.coordinates.y + clicked.partData.attachmentCoordinates[k].y][0] == 0 && !clicked.attachmentSlots[i].filled && MAP[clicked.coordinates.x + clicked.partData.attachmentCoordinates[k].x][clicked.coordinates.y + clicked.partData.attachmentCoordinates[k].y][1] == "E") {
				clicked.attachmentSlots[i].visible = true;
				clicked.attachmentSlots[i].railsOnly = false;
				clicked.attachmentSlots[i].graphics.beginFill("#fff").setStrokeStyle(8, "round").beginStroke("rgba(255,192,0,1)").drawRect(-146, 73, 293, 73);
				updateText = true
			} else if ((MAP[clicked.coordinates.x + clicked.partData.attachmentCoordinates[k].x][clicked.coordinates.y + clicked.partData.attachmentCoordinates[k].y][0] != clicked.height || MAP[clicked.coordinates.x + clicked.partData.attachmentCoordinates[k].x][clicked.coordinates.y + clicked.partData.attachmentCoordinates[k].y][1] != "P" && (clicked.noParent || clicked.parentPart.coordinates.x != clicked.coordinates.x + clicked.partData.attachmentCoordinates[k].x && clicked.parentPart.coordinates.y != clicked.coordinates.y + clicked.partData.attachmentCoordinates[k].y)) && !clicked.attachmentSlots[i].filled) {
				clicked.attachmentSlots[i].visible = true;
				clicked.attachmentSlots[i].railsOnly = true;
				clicked.attachmentSlots[i].graphics.beginFill("#fff").setStrokeStyle(8, "round").beginStroke("rgba(255,192,0,1)").drawRect(-146, 73, 293, 73);
				updateText = true
			}
		}
		if (updateText) {
			partsMenuContainerText.text = "Select an attachment point";
			toolTipText.text = "Mouse over an attachment point"
		}
	} else partsMenuContainerText.text = "Select a part to build off of";
	LAST_CLICKED_ATTACHMENT_POINT = null;
	if (!clicked.noParent && clicked.attachmentSlotsUsed == 0) {
		maxRemoveButton.visible = true
	} else maxRemoveButton.visible = false
}

function updateMap() {
	for (var x = 0; x < 40; x++) {
		for (var y = 0; y < 40; y++) {
			if (MAP[y][x][0] == " X ") {
				MAP[y][x][0] = 0
			}
			if (MAP[y][x][1] != "L") {
				MAP[y][x][2] = 0
			}
		}
	}
	for (var i = 0; i < legs.length; i++) {
		if (parts.indexOf(legs[i].name) != -1) {
			parts.splice(parts.indexOf(legs[i].name), 1);
			partsContainer.removeChild(legs[i])
		}
	}
	legs = new Array;
	for (var x = 1; x < 39; x++) {
		for (var y = 1; y < 39; y++) {
			if (MAP[y][x][0] != " X " && MAP[y][x][0] != 0) {
				continue
			}
			var surroundingHeights = new Array;
			surroundingHeights.push(MAP[y - 1][x][0]);
			surroundingHeights.push(MAP[y + 1][x][0]);
			surroundingHeights.push(MAP[y][x - 1][0]);
			surroundingHeights.push(MAP[y][x + 1][0]);
			var uniq = new Array;
			for (var i = 0; i < surroundingHeights.length; i++) {
				if (surroundingHeights[i] == 0 || surroundingHeights[i] == " X ") continue;
				if (uniq.indexOf(surroundingHeights[i]) == -1) uniq.push(surroundingHeights[i])
			}
			if (uniq.length > 1) MAP[y][x][0] = " X "
		}
	}
	for (var i = 0; i < 1; i++) {
		for (var x = 0; x < 40; x++) {
			for (var y = 0; y < 40; y++) {
				if (MAP[x][y][1] == "P" && MAP[x][y][2] == 0) {
					var leg1 = false;
					var leg2 = false;
					var leg3 = false;
					var leg4 = false;
					var p1 = false;
					var p2 = false;
					var p3 = false;
					var p4 = false;
					if (x > 0) {
						if (MAP[x - 1][y][1] != "E" && MAP[x - 1][y][0] == MAP[x][y][0]) p4 = true;
						if (MAP[x - 1][y][2] == 0 || MAP[x - 1][y][2] == 4) {} else if (MAP[x - 1][y][2] == 2) {
							leg1 = true;
							leg4 = true
						} else if (MAP[x - 1][y][2] == 3) {
							leg4 = true
						} else if (MAP[x - 1][y][2] == 1) {
							leg1 = true
						}
					}
					if (x < 39) {
						if (MAP[x + 1][y][1] != "E" && MAP[x + 1][y][0] == MAP[x][y][0]) p2 = true;
						if (MAP[x + 1][y][2] == 0 || MAP[x + 1][y][2] == 2) {} else if (MAP[x + 1][y][2] == 4) {
							leg2 = true;
							leg3 = true
						} else if (MAP[x + 1][y][2] == 3) {
							leg3 = true
						} else if (MAP[x + 1][y][2] == 1) {
							leg2 = true
						}
					}
					if (y > 0) {
						if (MAP[x][y - 1][1] != "E" && MAP[x][y - 1][0] == MAP[x][y][0]) p1 = true;
						if (MAP[x][y - 1][2] == 0 || MAP[x][y - 1][2] == 1) {} else if (MAP[x][y - 1][2] == 4) {
							leg1 = true
						} else if (MAP[x][y - 1][2] == 2) {
							leg2 = true
						} else if (MAP[x][y - 1][2] == 3) {
							leg1 = true;
							leg2 = true
						}
					}
					if (y < 39) {
						if (MAP[x][y + 1][1] != "E" && MAP[x][y + 1][0] == MAP[x][y][0]) p3 = true;
						if (MAP[x][y + 1][2] == 0 || MAP[x][y + 1][2] == 3) {} else if (MAP[x][y + 1][2] == 4) {
							leg4 = true
						} else if (MAP[x][y + 1][2] == 2) {
							leg3 = true
						} else if (MAP[x][y + 1][2] == 1) {
							leg3 = true;
							leg4 = true
						}
					}
					if (x > 0 && y > 0) {
						if (MAP[x - 1][y - 1][2] == 0 || MAP[x - 1][y - 1][2] == 1 || MAP[x - 1][y - 1][2] == 4) {} else if (MAP[x - 1][y - 1][2] == 2 || MAP[x - 1][y - 1][2] == 3) {
							leg1 = true
						}
					}
					if (x > 0 && y < 39) {
						if (MAP[x - 1][y + 1][2] == 0 || MAP[x - 1][y + 1][2] == 3 || MAP[x - 1][y + 1][2] == 4) {} else if (MAP[x - 1][y + 1][2] == 2 || MAP[x - 1][y + 1][2] == 1) {
							leg4 = true
						}
					}
					if (x < 39 && y > 0) {
						if (MAP[x + 1][y - 1][2] == 0 || MAP[x + 1][y - 1][2] == 1 || MAP[x + 1][y - 1][2] == 2) {} else if (MAP[x + 1][y - 1][2] == 4 || MAP[x + 1][y - 1][2] == 3) {
							leg2 = true
						}
					}
					if (x < 39 && y < 39) {
						if (MAP[x + 1][y + 1][2] == 0 || MAP[x + 1][y + 1][2] == 3 || MAP[x + 1][y + 1][2] == 2) {} else if (MAP[x + 1][y + 1][2] == 4 || MAP[x + 1][y + 1][2] == 1) {
							leg3 = true
						}
					}
					if (!leg1 && !leg2 && !leg3 && !leg4)
						if (!p1 && !p4 && !p3) MAP[x][y][2] = 4;
						else MAP[x][y][2] = 1;
					else if (leg1 && !leg2 && !leg3 && !leg4)
						if (!p1 && p4 && p2 && p3) MAP[x][y][2] = 3;
						else MAP[x][y][2] = 2;
					else if (!leg1 && leg2 && !leg3 && !leg4) MAP[x][y][2] = 4;
					else if (leg1 && leg2 && !leg3 && !leg4) MAP[x][y][2] = 3;
					else if (!leg1 && !leg2 && leg3 && !leg4)
						if (p4) MAP[x][y][2] = 1;
						else MAP[x][y][2] = 4;
					else if (leg1 && !leg2 && leg3 && !leg4) MAP[x][y][2] = 1;
					else if (!leg1 && leg2 && leg3 && !leg4) MAP[x][y][2] = 4;
					else if (leg1 && leg2 && leg3 && !leg4) MAP[x][y][2] = 0;
					else if (!leg1 && !leg2 && !leg3 && leg4) MAP[x][y][2] = 1;
					else if (leg1 && !leg2 && !leg3 && leg4) MAP[x][y][2] = 2;
					else if (!leg1 && leg2 && !leg3 && leg4) MAP[x][y][2] = 3;
					else if (leg1 && leg2 && !leg3 && leg4) MAP[x][y][2] = 0;
					else if (!leg1 && !leg2 && leg3 && leg4) MAP[x][y][2] = 1;
					else if (leg1 && !leg2 && leg3 && leg4) MAP[x][y][2] = 0;
					else if (!leg1 && leg2 && leg3 && leg4) MAP[x][y][2] = 1;
					else if (leg1 && leg2 && leg3 && leg4) MAP[x][y][2] = 0
				}
			}
		}
	}
	for (var x = 0; x < 40; x++) {
		for (var y = 0; y < 40; y++) {
			if (MAP[x][y][2] != 0) {
				var legPart;
				var legHeight;
				if (MAP[x][y][1] == "P") legHeight = MAP[x][y][0];
				else legHeight = MAP[x][y][0] + MAP[x][y][3];
				switch (legHeight) {
					case 20:
						legPart = MaxPart(UAP020(true), null);
						break;
					case 30:
						legPart = MaxPart(UAP030(true), null);
						break;
					case 40:
						legPart = MaxPart(UAP040(true), null);
						break;
					case 50:
						legPart = MaxPart(UAP050(true), null);
						break;
					case 60:
						legPart = MaxPart(UAP060(true), null);
						break;
					case 70:
						legPart = MaxPart(UAP070(true), null);
						break;
					case 80:
						legPart = MaxPart(UAP080(true), null);
						break;
					case 90:
						legPart = MaxPart(UAP090(true), null);
						break;
					case 100:
						legPart = MaxPart(UAP100(true), null);
						break;
					case 110:
						legPart = MaxPart(UAP110(true), null);
						break;
					default:
						break
				}
				partsContainer.addChild(legPart);
				legs.push(legPart)
			}
		}
	}
}

function printMAP() {
	for (var x = 0; x < 40; x++) {
		var string = "|";
		for (var y = 0; y < 40; y++) {
			if (MAP[y][x] != " X ") {
				if (MAP[y][x] == 0) string += "0";
				if (MAP[y][x] < 100) string += "0"
			}
			string += MAP[y][x] + "|"
		}
		console.log(string)
	}
}

function addHeightKeys() {
	var height20key = new createjs.Container;
	height20key.x = 10;
	height20key.y = 700;
	stage.addChild(height20key);
	var height20keyBackground = new createjs.Shape;
	height20keyBackground.graphics.beginFill("rgba(200,200,200,0.90)").drawRect(0, 0, 120, 40);
	var height20keyBlock = new createjs.Shape;
	height20keyBlock.graphics.beginFill(height20Tint).drawRect(10, 10, 20, 20);
	height20key.addChild(height20keyBlock);
	var height20keyText = new createjs.Text('20" Height', "12px sans-serif", "#202020");
	height20keyText.y = 15;
	height20keyText.x = 40;
	height20key.addChild(height20keyText);
	height20key.visible = false;
	heightKeys.push(height20key);
	var height30key = new createjs.Container;
	height30key.x = 10;
	height30key.y = 660;
	stage.addChild(height30key);
	var height30keyBackground = new createjs.Shape;
	height30keyBackground.graphics.beginFill("rgba(200,200,200,0.90)").drawRect(0, 0, 120, 40);
	var height30keyBlock = new createjs.Shape;
	height30keyBlock.graphics.beginFill(height30Tint).drawRect(10, 10, 20, 20);
	height30key.addChild(height30keyBlock);
	var height30keyText = new createjs.Text('30" Height', "12px sans-serif", "#202020");
	height30keyText.y = 15;
	height30keyText.x = 40;
	height30key.addChild(height30keyText);
	height30key.visible = false;
	heightKeys.push(height30key);
	var height40key = new createjs.Container;
	height40key.x = 10;
	height40key.y = 620;
	stage.addChild(height40key);
	var height40keyBackground = new createjs.Shape;
	height40keyBackground.graphics.beginFill("rgba(200,200,200,0.90)").drawRect(0, 0, 120, 40);
	var height40keyBlock = new createjs.Shape;
	height40keyBlock.graphics.beginFill(height40Tint).drawRect(10, 10, 20, 20);
	height40key.addChild(height40keyBlock);
	var height40keyText = new createjs.Text('40" Height', "12px sans-serif", "#202020");
	height40keyText.y = 15;
	height40keyText.x = 40;
	height40key.addChild(height40keyText);
	height40key.visible = false;
	heightKeys.push(height40key);
	var height50key = new createjs.Container;
	height50key.x = 10;
	height50key.y = 580;
	stage.addChild(height50key);
	var height50keyBackground = new createjs.Shape;
	height50keyBackground.graphics.beginFill("rgba(200,200,200,0.90)").drawRect(0, 0, 120, 40);
	var height50keyBlock = new createjs.Shape;
	height50keyBlock.graphics.beginFill(height50Tint).drawRect(10, 10, 20, 20);
	height50key.addChild(height50keyBlock);
	var height50keyText = new createjs.Text('50" Height', "12px sans-serif", "#202020");
	height50keyText.y = 15;
	height50keyText.x = 40;
	height50key.addChild(height50keyText);
	height50key.visible = false;
	heightKeys.push(height50key);
	var height60key = new createjs.Container;
	height60key.x = 10;
	height60key.y = 540;
	stage.addChild(height60key);
	var height60keyBackground = new createjs.Shape;
	height60keyBackground.graphics.beginFill("rgba(200,200,200,0.90)").drawRect(0, 0, 120, 40);
	var height60keyBlock = new createjs.Shape;
	height60keyBlock.graphics.beginFill(height60Tint).drawRect(10, 10, 20, 20);
	height60key.addChild(height60keyBlock);
	var height60keyText = new createjs.Text('60" Height', "12px sans-serif", "#202020");
	height60keyText.y = 15;
	height60keyText.x = 40;
	height60key.addChild(height60keyText);
	height60key.visible = false;
	heightKeys.push(height60key);
	var height70key = new createjs.Container;
	height70key.x = 10;
	height70key.y = 500;
	stage.addChild(height70key);
	var height70keyBackground = new createjs.Shape;
	height70keyBackground.graphics.beginFill("rgba(200,200,200,0.90)").drawRect(0, 0, 120, 40);
	var height70keyBlock = new createjs.Shape;
	height70keyBlock.graphics.beginFill(height70Tint).drawRect(10, 10, 20, 20);
	height70key.addChild(height70keyBlock);
	var height70keyText = new createjs.Text('70" Height', "12px sans-serif", "#202020");
	height70keyText.y = 15;
	height70keyText.x = 40;
	height70key.addChild(height70keyText);
	height70key.visible = false;
	heightKeys.push(height70key);
	var height80key = new createjs.Container;
	height80key.x = 10;
	height80key.y = 460;
	stage.addChild(height80key);
	var height80keyBackground = new createjs.Shape;
	height80keyBackground.graphics.beginFill("rgba(200,200,200,0.90)").drawRect(0, 0, 120, 40);
	var height80keyBlock = new createjs.Shape;
	height80keyBlock.graphics.beginFill(height80Tint).drawRect(10, 10, 20, 20);
	height80key.addChild(height80keyBlock);
	var height80keyText = new createjs.Text('80" Height', "12px sans-serif", "#202020");
	height80keyText.y = 15;
	height80keyText.x = 40;
	height80key.addChild(height80keyText);
	height80key.visible = false;
	heightKeys.push(height80key);
	var height90key = new createjs.Container;
	height90key.x = 10;
	height90key.y = 420;
	stage.addChild(height90key);
	var height90keyBackground = new createjs.Shape;
	height90keyBackground.graphics.beginFill("rgba(200,200,200,0.90)").drawRect(0, 0, 120, 40);
	var height90keyBlock = new createjs.Shape;
	height90keyBlock.graphics.beginFill(height90Tint).drawRect(10, 10, 20, 20);
	height90key.addChild(height90keyBlock);
	var height90keyText = new createjs.Text('90" Height', "12px sans-serif", "#202020");
	height90keyText.y = 15;
	height90keyText.x = 40;
	height90key.addChild(height90keyText);
	height90key.visible = false;
	heightKeys.push(height90key);
	var height100key = new createjs.Container;
	height100key.x = 10;
	height100key.y = 380;
	stage.addChild(height100key);
	var height100keyBackground = new createjs.Shape;
	height100keyBackground.graphics.beginFill("rgba(200,200,200,0.90)").drawRect(0, 0, 120, 40);
	var height100keyBlock = new createjs.Shape;
	height100keyBlock.graphics.beginFill(height100Tint).drawRect(10, 10, 20, 20);
	height100key.addChild(height100keyBlock);
	var height100keyText = new createjs.Text('100" Height', "12px sans-serif", "#202020");
	height100keyText.y = 15;
	height100keyText.x = 40;
	height100key.addChild(height100keyText);
	height100key.visible = false;
	heightKeys.push(height100key);
	var height110key = new createjs.Container;
	height110key.x = 10;
	height110key.y = 340;
	stage.addChild(height110key);
	var height110keyBackground = new createjs.Shape;
	height110keyBackground.graphics.beginFill("rgba(200,200,200,0.90)").drawRect(0, 0, 120, 40);
	var height110keyBlock = new createjs.Shape;
	height110keyBlock.graphics.beginFill(height110Tint).drawRect(10, 10, 20, 20);
	height110key.addChild(height110keyBlock);
	var height110keyText = new createjs.Text('110" Height', "12px sans-serif", "#202020");
	height110keyText.y = 15;
	height110keyText.x = 40;
	height110key.addChild(height110keyText);
	height110key.visible = false;
	heightKeys.push(height110key)
}

function attachmentPointClicked(event) {
	var point = event.target;
	if (point == LAST_CLICKED_ATTACHMENT_POINT) return;
	if (LAST_CLICKED_MAX_ACCESS_PART != null) LAST_CLICKED_MAX_ACCESS_PART.highlight.visible = false;
	for (var i = 0; i < point.parent.attachmentCount; i++) {
		point.parent.attachmentSlots[i].graphics.beginFill("#fff").setStrokeStyle(8, "round").beginStroke("rgba(255,192,0,1)").drawRect(-146, 73, 293, 73)
	}
	partsMenuContainerText.text = "Select a part to attach";
	toolTipText.text = "Select a part from the menu on the right";
	point.graphics.beginFill("rgba(255,192,0,1)").drawRect(-146, 73, 293, 73);
	var spaces = calculateGridSpace(point);
	stage.addChild(MaxSelectPartMenu(point.parent, point, spaces != 0 && point.parent.partData.platform, spaces == 0 && point.parent.partData.platform, spaces));
	LAST_CLICKED_MAX_ACCESS_PART.highlight.visible = false;
	LAST_CLICKED_ATTACHMENT_POINT = point;
	maxRemoveButton.visible = false
}

function maxHandleMouseOver(event) {
	var target = partsContainer.getChildByName(event.target.name);
	target.highlight.visible = true;
	if (LAST_CLICKED_MAX_ACCESS_PART != target) toolTipText.text = "Click to select this part"
}

function maxHandleMouseOut(event) {
	var target = partsContainer.getChildByName(event.target.name);
	if (LAST_CLICKED_MAX_ACCESS_PART != target || LAST_CLICKED_ATTACHMENT_POINT != null) target.highlight.visible = false;
	if ((LAST_CLICKED_MAX_ACCESS_PART == null || !LAST_CLICKED_MAX_ACCESS_PART.highlight.visible) && LAST_CLICKED_ATTACHMENT_POINT == null || LAST_CLICKED_MAX_ACCESS_PART.attachmentSlotsUsed == LAST_CLICKED_MAX_ACCESS_PART.attachmentCount) toolTipText.text = "Mouse over a part";
	else if (LAST_CLICKED_ATTACHMENT_POINT == null) toolTipText.text = "Mouse over an attachment point";
	else toolTipText.text = "Select a part from the menu on the right"
}

function maxHandleMouseOverAttachmentPoint(event) {
	if (LAST_CLICKED_ATTACHMENT_POINT != event.target) toolTipText.text = "Click to select this attachment point"
}

function maxHandleMouseOutAttachmentPoint(event) {
	if (LAST_CLICKED_ATTACHMENT_POINT == null) toolTipText.text = "Mouse over an attachment point";
	else toolTipText.text = "Select a part from the menu on the right"
}

function autoAddRails(all) {
	var preExistingParts = new Array;
	for (var i = 0; i < partsContainer.getNumChildren(); i++) {
		if (partsContainer.getChildAt(i).partData.platform && (all || partsContainer.getChildAt(i).height >= 50)) {
			preExistingParts.push(partsContainer.getChildAt(i))
		}
	}
	for (var i = 0; i < preExistingParts.length; i++) {
		var platform = preExistingParts[i];
		if (platform.attachmentSlotsUsed == platform.attachmentCount) continue;
		for (var k = 0; k < platform.attachmentCount; k++) {
			if (platform.attachmentSlots[platform.attachmentSlotIndices[k]].filled) continue;
			if (MAP[platform.attachmentSlots[platform.attachmentSlotIndices[k]].coordinates.x][platform.attachmentSlots[platform.attachmentSlotIndices[k]].coordinates.y][1] == "E") {
				var newPart = MaxPart(UAPHR1(false), platform.attachmentSlots[platform.attachmentSlotIndices[k]]);
				partsContainer.addChild(newPart);
				autoAddedRails.push(newPart)
			}
		}
	}
	console.log("*********");
	console.log(autoAddedRails);
	angularUpdate(parts)
}

function removeAutoAddedRails() {
	console.log("HIT");
	console.log(autoAddedRails.length);
	for (var i = 0; i < autoAddedRails.length; i++) {
		removePart(autoAddedRails[i], false)
	}
	autoAddedRails = new Array;
	console.log(autoAddedRails)
}

function calculateGridSpace(attachmentPoint) {
	var startPoint = attachmentPoint.coordinates;
	var openSpaces = 0;
	var xCount = 0;
	var x = startPoint.x;
	var y = startPoint.y;
	switch (attachmentPoint.rotOffset) {
		case 0:
			while (y > -1) {
				if (MAP[x][y][0] == 0 && MAP[x][y][1] == "E" || MAP[x][y][0] == " X " && xCount == 0) {
					openSpaces++;
					if (MAP[x][y][0] == " X ") xCount++
				} else if (MAP[x][y][0] == 0 && MAP[x][y][1] == "L" || MAP[x][y][0] != attachmentPoint.parent.height) {
					openSpaces--;
					break
				} else break;
				y--
			}
			break;
		case -90:
			while (x > -1) {
				if (MAP[x][y][0] == 0 && MAP[x][y][1] == "E" || MAP[x][y][0] == " X " && xCount == 0) {
					openSpaces++;
					if (MAP[x][y][0] == " X ") xCount++
				} else if (MAP[x][y][0] == 0 && MAP[x][y][1] == "L" || MAP[x][y][0] != attachmentPoint.parent.height) {
					openSpaces--;
					break
				} else break;
				x--
			}
			break;
		case 90:
			while (x < MAP.length) {
				if (MAP[x][y][0] == 0 && MAP[x][y][1] == "E" || MAP[x][y][0] == " X " && xCount == 0) {
					openSpaces++;
					if (MAP[x][y][0] == " X ") xCount++
				} else if (MAP[x][y][0] == 0 && MAP[x][y][1] == "L" || MAP[x][y][0] != attachmentPoint.parent.height) {
					openSpaces--;
					break
				} else break;
				x++
			}
			break;
		case 180:
			while (y < MAP[x].length) {
				if (MAP[x][y][0] == 0 && MAP[x][y][1] == "E" || MAP[x][y][0] == " X " && xCount == 0) {
					openSpaces++;
					if (MAP[x][y][0] == " X ") xCount++
				} else if (MAP[x][y][0] == 0 && MAP[x][y][1] == "L" || MAP[x][y][0] != attachmentPoint.parent.height) {
					openSpaces--;
					break
				} else break;
				y++
			}
			break;
		default:
			break
	}
	if (openSpaces == 1 && xCount == 1 || openSpaces < 0) return 0;
	else if (openSpaces == 2 && xCount == 1) return 1;
	else return openSpaces
}

function updateTooltipPosition() {
	if (stage.mouseInBounds && stage.getChildIndex(maxTopDownView) == -1 && !stage.getChildByName("RAILS_POPUP")) {
		toolTipText.visible = true;
		toolTipText.x = stage.mouseX + 10;
		toolTipText.y = stage.mouseY + 10
	} else toolTipText.visible = false
}
var maxRemoveButton;
var scrollbar;

function MaxSelectPartMenu(part, attachmentPoint, autoAddLadders, railsOnly, maxLength) {
	refreshParts();
	selectPartMenu = new createjs.Container;
	selectPartMenu.originPart = part;
	selectPartMenu.attachmentPoint = attachmentPoint;
	originalPart = part;
	selectPartMenu.name = "SELECT_PART_MENU";
	if (partsMenuContainer.getChildByName("PART_BUTTONS_CONTAINER")) {
		partsMenuContainer.removeChild(partsMenuContainer.getChildByName("PART_BUTTONS_CONTAINER"))
	}
	var partButtonsContainer = new createjs.Container;
	partButtonsContainer.name = "PART_BUTTONS_CONTAINER";
	stage.getChildByName("PARTS_MENU_CONTAINER").addChild(partButtonsContainer);
	addMaxPartButtons(part, partButtonsContainer, attachmentPoint.parent.height, autoAddLadders, railsOnly, maxLength);
	if (partButtonsContainer.getNumChildren() > 0) {
		partsMenuContainerText.text = "Select a part to add";
		if (partButtonsContainer.getNumChildren() > 10) DrawScrollBar(partButtonsContainer)
	} else {
		partsMenuContainerText.text = ""
	}
	return selectPartMenu
}

function addMaxRemoveButton() {
	maxRemoveButton = new createjs.Container;
	maxRemoveButton.x = 0;
	maxRemoveButton.y = 640;
	maxRemoveButton.name = "REMOVE_BUTTON";
	partsMenuContainer.addChild(maxRemoveButton);
	var removeButtonShape = new createjs.Shape;
	removeButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 260, 60, 5);
	maxRemoveButton.addChild(removeButtonShape);
	var removeButtonText = new createjs.Text("Remove Selected Part", "20px sans-serif", "#FFF");
	removeButtonText.textAlign = "center";
	removeButtonText.x = 130;
	removeButtonText.y = 20;
	maxRemoveButton.addChild(removeButtonText);
	var removeButtonHelper = new createjs.ButtonHelper(maxRemoveButton);
	maxRemoveButton.addEventListener("click", handleMaxRemoveClicked);
	maxRemoveButton.visible = showRemoveButton
}

function addMaxPartButtons(part, mselectPartMenu, cheight, autoAddLadders, railsOnly, maxLength) {
	var x = y = 0;
	if (railsOnly == true) {
		newPart = UAPHR1(true);
		var partButton = new createjs.Container;
		partButton.part = newPart;
		partButton.x = 10;
		partButton.y = 20;
		mselectPartMenu.addChild(partButton);
		var partButtonShape = new createjs.Shape;
		partButtonShape.graphics.beginFill("#FFF").beginStroke("#e17a0f").drawRoundRect(0, 0, 100, 90, 5);
		partButton.addChild(partButtonShape);
		var partButtonText = new createjs.Text(newPart.name, "12px sans-serif", "#444");
		partButtonText.textAlign = "center";
		partButtonText.x = 50;
		partButtonText.y = 92;
		partButton.addChild(partButtonText);
		var partImg = new createjs.Bitmap(newPart.sprite);
		partImg.regX = newPart.bitmapCenter.x;
		partImg.regY = newPart.bitmapCenter.y;
		partImg.scaleX = partImg.scaleY = .15;
		partImg.x = 50;
		partImg.y = 30;
		partButton.addChild(partImg);
		mselectPartMenu.addChild(partButton);
		var partButtonHelper = new createjs.ButtonHelper(partButton);
		partButton.addEventListener("click", handleMaxPartSelected)
	} else {
		var possibleParts;
		if (autoAddLadders) {
			possibleParts = part.partData.connectableParts.concat(MA_LADDERS(cheight))
		} else possibleParts = part.partData.connectableParts;
		for (var i = 0; i < possibleParts.length; i++) {
			newPart = PARTS[possibleParts[i]];
			if (!newPart.platform && !newPart.rails && newPart.gridSize.y > maxLength - 1) continue;
			var partButton = new createjs.Container;
			partButton.part = newPart;
			partButton.x = x * 125 + 10;
			partButton.y = y * 135 + 25;
			mselectPartMenu.addChild(partButton);
			var partButtonShape = new createjs.Shape;
			partButtonShape.graphics.beginFill("#FFF").beginStroke("#e17a0f").drawRoundRect(0, 0, 100, 90, 5);
			partButton.addChild(partButtonShape);
			var partButtonText = new createjs.Text(newPart.name, "12px sans-serif", "#444");
			partButtonText.textAlign = "center";
			partButtonText.x = 50;
			partButtonText.y = 100;
			partButton.addChild(partButtonText);
			var partImg = new createjs.Bitmap(newPart.sprite);
			partImg.regX = newPart.bitmapCenter.x;
			partImg.regY = newPart.bitmapCenter.y;
			partImg.scaleX = partImg.scaleY = .15 / newPart.gridSize.y;
			partImg.x = 50;
			partImg.y = 50;
			partButton.addChild(partImg);
			mselectPartMenu.addChild(partButton);
			mselectPartMenu.setChildIndex(partButton, 0);
			var partButtonHelper = new createjs.ButtonHelper(partButton);
			partButton.addEventListener("click", handleMaxPartSelected);
			partButton.addEventListener("mouseover", handleMaxPartOver);
			partButton.addEventListener("mouseout", handleMaxPartOut);
			x++;
			if (x == 2) {
				x = 0;
				y++
			}
		}
	}
	partsMenuContainer.setChildIndex(mselectPartMenu, 1);
	partsMenuContainer.setChildIndex(upperPartsMenuClip, partsMenuContainer.getNumChildren());
	partsMenuContainer.setChildIndex(partsMenuContainerText, partsMenuContainer.getNumChildren())
}

function DrawScrollBar(partButtonsContainer) {
	if (scrollbar != null) {
		scrollbar.removeAllChildren();
		partsMenuContainer.removeChild(scrollbar);
		scrollbar = null
	}
	scrollbar = new createjs.Container;
	var scrollbarOutline = new createjs.Shape;
	scrollbarOutline.graphics.beginStroke("#e17a0f").drawRoundRect(-2, 10, 15, 690, 5);
	scrollbar.addChild(scrollbarOutline);
	var scrollbarBar = new createjs.Shape;
	scrollbarBar.name = "scrollbarBar";
	scrollbarBar.graphics.beginFill("#444").drawRoundRect(0, 12, 11, 300, 5);
	scrollbar.addChild(scrollbarBar);
	scrollbarBar.on("mousedown", function(evt) {
		this.offset = {
			x: this.x - evt.stageX,
			y: this.y - evt.stageY
		}
	});
	scrollbarBar.on("pressmove", function(evt) {
		this.y = evt.stageY + this.offset.y;
		this.y = Math.min(Math.max(0, this.y), 386);
		partButtonsContainer.y = -this.y
	});
	scrollbar.x = 245;
	partsMenuContainer.setBounds(0, 0, 100, 700);
	partsMenuContainer.addChild(scrollbar)
}

function handleMaxRemoveClicked(event) {
	removePart(LAST_CLICKED_MAX_ACCESS_PART, true)
}

function removePart(part, updateText) {
	partsContainer.removeChild(partsContainer.getChildByName(part.name));
	parts.splice(parts.indexOf(part.name), 1);
	if (part.partData.platform) {
		for (var x = 0; x < part.partData.gridSize.x; x++) {
			for (var y = 0; y < part.partData.gridSize.y; y++) {
				MAP[part.coordinates.x + x][part.coordinates.y - y][0] = 0;
				MAP[part.coordinates.x + x][part.coordinates.y - y][1] = "E"
			}
		}
	} else if (part.partData.ladder) {
		console.log(part);
		switch (part.mountPoint.rotation) {
			case 0:
				for (var x = 0; x < part.partData.gridSize.x; x++) {
					for (var y = 0; y < part.partData.gridSize.y; y++) {
						MAP[part.coordinates.x + x][part.coordinates.y - y][0] = 0;
						MAP[part.coordinates.x + x][part.coordinates.y - y][1] = "E"
					}
				}
				break;
			case -90:
				for (var x = 0; x < part.partData.gridSize.x; x++) {
					for (var y = 0; y < part.partData.gridSize.y; y++) {
						MAP[part.coordinates.x - y][part.coordinates.y - x][0] = 0;
						MAP[part.coordinates.x - y][part.coordinates.y - x][1] = "E"
					}
				}
				break;
			case 90:
				for (var x = 0; x < part.partData.gridSize.x; x++) {
					for (var y = 0; y < part.partData.gridSize.y; y++) {
						console.log(y);
						MAP[part.coordinates.x + y][part.coordinates.y - x][0] = 0;
						MAP[part.coordinates.x + y][part.coordinates.y - x][1] = "E"
					}
				}
				break;
			case 180:
				for (var x = 0; x < part.partData.gridSize.x; x++) {
					for (var y = 0; y < part.partData.gridSize.y; y++) {
						MAP[part.coordinates.x + x][part.coordinates.y + y][0] = 0;
						MAP[part.coordinates.x + x][part.coordinates.y + y][1] = "E"
					}
				}
				break;
			default:
				break
		}
	}
	for (var i = 0; i < part.parentPartAttachmentPoint.parent.attachmentCount; i++) {
		var k = part.parentPartAttachmentPoint.parent.attachmentSlotIndices[i];
		if (part.parentPartAttachmentPoint.parent.attachmentSlots[i] == part.parentPartAttachmentPoint) part.parentPartAttachmentPoint.parent.attachmentSlots[i].filled = false
	}
	part.parentPartAttachmentPoint.parent.attachmentSlotsUsed--;
	updateMap();
	printMAP();
	updateZOrder();
	angularUpdate(parts);
	if (updateText) {
		maxRemoveButton.visible = false;
		partsMenuContainerText.text = "Select a part to build off of";
		toolTipText.text = "Mouse over a part";
		if (scrollbar != null) {
			scrollbar.removeAllChildren();
			partsMenuContainer.removeChild(scrollbar);
			scrollbar = null
		}
		LAST_CLICKED_ATTACHMENT_POINT = null;
		LAST_CLICKED_MAX_ACCESS_PART = null
	}
}

function handleMaxPartSelected(event) {
	newPart = MaxPart(event.target.parent.part, selectPartMenu.attachmentPoint);
	partsContainer.addChild(newPart);
	if (partsMenuContainer.getChildByName("PART_BUTTONS_CONTAINER")) {
		partsMenuContainer.removeChild(partsMenuContainer.getChildByName("PART_BUTTONS_CONTAINER"))
	}
	if (scrollbar != null) {
		scrollbar.removeAllChildren();
		partsMenuContainer.removeChild(scrollbar);
		scrollbar = null
	}
	var partButtonsContainer = new createjs.Container;
	angularUpdate(parts);
	partsMenuContainerText.text = "Select a part to build off of";
	toolTipText.text = "Mouse over a part";
	LAST_CLICKED_ATTACHMENT_POINT = null;
	LAST_CLICKED_MAX_ACCESS_PART = null
}

function handleMaxPartOver(event) {
	toolTipText.text = "Click to add this part"
}

function handleMaxPartOut(event) {
	if (LAST_CLICKED_ATTACHMENT_POINT != null) toolTipText.text = "Select a part from the menu on the right"
}

function scrollPartsBar(delta) {
	if (scrollbar != null && scrollbar.getChildByName("scrollbarBar") != null) {
		bar = scrollbar.getChildByName("scrollbarBar");
		bar.y = Math.min(Math.max(0, bar.y - 25 * delta), 386);
		scrollbar.parent.getChildByName("PART_BUTTONS_CONTAINER").y = -bar.y
	}
}

function StartMenu() {
	var startMenu = new createjs.Container;
	var triarcLogo = new createjs.Bitmap("assets/TriArcLogo.jpg");
	triarcLogo.x = -390;
	triarcLogo.y = 720;
	startMenu.addChild(triarcLogo);
	var graingerLogo = new createjs.Bitmap("assets/GraingerLogo.jpg");
	graingerLogo.x = 160;
	graingerLogo.y = 720;
	startMenu.addChild(graingerLogo);
	var udesignLogo = new createjs.Bitmap("assets/UDesignLogo.jpg");
	udesignLogo.x = -178;
	udesignLogo.y = 30;
	startMenu.addChild(udesignLogo);
	var udesignLogoBorder = new createjs.Shape;
	udesignLogoBorder.graphics.beginStroke("#e17a0f").drawRoundRect(-184, 20, 368, 110, 5);
	startMenu.addChild(udesignLogoBorder);
	var startInstructionText = new createjs.Text("Click a Product to Begin", "30px sans-serif", "#404040");
	startInstructionText.textAlign = "center";
	startInstructionText.x = 0;
	startInstructionText.y = 160;
	startMenu.addChild(startInstructionText);
	var rooftopButton = new createjs.Container;
	rooftopButton.x = -325;
	rooftopButton.y = 475;
	startMenu.addChild(rooftopButton);
	var rooftopButtonBorder = new createjs.Shape;
	rooftopButtonBorder.graphics.beginStroke("#e17a0f").drawRoundRect(0, -180, 200, 210, 5);
	rooftopButton.addChild(rooftopButtonBorder);
	var rooftopButtonImage = new createjs.Bitmap("assets/rooftopicon.jpg");
	rooftopButtonImage.y = -175;
	rooftopButtonImage.x = 22;
	rooftopButton.addChild(rooftopButtonImage);
	var rooftopButtonShape = new createjs.Shape;
	rooftopButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 200, 40, 5);
	rooftopButton.addChild(rooftopButtonShape);
	var rooftopButtonText = new createjs.Text("Rooftop Platform", "20px sans-serif", "#fff");
	rooftopButtonText.textAlign = "center";
	rooftopButtonText.y = 10;
	rooftopButtonText.x = 100;
	rooftopButton.addChild(rooftopButtonText);
	var rooftopButtonHelper = new createjs.ButtonHelper(rooftopButton);
	rooftopButton.addEventListener("click", handleRooftopButtonClick);
	var crossoverButton = new createjs.Container;
	crossoverButton.x = -100;
	crossoverButton.y = 475;
	startMenu.addChild(crossoverButton);
	var crossoverButtonBorder = new createjs.Shape;
	crossoverButtonBorder.graphics.beginStroke("#e17a0f").drawRoundRect(0, -180, 200, 220, 5);
	crossoverButton.addChild(crossoverButtonBorder);
	var crossoverButtonImage = new createjs.Bitmap("assets/crossovericon.jpg");
	crossoverButtonImage.x = 10;
	crossoverButtonImage.y = -175;
	crossoverButton.addChild(crossoverButtonImage);
	var crossoverButtonShape = new createjs.Shape;
	crossoverButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 200, 40, 5);
	crossoverButton.addChild(crossoverButtonShape);
	var crossoverButtonText = new createjs.Text("Crossover Ladder", "20px sans-serif", "#fff");
	crossoverButtonText.textAlign = "center";
	crossoverButtonText.y = 10;
	crossoverButtonText.x = 100;
	crossoverButton.addChild(crossoverButtonText);
	var crossoverButtonHelper = new createjs.ButtonHelper(crossoverButton);
	crossoverButton.addEventListener("click", handleCrossoverButtonClick);
	var maxaccessButton = new createjs.Container;
	maxaccessButton.x = 125;
	maxaccessButton.y = 475;
	startMenu.addChild(maxaccessButton);
	var maxaccessButtonBorder = new createjs.Shape;
	maxaccessButtonBorder.graphics.beginStroke("#e17a0f").drawRoundRect(0, -180, 200, 220, 5);
	maxaccessButton.addChild(maxaccessButtonBorder);
	var maxaccessButtonImage = new createjs.Bitmap("assets/maxaccessicon.JPG");
	maxaccessButtonImage.x = 10;
	maxaccessButtonImage.y = -175;
	maxaccessButton.addChild(maxaccessButtonImage);
	var maxaccessButtonShape = new createjs.Shape;
	maxaccessButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 200, 40, 5);
	maxaccessButton.addChild(maxaccessButtonShape);
	var maxaccessButtonText = new createjs.Text("Max-Access Ladder", "20px sans-serif", "#fff");
	maxaccessButtonText.textAlign = "center";
	maxaccessButtonText.y = 10;
	maxaccessButtonText.x = 100;
	maxaccessButton.addChild(maxaccessButtonText);
	var maxaccessButtonHelper = new createjs.ButtonHelper(maxaccessButton);
	maxaccessButton.addEventListener("click", handlemaxaccessButtonClick);
	return startMenu
}

function handleRooftopButtonClick(event) {
	setSystem(LadderType.Rooftop);
	showHeightMenu()
}

function handleCrossoverButtonClick(event) {
	setSystem(LadderType.Crossover);
	showHeightMenu()
}

function handlemaxaccessButtonClick(event) {
	setSystem(LadderType.MaxAccess);
	showHeightMenu()
}
var stepOneHighlightShape;
var stepTwoHighlightShape;
var stepThreeHighlightShape;
var stepFourHighlightShape;
var stepFiveHighlightShape;
var stepSixHighlightShape;
var stepSevenHighlightShape;
var stepEightHighlightShape;
var stepNineHighlightShape;
var stepTenHighlightShape;
var stepElevenHighlightShape;
var twentyButtonShape;
var thirtyButtonShape;
var fortyButtonShape;
var fiftyButtonShape;
var sixtyButtonShape;
var seventyButtonShape;
var eightyButtonShape;
var ninetyButtonShape;
var hundredButtonShape;
var hundredTenButtonShape;

function RT_HeightMenu() {
	var heightMenu = new createjs.Container;
	var triarcLogo = new createjs.Bitmap("assets/TriArcLogo.jpg");
	triarcLogo.x = -390;
	triarcLogo.y = 720;
	heightMenu.addChild(triarcLogo);
	var graingerLogo = new createjs.Bitmap("assets/GraingerLogo.jpg");
	graingerLogo.x = 160;
	graingerLogo.y = 720;
	heightMenu.addChild(graingerLogo);
	var udesignLogo = new createjs.Bitmap("assets/UDesignLogo.jpg");
	udesignLogo.x = -178;
	udesignLogo.y = 30;
	heightMenu.addChild(udesignLogo);
	var udesignLogoBorder = new createjs.Shape;
	udesignLogoBorder.graphics.beginStroke("#e17a0f").drawRoundRect(-184, 20, 368, 110, 5);
	heightMenu.addChild(udesignLogoBorder);
	var heightInstructionText = new createjs.Text("Select a Ladder", "30px sans-serif", "#444");
	heightInstructionText.textAlign = "center";
	heightInstructionText.x = 200;
	heightInstructionText.y = 220;
	heightMenu.addChild(heightInstructionText);
	var ladderPictureContainer = new createjs.Container;
	ladderPictureContainer.x = -350;
	ladderPictureContainer.y = 140;
	heightMenu.addChild(ladderPictureContainer);
	var ladderPicture = new createjs.Bitmap("assets/rooftopSelectLadder.png");
	ladderPictureContainer.addChild(ladderPicture);
	var twentyButton = new createjs.Container;
	twentyButton.x = 50;
	twentyButton.y = 560;
	heightMenu.addChild(twentyButton);
	twentyButtonShape = new createjs.Shape;
	twentyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	twentyButton.addChild(twentyButtonShape);
	var twentyButtonText = new createjs.Text('2 Step Ladder\n20" Platform Height / 17.5" Clearance', "16px sans-serif", "#fff");
	twentyButtonText.textAlign = "center";
	twentyButtonText.y = 2;
	twentyButtonText.x = 150;
	twentyButton.addChild(twentyButtonText);
	var twentyButtonHelper = new createjs.ButtonHelper(twentyButton);
	twentyButton.addEventListener("mouseover", handleTwentyButtonMouseOver);
	twentyButton.addEventListener("mouseout", handleTwentyButtonMouseOut);
	twentyButton.addEventListener("click", handleTwentyButtonClick);
	var thirtyButton = new createjs.Container;
	thirtyButton.x = 50;
	thirtyButton.y = 500;
	heightMenu.addChild(thirtyButton);
	thirtyButtonShape = new createjs.Shape;
	thirtyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	thirtyButton.addChild(thirtyButtonShape);
	var thirtyButtonText = new createjs.Text('3 Step Ladder\n30" Platform Height / 27.5" Clearance', "16px sans-serif", "#fff");
	thirtyButtonText.textAlign = "center";
	thirtyButtonText.y = 2;
	thirtyButtonText.x = 150;
	thirtyButton.addChild(thirtyButtonText);
	var thirtyButtonHelper = new createjs.ButtonHelper(thirtyButton);
	thirtyButton.addEventListener("mouseover", handleThirtyButtonMouseOver);
	thirtyButton.addEventListener("mouseout", handleThirtyButtonMouseOut);
	thirtyButton.addEventListener("click", handleThirtyButtonClick);
	var fortyButton = new createjs.Container;
	fortyButton.x = 50;
	fortyButton.y = 440;
	heightMenu.addChild(fortyButton);
	fortyButtonShape = new createjs.Shape;
	fortyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	fortyButton.addChild(fortyButtonShape);
	var fortyButtonText = new createjs.Text('4 Step Ladder\n40" Platform Height / 37.5" Clearance', "16px sans-serif", "#fff");
	fortyButtonText.textAlign = "center";
	fortyButtonText.y = 2;
	fortyButtonText.x = 150;
	fortyButton.addChild(fortyButtonText);
	var fortyButtonHelper = new createjs.ButtonHelper(fortyButton);
	fortyButton.addEventListener("mouseover", handleFortyButtonMouseOver);
	fortyButton.addEventListener("mouseout", handleFortyButtonMouseOut);
	fortyButton.addEventListener("click", handleFortyButtonClick);
	var fiftyButton = new createjs.Container;
	fiftyButton.x = 50;
	fiftyButton.y = 380;
	heightMenu.addChild(fiftyButton);
	fiftyButtonShape = new createjs.Shape;
	fiftyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	fiftyButton.addChild(fiftyButtonShape);
	var fiftyButtonText = new createjs.Text('5 Step Ladder\n50" Platform Height / 47.5" Clearance', "16px sans-serif", "#fff");
	fiftyButtonText.textAlign = "center";
	fiftyButtonText.y = 2;
	fiftyButtonText.x = 150;
	fiftyButton.addChild(fiftyButtonText);
	var fiftyButtonHelper = new createjs.ButtonHelper(fiftyButton);
	fiftyButton.addEventListener("mouseover", handleFiftyButtonMouseOver);
	fiftyButton.addEventListener("mouseout", handleFiftyButtonMouseOut);
	fiftyButton.addEventListener("click", handleFiftyButtonClick);
	var sixtyButton = new createjs.Container;
	sixtyButton.x = 50;
	sixtyButton.y = 320;
	heightMenu.addChild(sixtyButton);
	sixtyButtonShape = new createjs.Shape;
	sixtyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	sixtyButton.addChild(sixtyButtonShape);
	var sixtyButtonText = new createjs.Text('6 Step Ladder\n60" Platform Height / 57.5" Clearance', "16px sans-serif", "#fff");
	sixtyButtonText.textAlign = "center";
	sixtyButtonText.y = 2;
	sixtyButtonText.x = 150;
	sixtyButton.addChild(sixtyButtonText);
	var sixtyButtonHelper = new createjs.ButtonHelper(sixtyButton);
	sixtyButton.addEventListener("mouseover", handleSixtyButtonMouseOver);
	sixtyButton.addEventListener("mouseout", handleSixtyButtonMouseOut);
	sixtyButton.addEventListener("click", handleSixtyButtonClick);
	stepOneHighlightShape = new createjs.Shape;
	stepOneHighlightShape.graphics.beginFill("rgba(255,128,0,0.6)");
	stepOneHighlightShape.graphics.moveTo(55, 518);
	stepOneHighlightShape.graphics.lineTo(270, 518);
	stepOneHighlightShape.graphics.lineTo(280, 550);
	stepOneHighlightShape.graphics.lineTo(280, 563);
	stepOneHighlightShape.graphics.lineTo(44, 563);
	stepOneHighlightShape.graphics.lineTo(44, 548);
	stepOneHighlightShape.graphics.lineTo(55, 518);
	ladderPictureContainer.addChild(stepOneHighlightShape);
	stepTwoHighlightShape = new createjs.Shape;
	stepTwoHighlightShape.graphics.beginFill("rgba(255,128,0,0.6)");
	stepTwoHighlightShape.graphics.moveTo(62, 443);
	stepTwoHighlightShape.graphics.lineTo(262, 443);
	stepTwoHighlightShape.graphics.lineTo(272, 465);
	stepTwoHighlightShape.graphics.lineTo(272, 478);
	stepTwoHighlightShape.graphics.lineTo(52, 478);
	stepTwoHighlightShape.graphics.lineTo(52, 465);
	stepTwoHighlightShape.graphics.lineTo(62, 443);
	ladderPictureContainer.addChild(stepTwoHighlightShape);
	stepThreeHighlightShape = new createjs.Shape;
	stepThreeHighlightShape.graphics.beginFill("rgba(255,128,0,0.6)");
	stepThreeHighlightShape.graphics.moveTo(70, 375);
	stepThreeHighlightShape.graphics.lineTo(258, 375);
	stepThreeHighlightShape.graphics.lineTo(267, 392);
	stepThreeHighlightShape.graphics.lineTo(267, 402);
	stepThreeHighlightShape.graphics.lineTo(60, 402);
	stepThreeHighlightShape.graphics.lineTo(60, 392);
	stepThreeHighlightShape.graphics.lineTo(70, 375);
	ladderPictureContainer.addChild(stepThreeHighlightShape);
	stepFourHighlightShape = new createjs.Shape;
	stepFourHighlightShape.graphics.beginFill("rgba(255,128,0,0.6)");
	stepFourHighlightShape.graphics.moveTo(75, 315);
	stepFourHighlightShape.graphics.lineTo(250, 315);
	stepFourHighlightShape.graphics.lineTo(262, 325);
	stepFourHighlightShape.graphics.lineTo(262, 336);
	stepFourHighlightShape.graphics.lineTo(66, 336);
	stepFourHighlightShape.graphics.lineTo(66, 325);
	stepFourHighlightShape.graphics.lineTo(75, 315);
	ladderPictureContainer.addChild(stepFourHighlightShape);
	stepFiveHighlightShape = new createjs.Shape;
	stepFiveHighlightShape.graphics.beginFill("rgba(255,128,0,0.6)");
	stepFiveHighlightShape.graphics.moveTo(78, 260);
	stepFiveHighlightShape.graphics.lineTo(250, 260);
	stepFiveHighlightShape.graphics.lineTo(257, 267);
	stepFiveHighlightShape.graphics.lineTo(257, 278);
	stepFiveHighlightShape.graphics.lineTo(70, 278);
	stepFiveHighlightShape.graphics.lineTo(70, 267);
	stepFiveHighlightShape.graphics.lineTo(78, 260);
	ladderPictureContainer.addChild(stepFiveHighlightShape);
	stepSixHighlightShape = new createjs.Shape;
	stepSixHighlightShape.graphics.beginFill("rgba(255,128,0,0.6)");
	stepSixHighlightShape.graphics.moveTo(78, 212);
	stepSixHighlightShape.graphics.lineTo(250, 212);
	stepSixHighlightShape.graphics.lineTo(252, 216);
	stepSixHighlightShape.graphics.lineTo(252, 225);
	stepSixHighlightShape.graphics.lineTo(76, 225);
	stepSixHighlightShape.graphics.lineTo(76, 216);
	stepSixHighlightShape.graphics.lineTo(78, 212);
	ladderPictureContainer.addChild(stepSixHighlightShape);
	ladderPictureContainer.scaleX = ladderPictureContainer.scaleY = .9;
	stepOneHighlightShape.visible = false;
	stepTwoHighlightShape.visible = false;
	stepThreeHighlightShape.visible = false;
	stepFourHighlightShape.visible = false;
	stepFiveHighlightShape.visible = false;
	stepSixHighlightShape.visible = false;
	var backButton = new createjs.Container;
	backButton.x = -430;
	backButton.y = 50;
	heightMenu.addChild(backButton);
	backButtonShape = new createjs.Shape;
	backButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 60, 40, 5);
	backButton.addChild(backButtonShape);
	var backButtonText = new createjs.Text("Back", "16px sans-serif", "#fff");
	backButtonText.textAlign = "center";
	backButtonText.y = 10;
	backButtonText.x = 30;
	backButton.addChild(backButtonText);
	var backButtonHelper = new createjs.ButtonHelper(backButton);
	backButton.addEventListener("click", handleBackButtonClick);
	return heightMenu
}

function CO_HeightMenu() {
	var heightMenu = new createjs.Container;
	var triarcLogo = new createjs.Bitmap("assets/TriArcLogo.jpg");
	triarcLogo.x = -390;
	triarcLogo.y = 720;
	heightMenu.addChild(triarcLogo);
	var graingerLogo = new createjs.Bitmap("assets/GraingerLogo.jpg");
	graingerLogo.x = 160;
	graingerLogo.y = 720;
	heightMenu.addChild(graingerLogo);
	var udesignLogo = new createjs.Bitmap("assets/UDesignLogo.jpg");
	udesignLogo.x = -178;
	udesignLogo.y = 30;
	heightMenu.addChild(udesignLogo);
	var udesignLogoBorder = new createjs.Shape;
	udesignLogoBorder.graphics.beginStroke("#e17a0f").drawRoundRect(-184, 20, 368, 110, 5);
	heightMenu.addChild(udesignLogoBorder);
	var heightInstructionText = new createjs.Text("Select a Ladder", "30px sans-serif", "#444");
	heightInstructionText.textAlign = "center";
	heightInstructionText.x = 200;
	heightInstructionText.y = 160;
	heightMenu.addChild(heightInstructionText);
	var ladderPictureContainer = new createjs.Container;
	ladderPictureContainer.x = -250;
	ladderPictureContainer.y = 140;
	heightMenu.addChild(ladderPictureContainer);
	var ladderPicture = new createjs.Bitmap("assets/crossoverSelectLadder.png");
	ladderPictureContainer.addChild(ladderPicture);
	var thirtyButton = new createjs.Container;
	thirtyButton.x = 50;
	thirtyButton.y = 600;
	heightMenu.addChild(thirtyButton);
	thirtyButtonShape = new createjs.Shape;
	thirtyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	thirtyButton.addChild(thirtyButtonShape);
	var thirtyButtonText = new createjs.Text('3 Step Ladder\n30" Platform Height / 28" Clearance', "16px sans-serif", "#fff");
	thirtyButtonText.textAlign = "center";
	thirtyButtonText.y = 2;
	thirtyButtonText.x = 150;
	thirtyButton.addChild(thirtyButtonText);
	var thirtyButtonHelper = new createjs.ButtonHelper(thirtyButton);
	thirtyButton.addEventListener("mouseover", handleThirtyButtonMouseOver);
	thirtyButton.addEventListener("mouseout", handleThirtyButtonMouseOut);
	thirtyButton.addEventListener("click", handleThirtyButtonClick);
	var fortyButton = new createjs.Container;
	fortyButton.x = 50;
	fortyButton.y = 540;
	heightMenu.addChild(fortyButton);
	fortyButtonShape = new createjs.Shape;
	fortyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	fortyButton.addChild(fortyButtonShape);
	var fortyButtonText = new createjs.Text('4 Step Ladder\n40" Platform Height / 38" Clearance', "16px sans-serif", "#fff");
	fortyButtonText.textAlign = "center";
	fortyButtonText.y = 2;
	fortyButtonText.x = 150;
	fortyButton.addChild(fortyButtonText);
	var fortyButtonHelper = new createjs.ButtonHelper(fortyButton);
	fortyButton.addEventListener("mouseover", handleFortyButtonMouseOver);
	fortyButton.addEventListener("mouseout", handleFortyButtonMouseOut);
	fortyButton.addEventListener("click", handleFortyButtonClick);
	var fiftyButton = new createjs.Container;
	fiftyButton.x = 50;
	fiftyButton.y = 480;
	heightMenu.addChild(fiftyButton);
	fiftyButtonShape = new createjs.Shape;
	fiftyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	fiftyButton.addChild(fiftyButtonShape);
	var fiftyButtonText = new createjs.Text('5 Step Ladder\n50" Platform Height / 48" Clearance', "16px sans-serif", "#fff");
	fiftyButtonText.textAlign = "center";
	fiftyButtonText.y = 2;
	fiftyButtonText.x = 150;
	fiftyButton.addChild(fiftyButtonText);
	var fiftyButtonHelper = new createjs.ButtonHelper(fiftyButton);
	fiftyButton.addEventListener("mouseover", handleFiftyButtonMouseOver);
	fiftyButton.addEventListener("mouseout", handleFiftyButtonMouseOut);
	fiftyButton.addEventListener("click", handleFiftyButtonClick);
	var sixtyButton = new createjs.Container;
	sixtyButton.x = 50;
	sixtyButton.y = 420;
	heightMenu.addChild(sixtyButton);
	sixtyButtonShape = new createjs.Shape;
	sixtyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	sixtyButton.addChild(sixtyButtonShape);
	var sixtyButtonText = new createjs.Text('6 Step Ladder\n60" Platform Height / 58" Clearance', "16px sans-serif", "#fff");
	sixtyButtonText.textAlign = "center";
	sixtyButtonText.y = 2;
	sixtyButtonText.x = 150;
	sixtyButton.addChild(sixtyButtonText);
	var sixtyButtonHelper = new createjs.ButtonHelper(sixtyButton);
	sixtyButton.addEventListener("mouseover", handleSixtyButtonMouseOver);
	sixtyButton.addEventListener("mouseout", handleSixtyButtonMouseOut);
	sixtyButton.addEventListener("click", handleSixtyButtonClick);
	var seventyButton = new createjs.Container;
	seventyButton.x = 50;
	seventyButton.y = 360;
	seventyButtonShape = new createjs.Shape;
	seventyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	seventyButton.addChild(seventyButtonShape);
	var seventyButtonText = new createjs.Text('7 Step Ladder\n70" Platform Height / 68" Clearance', "16px sans-serif", "#fff");
	seventyButtonText.textAlign = "center";
	seventyButtonText.y = 2;
	seventyButtonText.x = 150;
	seventyButton.addChild(seventyButtonText);
	heightMenu.addChild(seventyButton);
	var seventyButtonHelper = new createjs.ButtonHelper(seventyButton);
	seventyButton.addEventListener("mouseover", handleSeventyButtonMouseOver);
	seventyButton.addEventListener("mouseout", handleSeventyButtonMouseOut);
	seventyButton.addEventListener("click", handleSeventyButtonClick);
	var eightyButton = new createjs.Container;
	eightyButton.x = 50;
	eightyButton.y = 300;
	eightyButtonShape = new createjs.Shape;
	eightyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	eightyButton.addChild(eightyButtonShape);
	var eightyButtonText = new createjs.Text('8 Step Ladder\n80" Platform Height / 78" Clearance', "16px sans-serif", "#fff");
	eightyButtonText.textAlign = "center";
	eightyButtonText.y = 2;
	eightyButtonText.x = 150;
	eightyButton.addChild(eightyButtonText);
	heightMenu.addChild(eightyButton);
	var eightyButtonHelper = new createjs.ButtonHelper(eightyButton);
	eightyButton.addEventListener("mouseover", handleEightyButtonMouseOver);
	eightyButton.addEventListener("mouseout", handleEightyButtonMouseOut);
	eightyButton.addEventListener("click", handleEightyButtonClick);
	var ninetyButton = new createjs.Container;
	ninetyButton.x = 50;
	ninetyButton.y = 240;
	ninetyButtonShape = new createjs.Shape;
	ninetyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	ninetyButton.addChild(ninetyButtonShape);
	var ninetyButtonText = new createjs.Text('9 Step Ladder\n90" Platform Height / 88" Clearance', "16px sans-serif", "#fff");
	ninetyButtonText.textAlign = "center";
	ninetyButtonText.y = 2;
	ninetyButtonText.x = 150;
	ninetyButton.addChild(ninetyButtonText);
	heightMenu.addChild(ninetyButton);
	var ninetyButtonHelper = new createjs.ButtonHelper(ninetyButton);
	ninetyButton.addEventListener("mouseover", handleNinetyButtonMouseOver);
	ninetyButton.addEventListener("mouseout", handleNinetyButtonMouseOut);
	ninetyButton.addEventListener("click", handleNinetyButtonClick);
	stepOneHighlightShape = new createjs.Shape;
	stepOneHighlightShape.graphics.beginFill("rgba(255,192,0,0.8)");
	stepOneHighlightShape.graphics.moveTo(20, 577);
	stepOneHighlightShape.graphics.lineTo(128, 577);
	stepOneHighlightShape.graphics.lineTo(130, 597);
	stepOneHighlightShape.graphics.lineTo(130, 605);
	stepOneHighlightShape.graphics.lineTo(18, 605);
	stepOneHighlightShape.graphics.lineTo(18, 597);
	stepOneHighlightShape.graphics.lineTo(20, 577);
	ladderPictureContainer.addChild(stepOneHighlightShape);
	stepTwoHighlightShape = new createjs.Shape;
	stepTwoHighlightShape.graphics.beginFill("rgba(255,192,0,0.8)");
	stepTwoHighlightShape.graphics.moveTo(20, 530);
	stepTwoHighlightShape.graphics.lineTo(128, 530);
	stepTwoHighlightShape.graphics.lineTo(130, 548);
	stepTwoHighlightShape.graphics.lineTo(130, 557);
	stepTwoHighlightShape.graphics.lineTo(18, 557);
	stepTwoHighlightShape.graphics.lineTo(18, 548);
	stepTwoHighlightShape.graphics.lineTo(20, 530);
	ladderPictureContainer.addChild(stepTwoHighlightShape);
	stepThreeHighlightShape = new createjs.Shape;
	stepThreeHighlightShape.graphics.beginFill("rgba(255,192,0,0.8)");
	stepThreeHighlightShape.graphics.moveTo(20, 484);
	stepThreeHighlightShape.graphics.lineTo(128, 484);
	stepThreeHighlightShape.graphics.lineTo(130, 500);
	stepThreeHighlightShape.graphics.lineTo(130, 510);
	stepThreeHighlightShape.graphics.lineTo(18, 510);
	stepThreeHighlightShape.graphics.lineTo(18, 500);
	stepThreeHighlightShape.graphics.lineTo(20, 484);
	ladderPictureContainer.addChild(stepThreeHighlightShape);
	stepFourHighlightShape = new createjs.Shape;
	stepFourHighlightShape.graphics.beginFill("rgba(255,192,0,0.8)");
	stepFourHighlightShape.graphics.moveTo(20, 438);
	stepFourHighlightShape.graphics.lineTo(128, 438);
	stepFourHighlightShape.graphics.lineTo(130, 450);
	stepFourHighlightShape.graphics.lineTo(130, 460);
	stepFourHighlightShape.graphics.lineTo(18, 460);
	stepFourHighlightShape.graphics.lineTo(18, 450);
	stepFourHighlightShape.graphics.lineTo(20, 438);
	ladderPictureContainer.addChild(stepFourHighlightShape);
	stepFiveHighlightShape = new createjs.Shape;
	stepFiveHighlightShape.graphics.beginFill("rgba(255,192,0,0.8)");
	stepFiveHighlightShape.graphics.moveTo(20, 391);
	stepFiveHighlightShape.graphics.lineTo(128, 391);
	stepFiveHighlightShape.graphics.lineTo(130, 403);
	stepFiveHighlightShape.graphics.lineTo(130, 413);
	stepFiveHighlightShape.graphics.lineTo(18, 413);
	stepFiveHighlightShape.graphics.lineTo(18, 403);
	stepFiveHighlightShape.graphics.lineTo(20, 391);
	ladderPictureContainer.addChild(stepFiveHighlightShape);
	stepSixHighlightShape = new createjs.Shape;
	stepSixHighlightShape.graphics.beginFill("rgba(255,192,0,0.8)");
	stepSixHighlightShape.graphics.moveTo(21, 343);
	stepSixHighlightShape.graphics.lineTo(129, 343);
	stepSixHighlightShape.graphics.lineTo(130, 355);
	stepSixHighlightShape.graphics.lineTo(130, 364);
	stepSixHighlightShape.graphics.lineTo(20, 364);
	stepSixHighlightShape.graphics.lineTo(20, 355);
	stepSixHighlightShape.graphics.lineTo(21, 343);
	ladderPictureContainer.addChild(stepSixHighlightShape);
	stepSevenHighlightShape = new createjs.Shape;
	stepSevenHighlightShape.graphics.beginFill("rgba(255,192,0,0.8)");
	stepSevenHighlightShape.graphics.moveTo(22, 298);
	stepSevenHighlightShape.graphics.lineTo(126, 298);
	stepSevenHighlightShape.graphics.lineTo(130, 307);
	stepSevenHighlightShape.graphics.lineTo(130, 316);
	stepSevenHighlightShape.graphics.lineTo(20, 316);
	stepSevenHighlightShape.graphics.lineTo(20, 307);
	stepSevenHighlightShape.graphics.lineTo(22, 298);
	ladderPictureContainer.addChild(stepSevenHighlightShape);
	stepEightHighlightShape = new createjs.Shape;
	stepEightHighlightShape.graphics.beginFill("rgba(255,192,0,0.8)");
	stepEightHighlightShape.graphics.moveTo(22, 252);
	stepEightHighlightShape.graphics.lineTo(124, 252);
	stepEightHighlightShape.graphics.lineTo(130, 258);
	stepEightHighlightShape.graphics.lineTo(130, 267);
	stepEightHighlightShape.graphics.lineTo(16, 267);
	stepEightHighlightShape.graphics.lineTo(16, 258);
	stepEightHighlightShape.graphics.lineTo(22, 252);
	ladderPictureContainer.addChild(stepEightHighlightShape);
	stepNineHighlightShape = new createjs.Shape;
	stepNineHighlightShape.graphics.beginFill("rgba(255,192,0,0.8)");
	stepNineHighlightShape.graphics.moveTo(22, 204);
	stepNineHighlightShape.graphics.lineTo(126, 204);
	stepNineHighlightShape.graphics.lineTo(132, 210);
	stepNineHighlightShape.graphics.lineTo(132, 220);
	stepNineHighlightShape.graphics.lineTo(16, 220);
	stepNineHighlightShape.graphics.lineTo(16, 210);
	stepNineHighlightShape.graphics.lineTo(22, 204);
	ladderPictureContainer.addChild(stepNineHighlightShape);
	ladderPictureContainer.scaleX = ladderPictureContainer.scaleY = .9;
	stepOneHighlightShape.visible = false;
	stepTwoHighlightShape.visible = false;
	stepThreeHighlightShape.visible = false;
	stepFourHighlightShape.visible = false;
	stepFiveHighlightShape.visible = false;
	stepSixHighlightShape.visible = false;
	stepSevenHighlightShape.visible = false;
	stepEightHighlightShape.visible = false;
	stepNineHighlightShape.visible = false;
	var backButton = new createjs.Container;
	backButton.x = -430;
	backButton.y = 50;
	heightMenu.addChild(backButton);
	backButtonShape = new createjs.Shape;
	backButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 60, 40, 5);
	backButton.addChild(backButtonShape);
	var backButtonText = new createjs.Text("Back", "16px sans-serif", "#fff");
	backButtonText.textAlign = "center";
	backButtonText.y = 10;
	backButtonText.x = 30;
	backButton.addChild(backButtonText);
	var backButtonHelper = new createjs.ButtonHelper(backButton);
	backButton.addEventListener("click", handleBackButtonClick);
	return heightMenu
}

function MA_HeightMenu() {
	var heightMenu = new createjs.Container;
	var triarcLogo = new createjs.Bitmap("assets/TriArcLogo.jpg");
	triarcLogo.x = -390;
	triarcLogo.y = 720;
	heightMenu.addChild(triarcLogo);
	var graingerLogo = new createjs.Bitmap("assets/GraingerLogo.jpg");
	graingerLogo.x = 160;
	graingerLogo.y = 720;
	heightMenu.addChild(graingerLogo);
	var udesignLogo = new createjs.Bitmap("assets/UDesignLogo.jpg");
	udesignLogo.x = -178;
	udesignLogo.y = 30;
	heightMenu.addChild(udesignLogo);
	var udesignLogoBorder = new createjs.Shape;
	udesignLogoBorder.graphics.beginStroke("#e17a0f").drawRoundRect(-184, 20, 368, 110, 5);
	heightMenu.addChild(udesignLogoBorder);
	var heightInstructionText = new createjs.Text("Select a Ladder", "30px sans-serif", "#444");
	heightInstructionText.textAlign = "center";
	heightInstructionText.x = 200;
	heightInstructionText.y = 160;
	heightMenu.addChild(heightInstructionText);
	var ladderPictureContainer = new createjs.Container;
	ladderPictureContainer.x = -250;
	ladderPictureContainer.y = 140;
	heightMenu.addChild(ladderPictureContainer);
	var ladderPicture = new createjs.Bitmap("assets/maxAccessSelectLadder.png");
	ladderPictureContainer.addChild(ladderPicture);
	var twentyButton = new createjs.Container;
	twentyButton.x = 50;
	twentyButton.y = 675;
	heightMenu.addChild(twentyButton);
	twentyButtonShape = new createjs.Shape;
	twentyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	twentyButton.addChild(twentyButtonShape);
	var twentyButtonText = new createjs.Text('2 Step Ladder\n20" Platform Height / 18" Clearance', "16px sans-serif", "#fff");
	twentyButtonText.textAlign = "center";
	twentyButtonText.y = 2;
	twentyButtonText.x = 150;
	twentyButton.addChild(twentyButtonText);
	var twentyButtonHelper = new createjs.ButtonHelper(twentyButton);
	twentyButton.addEventListener("mouseover", handleTwentyButtonMouseOver);
	twentyButton.addEventListener("mouseout", handleTwentyButtonMouseOut);
	twentyButton.addEventListener("click", handleTwentyButtonClick);
	var thirtyButton = new createjs.Container;
	thirtyButton.x = 50;
	thirtyButton.y = 625;
	heightMenu.addChild(thirtyButton);
	thirtyButtonShape = new createjs.Shape;
	thirtyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	thirtyButton.addChild(thirtyButtonShape);
	var thirtyButtonText = new createjs.Text('3 Step Ladder\n30" Platform Height / 28" Clearance', "16px sans-serif", "#fff");
	thirtyButtonText.textAlign = "center";
	thirtyButtonText.y = 2;
	thirtyButtonText.x = 150;
	thirtyButton.addChild(thirtyButtonText);
	var thirtyButtonHelper = new createjs.ButtonHelper(thirtyButton);
	thirtyButton.addEventListener("mouseover", handleThirtyButtonMouseOver);
	thirtyButton.addEventListener("mouseout", handleThirtyButtonMouseOut);
	thirtyButton.addEventListener("click", handleThirtyButtonClick);
	var fortyButton = new createjs.Container;
	fortyButton.x = 50;
	fortyButton.y = 575;
	heightMenu.addChild(fortyButton);
	fortyButtonShape = new createjs.Shape;
	fortyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	fortyButton.addChild(fortyButtonShape);
	var fortyButtonText = new createjs.Text('4 Step Ladder\n40" Platform Height / 38" Clearance', "16px sans-serif", "#fff");
	fortyButtonText.textAlign = "center";
	fortyButtonText.y = 2;
	fortyButtonText.x = 150;
	fortyButton.addChild(fortyButtonText);
	var fortyButtonHelper = new createjs.ButtonHelper(fortyButton);
	fortyButton.addEventListener("mouseover", handleFortyButtonMouseOver);
	fortyButton.addEventListener("mouseout", handleFortyButtonMouseOut);
	fortyButton.addEventListener("click", handleFortyButtonClick);
	var fiftyButton = new createjs.Container;
	fiftyButton.x = 50;
	fiftyButton.y = 525;
	heightMenu.addChild(fiftyButton);
	fiftyButtonShape = new createjs.Shape;
	fiftyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	fiftyButton.addChild(fiftyButtonShape);
	var fiftyButtonText = new createjs.Text('5 Step Ladder\n50" Platform Height / 48" Clearance', "16px sans-serif", "#fff");
	fiftyButtonText.textAlign = "center";
	fiftyButtonText.y = 2;
	fiftyButtonText.x = 150;
	fiftyButton.addChild(fiftyButtonText);
	var fiftyButtonHelper = new createjs.ButtonHelper(fiftyButton);
	fiftyButton.addEventListener("mouseover", handleFiftyButtonMouseOver);
	fiftyButton.addEventListener("mouseout", handleFiftyButtonMouseOut);
	fiftyButton.addEventListener("click", handleFiftyButtonClick);
	var sixtyButton = new createjs.Container;
	sixtyButton.x = 50;
	sixtyButton.y = 475;
	heightMenu.addChild(sixtyButton);
	sixtyButtonShape = new createjs.Shape;
	sixtyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	sixtyButton.addChild(sixtyButtonShape);
	var sixtyButtonText = new createjs.Text('6 Step Ladder\n60" Platform Height / 58" Clearance', "16px sans-serif", "#fff");
	sixtyButtonText.textAlign = "center";
	sixtyButtonText.y = 2;
	sixtyButtonText.x = 150;
	sixtyButton.addChild(sixtyButtonText);
	var sixtyButtonHelper = new createjs.ButtonHelper(sixtyButton);
	sixtyButton.addEventListener("mouseover", handleSixtyButtonMouseOver);
	sixtyButton.addEventListener("mouseout", handleSixtyButtonMouseOut);
	sixtyButton.addEventListener("click", handleSixtyButtonClick);
	var seventyButton = new createjs.Container;
	seventyButton.x = 50;
	seventyButton.y = 425;
	seventyButtonShape = new createjs.Shape;
	seventyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	seventyButton.addChild(seventyButtonShape);
	var seventyButtonText = new createjs.Text('7 Step Ladder\n70" Platform Height / 68" Clearance', "16px sans-serif", "#fff");
	seventyButtonText.textAlign = "center";
	seventyButtonText.y = 2;
	seventyButtonText.x = 150;
	seventyButton.addChild(seventyButtonText);
	heightMenu.addChild(seventyButton);
	var seventyButtonHelper = new createjs.ButtonHelper(seventyButton);
	seventyButton.addEventListener("mouseover", handleSeventyButtonMouseOver);
	seventyButton.addEventListener("mouseout", handleSeventyButtonMouseOut);
	seventyButton.addEventListener("click", handleSeventyButtonClick);
	var eightyButton = new createjs.Container;
	eightyButton.x = 50;
	eightyButton.y = 375;
	eightyButtonShape = new createjs.Shape;
	eightyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	eightyButton.addChild(eightyButtonShape);
	var eightyButtonText = new createjs.Text('8 Step Ladder\n80" Platform Height / 78" Clearance', "16px sans-serif", "#fff");
	eightyButtonText.textAlign = "center";
	eightyButtonText.y = 2;
	eightyButtonText.x = 150;
	eightyButton.addChild(eightyButtonText);
	heightMenu.addChild(eightyButton);
	var eightyButtonHelper = new createjs.ButtonHelper(eightyButton);
	eightyButton.addEventListener("mouseover", handleEightyButtonMouseOver);
	eightyButton.addEventListener("mouseout", handleEightyButtonMouseOut);
	eightyButton.addEventListener("click", handleEightyButtonClick);
	var ninetyButton = new createjs.Container;
	ninetyButton.x = 50;
	ninetyButton.y = 325;
	ninetyButtonShape = new createjs.Shape;
	ninetyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	ninetyButton.addChild(ninetyButtonShape);
	var ninetyButtonText = new createjs.Text('9 Step Ladder\n90" Platform Height / 88" Clearance', "16px sans-serif", "#fff");
	ninetyButtonText.textAlign = "center";
	ninetyButtonText.y = 2;
	ninetyButtonText.x = 150;
	ninetyButton.addChild(ninetyButtonText);
	heightMenu.addChild(ninetyButton);
	var ninetyButtonHelper = new createjs.ButtonHelper(ninetyButton);
	ninetyButton.addEventListener("mouseover", handleNinetyButtonMouseOver);
	ninetyButton.addEventListener("mouseout", handleNinetyButtonMouseOut);
	ninetyButton.addEventListener("click", handleNinetyButtonClick);
	var hundredButton = new createjs.Container;
	hundredButton.x = 50;
	hundredButton.y = 275;
	hundredButtonShape = new createjs.Shape;
	hundredButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	hundredButton.addChild(hundredButtonShape);
	var hundredButtonText = new createjs.Text('10 Step Ladder\n100" Platform Height / 98" Clearance', "16px sans-serif", "#fff");
	hundredButtonText.textAlign = "center";
	hundredButtonText.y = 2;
	hundredButtonText.x = 150;
	hundredButton.addChild(hundredButtonText);
	heightMenu.addChild(hundredButton);
	var hundredButtonHelper = new createjs.ButtonHelper(hundredButton);
	hundredButton.addEventListener("mouseover", handleHundredButtonMouseOver);
	hundredButton.addEventListener("mouseout", handleHundredButtonMouseOut);
	hundredButton.addEventListener("click", handleHundredButtonClick);
	var hundredTenButton = new createjs.Container;
	hundredTenButton.x = 50;
	hundredTenButton.y = 225;
	hundredTenButtonShape = new createjs.Shape;
	hundredTenButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	hundredTenButton.addChild(hundredTenButtonShape);
	var hundredTenButtonText = new createjs.Text('11 Step Ladder\n110" Platform Height / 108" Clearance', "16px sans-serif", "#fff");
	hundredTenButtonText.textAlign = "center";
	hundredTenButtonText.y = 2;
	hundredTenButtonText.x = 150;
	hundredTenButton.addChild(hundredTenButtonText);
	heightMenu.addChild(hundredTenButton);
	var hundredTenButtonHelper = new createjs.ButtonHelper(hundredTenButton);
	hundredTenButton.addEventListener("mouseover", handleHundredTenButtonMouseOver);
	hundredTenButton.addEventListener("mouseout", handleHundredTenButtonMouseOut);
	hundredTenButton.addEventListener("click", handleHundredTenButtonClick);
	stepOneHighlightShape = new createjs.Shape;
	stepOneHighlightShape.graphics.beginFill("rgba(255,192,0,0.8)");
	stepOneHighlightShape.graphics.moveTo(20, 600);
	stepOneHighlightShape.graphics.lineTo(128, 600);
	stepOneHighlightShape.graphics.lineTo(130, 615);
	stepOneHighlightShape.graphics.lineTo(130, 625);
	stepOneHighlightShape.graphics.lineTo(18, 625);
	stepOneHighlightShape.graphics.lineTo(18, 615);
	stepOneHighlightShape.graphics.lineTo(20, 600);
	ladderPictureContainer.addChild(stepOneHighlightShape);
	stepTwoHighlightShape = new createjs.Shape;
	stepTwoHighlightShape.graphics.beginFill("rgba(255,192,0,0.8)");
	stepTwoHighlightShape.graphics.moveTo(20, 548);
	stepTwoHighlightShape.graphics.lineTo(128, 548);
	stepTwoHighlightShape.graphics.lineTo(129, 562);
	stepTwoHighlightShape.graphics.lineTo(129, 571);
	stepTwoHighlightShape.graphics.lineTo(19, 571);
	stepTwoHighlightShape.graphics.lineTo(19, 562);
	stepTwoHighlightShape.graphics.lineTo(20, 548);
	ladderPictureContainer.addChild(stepTwoHighlightShape);
	stepThreeHighlightShape = new createjs.Shape;
	stepThreeHighlightShape.graphics.beginFill("rgba(255,192,0,0.8)");
	stepThreeHighlightShape.graphics.moveTo(20, 498);
	stepThreeHighlightShape.graphics.lineTo(127, 498);
	stepThreeHighlightShape.graphics.lineTo(127, 510);
	stepThreeHighlightShape.graphics.lineTo(127, 521);
	stepThreeHighlightShape.graphics.lineTo(19, 521);
	stepThreeHighlightShape.graphics.lineTo(19, 510);
	stepThreeHighlightShape.graphics.lineTo(20, 498);
	ladderPictureContainer.addChild(stepThreeHighlightShape);
	stepFourHighlightShape = new createjs.Shape;
	stepFourHighlightShape.graphics.beginFill("rgba(255,192,0,0.8)");
	stepFourHighlightShape.graphics.moveTo(20, 448);
	stepFourHighlightShape.graphics.lineTo(126, 448);
	stepFourHighlightShape.graphics.lineTo(127, 460);
	stepFourHighlightShape.graphics.lineTo(127, 470);
	stepFourHighlightShape.graphics.lineTo(18, 470);
	stepFourHighlightShape.graphics.lineTo(18, 460);
	stepFourHighlightShape.graphics.lineTo(20, 448);
	ladderPictureContainer.addChild(stepFourHighlightShape);
	stepFiveHighlightShape = new createjs.Shape;
	stepFiveHighlightShape.graphics.beginFill("rgba(255,192,0,0.8)");
	stepFiveHighlightShape.graphics.moveTo(22, 401);
	stepFiveHighlightShape.graphics.lineTo(125, 401);
	stepFiveHighlightShape.graphics.lineTo(126, 412);
	stepFiveHighlightShape.graphics.lineTo(126, 422);
	stepFiveHighlightShape.graphics.lineTo(21, 422);
	stepFiveHighlightShape.graphics.lineTo(21, 412);
	stepFiveHighlightShape.graphics.lineTo(22, 391);
	ladderPictureContainer.addChild(stepFiveHighlightShape);
	stepSixHighlightShape = new createjs.Shape;
	stepSixHighlightShape.graphics.beginFill("rgba(255,192,0,0.8)");
	stepSixHighlightShape.graphics.moveTo(25, 356);
	stepSixHighlightShape.graphics.lineTo(123, 356);
	stepSixHighlightShape.graphics.lineTo(126, 366);
	stepSixHighlightShape.graphics.lineTo(126, 374);
	stepSixHighlightShape.graphics.lineTo(22, 374);
	stepSixHighlightShape.graphics.lineTo(22, 366);
	stepSixHighlightShape.graphics.lineTo(25, 356);
	ladderPictureContainer.addChild(stepSixHighlightShape);
	stepSevenHighlightShape = new createjs.Shape;
	stepSevenHighlightShape.graphics.beginFill("rgba(255,192,0,0.8)");
	stepSevenHighlightShape.graphics.moveTo(24, 312);
	stepSevenHighlightShape.graphics.lineTo(123, 312);
	stepSevenHighlightShape.graphics.lineTo(125, 320);
	stepSevenHighlightShape.graphics.lineTo(125, 330);
	stepSevenHighlightShape.graphics.lineTo(22, 330);
	stepSevenHighlightShape.graphics.lineTo(22, 320);
	stepSevenHighlightShape.graphics.lineTo(24, 312);
	ladderPictureContainer.addChild(stepSevenHighlightShape);
	stepEightHighlightShape = new createjs.Shape;
	stepEightHighlightShape.graphics.beginFill("rgba(255,192,0,0.8)");
	stepEightHighlightShape.graphics.moveTo(25, 268);
	stepEightHighlightShape.graphics.lineTo(122, 268);
	stepEightHighlightShape.graphics.lineTo(124, 276);
	stepEightHighlightShape.graphics.lineTo(124, 285);
	stepEightHighlightShape.graphics.lineTo(23, 285);
	stepEightHighlightShape.graphics.lineTo(23, 276);
	stepEightHighlightShape.graphics.lineTo(25, 268);
	ladderPictureContainer.addChild(stepEightHighlightShape);
	stepNineHighlightShape = new createjs.Shape;
	stepNineHighlightShape.graphics.beginFill("rgba(255,192,0,0.8)");
	stepNineHighlightShape.graphics.moveTo(26, 225);
	stepNineHighlightShape.graphics.lineTo(122, 225);
	stepNineHighlightShape.graphics.lineTo(124, 233);
	stepNineHighlightShape.graphics.lineTo(124, 242);
	stepNineHighlightShape.graphics.lineTo(24, 242);
	stepNineHighlightShape.graphics.lineTo(24, 233);
	stepNineHighlightShape.graphics.lineTo(26, 225);
	ladderPictureContainer.addChild(stepNineHighlightShape);
	stepTenHighlightShape = new createjs.Shape;
	stepTenHighlightShape.graphics.beginFill("rgba(255,192,0,0.8)");
	stepTenHighlightShape.graphics.moveTo(26, 184);
	stepTenHighlightShape.graphics.lineTo(120, 184);
	stepTenHighlightShape.graphics.lineTo(123, 190);
	stepTenHighlightShape.graphics.lineTo(123, 200);
	stepTenHighlightShape.graphics.lineTo(24, 200);
	stepTenHighlightShape.graphics.lineTo(24, 190);
	stepTenHighlightShape.graphics.lineTo(26, 184);
	ladderPictureContainer.addChild(stepTenHighlightShape);
	stepElevenHighlightShape = new createjs.Shape;
	stepElevenHighlightShape.graphics.beginFill("rgba(255,192,0,0.8)");
	stepElevenHighlightShape.graphics.moveTo(26, 142);
	stepElevenHighlightShape.graphics.lineTo(120, 142);
	stepElevenHighlightShape.graphics.lineTo(122, 150);
	stepElevenHighlightShape.graphics.lineTo(122, 158);
	stepElevenHighlightShape.graphics.lineTo(24, 158);
	stepElevenHighlightShape.graphics.lineTo(24, 150);
	stepElevenHighlightShape.graphics.lineTo(26, 142);
	ladderPictureContainer.addChild(stepElevenHighlightShape);
	ladderPictureContainer.scaleX = ladderPictureContainer.scaleY = .9;
	stepOneHighlightShape.visible = false;
	stepTwoHighlightShape.visible = false;
	stepThreeHighlightShape.visible = false;
	stepFourHighlightShape.visible = false;
	stepFiveHighlightShape.visible = false;
	stepSixHighlightShape.visible = false;
	stepSevenHighlightShape.visible = false;
	stepEightHighlightShape.visible = false;
	stepNineHighlightShape.visible = false;
	stepTenHighlightShape.visible = false;
	stepElevenHighlightShape.visible = false;
	var backButton = new createjs.Container;
	backButton.x = -430;
	backButton.y = 50;
	heightMenu.addChild(backButton);
	backButtonShape = new createjs.Shape;
	backButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 60, 40, 5);
	backButton.addChild(backButtonShape);
	var backButtonText = new createjs.Text("Back", "16px sans-serif", "#fff");
	backButtonText.textAlign = "center";
	backButtonText.y = 10;
	backButtonText.x = 30;
	backButton.addChild(backButtonText);
	var backButtonHelper = new createjs.ButtonHelper(backButton);
	backButton.addEventListener("click", handleBackButtonClick);
	return heightMenu
}

function handleBackButtonClick(event) {
	showStartMenu()
}

function handleTwentyButtonClick(event) {
	setHeight(20);
	showSystemOptionsMenu()
}

function handleThirtyButtonClick(event) {
	setHeight(30);
	showSystemOptionsMenu()
}

function handleFortyButtonClick(event) {
	setHeight(40);
	showSystemOptionsMenu()
}

function handleFiftyButtonClick(event) {
	setHeight(50);
	showSystemOptionsMenu()
}

function handleSixtyButtonClick(event) {
	setHeight(60);
	showSystemOptionsMenu()
}

function handleSeventyButtonClick(event) {
	setHeight(70);
	showSystemOptionsMenu()
}

function handleEightyButtonClick(event) {
	setHeight(80);
	showSystemOptionsMenu()
}

function handleNinetyButtonClick(event) {
	setHeight(90);
	showSystemOptionsMenu()
}

function handleHundredButtonClick(event) {
	setHeight(100);
	showSystemOptionsMenu()
}

function handleHundredTenButtonClick(event) {
	setHeight(110);
	showSystemOptionsMenu()
}

function handleTwentyButtonMouseOver(event) {
	twentyButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 300, 40, 5);
	stepOneHighlightShape.visible = true;
	stepTwoHighlightShape.visible = true
}

function handleTwentyButtonMouseOut(event) {
	twentyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	stepOneHighlightShape.visible = false;
	stepTwoHighlightShape.visible = false
}

function handleThirtyButtonMouseOver(event) {
	thirtyButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 300, 40, 5);
	stepOneHighlightShape.visible = true;
	stepTwoHighlightShape.visible = true;
	stepThreeHighlightShape.visible = true
}

function handleThirtyButtonMouseOut(event) {
	thirtyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	stepOneHighlightShape.visible = false;
	stepTwoHighlightShape.visible = false;
	stepThreeHighlightShape.visible = false
}

function handleFortyButtonMouseOver(event) {
	fortyButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 300, 40, 5);
	stepOneHighlightShape.visible = true;
	stepTwoHighlightShape.visible = true;
	stepThreeHighlightShape.visible = true;
	stepFourHighlightShape.visible = true
}

function handleFortyButtonMouseOut(event) {
	fortyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	stepOneHighlightShape.visible = false;
	stepTwoHighlightShape.visible = false;
	stepThreeHighlightShape.visible = false;
	stepFourHighlightShape.visible = false
}

function handleFiftyButtonMouseOver(event) {
	fiftyButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 300, 40, 5);
	stepOneHighlightShape.visible = true;
	stepTwoHighlightShape.visible = true;
	stepThreeHighlightShape.visible = true;
	stepFourHighlightShape.visible = true;
	stepFiveHighlightShape.visible = true
}

function handleFiftyButtonMouseOut(event) {
	fiftyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	stepOneHighlightShape.visible = false;
	stepTwoHighlightShape.visible = false;
	stepThreeHighlightShape.visible = false;
	stepFourHighlightShape.visible = false;
	stepFiveHighlightShape.visible = false
}

function handleSixtyButtonMouseOver(event) {
	sixtyButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 300, 40, 5);
	stepOneHighlightShape.visible = true;
	stepTwoHighlightShape.visible = true;
	stepThreeHighlightShape.visible = true;
	stepFourHighlightShape.visible = true;
	stepFiveHighlightShape.visible = true;
	stepSixHighlightShape.visible = true
}

function handleSixtyButtonMouseOut(event) {
	sixtyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	stepOneHighlightShape.visible = false;
	stepTwoHighlightShape.visible = false;
	stepThreeHighlightShape.visible = false;
	stepFourHighlightShape.visible = false;
	stepFiveHighlightShape.visible = false;
	stepSixHighlightShape.visible = false
}

function handleSeventyButtonMouseOver(event) {
	seventyButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 300, 40, 5);
	stepOneHighlightShape.visible = true;
	stepTwoHighlightShape.visible = true;
	stepThreeHighlightShape.visible = true;
	stepFourHighlightShape.visible = true;
	stepFiveHighlightShape.visible = true;
	stepSixHighlightShape.visible = true;
	stepSevenHighlightShape.visible = true
}

function handleSeventyButtonMouseOut(event) {
	seventyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	stepOneHighlightShape.visible = false;
	stepTwoHighlightShape.visible = false;
	stepThreeHighlightShape.visible = false;
	stepFourHighlightShape.visible = false;
	stepFiveHighlightShape.visible = false;
	stepSixHighlightShape.visible = false;
	stepSevenHighlightShape.visible = false
}

function handleEightyButtonMouseOver(event) {
	eightyButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 300, 40, 5);
	stepOneHighlightShape.visible = true;
	stepTwoHighlightShape.visible = true;
	stepThreeHighlightShape.visible = true;
	stepFourHighlightShape.visible = true;
	stepFiveHighlightShape.visible = true;
	stepSixHighlightShape.visible = true;
	stepSevenHighlightShape.visible = true;
	stepEightHighlightShape.visible = true
}

function handleEightyButtonMouseOut(event) {
	eightyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	stepOneHighlightShape.visible = false;
	stepTwoHighlightShape.visible = false;
	stepThreeHighlightShape.visible = false;
	stepFourHighlightShape.visible = false;
	stepFiveHighlightShape.visible = false;
	stepSixHighlightShape.visible = false;
	stepSevenHighlightShape.visible = false;
	stepEightHighlightShape.visible = false
}

function handleNinetyButtonMouseOver(event) {
	ninetyButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 300, 40, 5);
	stepOneHighlightShape.visible = true;
	stepTwoHighlightShape.visible = true;
	stepThreeHighlightShape.visible = true;
	stepFourHighlightShape.visible = true;
	stepFiveHighlightShape.visible = true;
	stepSixHighlightShape.visible = true;
	stepSevenHighlightShape.visible = true;
	stepEightHighlightShape.visible = true;
	stepNineHighlightShape.visible = true
}

function handleNinetyButtonMouseOut(event) {
	ninetyButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	stepOneHighlightShape.visible = false;
	stepTwoHighlightShape.visible = false;
	stepThreeHighlightShape.visible = false;
	stepFourHighlightShape.visible = false;
	stepFiveHighlightShape.visible = false;
	stepSixHighlightShape.visible = false;
	stepSevenHighlightShape.visible = false;
	stepEightHighlightShape.visible = false;
	stepNineHighlightShape.visible = false
}

function handleHundredButtonMouseOver(event) {
	hundredButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 300, 40, 5);
	stepOneHighlightShape.visible = true;
	stepTwoHighlightShape.visible = true;
	stepThreeHighlightShape.visible = true;
	stepFourHighlightShape.visible = true;
	stepFiveHighlightShape.visible = true;
	stepSixHighlightShape.visible = true;
	stepSevenHighlightShape.visible = true;
	stepEightHighlightShape.visible = true;
	stepNineHighlightShape.visible = true;
	stepTenHighlightShape.visible = true
}

function handleHundredButtonMouseOut(event) {
	hundredButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	stepOneHighlightShape.visible = false;
	stepTwoHighlightShape.visible = false;
	stepThreeHighlightShape.visible = false;
	stepFourHighlightShape.visible = false;
	stepFiveHighlightShape.visible = false;
	stepSixHighlightShape.visible = false;
	stepSevenHighlightShape.visible = false;
	stepEightHighlightShape.visible = false;
	stepNineHighlightShape.visible = false;
	stepTenHighlightShape.visible = false
}

function handleHundredTenButtonMouseOver(event) {
	hundredTenButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 300, 40, 5);
	stepOneHighlightShape.visible = true;
	stepTwoHighlightShape.visible = true;
	stepThreeHighlightShape.visible = true;
	stepFourHighlightShape.visible = true;
	stepFiveHighlightShape.visible = true;
	stepSixHighlightShape.visible = true;
	stepSevenHighlightShape.visible = true;
	stepEightHighlightShape.visible = true;
	stepNineHighlightShape.visible = true;
	stepTenHighlightShape.visible = true;
	stepElevenHighlightShape.visible = true
}

function handleHundredTenButtonMouseOut(event) {
	hundredTenButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 40, 5);
	stepOneHighlightShape.visible = false;
	stepTwoHighlightShape.visible = false;
	stepThreeHighlightShape.visible = false;
	stepFourHighlightShape.visible = false;
	stepFiveHighlightShape.visible = false;
	stepSixHighlightShape.visible = false;
	stepSevenHighlightShape.visible = false;
	stepEightHighlightShape.visible = false;
	stepNineHighlightShape.visible = false;
	stepTenHighlightShape.visible = false;
	stepElevenHighlightShape.visible = false
}

function InclineMenu(hide75degrees) {
	var inclineMenu = new createjs.Container;
	var triarcLogo = new createjs.Bitmap("assets/TriArcLogo.jpg");
	triarcLogo.x = -390;
	triarcLogo.y = 720;
	inclineMenu.addChild(triarcLogo);
	var graingerLogo = new createjs.Bitmap("assets/GraingerLogo.jpg");
	graingerLogo.x = 160;
	graingerLogo.y = 720;
	inclineMenu.addChild(graingerLogo);
	var udesignLogo = new createjs.Bitmap("assets/UDesignLogo.jpg");
	udesignLogo.x = -178;
	udesignLogo.y = 30;
	inclineMenu.addChild(udesignLogo);
	var udesignLogoBorder = new createjs.Shape;
	udesignLogoBorder.graphics.beginStroke("#e17a0f").drawRoundRect(-184, 20, 368, 110, 5);
	inclineMenu.addChild(udesignLogoBorder);
	var inclineInstructionText = new createjs.Text("Select an Incline for the First Ladder", "30px sans-serif", "#444");
	inclineInstructionText.textAlign = "center";
	inclineInstructionText.y = 130;
	inclineMenu.addChild(inclineInstructionText);
	var fiftyDegreesButton = new createjs.Container;
	fiftyDegreesButton.x = -146;
	fiftyDegreesButton.y = 175;
	inclineMenu.addChild(fiftyDegreesButton);
	var fiftyDegreesButtonShape = new createjs.Shape;
	fiftyDegreesButtonShape.graphics.beginStroke("#e17a0f").drawRoundRect(-5, -5, 300, 185, 5);
	fiftyDegreesButton.addChild(fiftyDegreesButtonShape);
	var fiftyDegreesButtonGraphic = new createjs.Bitmap("assets/50degicon.jpg");
	fiftyDegreesButton.addChild(fiftyDegreesButtonGraphic);
	var fiftyDegreesButtonHelper = new createjs.ButtonHelper(fiftyDegreesButton);
	fiftyDegreesButton.addEventListener("click", handleFiftyDegreesButtonClick);
	if (!hide75degrees) {
		var seventyFiveDegreesButton = new createjs.Container;
		seventyFiveDegreesButton.x = -146;
		seventyFiveDegreesButton.y = 375;
		inclineMenu.addChild(seventyFiveDegreesButton);
		var seventyFiveDegreesButtonShape = new createjs.Shape;
		seventyFiveDegreesButtonShape.graphics.beginStroke("#e17a0f").drawRoundRect(-5, -5, 300, 185, 5);
		seventyFiveDegreesButton.addChild(seventyFiveDegreesButtonShape);
		var seventyFiveDegreesButtonGraphic = new createjs.Bitmap("assets/75degicon.jpg");
		seventyFiveDegreesButton.addChild(seventyFiveDegreesButtonGraphic);
		var seventyFiveDegreesButtonHelper = new createjs.ButtonHelper(seventyFiveDegreesButton);
		seventyFiveDegreesButton.addEventListener("click", handleSeventyFiveDegreesButtonClick)
	}
	var ninetyDegreesButton = new createjs.Container;
	ninetyDegreesButton.x = -146;
	ninetyDegreesButton.y = 575;
	inclineMenu.addChild(ninetyDegreesButton);
	var ninetyDegreesButtonShape = new createjs.Shape;
	ninetyDegreesButtonShape.graphics.beginStroke("#e17a0f").drawRoundRect(-5, -5, 300, 185, 5);
	ninetyDegreesButton.addChild(ninetyDegreesButtonShape);
	var ninetyDegreesButtonGraphic = new createjs.Bitmap("assets/90degicon.jpg");
	ninetyDegreesButton.addChild(ninetyDegreesButtonGraphic);
	var ninetyDegreesButtonHelper = new createjs.ButtonHelper(ninetyDegreesButton);
	ninetyDegreesButton.addEventListener("click", handleNinetyDegreesButtonClick);
	if (hide75degrees) {
		fiftyDegreesButton.y = 200;
		ninetyDegreesButton.y = 400
	}
	var backButton = new createjs.Container;
	backButton.x = -430;
	backButton.y = 50;
	inclineMenu.addChild(backButton);
	backButtonShape = new createjs.Shape;
	backButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 60, 40, 5);
	backButton.addChild(backButtonShape);
	var backButtonText = new createjs.Text("Back", "16px sans-serif", "#fff");
	backButtonText.textAlign = "center";
	backButtonText.y = 10;
	backButtonText.x = 30;
	backButton.addChild(backButtonText);
	var backButtonHelper = new createjs.ButtonHelper(backButton);
	backButton.addEventListener("click", handleInclineBackButtonClick);
	return inclineMenu
}

function handleInclineBackButtonClick(event) {
	switch (system) {
		case 1:
			showHeightMenu();
			break;
		case 2:
			showPlatformTypeMenu();
			break;
		case 3:
			showHeightMenu();
		default:
			break
	}
}

function handleFiftyDegreesButtonClick(event) {
	setIncline(50);
	showConfigurator()
}

function handleSeventyFiveDegreesButtonClick(event) {
	setIncline(75);
	showConfigurator()
}

function handleNinetyDegreesButtonClick(event) {
	setIncline(90);
	showConfigurator()
}

function PlatformSizeMenu() {
	var platformSizeMenu = new createjs.Container;
	var instructionText = new createjs.Text("Select a Platform Size", "30px sans-serif", "#444");
	instructionText.textAlign = "center";
	instructionText.y = 30;
	platformSizeMenu.addChild(instructionText);
	return platformSizeMenu
}
var perforatedButtonShape;
var gripButtonShape;

function PlatformTypeMenu() {
	var platformTypeMenu = new createjs.Container;
	var triarcLogo = new createjs.Bitmap("assets/TriArcLogo.jpg");
	triarcLogo.x = -390;
	triarcLogo.y = 720;
	platformTypeMenu.addChild(triarcLogo);
	var graingerLogo = new createjs.Bitmap("assets/GraingerLogo.jpg");
	graingerLogo.x = 160;
	graingerLogo.y = 720;
	platformTypeMenu.addChild(graingerLogo);
	var udesignLogo = new createjs.Bitmap("assets/UDesignLogo.jpg");
	udesignLogo.x = -178;
	udesignLogo.y = 30;
	platformTypeMenu.addChild(udesignLogo);
	var udesignLogoBorder = new createjs.Shape;
	udesignLogoBorder.graphics.beginStroke("#e17a0f").drawRoundRect(-184, 20, 368, 110, 5);
	platformTypeMenu.addChild(udesignLogoBorder);
	var platformTypeInstructionText = new createjs.Text("Select a Platform Tread Type", "30px sans-serif", "#444");
	platformTypeInstructionText.textAlign = "center";
	platformTypeInstructionText.x = 0;
	platformTypeInstructionText.y = 180;
	platformTypeMenu.addChild(platformTypeInstructionText);
	var perforatedButton = new createjs.Container;
	perforatedButton.x = -350;
	perforatedButton.y = 220;
	platformTypeMenu.addChild(perforatedButton);
	perforatedButtonShape = new createjs.Shape;
	perforatedButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 260, 5);
	perforatedButton.addChild(perforatedButtonShape);
	var perforatedButtonImage = new createjs.Bitmap("assets/perforated.jpg");
	perforatedButtonImage.scaleX = perforatedButtonImage.scaleY = .5;
	perforatedButtonImage.y = 20;
	perforatedButtonImage.x = 20;
	perforatedButton.addChild(perforatedButtonImage);
	var perforatedButtonText = new createjs.Text("Perforated", "16px sans-serif", "#fff");
	perforatedButtonText.textAlign = "center";
	perforatedButtonText.y = 240;
	perforatedButtonText.x = 150;
	perforatedButton.addChild(perforatedButtonText);
	var perforatedButtonHelper = new createjs.ButtonHelper(perforatedButton);
	perforatedButton.addEventListener("mouseover", handleperforatedButtonMouseOver);
	perforatedButton.addEventListener("mouseout", handleperforatedButtonMouseOut);
	perforatedButton.addEventListener("click", handleperforatedButtonClick);
	var gripButton = new createjs.Container;
	gripButton.x = 50;
	gripButton.y = 220;
	platformTypeMenu.addChild(gripButton);
	gripButtonShape = new createjs.Shape;
	gripButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 260, 5);
	gripButton.addChild(gripButtonShape);
	var gripButtonImage = new createjs.Bitmap("assets/grip.jpg");
	gripButtonImage.scaleX = gripButtonImage.scaleY = .5;
	gripButtonImage.y = 20;
	gripButtonImage.x = 20;
	gripButton.addChild(gripButtonImage);
	var gripButtonText = new createjs.Text("Grip Strut", "16px sans-serif", "#fff");
	gripButtonText.textAlign = "center";
	gripButtonText.y = 240;
	gripButtonText.x = 150;
	gripButton.addChild(gripButtonText);
	var gripButtonHelper = new createjs.ButtonHelper(gripButton);
	gripButton.addEventListener("mouseover", handlegripButtonMouseOver);
	gripButton.addEventListener("mouseout", handlegripButtonMouseOut);
	gripButton.addEventListener("click", handlegripButtonClick);
	var backButton = new createjs.Container;
	backButton.x = -430;
	backButton.y = 50;
	platformTypeMenu.addChild(backButton);
	backButtonShape = new createjs.Shape;
	backButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 60, 40, 5);
	backButton.addChild(backButtonShape);
	var backButtonText = new createjs.Text("Back", "16px sans-serif", "#fff");
	backButtonText.textAlign = "center";
	backButtonText.y = 10;
	backButtonText.x = 30;
	backButton.addChild(backButtonText);
	var backButtonHelper = new createjs.ButtonHelper(backButton);
	backButton.addEventListener("click", handlePTBackButtonClick);
	return platformTypeMenu
}

function handlePTBackButtonClick(event) {
	showHeightMenu()
}

function handleperforatedButtonClick(event) {
	treadType = TreadType.Perforated;
	showInclineMenu()
}

function handlegripButtonClick(event) {
	treadType = TreadType.Grip;
	showInclineMenu()
}

function handleperforatedButtonMouseOver(event) {
	perforatedButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 300, 260, 5)
}

function handleperforatedButtonMouseOut(event) {
	perforatedButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 260, 5)
}

function handlegripButtonMouseOver(event) {
	gripButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 300, 260, 5)
}

function handlegripButtonMouseOut(event) {
	gripButtonShape.graphics.beginFill("#494c53").beginStroke("#5f6064").drawRoundRect(0, 0, 300, 260, 5)
}
var selectPartMenu;
var originalPart;
var lastPartAdded;

function SelectPartMenu(part) {
	refreshParts();
	selectPartMenu = new createjs.Container;
	selectPartMenu.originPart = part;
	originalPart = part;
	selectPartMenu.name = "SELECT_PART_MENU";
	if (partsMenuContainer.getChildByName("PART_BUTTONS_CONTAINER")) {
		partsMenuContainer.removeChild(partsMenuContainer.getChildByName("PART_BUTTONS_CONTAINER"))
	}
	var partButtonsContainer = new createjs.Container;
	partButtonsContainer.name = "PART_BUTTONS_CONTAINER";
	stage.getChildByName("PARTS_MENU_CONTAINER").addChild(partButtonsContainer);
	addPartButtons(part, partButtonsContainer);
	if ((!part.mountSlotFull || part.partData.rails || part.partData.actsAsLegs && !part.partData.turnpiece) && part.parentPart != null) addRemoveButton();
	if (partButtonsContainer.getNumChildren() > 0) {
		partsMenuContainerText.text = "Select a part to add"
	} else {
		partsMenuContainerText.text = ""
	}
	return selectPartMenu
}

function addRemoveButton() {
	var removeButton = new createjs.Container;
	removeButton.x = 0;
	removeButton.y = 640;
	removeButton.name = "REMOVE_BUTTON";
	partsMenuContainer.addChild(removeButton);
	var removeButtonShape = new createjs.Shape;
	removeButtonShape.graphics.beginFill("#ff9e35").beginStroke("#e17a0f").drawRoundRect(0, 0, 260, 60, 5);
	removeButton.addChild(removeButtonShape);
	var removeButtonText = new createjs.Text("Remove Last Part", "20px sans-serif", "#FFF");
	removeButtonText.textAlign = "center";
	removeButtonText.x = 130;
	removeButtonText.y = 20;
	removeButton.addChild(removeButtonText);
	var removeButtonHelper = new createjs.ButtonHelper(removeButton);
	removeButton.addEventListener("click", handleRemoveClicked)
}

function hasLadderAsChild(part) {
	for (var i = 0; i < partsContainer.getNumChildren(); i++) {
		childPart = partsContainer.getChildAt(i);
		if (childPart.parentPart == part && childPart.partData.ladder) {
			return true
		}
	}
	return false
}

function addPartButtons(part, selectPartMenu) {
	var x = y = 0;
	for (var i = 0; i < part.partData.connectableParts.length; i++) {
		newPart = PARTS[part.partData.connectableParts[i]];
		if (newPart.usesSlot == MOUNT_SLOT && part.mountSlotFull || newPart.usesSlot == LEG_SLOT && part.legSlotFull || newPart.ladder && (part.legSlotFull && !part.partData.turnPiece) || part.mountSlotFull && newPart.legs && hasLadderAsChild(part)) continue;
		var partButton = new createjs.Container;
		partButton.part = newPart;
		partButton.x = x * 125 + 10;
		partButton.y = y * 120 + 20;
		selectPartMenu.addChild(partButton);
		var partButtonShape = new createjs.Shape;
		partButtonShape.graphics.beginFill("#FFF").beginStroke("#e17a0f").drawRoundRect(0, 0, 100, 90, 5);
		partButton.addChild(partButtonShape);
		var partButtonText = new createjs.Text(newPart.name, "12px sans-serif", "#444");
		partButtonText.textAlign = "center";
		partButtonText.x = 50;
		partButtonText.y = 92;
		partButton.addChild(partButtonText);
		var partImg = new createjs.Sprite(newPart.spriteSheet);
		partImg.gotoAndStop(part.currentFrame + part.partData.childFrameOffset + newPart.frameOffset % 4);
		partImg.regX = newPart.spriteCenter.x;
		partImg.regY = newPart.spriteCenter.y;
		partImg.scaleX = partImg.scaleY = .2;
		partImg.x = 50;
		partImg.y = 35;
		partButton.addChild(partImg);
		selectPartMenu.addChild(partButton);
		var partButtonHelper = new createjs.ButtonHelper(partButton);
		partButton.addEventListener("click", handlePartSelected);
		x++;
		if (x == 2) {
			x = 0;
			y++
		}
	}
}

function handleRemoveClicked(event) {
	if (selectPartMenu.originPart.legSlotFull) {
		for (var i = 0; i < partsContainer.getNumChildren(); i++) {
			part = partsContainer.getChildAt(i);
			if (part.parentPart == selectPartMenu.originPart) {
				parts.splice(parts.indexOf(part.name), 1);
				partsContainer.removeChild(part);
				break
			}
		}
	}
	var parent = selectPartMenu.originPart.parentPart;
	selectPartMenu.originPart.parentPart.mountSlotFull = false;
	partsContainer.removeChild(partsContainer.getChildByName(selectPartMenu.originPart.name));
	parts.splice(parts.indexOf(selectPartMenu.originPart.name), 1);
	SelectPartMenu(parent);
	partsMenuContainerText.text = "Select a part to add";
	partsMenuContainer.removeChild(partsMenuContainer.getChildByName("REMOVE_BUTTON"));
	updateZOrder();
	angularUpdate(parts)
}

function handlePartSelected(event) {
	newPart = Part(event.target.parent.part, selectPartMenu.originPart);
	partsContainer.addChild(newPart);
	if (!newPart.partData.legs) newPart.iZOrderMod = partsContainer.getChildByName(newPart.name).y;
	else newPart.iZOrderMod += partsContainer.getChildByName(newPart.name).y;
	updateZOrder();
	angularUpdate(parts)
}
var topDownView;

function TopDownView(printView) {
	if (!printView) printView = false;
	topDownView = new createjs.Container;
	topDownViewParts = new createjs.Container;
	var topDownBackgroundShape = new createjs.Shape;
	if (printView) topDownBackgroundShape.graphics.beginFill("rgba(40,40,40,1)").drawRect(0, 0, 960, 800);
	else topDownBackgroundShape.graphics.beginFill("rgba(40,40,40,0.75").drawRect(0, 0, 960, 800);
	topDownView.addChild(topDownBackgroundShape);
	var topDownBackgroundShapeButtonHelper = new createjs.ButtonHelper(topDownBackgroundShape);
	topDownBackgroundShape.addEventListener("click", backgroundClicked);
	for (var x = 0; x <= 960; x += 9) {
		var line = new createjs.Shape;
		line.graphics.beginStroke("rgba(255,255,255,0.2)");
		line.graphics.moveTo(x, 0);
		line.graphics.lineTo(x, 800);
		topDownViewParts.addChild(line)
	}
	for (var y = 0; y <= stage.canvas.height; y += 9) {
		var line = new createjs.Shape;
		line.graphics.beginStroke("rgba(255,255,255,0.2)");
		line.graphics.moveTo(0, y);
		line.graphics.lineTo(stage.canvas.width, y);
		topDownViewParts.addChild(line)
	}
	topDownView.addChild(topDownViewParts);
	var keyText = new createjs.Text("KEY", "16px sans-serif", "#FFFFFF");
	keyText.textAlign = "center";
	keyText.x = 880;
	keyText.y = 10;
	topDownView.addChild(keyText);
	var ladderShape = new createjs.Shape;
	ladderShape.x = 790;
	ladderShape.y = 30;
	ladderShape.graphics.beginFill("rgba(255,192,0,0.75)").beginStroke("#000000").drawRect(0, 0, 15, 15);
	topDownView.addChild(ladderShape);
	var ladderText = new createjs.Text("LADDER", "16px sans-serif", "#FFFFFF");
	ladderText.textAlign = "left";
	ladderText.y = 30;
	ladderText.x = 815;
	topDownView.addChild(ladderText);
	var spanShape = new createjs.Shape;
	spanShape.x = 790;
	spanShape.y = 50;
	spanShape.graphics.beginFill("rgba(192,192,192,0.75)").beginStroke("#000000").drawRect(0, 0, 15, 15);
	topDownView.addChild(spanShape);
	var spanText = new createjs.Text("BRIDGE SPAN", "16px sans-serif", "#FFFFFF");
	spanText.textAlign = "left";
	spanText.y = 50;
	spanText.x = 815;
	topDownView.addChild(spanText);
	var turnShape = new createjs.Shape;
	turnShape.x = 790;
	turnShape.y = 70;
	turnShape.graphics.beginFill("rgba(64,192,255,0.75)").beginStroke("#000000").drawRect(0, 0, 15, 15);
	topDownView.addChild(turnShape);
	var turnText = new createjs.Text("TURN PLATFORM", "16px sans-serif", "#FFFFFF");
	turnText.textAlign = "left";
	turnText.y = 70;
	turnText.x = 815;
	topDownView.addChild(turnText);
	var totalSpanShape = new createjs.Shape;
	totalSpanShape.graphics.beginStroke("#FFFFFF").setStrokeStyle(2, 2);
	totalSpanShape.graphics.moveTo(797, 90);
	totalSpanShape.graphics.lineTo(797, 105);
	topDownView.addChild(totalSpanShape);
	var totalSpanText = new createjs.Text("TOTAL LENGTH", "16px sans-serif", "#FFFFFF");
	totalSpanText.y = 90;
	totalSpanText.x = 815;
	topDownView.addChild(totalSpanText);
	var openSpanShape = new createjs.Shape;
	openSpanShape.graphics.beginStroke("#00FF00").setStrokeStyle(2, 2);
	openSpanShape.graphics.moveTo(797, 110);
	openSpanShape.graphics.lineTo(797, 125);
	topDownView.addChild(openSpanShape);
	var openSpanText = new createjs.Text("OPEN LENGTH", "16px sans-serif", "#FFFFFF");
	openSpanText.y = 110;
	openSpanText.x = 815;
	topDownView.addChild(openSpanText);
	var legsShape = new createjs.Shape;
	legsShape.graphics.beginStroke("#FF2020").setStrokeStyle(2, 2);
	legsShape.graphics.moveTo(797, 130);
	legsShape.graphics.lineTo(797, 145);
	topDownView.addChild(legsShape);
	var legsText = new createjs.Text("LEG KIT", "16px sans-serif", "#FFFFFF");
	legsText.y = 130;
	legsText.x = 815;
	topDownView.addChild(legsText);
	if (!printView) {
		var instructionText = new createjs.Text("Click Anywhere to Close", "16px sans-serif", "#FFFFFF");
		instructionText.textAlign = "center";
		instructionText.x = 480;
		instructionText.y = 760;
		topDownView.addChild(instructionText)
	}
	var scaleText = new createjs.Text("Each grid line represents 1'", "16px sans-serif", "#FFFFFF");
	scaleText.textAlign = "left";
	scaleText.x = 10;
	scaleText.y = 10;
	topDownView.addChild(scaleText);
	var point = new createjs.Point(477, 414);
	var direction = 0;
	defaultPartsOrder();
	var lastPart;
	var lastContainer;
	var openSpan = 0;
	var openSpanComponents = new Array;
	var length = 0;
	var startPoint = point;
	for (var i = 0; i < partsContainer.getNumChildren(); i++) {
		part = partsContainer.getChildAt(i);
		if (part.partData.rails) continue;
		if (!part.partData.bridgeSpan && openSpanComponents.length > 0) {
			var openSpanLine = new createjs.Shape;
			openSpanLine.graphics.beginStroke("#00FF00").setStrokeStyle(2, 2);
			openSpanLine.graphics.moveTo(openSpanComponents[0].x, openSpanComponents[0].y);
			openSpanLine.graphics.lineTo(point.x, point.y);
			openSpanLine.PRIORITY = 1;
			topDownViewParts.addChild(openSpanLine);
			var openSpanLineText = new createjs.Text(Math.floor(openSpan / 12) + "' " + openSpan % 12 + '"', "10px sans-serif", "#00FF00");
			var midIndex = Math.floor(openSpanComponents.length / 2);
			console.log("Mid: " + midIndex);
			console.log(openSpanComponents);
			switch (direction) {
				case 0:
					openSpanLineText.x = openSpanComponents[midIndex].x - 30;
					openSpanLineText.y = openSpanComponents[midIndex].y - 30;
					break;
				case 1:
					openSpanLineText.x = openSpanComponents[midIndex].x - 30;
					openSpanLineText.y = openSpanComponents[midIndex].y + 15;
					break;
				case 2:
					openSpanLineText.x = openSpanComponents[midIndex].x + 15;
					openSpanLineText.y = openSpanComponents[midIndex].y;
					break;
				case 3:
					openSpanLineText.x = openSpanComponents[midIndex].x - 30;
					openSpanLineText.y = openSpanComponents[midIndex].y + 30;
					break;
				default:
					break
			}
			openSpanLineText.PRIORITY = 1;
			topDownViewParts.addChild(openSpanLineText);
			openSpan = 0;
			openSpanComponents = new Array
		}
		if (part.partData.legs) {
			var legShape = new createjs.Shape;
			legShape.graphics.beginFill("#FF2020").beginStroke("#FF2020").setStrokeStyle(2, 2);
			legShape.PRIORITY = 2;
			legShape.graphics.drawRect(-(.75 * part.partData.width / 2), -3, .75 * part.partData.width, 3);
			switch (direction) {
				case 0:
					legShape.rotation = 0;
					legShape.x = point.x;
					legShape.y = point.y;
					break;
				case 1:
					legShape.rotation = -90;
					legShape.x = point.x;
					legShape.y = point.y;
					break;
				case 2:
					legShape.rotation = -180;
					legShape.x = point.x;
					legShape.y = point.y;
					break;
				case 3:
					legShape.rotation = -270;
					legShape.x = point.x;
					legShape.y = point.y;
					break;
				default:
					break
			}
			topDownViewParts.addChild(legShape);
			continue
		}
		var container = new createjs.Container;
		var rect = new createjs.Shape;
		rect.graphics.beginFill(fillColor(part.partData)).beginStroke("#000000").drawRect(-(.75 * part.partData.width / 2), 0, .75 * part.partData.width, -(.75 * part.partData.length));
		container.addChild(rect);
		var forwardPoint = new createjs.Shape;
		forwardPoint.x = 0;
		forwardPoint.y = -.75 * part.partData.length;
		forwardPoint.name = "FORWARD";
		container.addChild(forwardPoint);
		var leftPoint = new createjs.Shape;
		leftPoint.x = -.75 * .5 * part.partData.width;
		leftPoint.y = -.75 * part.partData.length * .5;
		leftPoint.name = "LEFT";
		container.addChild(leftPoint);
		var rightPoint = new createjs.Shape;
		rightPoint.x = .75 * .5 * part.partData.width;
		rightPoint.y = -.75 * part.partData.length * .5;
		rightPoint.name = "RIGHT";
		container.addChild(rightPoint);
		switch (direction) {
			case 0:
				container.x = point.x;
				container.y = point.y;
				break;
			case 1:
				container.rotation = -90;
				container.x = point.x;
				container.y = point.y;
				break;
			case 2:
				container.rotation = -180;
				container.x = point.x;
				container.y = point.y;
				break;
			case 3:
				container.rotation = -270;
				container.x = point.x;
				container.y = point.y;
				break;
			default:
				break
		}
		length += part.partData.length;
		var oldDir = direction;
		direction += part.partData.childFrameOffset;
		direction = direction % 4;
		if (part.partData.bridgeSpan) {
			openSpanComponents.push(container);
			openSpan += part.partData.length
		}
		if (oldDir != direction) {
			var spanText = new createjs.Text(Math.floor(length / 12) + "' " + length % 12 + '"', "10px sans-serif", "#FFFFFF");
			spanText.PRIORITY = 1;
			var spanLine = new createjs.Shape;
			spanLine.PRIORITY = 1;
			spanLine.graphics.beginStroke("#FFFFFF").setStrokeStyle(2, 2);
			console.log(direction);
			switch (direction) {
				case 0:
					if (oldDir == 3) {
						spanText.textAlign = "left";
						spanText.x = point.x - .75 * length / 2;
						spanText.y = point.y + 25;
						spanLine.graphics.moveTo(startPoint.x, startPoint.y);
						spanLine.graphics.lineTo(point.x + .75 * part.partData.length, point.y);
						spanLine.y += 20;
						length = part.partData.width;
						point = new createjs.Point(container.x - container.getChildByName("LEFT").x, container.y + container.getChildByName("LEFT").y);
						startPoint.x = point.x;
						startPoint.y = point.y;
						startPoint.y += .75 * part.partData.width
					} else {
						spanText.textAlign = "right";
						spanText.x = point.x + .75 * length / 2;
						spanText.y = point.y + 30;
						spanLine.graphics.moveTo(startPoint.x, startPoint.y);
						spanLine.graphics.lineTo(point.x - .75 * part.partData.length, point.y);
						length = part.partData.width;
						point = new createjs.Point(container.x - container.getChildByName("RIGHT").x, container.y + container.getChildByName("RIGHT").y);
						startPoint.x = point.x;
						startPoint.y = point.y;
						startPoint.y += .75 * part.partData.width;
						spanLine.y += 25
					}
					break;
				case 1:
					if (oldDir == 0) {
						spanText.textAlign = "left";
						spanText.x = point.x + 25;
						spanText.y = point.y + .75 * length / 4;
						spanLine.graphics.moveTo(startPoint.x, startPoint.y);
						spanLine.graphics.lineTo(point.x, point.y - .75 * part.partData.length);
						spanLine.x += 22;
						length = part.partData.width;
						point = new createjs.Point(container.x + container.getChildByName("LEFT").x, container.y + container.getChildByName("LEFT").y);
						startPoint.x = point.x;
						startPoint.y = point.y;
						startPoint.x += .75 * part.partData.width
					} else {
						spanText.textAlign = "left";
						spanText.x = point.x + 25;
						spanText.y = point.y - .75 * length / 4;
						spanLine.graphics.moveTo(startPoint.x, startPoint.y);
						spanLine.graphics.lineTo(point.x, point.y + .75 * part.partData.length);
						length = part.partData.width;
						point = new createjs.Point(container.x - container.getChildByName("RIGHT").x, container.y - container.getChildByName("RIGHT").y);
						startPoint.x = point.x;
						startPoint.y = point.y;
						spanLine.x += 20;
						startPoint.x += .75 * part.partData.width
					}
					break;
				case 2:
					if (oldDir == 1) {
						spanText.textAlign = "left";
						spanText.x = point.x + .75 * length / 4;
						spanText.y = point.y - 35;
						spanLine.graphics.moveTo(startPoint.x, startPoint.y);
						spanLine.graphics.lineTo(point.x - .75 * part.partData.length, point.y);
						length = part.partData.width;
						spanLine.y -= 22;
						point = new createjs.Point(container.x + container.getChildByName("LEFT").x, container.y - container.getChildByName("LEFT").y);
						startPoint.x = point.x;
						startPoint.y = point.y;
						startPoint.y -= .75 * part.partData.width
					} else {
						spanText.textAlign = "left";
						spanText.x = point.x - .75 * length / 4;
						spanText.y = point.y - 30;
						spanLine.graphics.moveTo(startPoint.x, startPoint.y);
						spanLine.graphics.lineTo(point.x, point.y);
						length = part.partData.width;
						point = new createjs.Point(container.x + container.getChildByName("RIGHT").x, container.y - container.getChildByName("RIGHT").y);
						startPoint.x = point.x;
						startPoint.y = point.y
					}
					break;
				case 3:
					if (oldDir == 2) {
						spanText.textAlign = "right";
						spanText.x = point.x - 25;
						spanText.y = point.y - .75 * length / 4;
						spanLine.graphics.moveTo(startPoint.x, startPoint.y);
						spanLine.graphics.lineTo(point.x, point.y + .75 * part.partData.width);
						spanLine.x -= 20;
						length = part.partData.width;
						point = new createjs.Point(container.x - container.getChildByName("LEFT").x, container.y - container.getChildByName("LEFT").y);
						startPoint.x = point.x;
						startPoint.y = point.y;
						startPoint.x -= .75 * part.partData.width
					} else {
						spanText.textAlign = "right";
						spanText.x = point.x - 25;
						spanText.y = point.y + .75 * length / 4;
						spanLine.graphics.moveTo(startPoint.x, startPoint.y);
						spanLine.graphics.lineTo(point.x, point.y - .75 * part.partData.width);
						spanLine.x -= 20;
						length = part.partData.width;
						point = new createjs.Point(container.x + container.getChildByName("RIGHT").x, container.y + container.getChildByName("RIGHT").y);
						startPoint.x = point.x;
						startPoint.y = point.y;
						startPoint.x -= .75 * part.partData.width
					}
					break;
				default:
					break
			}
			topDownViewParts.addChild(spanLine);
			topDownViewParts.addChild(spanText)
		} else {
			switch (direction) {
				case 0:
					point = new createjs.Point(point.x, point.y - .75 * part.partData.length);
					break;
				case 1:
					point = new createjs.Point(point.x - .75 * part.partData.length, point.y);
					break;
				case 2:
					point = new createjs.Point(point.x, point.y + .75 * part.partData.length);
					break;
				case 3:
					point = new createjs.Point(point.x + .75 * part.partData.length, point.y);
				default:
					break
			}
		}
		topDownViewParts.addChild(container);
		lastPart = part;
		lastContainer = container
	}
	if (length > 0) {
		var spanText = new createjs.Text(Math.floor(length / 12) + "' " + length % 12 + '"', "10px sans-serif", "#FFFFFF");
		spanText.PRIORITY = 1;
		var spanLine = new createjs.Shape;
		spanLine.PRIORITY = 1;
		spanLine.graphics.beginStroke("#FFFFFF").setStrokeStyle(2, 2);
		spanLine.graphics.moveTo(startPoint.x, startPoint.y);
		spanLine.graphics.lineTo(point.x, point.y);
		switch (system) {
			case 1:
				switch (direction) {
					case 0:
						spanText.textAlign = "left";
						spanText.x = point.x + lastPart.partData.width;
						spanText.y = point.y;
						spanLine.x += .75 * lastPart.partData.width;
						break;
					case 1:
						spanText.textAlign = "left";
						spanText.x = point.x;
						spanText.y = point.y - lastPart.partData.width - 5;
						spanLine.y -= .75 * lastPart.partData.width;
						break;
					case 2:
						spanText.textAlign = "right";
						spanText.x = point.x - 30;
						spanText.y = point.y - .75 * length / 4;
						spanLine.x -= .75 * lastPart.partData.width;
						break;
					case 3:
						spanText.textAlign = "left";
						spanText.x = point.x;
						spanText.y = point.y + lastPart.partData.width;
						spanLine.y += .75 * lastPart.partData.width;
						break;
					default:
						break
				}
				break;
			case 2:
				switch (direction) {
					case 0:
						spanText.textAlign = "left";
						spanText.x = point.x + lastPart.partData.width;
						spanText.y = point.y;
						spanLine.x += 3 * lastPart.partData.width / 4;
						break;
					case 1:
						spanText.textAlign = "left";
						spanText.x = point.x - .75 * length / 4;
						spanText.y = point.y - 5 * lastPart.partData.width / 4;
						spanLine.y -= 3 * lastPart.partData.width / 4;
						break;
					case 2:
						spanText.textAlign = "right";
						spanText.x = point.x;
						spanText.y = point.y;
						spanLine.x -= 3 * lastPart.partData.width / 4;
						break;
					case 3:
						spanText.textAlign = "left";
						spanText.x = point.x;
						spanText.y = point.y + 5 * lastPart.partData.width / 4;
						spanLine.y += 3 * lastPart.partData.width / 4;
						break;
					default:
						break
				}
				break;
			default:
				break
		}
		topDownViewParts.addChild(spanLine);
		topDownViewParts.addChild(spanText)
	}
	updateZOrder();
	sortElements();
	topDownViewParts.scaleX = topDownViewParts.scaleY = 2.5;
	topDownViewParts.x = -500;
	topDownViewParts.y = -300;
	return topDownView
}

function fillColor(data) {
	if (data.ladder) return "rgba(255,192,64,0.75)";
	else if (data.turnPiece) return "rgba(64,192,255,0.75)";
	else return "rgba(192,192,192,0.75)"
}

function backgroundClicked(event) {
	stage.removeChild(topDownView)
}

function sortElements() {
	var sortFunction = function(obj1, obj2, options) {
		if (obj1.PRIORITY && obj2.PRIORITY && obj1.PRIORITY == obj2.PRIORITY) return 0;
		else if (obj1.PRIORITY && !obj2.PRIORITY || obj1.PRIORITY > obj2.PRIORITY) return 1;
		else if (obj2.PRIORITY && !obj1.PRIORITY || obj2.PRIORITY > obj1.PRIORITY) return -1;
		else {
			return -1
		}
	};
	topDownViewParts.sortChildren(sortFunction)
}
var maxTopDownView;
var MTDFACTOR = 2.5;

function MaxTopDownView(printView) {
	toolTipText.visible = false;
	if (!printView) printView = false;
	maxTopDownView = new createjs.Container;
	maxTopDownViewParts = new createjs.Container;
	var topDownBackgroundShape = new createjs.Shape;
	if (printView) topDownBackgroundShape.graphics.beginFill("rgba(40,40,40,1)").drawRect(0, 0, 960, 800);
	else topDownBackgroundShape.graphics.beginFill("rgba(40,40,40,0.8").drawRect(0, 0, 960, 800);
	maxTopDownView.addChild(topDownBackgroundShape);
	var topDownBackgroundShapeButtonHelper = new createjs.ButtonHelper(topDownBackgroundShape);
	topDownBackgroundShape.addEventListener("click", maxbackgroundClicked);
	for (var x = 0; x <= 960; x += 12 * MTDFACTOR) {
		var line = new createjs.Shape;
		line.graphics.beginStroke("rgba(255,255,255,0.2)");
		line.graphics.moveTo(x, 0);
		line.graphics.lineTo(x, 800);
		maxTopDownViewParts.addChild(line)
	}
	for (var y = 0; y <= stage.canvas.height; y += 12 * MTDFACTOR) {
		var line = new createjs.Shape;
		line.graphics.beginStroke("rgba(255,255,255,0.2)");
		line.graphics.moveTo(0, y);
		line.graphics.lineTo(stage.canvas.width, y);
		maxTopDownViewParts.addChild(line)
	}
	maxTopDownView.addChild(maxTopDownViewParts);
	var keyText = new createjs.Text("KEY", "16px sans-serif", "#FFFFFF");
	keyText.textAlign = "center";
	keyText.x = 860;
	keyText.y = 10;
	maxTopDownView.addChild(keyText);
	var ladderShape = new createjs.Shape;
	ladderShape.x = 770;
	ladderShape.y = 30;
	ladderShape.graphics.beginFill("rgba(255,192,0,0.8)").beginStroke("#000000").drawRect(0, 0, 15, 15);
	maxTopDownView.addChild(ladderShape);
	var ladderText = new createjs.Text("LADDER", "16px sans-serif", "#FFFFFF");
	ladderText.textAlign = "left";
	ladderText.y = 30;
	ladderText.x = 795;
	maxTopDownView.addChild(ladderText);
	var spanShape = new createjs.Shape;
	spanShape.x = 770;
	spanShape.y = 50;
	spanShape.graphics.beginFill("rgba(192,192,192,0.8)").beginStroke("#000000").drawRect(0, 0, 15, 15);
	maxTopDownView.addChild(spanShape);
	var spanText = new createjs.Text('36"x36" PLATFORM', "16px sans-serif", "#FFFFFF");
	spanText.textAlign = "left";
	spanText.y = 50;
	spanText.x = 795;
	maxTopDownView.addChild(spanText);
	var legsShape = new createjs.Shape;
	legsShape.graphics.beginStroke("#FF2020").setStrokeStyle(4, 2);
	legsShape.graphics.moveTo(777, 70);
	legsShape.graphics.lineTo(777, 85);
	maxTopDownView.addChild(legsShape);
	var legsText = new createjs.Text("LEG KIT", "16px sans-serif", "#FFFFFF");
	legsText.y = 70;
	legsText.x = 795;
	maxTopDownView.addChild(legsText);
	if (!printView) {
		var instructionText = new createjs.Text("Click Anywhere to Close", "16px sans-serif", "#FFFFFF");
		instructionText.textAlign = "center";
		instructionText.x = 480;
		instructionText.y = 760;
		maxTopDownView.addChild(instructionText)
	}
	var scaleText = new createjs.Text("Each grid line represents 1'", "16px sans-serif", "#FFFFFF");
	scaleText.textAlign = "left";
	scaleText.x = 10;
	scaleText.y = 10;
	maxTopDownView.addChild(scaleText);
	var point = new createjs.Point(477, 414);
	var direction = 0;
	defaultPartsOrder();
	var lastPart;
	var lastContainer;
	var openSpan = 0;
	var openSpanComponents = new Array;
	var length = 0;
	var startPoint = point;
	for (var i = 0; i < partsContainer.getNumChildren(); i++) {
		part = partsContainer.getChildAt(i);
		if (part.partData.rails || part.partData.legs) continue;
		var container = new createjs.Container;
		var rect = new createjs.Shape;
		container.partCoordinates = part.coordinates;
		container.partData = part.partData;
		container.partRotation = part.noParent ? 0 : part.mountPoint.rotOffset;
		container.noParent = part.noParent;
		container.name = part.name;
		rect.graphics.beginFill(maxFillColor(part.partData)).beginStroke("#000000").drawRect(-(MTDFACTOR * part.partData.width / 2), 0, MTDFACTOR * part.partData.width, -(MTDFACTOR * part.partData.length));
		container.addChild(rect);
		var upPoint = new createjs.Shape;
		upPoint.x = 0;
		upPoint.y = -MTDFACTOR * part.partData.length;
		upPoint.name = "UP";
		container.addChild(upPoint);
		var leftPoint = new createjs.Shape;
		leftPoint.x = -MTDFACTOR * .5 * part.partData.width;
		leftPoint.y = -MTDFACTOR * part.partData.length * .5;
		leftPoint.name = "LEFT";
		container.addChild(leftPoint);
		var rightPoint = new createjs.Shape;
		rightPoint.x = MTDFACTOR * .5 * part.partData.width;
		rightPoint.y = -MTDFACTOR * part.partData.length * .5;
		rightPoint.name = "RIGHT";
		container.addChild(rightPoint);
		var downPoint = new createjs.Shape;
		downPoint.x = 0;
		downPoint.y = 0;
		downPoint.name = "DOWN";
		container.addChild(downPoint);
		if (part.noParent) {
			container.x = 397;
			container.y = 450
		} else {
			switch (part.mountPoint.rotOffset) {
				case 0:
					container.x = maxTopDownViewParts.getChildByName(part.parentPart.name).x + maxTopDownViewParts.getChildByName(part.parentPart.name).getChildByName("UP").x;
					container.y = maxTopDownViewParts.getChildByName(part.parentPart.name).y + maxTopDownViewParts.getChildByName(part.parentPart.name).getChildByName("UP").y;
					break;
				case -90:
					container.rotation = -90;
					container.x = maxTopDownViewParts.getChildByName(part.parentPart.name).x + maxTopDownViewParts.getChildByName(part.parentPart.name).getChildByName("LEFT").x;
					container.y = maxTopDownViewParts.getChildByName(part.parentPart.name).y + maxTopDownViewParts.getChildByName(part.parentPart.name).getChildByName("LEFT").y;
					break;
				case 180:
					container.rotation = 180;
					container.x = maxTopDownViewParts.getChildByName(part.parentPart.name).x + maxTopDownViewParts.getChildByName(part.parentPart.name).getChildByName("DOWN").x;
					container.y = maxTopDownViewParts.getChildByName(part.parentPart.name).y + maxTopDownViewParts.getChildByName(part.parentPart.name).getChildByName("DOWN").y;
					break;
				case 90:
					container.rotation = 90;
					container.x = maxTopDownViewParts.getChildByName(part.parentPart.name).x + maxTopDownViewParts.getChildByName(part.parentPart.name).getChildByName("RIGHT").x;
					container.y = maxTopDownViewParts.getChildByName(part.parentPart.name).y + maxTopDownViewParts.getChildByName(part.parentPart.name).getChildByName("RIGHT").y;
					break;
				default:
					break
			}
		}
		if (part.partData.platform) {
			container.rotation = 0;
			if (part.parentPart.partData.platform) {
				switch (part.mountPoint.rotOffset) {
					case 0:
						break;
					case -90:
						container.x -= rightPoint.x;
						container.y -= rightPoint.y;
						break;
					case 180:
						container.x -= upPoint.x;
						container.y -= upPoint.y;
						break;
					case 90:
						container.x -= leftPoint.x;
						container.y -= leftPoint.y;
						break;
					default:
						break
				}
			} else {
				var TD_Parent = maxTopDownViewParts.getChildByName(part.parentPart.name);
				switch (TD_Parent.rotation) {
					case 0:
						break;
					case -90:
						container.y -= TD_Parent.getChildByName("UP").y;
						container.x += TD_Parent.getChildByName("UP").y;
						container.x -= rightPoint.x;
						container.y -= rightPoint.y;
						break;
					case 180:
						container.y -= TD_Parent.getChildByName("UP").y;
						container.y -= TD_Parent.getChildByName("UP").y;
						container.x -= upPoint.x;
						container.y -= upPoint.y;
						break;
					case 90:
						container.y -= TD_Parent.getChildByName("UP").y;
						container.x -= TD_Parent.getChildByName("UP").y;
						container.x -= leftPoint.x;
						container.y -= leftPoint.y;
						break
				}
			}
		} else {
			var lengthString = Math.floor(part.partData.length / 12) + "' " + part.partData.length % 12 + '"L\n   x   \n' + Math.floor(part.partData.width / 12) + "' " + part.partData.width % 12 + '"W';
			var dimText = new createjs.Text(lengthString, "8px sans-serif", "#fff");
			dimText.textAlign = "center";
			dimText.y = upPoint.y;
			if (container.rotation == 180) {
				dimText.rotation = 180;
				dimText.y += 20
			}
		}
		length += part.partData.length;
		maxTopDownViewParts.addChild(container)
	}
	for (var x = 0; x < 40; x++) {
		for (var y = 0; y < 40; y++) {
			if (MAP[x][y][2] != 0) {
				for (var p = 0; p < maxTopDownViewParts.getNumChildren(); p++) {
					if (maxTopDownViewParts.getChildAt(p).partCoordinates && (maxTopDownViewParts.getChildAt(p).partCoordinates.x == x && maxTopDownViewParts.getChildAt(p).partCoordinates.y == y || pointInPart(maxTopDownViewParts.getChildAt(p), x, y))) {
						var legPart = maxTopDownViewParts.getChildAt(p);
						var legKitLine = new createjs.Shape;
						legKitLine.PRIORITY = 3;
						legKitLine.graphics.beginStroke("#FF2020").setStrokeStyle(6, 2);
						if (legPart.partData.platform) {
							switch (MAP[x][y][2]) {
								case 1:
									var ly = legPart.y + legPart.getChildByName("UP").y;
									var lx = legPart.x + legPart.getChildByName("UP").x;
									legKitLine.graphics.moveTo(lx - 18 * MTDFACTOR, ly);
									legKitLine.graphics.lineTo(lx + 18 * MTDFACTOR, ly);
									break;
								case 2:
									var ly = legPart.y + legPart.getChildByName("RIGHT").y;
									var lx = legPart.x + legPart.getChildByName("RIGHT").x;
									legKitLine.graphics.moveTo(lx, ly - 18 * MTDFACTOR);
									legKitLine.graphics.lineTo(lx, ly + 18 * MTDFACTOR);
									break;
								case 3:
									var ly = legPart.y + legPart.getChildByName("DOWN").y;
									var lx = legPart.x + legPart.getChildByName("DOWN").x;
									legKitLine.graphics.moveTo(lx - 18 * MTDFACTOR, ly);
									legKitLine.graphics.lineTo(lx + 18 * MTDFACTOR, ly);
									break;
								case 4:
									var ly = legPart.y + legPart.getChildByName("LEFT").y;
									var lx = legPart.x + legPart.getChildByName("LEFT").x;
									legKitLine.graphics.moveTo(lx, ly - 18 * MTDFACTOR);
									legKitLine.graphics.lineTo(lx, ly + 18 * MTDFACTOR);
									break
							}
							maxTopDownViewParts.addChild(legKitLine)
						} else {
							if (MAP[x][y][3] == 0) {
								var ly;
								var lx;
								legKitLine.rotation = -legPart.rotation;
								switch (MAP[x][y][2]) {
									case 1:
										if (legPart.partData.heightMod > 0 || MAP[x][y] != 0) {
											ly = legPart.getChildByName("UP").y;
											lx = legPart.getChildByName("UP").x
										} else {
											ly = legPart.getChildByName("DOWN").y;
											lx = legPart.getChildByName("DOWN").x
										}
										legKitLine.graphics.moveTo(lx - 18 * MTDFACTOR, ly);
										legKitLine.graphics.lineTo(lx + 18 * MTDFACTOR, ly);
										break;
									case 2:
										if (legPart.partData.heightMod > 0 || MAP[x][y] != 0) {
											ly = legPart.getChildByName("UP").y;
											lx = legPart.getChildByName("UP").x
										} else {
											ly = legPart.y + legPart.getChildByName("DOWN").y;
											lx = legPart.x + legPart.getChildByName("DOWN").x
										}
										legKitLine.graphics.moveTo(-ly, lx - 18 * MTDFACTOR);
										legKitLine.graphics.lineTo(-ly, lx + 18 * MTDFACTOR);
										break;
									case 3:
										if (legPart.partData.heightMod > 0 || MAP[x][y] != 0) {
											ly = legPart.getChildByName("UP").y;
											lx = legPart.getChildByName("UP").x
										} else {
											ly = legPart.y + legPart.getChildByName("DOWN").y;
											lx = legPart.x + legPart.getChildByName("DOWN").x
										}
										legKitLine.graphics.moveTo(lx - 18 * MTDFACTOR, ly);
										legKitLine.graphics.lineTo(lx + 18 * MTDFACTOR, ly);
										break;
									case 4:
										if (legPart.partData.heightMod > 0 || MAP[x][y] != 0) {
											ly = legPart.getChildByName("UP").y;
											lx = legPart.getChildByName("UP").x
										} else {
											ly = legPart.y + legPart.getChildByName("DOWN").y;
											lx = legPart.x + legPart.getChildByName("DOWN").x
										}
										legKitLine.graphics.moveTo(ly, lx - 18 * MTDFACTOR);
										legKitLine.graphics.lineTo(ly, lx + 18 * MTDFACTOR);
										break
								}
								legPart.addChild(legKitLine)
							} else {
								legKitLine.rotation = -legPart.rotation;
								switch (MAP[x][y][2]) {
									case 1:
										var ly = legPart.getChildByName("DOWN").y;
										var lx = legPart.getChildByName("DOWN").x;
										legKitLine.graphics.moveTo(lx - 18 * MTDFACTOR, ly);
										legKitLine.graphics.lineTo(lx + 18 * MTDFACTOR, ly);
										break;
									case 2:
										var ly = legPart.getChildByName("DOWN").y;
										var lx = legPart.getChildByName("DOWN").x;
										legKitLine.graphics.moveTo(lx, ly - 18 * MTDFACTOR);
										legKitLine.graphics.lineTo(lx, ly + 18 * MTDFACTOR);
										break;
									case 3:
										var ly = legPart.getChildByName("DOWN").y;
										var lx = legPart.getChildByName("DOWN").x;
										legKitLine.graphics.moveTo(lx - 18 * MTDFACTOR, ly);
										legKitLine.graphics.lineTo(lx + 18 * MTDFACTOR, ly);
										break;
									case 4:
										var ly = legPart.getChildByName("DOWN").y;
										var lx = legPart.getChildByName("DOWN").x;
										legKitLine.graphics.moveTo(lx, ly - 18 * MTDFACTOR);
										legKitLine.graphics.lineTo(lx, ly + 18 * MTDFACTOR);
										break
								}
								legPart.addChild(legKitLine)
							}
						}
					}
				}
			}
		}
	}
	var ymax = 0;
	var xmax = 0;
	var ystart = 40;
	var yend = 0;
	var xstart = 40;
	var xend = 0;
	for (var x = 0; x < 40; x++) {
		for (var y = 0; y < 40; y++) {
			if (MAP[x][y][1] != "E") {
				if (y < ystart) ystart = y;
				if (y > yend) yend = y
			}
		}
	}
	for (var y = 0; y < 40; y++) {
		for (var x = 0; x < 40; x++) {
			if (MAP[x][y][1] != "E") {
				if (x < xstart) xstart = x;
				if (x > xend) xend = x
			}
		}
	}
	var yc = 0;
	var xc = 0;
	var ymaxr = 0;
	var xmaxr = 0;
	for (var x = 0; x < 40; x++) {
		yc = 0;
		for (var y = 0; y < 40; y++) {
			if (MAP[x][y][1] != "E") {
				yc += MAP[x][y][4].y
			}
		}
		if (yc > ymaxr) ymaxr = yc
	}
	for (var y = 0; y < 40; y++) {
		xc = 0;
		for (var x = 0; x < 40; x++) {
			if (MAP[x][y][1] != "E") {
				xc += MAP[x][y][4].x
			}
		}
		if (xc > xmaxr) xmaxr = xc
	}
	xmax = xend - xstart + 1;
	ymax = yend - ystart + 1;
	var yLine = new createjs.Container;
	yLine.x = 335 - 36 * (20 - xstart) * MTDFACTOR;
	yLine.y = 450 - 36 * (21 - ystart) * MTDFACTOR;
	maxTopDownViewParts.addChild(yLine);
	var yLineShape = new createjs.Shape;
	yLineShape.graphics.beginStroke("#FFF").moveTo(0, 20).lineTo(0, 36 * ymax * MTDFACTOR);
	yLine.addChild(yLineShape);
	var yLineText = new createjs.Text(Math.floor(ymaxr / 12) + "' " + ymaxr % 12 + '"', "16px sans-serif", "#FFFFFF");
	yLine.addChild(yLineText);
	yLineText.y = 36 * ymax * MTDFACTOR - 40;
	yLineText.x = -75;
	var xLine = new createjs.Container;
	xLine.x = 350 - 36 * (20 - xstart) * MTDFACTOR;
	xLine.y = 455 - 36 * (21 - ystart) * MTDFACTOR + 36 * ymax * MTDFACTOR;
	maxTopDownViewParts.addChild(xLine);
	var xLineShape = new createjs.Shape;
	xLineShape.graphics.beginStroke("#FFF").moveTo(0, 0).lineTo(36 * xmax * MTDFACTOR, 0);
	xLine.addChild(xLineShape);
	var xLineText = new createjs.Text(Math.floor(xmaxr / 12) + "' " + xmaxr % 12 + '"', "16px sans-serif", "#FFFFFF");
	xLine.addChild(xLineText);
	updateZOrder();
	maxSortElements();
	maxTopDownViewParts.scaleX = maxTopDownViewParts.scaleY = 1.25;
	return maxTopDownView
}

function maxFillColor(data) {
	if (data.ladder) return "rgba(255,192,64,0.8)";
	else return "rgba(192,192,192,0.8)"
}

function pointInPart(part, x, y) {
	if (part.partData.platform) return false;
	switch (part.partRotation) {
		case 0:
			if (part.partCoordinates.x == x && y <= part.partCoordinates.y && y > part.partCoordinates.y - part.partData.gridSize.y) return true;
			break;
		case -90:
			if (part.partCoordinates.y == y && x <= part.partCoordinates.x && x > part.partCoordinates.x - part.partData.gridSize.y) return true;
			break;
		case 180:
			if (part.partCoordinates.x == x && y >= part.partCoordinates.y && y < part.partCoordinates.y + part.partData.gridSize.y) return true;
			break;
		case 90:
			if (part.partCoordinates.y == y && x >= part.partCoordinates.x && x < part.partCoordinates.x + part.partData.gridSize.y) return true;
			break;
		default:
			break
	}
	return false
}

function maxbackgroundClicked(event) {
	stage.removeChild(maxTopDownView);
	toolTipText.visible = true
}

function maxSortElements() {
	var sortFunction = function(obj1, obj2, options) {
		if (obj1.PRIORITY && obj2.PRIORITY && obj1.PRIORITY == obj2.PRIORITY) return 0;
		else if (obj1.PRIORITY && !obj2.PRIORITY || obj1.PRIORITY > obj2.PRIORITY) return 1;
		else if (obj2.PRIORITY && !obj1.PRIORITY || obj2.PRIORITY > obj1.PRIORITY) return -1;
		else {
			return -1
		}
	};
	maxTopDownView.sortChildren(sortFunction)
}