/*!

jQuery pub/sub plugin by Peter Higgins (dante@dojotoolkit.org)

Loosely based on Dojo publish/subscribe API, limited in scope. Rewritten blindly.

Original is (c) Dojo Foundation 2004-2010. Released under either AFL or new BSD, see:
http://dojofoundation.org/license for more information.

*/
(function (b) { var a = {}; b.publish = function (d, c) { a[d] && b.each(a[d], function () { this.apply(b, c || []) }) }; b.subscribe = function (c, d) { if (!a[c]) { a[c] = [] } a[c].push(d); return [c, d] }; b.unsubscribe = function (d) { var c = d[0]; a[c] && b.each(a[c], function (e) { if (this == d[1]) { a[c].splice(e, 1) } }) } })(jQuery);
/*!
URL.js - Mutating URLs

Version: 1.3.1

Author: Rodney Rehm
Web: http://medialize.github.com/URI.js/

Licensed under
MIT License http://www.opensource.org/licenses/mit-license
GPL v3 http://opensource.org/licenses/GPL-3.0

*/
(function (d) { function g(m) { return m.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1") } function e(m) { return String(Object.prototype.toString.call(m)) === "[object Array]" } function j(p, o) { var q = {}, m, n; if (e(o)) { for (m = 0, n = o.length; m < n; m++) { q[o[m]] = true } } else { q[o] = true } for (m = 0, n = p.length; m < n; m++) { if (q[p[m]] !== d) { p.splice(m, 1); n--; m-- } } return p } var h = function (m, n) { if (!(this instanceof h)) { return new h(m) } if (m === d) { m = location.href + "" } this.href(m); if (n !== d) { return this.absoluteTo(n) } return this }, c = h.prototype; h.idn_expression = /[^a-z0-9\.-]/i; h.punycode_expression = /(xn--)/i; h.ip4_expression = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/; h.ip6_expression = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/; h.find_uri_expression = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/ig; h.defaultPorts = { http: "80", https: "443", ftp: "21" }; h.invalid_hostname_characters = /[^a-zA-Z0-9\.-]/; h.encode = encodeURIComponent; h.decode = decodeURIComponent; h.characters = { pathname: { encode: { expression: /%(24|26|2B|2C|3B|3D|3A|40)/ig, map: { "%24": "$", "%26": "&", "%2B": "+", "%2C": ",", "%3B": ";", "%3D": "=", "%3A": ":", "%40": "@"} }, decode: { expression: /[\/\?#]/g, map: { "/": "%2F", "?": "%3F", "#": "%23"}}} }; h.encodeQuery = function (m) { return encodeURIComponent(m + "").replace(/%20/g, "+") }; h.decodeQuery = function (m) { return decodeURIComponent((m + "").replace(/\+/g, "%20")) }; h.recodePath = function (n) { var m = (n + "").split("/"); for (var o = 0, p = m.length; o < p; o++) { m[o] = h.encodePathSegment(h.decode(m[o])) } return m.join("/") }; h.decodePath = function (n) { var m = (n + "").split("/"); for (var o = 0, p = m.length; o < p; o++) { m[o] = h.decodePathSegment(m[o]) } return m.join("/") }; var f = { encode: "encode", decode: "decode" }, k; for (k in f) { h[k + "PathSegment"] = (function (m) { return function (n) { return window[m + "URIComponent"](n + "").replace(h.characters.pathname[m].expression, function (o) { return h.characters.pathname[m].map[o] }) } })(f[k]) } h.parse = function (m) { var p, n, o = {}; p = m.indexOf("#"); if (p > -1) { o.fragment = m.substring(p + 1) || null; m = m.substring(0, p) } p = m.indexOf("?"); if (p > -1) { o.query = m.substring(p + 1) || null; m = m.substring(0, p) } p = m.indexOf("://"); if (p > -1) { o.protocol = m.substring(0, p); m = m.substring(p + 3); m = h.parseAuthority(m, o) } o.path = m; return o }; h.parseHost = function (m, n) { var p = m.indexOf("/"); if (p === -1) { p = m.length } if (m[0] === "[") { var o = m.indexOf("]"); n.hostname = m.substring(1, o) || null; n.port = m.substring(o + 2, p) || null } else { if (m.indexOf(":") !== m.lastIndexOf(":")) { n.hostname = m.substring(0, p) || null; n.port = null } else { t = m.substring(0, p).split(":"); n.hostname = t[0] || null; n.port = t[1] || null } } if (n.hostname && m.substring(p)[0] !== "/") { p++; m = "/" + m } return m.substring(p) || "/" }; h.parseAuthority = function (n, o) { var p = n.indexOf("@"), m = n.indexOf("/"); if (p > -1 && (m === -1 || p < m)) { t = n.substring(0, p).split(":"); o.username = t[0] ? h.decode(t[0]) : null; o.password = t[1] ? h.decode(t[1]) : null; n = n.substring(p + 1) } else { o.username = null; o.password = null } return h.parseHost(n, o) }; h.parseQuery = function (p) { if (!p) { return {} } p = p.replace(/&+/g, "&").replace(/^\?*&*|&+$/g, ""); if (!p) { return {} } var n = {}, u = p.split("&"), r = u.length; for (var q = 0; q < r; q++) { var m = u[q].split("="), o = h.decodeQuery(m.shift()), s = m.length ? h.decodeQuery(m.join("=")) : null; if (n[o]) { if (typeof n[o] === "string") { n[o] = [n[o]] } n[o].push(s) } else { n[o] = s } } return n }; h.build = function (n) { var m = ""; if (typeof n.protocol === "string" && n.protocol.length) { m += n.protocol + "://" } m += (h.buildAuthority(n) || ""); if (typeof n.path === "string") { if (n.path[0] !== "/" && typeof n.hostname === "string") { m += "/" } m += n.path } if (typeof n.query == "string") { m += "?" + n.query } if (typeof n.fragment === "string") { m += "#" + n.fragment } return m }; h.buildHost = function (n) { var m = ""; if (!n.hostname) { return "" } else { if (h.ip6_expression.test(n.hostname)) { if (n.port) { m += "[" + n.hostname + "]:" + n.port } else { m += n.hostname } } else { m += n.hostname; if (n.port) { m += ":" + n.port } } } return m }; h.buildAuthority = function (n) { var m = ""; if (n.username) { m += h.encode(n.username); if (n.password) { m += ":" + h.encode(n.password) } m += "@" } m += h.buildHost(n); return m }; h.buildQuery = function (q, s) { var o = ""; for (var n in q) { if (Object.hasOwnProperty.call(q, n) && n) { if (e(q[n])) { var r = {}; for (var m = 0, p = q[n].length; m < p; m++) { if (q[n][m] !== d && r[q[n][m] + ""] === d) { o += "&" + h.buildQueryParameter(n, q[n][m]); if (s !== true) { r[q[n][m] + ""] = true } } } } else { if (q[n] !== d) { o += "&" + h.buildQueryParameter(n, q[n]) } } } } return o.substring(1) }; h.buildQueryParameter = function (m, n) { return h.encodeQuery(m) + (n !== null ? "=" + h.encodeQuery(n) : "") }; h.addQuery = function (p, m, o) { if (typeof m === "object") { for (var n in m) { if (Object.prototype.hasOwnProperty.call(m, n)) { h.addQuery(p, n, m[n]) } } } else { if (typeof m === "string") { if (p[m] === d) { p[m] = o; return } else { if (typeof p[m] === "string") { p[m] = [p[m]] } } if (!e(o)) { o = [o] } p[m] = p[m].concat(o) } else { throw new TypeError("URI.addQuery() accepts an object, string as the name parameter") } } }; h.removeQuery = function (r, m, q) { if (e(m)) { for (var o = 0, p = m.length; o < p; o++) { r[m[o]] = d } } else { if (typeof m === "object") { for (var n in m) { if (Object.prototype.hasOwnProperty.call(m, n)) { h.removeQuery(r, n, m[n]) } } } else { if (typeof m === "string") { if (q !== d) { if (r[m] === q) { r[m] = d } else { if (e(r[m])) { r[m] = j(r[m], q) } } } else { r[m] = d } } else { throw new TypeError("URI.addQuery() accepts an object, string as the first parameter") } } } }; h.commonPath = function (n, m) { var o = Math.min(n.length, m.length), p; for (p = 0; p < o; p++) { if (n[p] !== m[p]) { p--; break } } if (p < 1) { return n[0] === m[0] && n[0] === "/" ? "/" : "" } if (n[p] !== "/") { p = n.substring(0, p).lastIndexOf("/") } return n.substring(0, p + 1) }; h.withinString = function (m, n) { return m.replace(h.find_uri_expression, n) }; h.ensureValidHostname = function (m) { if (m.match(h.invalid_hostname_characters)) { if (!window.punycode) { throw new TypeError("Hostname '" + m + "' contains characters other than [A-Z0-9.-] and Punycode.js is not available") } if (punycode.toASCII(m).match(h.invalid_hostname_characters)) { throw new TypeError("Hostname '" + m + "' contains characters other than [A-Z0-9.-]") } } }; c.build = function (m) { if (m === true) { this._deferred_build = true } else { if (m === d || this._deferred_build) { this._string = h.build(this._parts); this._deferred_build = false } } return this }; c.toString = function () { return this.build(false)._string }; c.valueOf = function () { return this.toString() }; f = { protocol: "protocol", username: "username", password: "password", hostname: "hostname", port: "port" }; for (k in f) { c[k] = (function (m) { return function (n, o) { if (n === d) { return this._parts[m] || "" } else { this._parts[m] = n; this.build(!o); return this } } })(f[k]) } f = { query: "?", fragment: "#" }; for (k in f) { c[k] = (function (m, n) { return function (o, p) { if (o === d) { return this._parts[m] || "" } else { if (o !== null) { o = o + ""; if (o[0] === n) { o = o.substring(1) } } this._parts[m] = o; this.build(!p); return this } } })(k, f[k]) } f = { search: ["?", "query"], hash: ["#", "fragment"] }; for (k in f) { c[k] = (function (m, n) { return function (o, q) { var p = this[m](o, q); return typeof p === "string" && p.length ? (n + p) : p } })(f[k][1], f[k][0]) } c.pathname = function (m, o) { if (m === d || m === true) { var n = this._parts.path || "/"; return m ? h.decodePath(n) : n } else { this._parts.path = m ? h.recodePath(m) : "/"; this.build(!o); return this } }; c.path = c.pathname; c.href = function (m, r) { if (m === d) { return this.toString() } else { this._string = ""; this._parts = { protocol: null, username: null, password: null, hostname: null, port: null, path: null, query: null, fragment: null }; var o = m instanceof h, p = typeof m === "object" && (m.hostname || m.path), n; if (typeof m === "string") { this._parts = h.parse(m) } else { if (o || p) { var q = o ? m._parts : m; for (n in q) { if (Object.hasOwnProperty.call(this._parts, n)) { this._parts[n] = q[n] } } } else { throw new TypeError("invalid input") } } this.build(!r); return this } }; c.is = function (q) { var r = false, o = false, m = false, n = false, u = false, s = false, p = true; if (this._parts.hostname) { p = false; o = h.ip4_expression.test(this._parts.hostname); m = h.ip6_expression.test(this._parts.hostname); r = o || m; n = !r; u = n && h.idn_expression.test(this._parts.hostname); s = n && h.punycode_expression.test(this._parts.hostname) } switch (q.toLowerCase()) { case "relative": return p; case "domain": case "name": return n; case "ip": return r; case "ip4": case "ipv4": case "inet4": return o; case "ip6": case "ipv6": case "inet6": return m; case "idn": return u; case "punycode": return s } return null }; var a = c.protocol, l = c.port, i = c.hostname; c.protocol = function (m, n) { if (m !== d) { if (m) { if (m[m.length - 1] === ":") { m = m.substring(0, m.length - 1) } else { if (m.match(/[^a-zA-z0-9\.+-]/)) { throw new TypeError("Protocol '" + m + "' contains characters other than [A-Z0-9.+-]") } } } } return a.call(this, m, n) }; c.port = function (m, n) { if (m !== d) { if (m === 0) { m = null } if (m) { m += ""; if (m[0] === ":") { m = m.substring(1) } if (m.match(/[^0-9]/)) { throw new TypeError("Port '" + m + "' contains characters other than [0-9]") } } } return l.call(this, m, n) }; c.hostname = function (n, o) { if (n !== d) { var m = {}; h.parseHost(n, m); n = m.hostname } return i.call(this, n, o) }; c.host = function (m, n) { if (m === d) { return this._parts.hostname ? h.buildHost(this._parts) : "" } else { h.parseHost(m, this._parts); this.build(!n); return this } }; c.authority = function (m, n) { if (m === d) { return this._parts.hostname ? h.buildAuthority(this._parts) : "" } else { h.parseAuthority(m, this._parts); this.build(!n); return this } }; c.subdomain = function (n, r) { if (n === d) { if (!this._parts.hostname || this.is("IP")) { return "" } var m = this._parts.hostname.length - this.domain().length - 1; return this._parts.hostname.substring(0, m) || "" } else { var q = this._parts.hostname.length - this.domain().length, p = this._parts.hostname.substring(0, q), o = new RegExp("^" + g(p)); if (n && n[n.length - 1] !== ".") { n += "." } if (n) { h.ensureValidHostname(n) } this._parts.hostname = this._parts.hostname.replace(o, n); this.build(!r); return this } }; c.domain = function (m, o) { if (m === d) { if (!this._parts.hostname || this.is("IP")) { return "" } return this._parts.hostname.match(/\.?([^\.]+\.[^\.]+)$/)[1] || this._parts.hostname } else { if (!m) { throw new TypeError("cannot set domain empty") } h.ensureValidHostname(m); if (!this._parts.hostname || this.is("IP")) { this._parts.hostname = m } else { var n = new RegExp(g(this.domain()) + "$"); this._parts.hostname = this._parts.hostname.replace(n, m) } this.build(!o); return this } }; c.tld = function (m, o) { if (m === d) { if (!this._parts.hostname || this.is("IP")) { return "" } var p = this._parts.hostname.lastIndexOf("."); return this._parts.hostname.substring(p + 1) } else { if (!m) { throw new TypeError("cannot set TLD empty") } else { if (m.match(/[^a-zA-Z0-9-]/)) { throw new TypeError("TLD '" + m + "' contains characters other than [A-Z0-9]") } else { if (!this._parts.hostname || this.is("IP")) { throw new ReferenceError("cannot set TLD on non-domain host") } else { var n = new RegExp(g(this.tld()) + "$"); this._parts.hostname = this._parts.hostname.replace(n, m) } } } this.build(!o); return this } }; c.directory = function (o, s) { if (o === d || o === true) { if (!this._parts.path || this._parts.path === "/") { return "/" } var n = this._parts.path.length - this.filename().length - 1, q = this._parts.path.substring(0, n) || "/"; return o ? h.decodePath(q) : q } else { var r = this._parts.path.length - this.filename().length, m = this._parts.path.substring(0, r), p = new RegExp("^" + g(m)); if (!this.is("relative")) { if (!o) { o = "/" } if (o[0] !== "/") { o = "/" + o } } if (o && o[o.length - 1] !== "/") { o += "/" } o = h.recodePath(o); this._parts.path = this._parts.path.replace(p, o); this.build(!s); return this } }; c.filename = function (n, q) { if (n === d || n === true) { if (!this._parts.path || this._parts.path === "/") { return "" } var r = this._parts.path.lastIndexOf("/"), p = this._parts.path.substring(r + 1); return n ? h.decodePathSegment(p) : p } else { var m = false; if (n[0] === "/") { n = n.substring(1) } if (n.match(/\.?\//)) { m = true } var o = new RegExp(g(this.filename()) + "$"); n = h.recodePath(n); this._parts.path = this._parts.path.replace(o, n); if (m) { this.normalizePath(q) } else { this.build(!q) } return this } }; c.suffix = function (n, r) { if (n === d || n === true) { if (!this._parts.path || this._parts.path === "/") { return "" } var m = this.filename(), u = m.lastIndexOf("."), p; if (u === -1) { return "" } p = m.substring(u + 1); res = (/^[a-z0-9%]+$/i).test(p) ? p : ""; return n ? h.decodePathSegment(res) : res } else { if (n[0] === ".") { n = n.substring(1) } var q = this.suffix(), o; if (!q) { if (!n) { return this } this._parts.path += "." + h.recodePath(n) } else { if (!n) { o = new RegExp(g("." + q) + "$") } else { o = new RegExp(g(q) + "$") } } if (o) { n = h.recodePath(n); this._parts.path = this._parts.path.replace(o, n) } this.build(!r); return this } }; var b = c.query; c.query = function (m, n) { if (m === true) { return h.parseQuery(this._parts.query) } else { if (m !== d && typeof m !== "string") { this._parts.query = h.buildQuery(m); this.build(!n); return this } else { return b.call(this, m, n) } } }; c.addQuery = function (m, o, p) { var n = h.parseQuery(this._parts.query); h.addQuery(n, m, o); this._parts.query = h.buildQuery(n); if (typeof m !== "string") { p = o } this.build(!p); return this }; c.removeQuery = function (m, o, p) { var n = h.parseQuery(this._parts.query); h.removeQuery(n, m, o); this._parts.query = h.buildQuery(n); if (typeof m !== "string") { p = o } this.build(!p); return this }; c.addSearch = c.addQuery; c.removeSearch = c.removeQuery; c.normalize = function () { return this.normalizeProtocol(false).normalizeHostname(false).normalizePort(false).normalizePath(false).normalizeQuery(false).normalizeFragment(false).build() }; c.normalizeProtocol = function (m) { if (typeof this._parts.protocol === "string") { this._parts.protocol = this._parts.protocol.toLowerCase(); this.build(!m) } return this }; c.normalizeHostname = function (m) { if (this._parts.hostname) { if (this.is("IDN") && window.punycode) { this._parts.hostname = punycode.toASCII(this._parts.hostname) } else { if (this.is("IPv6") && window.IPv6) { this._parts.hostname = IPv6.best(this._parts.hostname) } } this._parts.hostname = this._parts.hostname.toLowerCase(); this.build(!m) } return this }; c.normalizePort = function (m) { if (typeof this._parts.protocol === "string" && this._parts.port === h.defaultPorts[this._parts.protocol]) { this._parts.port = null; this.build(!m) } return this }; c.normalizePath = function (r) { if (!this._parts.path || this._parts.path === "/") { return this } var o, n, p = this._parts.path, q, m; if (p[0] !== "/") { if (p[0] === ".") { n = p.substring(0, p.indexOf("/")) } o = true; p = "/" + p } p = p.replace(/(\/(\.\/)+)|\/{2,}/g, "/"); while (true) { q = p.indexOf("/../"); if (q === -1) { break } else { if (q === 0) { p = p.substring(3); break } } m = p.substring(0, q).lastIndexOf("/"); if (m === -1) { m = q } p = p.substring(0, m) + p.substring(q + 3) } if (o && this.is("relative")) { if (n) { p = n + p } else { p = p.substring(1) } } p = h.recodePath(p); this._parts.path = p; this.build(!r); return this }; c.normalizePathname = c.normalizePath; c.normalizeQuery = function (m) { if (typeof this._parts.query === "string") { if (!this._parts.query.length) { this._parts.query = null } else { this.query(h.parseQuery(this._parts.query)) } this.build(!m) } return this }; c.normalizeFragment = function (m) { if (!this._parts.fragment) { this._parts.fragment = null; this.build(!m) } return this }; c.normalizeSearch = c.normalizeQuery; c.normalizeHash = c.normalizeFragment; c.readable = function () { var r = new h(this); r.username("").password("").normalize(); var p = ""; if (r._parts.protocol) { p += r._parts.protocol + "://" } if (r._parts.hostname) { if (r.is("punycode") && window.punycode) { p += punycode.toUnicode(r._parts.hostname); if (r._parts.port) { p += ":" + r._parts.port } } else { p += r.host() } } if (r._parts.hostname && r._parts.path && r._parts.path[0] !== "/") { p += "/" } p += r.path(true); if (r._parts.query) { var u = ""; for (var o = 0, n = r._parts.query.split("&"), m = n.length; o < m; o++) { var s = (n[o] || "").split("="); u += "&" + h.decodeQuery(s[0]).replace(/&/g, "%26"); if (s[1] !== d) { u += "=" + h.decodeQuery(s[1]).replace(/&/g, "%26") } } p += "?" + u.substring(1) } p += r.hash(); return p }; c.absoluteTo = function (q) { if (!this.is("relative")) { throw new Error("Cannot resolve non-relative URL") } if (!(q instanceof h)) { q = new h(q) } var m = new h(this), o = ["protocol", "username", "password", "hostname", "port"]; for (var n = 0, r; r = o[n]; n++) { m._parts[r] = q._parts[r] } if (m.path()[0] !== "/") { m._parts.path = q.directory() + "/" + m._parts.path; m.normalizePath() } m.build(); return m }; c.relativeTo = function (q) { if (!(q instanceof h)) { q = new h(q) } if (this.path()[0] !== "/" || q.path()[0] !== "/") { throw new Error("Cannot calculate common path from non-relative URLs") } var n = new h(this), u = ["protocol", "username", "password", "hostname", "port"], s = h.commonPath(n.path(), q.path()), x = q.directory(); for (var r = 0, o; o = u[r]; r++) { n._parts[o] = null } if (!s || s === "/") { return n } if (x + "/" === s) { n._parts.path = "./" + n.filename() } else { var w = "../", m = new RegExp("^" + g(s)), v = x.replace(m, "/").match(/\//g).length - 1; while (v--) { w += "../" } n._parts.path = n._parts.path.replace(m, w) } n.build(); return n }; c.equals = function (n) { var q = new h(this), x = new h(n), r = {}, m = {}, u = {}, s, w, v; q.normalize(); x.normalize(); if (q.toString() === x.toString()) { return true } s = q.query(); w = x.query(); q.query(""); x.query(""); if (q.toString() !== x.toString()) { return false } if (s.length !== w.length) { return false } r = h.parseQuery(s); m = h.parseQuery(w); for (v in r) { if (Object.prototype.hasOwnProperty.call(r, v)) { if (!e(r[v])) { if (r[v] !== m[v]) { return false } } else { if (!e(m[v])) { return false } if (r[v].length !== m[v].length) { return false } r[v].sort(); m[v].sort(); for (var p = 0, o = r[v].length; p < o; p++) { if (r[v][p] !== m[v][p]) { return false } } } u[v] = true } } for (v in m) { if (Object.prototype.hasOwnProperty.call(m, v)) { if (!u[v]) { return false } } } return true }; window.URI = h })();
