var COMPILED = !0, goog = goog || {}; goog.global = this; goog.exportPath_ = function(a, b, c) {

a = a.split(".");
c = c || goog.global;
a[0] in c || !c.execScript || c.execScript("var " + a[0]);
for(var d;a.length && (d = a.shift());) {
  a.length || void 0 === b ? c = c[d] ? c[d] : c[d] = {} : c[d] = b
}

}; goog.define = function(a, b) {

var c = b;
COMPILED || goog.global.CLOSURE_DEFINES && Object.prototype.hasOwnProperty.call(goog.global.CLOSURE_DEFINES, a) && (c = goog.global.CLOSURE_DEFINES[a]);
goog.exportPath_(a, c)

}; goog.DEBUG = !0; goog.LOCALE = “en”; goog.TRUSTED_SITE = !0; goog.provide = function(a) {

if(!COMPILED) {
  if(goog.isProvided_(a)) {
    throw Error('Namespace "' + a + '" already declared.');
  }
  delete goog.implicitNamespaces_[a];
  for(var b = a;(b = b.substring(0, b.lastIndexOf("."))) && !goog.getObjectByName(b);) {
    goog.implicitNamespaces_[b] = !0
  }
}
goog.exportPath_(a)

}; goog.setTestOnly = function(a) {

if(COMPILED && !goog.DEBUG) {
  throw a = a || "", Error("Importing test-only code into non-debug environment" + a ? ": " + a : ".");
}

}; COMPILED || (goog.isProvided_ = function(a) {

return!goog.implicitNamespaces_[a] && !!goog.getObjectByName(a)

}, goog.implicitNamespaces_ = {}); goog.getObjectByName = function(a, b) {

for(var c = a.split("."), d = b || goog.global, e;e = c.shift();) {
  if(goog.isDefAndNotNull(d[e])) {
    d = d[e]
  }else {
    return null
  }
}
return d

}; goog.globalize = function(a, b) {

var c = b || goog.global, d;
for(d in a) {
  c[d] = a[d]
}

}; goog.addDependency = function(a, b, c) {

if(goog.DEPENDENCIES_ENABLED) {
  var d;
  a = a.replace(/\\/g, "/");
  for(var e = goog.dependencies_, f = 0;d = b[f];f++) {
    e.nameToPath[d] = a, a in e.pathToNames || (e.pathToNames[a] = {}), e.pathToNames[a][d] = !0
  }
  for(d = 0;b = c[d];d++) {
    a in e.requires || (e.requires[a] = {}), e.requires[a][b] = !0
  }
}

}; goog.ENABLE_DEBUG_LOADER = !0; goog.require = function(a) {

if(!COMPILED && !goog.isProvided_(a)) {
  if(goog.ENABLE_DEBUG_LOADER) {
    var b = goog.getPathFromDeps_(a);
    if(b) {
      goog.included_[b] = !0;
      goog.writeScripts_();
      return
    }
  }
  a = "goog.require could not find: " + a;
  goog.global.console && goog.global.console.error(a);
  throw Error(a);
}

}; goog.basePath = “”; goog.nullFunction = function() { }; goog.identityFunction = function(a, b) {

return a

}; goog.abstractMethod = function() {

throw Error("unimplemented abstract method");

}; goog.addSingletonGetter = function(a) {

a.getInstance = function() {
  if(a.instance_) {
    return a.instance_
  }
  goog.DEBUG && (goog.instantiatedSingletons_[goog.instantiatedSingletons_.length] = a);
  return a.instance_ = new a
}

}; goog.instantiatedSingletons_ = []; goog.DEPENDENCIES_ENABLED = !COMPILED && goog.ENABLE_DEBUG_LOADER; goog.DEPENDENCIES_ENABLED && (goog.included_ = {}, goog.dependencies_ = {pathToNames:{}, nameToPath:{}, requires:{}, visited:{}, written:{}}, goog.inHtmlDocument_ = function() {

var a = goog.global.document;
return"undefined" != typeof a && "write" in a

}, goog.findBasePath_ = function() {

if(goog.global.CLOSURE_BASE_PATH) {
  goog.basePath = goog.global.CLOSURE_BASE_PATH
}else {
  if(goog.inHtmlDocument_()) {
    for(var a = goog.global.document.getElementsByTagName("script"), b = a.length - 1;0 <= b;--b) {
      var c = a[b].src, d = c.lastIndexOf("?"), d = -1 == d ? c.length : d;
      if("base.js" == c.substr(d - 7, 7)) {
        goog.basePath = c.substr(0, d - 7);
        break
      }
    }
  }
}

}, goog.importScript_ = function(a) {

var b = goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_;
!goog.dependencies_.written[a] && b(a) && (goog.dependencies_.written[a] = !0)

}, goog.writeScriptTag_ = function(a) {

if(goog.inHtmlDocument_()) {
  var b = goog.global.document;
  if("complete" == b.readyState) {
    if(/\bdeps.js$/.test(a)) {
      return!1
    }
    throw Error('Cannot write "' + a + '" after document load');
  }
  b.write('<script type="text/javascript" src="' + a + '">\x3c/script>');
  return!0
}
return!1

}, goog.writeScripts_ = function() {

function a(e) {
  if(!(e in d.written)) {
    if(!(e in d.visited) && (d.visited[e] = !0, e in d.requires)) {
      for(var g in d.requires[e]) {
        if(!goog.isProvided_(g)) {
          if(g in d.nameToPath) {
            a(d.nameToPath[g])
          }else {
            throw Error("Undefined nameToPath for " + g);
          }
        }
      }
    }
    e in c || (c[e] = !0, b.push(e))
  }
}
var b = [], c = {}, d = goog.dependencies_, e;
for(e in goog.included_) {
  d.written[e] || a(e)
}
for(e = 0;e < b.length;e++) {
  if(b[e]) {
    goog.importScript_(goog.basePath + b[e])
  }else {
    throw Error("Undefined script input");
  }
}

}, goog.getPathFromDeps_ = function(a) {

return a in goog.dependencies_.nameToPath ? goog.dependencies_.nameToPath[a] : null

}, goog.findBasePath_(), goog.global.CLOSURE_NO_DEPS || goog.importScript_(goog.basePath + “deps.js”)); goog.typeOf = function(a) {

var b = typeof a;
if("object" == b) {
  if(a) {
    if(a instanceof Array) {
      return"array"
    }
    if(a instanceof Object) {
      return b
    }
    var c = Object.prototype.toString.call(a);
    if("[object Window]" == c) {
      return"object"
    }
    if("[object Array]" == c || "number" == typeof a.length && "undefined" != typeof a.splice && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("splice")) {
      return"array"
    }
    if("[object Function]" == c || "undefined" != typeof a.call && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("call")) {
      return"function"
    }
  }else {
    return"null"
  }
}else {
  if("function" == b && "undefined" == typeof a.call) {
    return"object"
  }
}
return b

}; goog.isDef = function(a) {

return void 0 !== a

}; goog.isNull = function(a) {

return null === a

}; goog.isDefAndNotNull = function(a) {

return null != a

}; goog.isArray = function(a) {

return"array" == goog.typeOf(a)

}; goog.isArrayLike = function(a) {

var b = goog.typeOf(a);
return"array" == b || "object" == b && "number" == typeof a.length

}; goog.isDateLike = function(a) {

return goog.isObject(a) && "function" == typeof a.getFullYear

}; goog.isString = function(a) {

return"string" == typeof a

}; goog.isBoolean = function(a) {

return"boolean" == typeof a

}; goog.isNumber = function(a) {

return"number" == typeof a

}; goog.isFunction = function(a) {

return"function" == goog.typeOf(a)

}; goog.isObject = function(a) {

var b = typeof a;
return"object" == b && null != a || "function" == b

}; goog.getUid = function(a) {

return a[goog.UID_PROPERTY_] || (a[goog.UID_PROPERTY_] = ++goog.uidCounter_)

}; goog.removeUid = function(a) {

"removeAttribute" in a && a.removeAttribute(goog.UID_PROPERTY_);
try {
  delete a[goog.UID_PROPERTY_]
}catch(b) {
}

}; goog.UID_PROPERTY_ = “closure_uid_” + (1E9 * Math.random() >>> 0); goog.uidCounter_ = 0; goog.getHashCode = goog.getUid; goog.removeHashCode = goog.removeUid; goog.cloneObject = function(a) {

var b = goog.typeOf(a);
if("object" == b || "array" == b) {
  if(a.clone) {
    return a.clone()
  }
  var b = "array" == b ? [] : {}, c;
  for(c in a) {
    b[c] = goog.cloneObject(a[c])
  }
  return b
}
return a

}; goog.bindNative_ = function(a, b, c) {

return a.call.apply(a.bind, arguments)

}; goog.bindJs_ = function(a, b, c) {

if(!a) {
  throw Error();
}
if(2 < arguments.length) {
  var d = Array.prototype.slice.call(arguments, 2);
  return function() {
    var c = Array.prototype.slice.call(arguments);
    Array.prototype.unshift.apply(c, d);
    return a.apply(b, c)
  }
}
return function() {
  return a.apply(b, arguments)
}

}; goog.bind = function(a, b, c) {

Function.prototype.bind && -1 != Function.prototype.bind.toString().indexOf("native code") ? goog.bind = goog.bindNative_ : goog.bind = goog.bindJs_;
return goog.bind.apply(null, arguments)

}; goog.partial = function(a, b) {

var c = Array.prototype.slice.call(arguments, 1);
return function() {
  var b = Array.prototype.slice.call(arguments);
  b.unshift.apply(b, c);
  return a.apply(this, b)
}

}; goog.mixin = function(a, b) {

for(var c in b) {
  a[c] = b[c]
}

}; goog.now = goog.TRUSTED_SITE && Date.now || function() {

return+new Date

}; goog.globalEval = function(a) {

if(goog.global.execScript) {
  goog.global.execScript(a, "JavaScript")
}else {
  if(goog.global.eval) {
    if(null == goog.evalWorksForGlobals_ && (goog.global.eval("var _et_ = 1;"), "undefined" != typeof goog.global._et_ ? (delete goog.global._et_, goog.evalWorksForGlobals_ = !0) : goog.evalWorksForGlobals_ = !1), goog.evalWorksForGlobals_) {
      goog.global.eval(a)
    }else {
      var b = goog.global.document, c = b.createElement("script");
      c.type = "text/javascript";
      c.defer = !1;
      c.appendChild(b.createTextNode(a));
      b.body.appendChild(c);
      b.body.removeChild(c)
    }
  }else {
    throw Error("goog.globalEval not available");
  }
}

}; goog.evalWorksForGlobals_ = null; goog.getCssName = function(a, b) {

var c = function(a) {
  return goog.cssNameMapping_[a] || a
}, d = function(a) {
  a = a.split("-");
  for(var b = [], d = 0;d < a.length;d++) {
    b.push(c(a[d]))
  }
  return b.join("-")
}, d = goog.cssNameMapping_ ? "BY_WHOLE" == goog.cssNameMappingStyle_ ? c : d : function(a) {
  return a
};
return b ? a + "-" + d(b) : d(a)

}; goog.setCssNameMapping = function(a, b) {

goog.cssNameMapping_ = a;
goog.cssNameMappingStyle_ = b

}; !COMPILED && goog.global.CLOSURE_CSS_NAME_MAPPING && (goog.cssNameMapping_ = goog.global.CLOSURE_CSS_NAME_MAPPING); goog.getMsg = function(a, b) {

var c = b || {}, d;
for(d in c) {
  var e = ("" + c[d]).replace(/\$/g, "$$$$");
  a = a.replace(RegExp("\\{\\$" + d + "\\}", "gi"), e)
}
return a

}; goog.getMsgWithFallback = function(a, b) {

return a

}; goog.exportSymbol = function(a, b, c) {

goog.exportPath_(a, b, c)

}; goog.exportProperty = function(a, b, c) {

a[b] = c

}; goog.inherits = function(a, b) {

function c() {
}
c.prototype = b.prototype;
a.superClass_ = b.prototype;
a.prototype = new c;
a.prototype.constructor = a

}; goog.base = function(a, b, c) {

var d = arguments.callee.caller;
if(goog.DEBUG && !d) {
  throw Error("arguments.caller not defined.  goog.base() expects not to be running in strict mode. See http://www.ecma-international.org/ecma-262/5.1/#sec-C");
}
if(d.superClass_) {
  return d.superClass_.constructor.apply(a, Array.prototype.slice.call(arguments, 1))
}
for(var e = Array.prototype.slice.call(arguments, 2), f = !1, g = a.constructor;g;g = g.superClass_ && g.superClass_.constructor) {
  if(g.prototype[b] === d) {
    f = !0
  }else {
    if(f) {
      return g.prototype[b].apply(a, e)
    }
  }
}
if(a[b] === d) {
  return a.constructor.prototype[b].apply(a, e)
}
throw Error("goog.base called from a method of one name to a method of a different name");

}; goog.scope = function(a) {

a.call(goog.global)

}; goog.debug = {}; goog.debug.Error = function(a) {

Error.captureStackTrace ? Error.captureStackTrace(this, goog.debug.Error) : this.stack = Error().stack || "";
a && (this.message = String(a))

}; goog.inherits(goog.debug.Error, Error); goog.debug.Error.prototype.name = “CustomError”; goog.string = {}; goog.string.Unicode = {NBSP:“u00a0”}; goog.string.startsWith = function(a, b) {

return 0 == a.lastIndexOf(b, 0)

}; goog.string.endsWith = function(a, b) {

var c = a.length - b.length;
return 0 <= c && a.indexOf(b, c) == c

}; goog.string.caseInsensitiveStartsWith = function(a, b) {

return 0 == goog.string.caseInsensitiveCompare(b, a.substr(0, b.length))

}; goog.string.caseInsensitiveEndsWith = function(a, b) {

return 0 == goog.string.caseInsensitiveCompare(b, a.substr(a.length - b.length, b.length))

}; goog.string.caseInsensitiveEquals = function(a, b) {

return a.toLowerCase() == b.toLowerCase()

}; goog.string.subs = function(a, b) {

for(var c = a.split("%s"), d = "", e = Array.prototype.slice.call(arguments, 1);e.length && 1 < c.length;) {
  d += c.shift() + e.shift()
}
return d + c.join("%s")

}; goog.string.collapseWhitespace = function(a) {

return a.replace(/[\s\xa0]+/g, " ").replace(/^\s+|\s+$/g, "")

}; goog.string.isEmpty = function(a) {

return/^[\s\xa0]*$/.test(a)

}; goog.string.isEmptySafe = function(a) {

return goog.string.isEmpty(goog.string.makeSafe(a))

}; goog.string.isBreakingWhitespace = function(a) {

return!/[^\t\n\r ]/.test(a)

}; goog.string.isAlpha = function(a) {

return!/[^a-zA-Z]/.test(a)

}; goog.string.isNumeric = function(a) {

return!/[^0-9]/.test(a)

}; goog.string.isAlphaNumeric = function(a) {

return!/[^a-zA-Z0-9]/.test(a)

}; goog.string.isSpace = function(a) {

return" " == a

}; goog.string.isUnicodeChar = function(a) {

return 1 == a.length && " " <= a && "~" >= a || "\u0080" <= a && "\ufffd" >= a

}; goog.string.stripNewlines = function(a) {

return a.replace(/(\r\n|\r|\n)+/g, " ")

}; goog.string.canonicalizeNewlines = function(a) {

return a.replace(/(\r\n|\r|\n)/g, "\n")

}; goog.string.normalizeWhitespace = function(a) {

return a.replace(/\xa0|\s/g, " ")

}; goog.string.normalizeSpaces = function(a) {

return a.replace(/\xa0|[ \t]+/g, " ")

}; goog.string.collapseBreakingSpaces = function(a) {

return a.replace(/[\t\r\n ]+/g, " ").replace(/^[\t\r\n ]+|[\t\r\n ]+$/g, "")

}; goog.string.trim = function(a) {

return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g, "")

}; goog.string.trimLeft = function(a) {

return a.replace(/^[\s\xa0]+/, "")

}; goog.string.trimRight = function(a) {

return a.replace(/[\s\xa0]+$/, "")

}; goog.string.caseInsensitiveCompare = function(a, b) {

var c = String(a).toLowerCase(), d = String(b).toLowerCase();
return c < d ? -1 : c == d ? 0 : 1

}; goog.string.numerateCompareRegExp_ = /(.d+)|(d+)|(D+)/g; goog.string.numerateCompare = function(a, b) {

if(a == b) {
  return 0
}
if(!a) {
  return-1
}
if(!b) {
  return 1
}
for(var c = a.toLowerCase().match(goog.string.numerateCompareRegExp_), d = b.toLowerCase().match(goog.string.numerateCompareRegExp_), e = Math.min(c.length, d.length), f = 0;f < e;f++) {
  var g = c[f], h = d[f];
  if(g != h) {
    return c = parseInt(g, 10), !isNaN(c) && (d = parseInt(h, 10), !isNaN(d) && c - d) ? c - d : g < h ? -1 : 1
  }
}
return c.length != d.length ? c.length - d.length : a < b ? -1 : 1

}; goog.string.urlEncode = function(a) {

return encodeURIComponent(String(a))

}; goog.string.urlDecode = function(a) {

return decodeURIComponent(a.replace(/\+/g, " "))

}; goog.string.newLineToBr = function(a, b) {

return a.replace(/(\r\n|\r|\n)/g, b ? "<br />" : "<br>")

}; goog.string.htmlEscape = function(a, b) {

if(b) {
  return a.replace(goog.string.amperRe_, "&amp;").replace(goog.string.ltRe_, "&lt;").replace(goog.string.gtRe_, "&gt;").replace(goog.string.quotRe_, "&quot;")
}
if(!goog.string.allRe_.test(a)) {
  return a
}
-1 != a.indexOf("&") && (a = a.replace(goog.string.amperRe_, "&amp;"));
-1 != a.indexOf("<") && (a = a.replace(goog.string.ltRe_, "&lt;"));
-1 != a.indexOf(">") && (a = a.replace(goog.string.gtRe_, "&gt;"));
-1 != a.indexOf('"') && (a = a.replace(goog.string.quotRe_, "&quot;"));
return a

}; goog.string.amperRe_ = /&/g; goog.string.ltRe_ = /</g; goog.string.gtRe_ = />/g; goog.string.quotRe_ = /"/g; goog.string.allRe_ = /[&<>"]/; goog.string.unescapeEntities = function(a) {

return goog.string.contains(a, "&") ? "document" in goog.global ? goog.string.unescapeEntitiesUsingDom_(a) : goog.string.unescapePureXmlEntities_(a) : a

}; goog.string.unescapeEntitiesUsingDom_ = function(a) {

var b = {"&amp;":"&", "&lt;":"<", "&gt;":">", "&quot;":'"'}, c = document.createElement("div");
return a.replace(goog.string.HTML_ENTITY_PATTERN_, function(a, e) {
  var f = b[a];
  if(f) {
    return f
  }
  if("#" == e.charAt(0)) {
    var g = Number("0" + e.substr(1));
    isNaN(g) || (f = String.fromCharCode(g))
  }
  f || (c.innerHTML = a + " ", f = c.firstChild.nodeValue.slice(0, -1));
  return b[a] = f
})

}; goog.string.unescapePureXmlEntities_ = function(a) {

return a.replace(/&([^;]+);/g, function(a, c) {
  switch(c) {
    case "amp":
      return"&";
    case "lt":
      return"<";
    case "gt":
      return">";
    case "quot":
      return'"';
    default:
      if("#" == c.charAt(0)) {
        var d = Number("0" + c.substr(1));
        if(!isNaN(d)) {
          return String.fromCharCode(d)
        }
      }
      return a
  }
})

}; goog.string.HTML_ENTITY_PATTERN_ = /&([^;s<&]+);?/g; goog.string.whitespaceEscape = function(a, b) {

return goog.string.newLineToBr(a.replace(/  /g, " &#160;"), b)

}; goog.string.stripQuotes = function(a, b) {

for(var c = b.length, d = 0;d < c;d++) {
  var e = 1 == c ? b : b.charAt(d);
  if(a.charAt(0) == e && a.charAt(a.length - 1) == e) {
    return a.substring(1, a.length - 1)
  }
}
return a

}; goog.string.truncate = function(a, b, c) {

c && (a = goog.string.unescapeEntities(a));
a.length > b && (a = a.substring(0, b - 3) + "...");
c && (a = goog.string.htmlEscape(a));
return a

}; goog.string.truncateMiddle = function(a, b, c, d) {

c && (a = goog.string.unescapeEntities(a));
if(d && a.length > b) {
  d > b && (d = b);
  var e = a.length - d;
  a = a.substring(0, b - d) + "..." + a.substring(e)
}else {
  a.length > b && (d = Math.floor(b / 2), e = a.length - d, a = a.substring(0, d + b % 2) + "..." + a.substring(e))
}
c && (a = goog.string.htmlEscape(a));
return a

}; goog.string.specialEscapeChars_ = {“x00”:“\0”, “b”:“\b”, “f”:“\f”, “n”:“\n”, “r”:“\r”, “t”:“\t”, “x0B”:“\x0B”, '“':'\”', “\”:“\\”}; goog.string.jsEscapeCache_ = {“'”:“\'”}; goog.string.quote = function(a) {

a = String(a);
if(a.quote) {
  return a.quote()
}
for(var b = ['"'], c = 0;c < a.length;c++) {
  var d = a.charAt(c), e = d.charCodeAt(0);
  b[c + 1] = goog.string.specialEscapeChars_[d] || (31 < e && 127 > e ? d : goog.string.escapeChar(d))
}
b.push('"');
return b.join("")

}; goog.string.escapeString = function(a) {

for(var b = [], c = 0;c < a.length;c++) {
  b[c] = goog.string.escapeChar(a.charAt(c))
}
return b.join("")

}; goog.string.escapeChar = function(a) {

if(a in goog.string.jsEscapeCache_) {
  return goog.string.jsEscapeCache_[a]
}
if(a in goog.string.specialEscapeChars_) {
  return goog.string.jsEscapeCache_[a] = goog.string.specialEscapeChars_[a]
}
var b = a, c = a.charCodeAt(0);
if(31 < c && 127 > c) {
  b = a
}else {
  if(256 > c) {
    if(b = "\\x", 16 > c || 256 < c) {
      b += "0"
    }
  }else {
    b = "\\u", 4096 > c && (b += "0")
  }
  b += c.toString(16).toUpperCase()
}
return goog.string.jsEscapeCache_[a] = b

}; goog.string.toMap = function(a) {

for(var b = {}, c = 0;c < a.length;c++) {
  b[a.charAt(c)] = !0
}
return b

}; goog.string.contains = function(a, b) {

return-1 != a.indexOf(b)

}; goog.string.countOf = function(a, b) {

return a && b ? a.split(b).length - 1 : 0

}; goog.string.removeAt = function(a, b, c) {

var d = a;
0 <= b && (b < a.length && 0 < c) && (d = a.substr(0, b) + a.substr(b + c, a.length - b - c));
return d

}; goog.string.remove = function(a, b) {

var c = RegExp(goog.string.regExpEscape(b), "");
return a.replace(c, "")

}; goog.string.removeAll = function(a, b) {

var c = RegExp(goog.string.regExpEscape(b), "g");
return a.replace(c, "")

}; goog.string.regExpEscape = function(a) {

return String(a).replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, "\\$1").replace(/\x08/g, "\\x08")

}; goog.string.repeat = function(a, b) {

return Array(b + 1).join(a)

}; goog.string.padNumber = function(a, b, c) {

a = goog.isDef(c) ? a.toFixed(c) : String(a);
c = a.indexOf(".");
-1 == c && (c = a.length);
return goog.string.repeat("0", Math.max(0, b - c)) + a

}; goog.string.makeSafe = function(a) {

return null == a ? "" : String(a)

}; goog.string.buildString = function(a) {

return Array.prototype.join.call(arguments, "")

}; goog.string.getRandomString = function() {

return Math.floor(2147483648 * Math.random()).toString(36) + Math.abs(Math.floor(2147483648 * Math.random()) ^ goog.now()).toString(36)

}; goog.string.compareVersions = function(a, b) {

for(var c = 0, d = goog.string.trim(String(a)).split("."), e = goog.string.trim(String(b)).split("."), f = Math.max(d.length, e.length), g = 0;0 == c && g < f;g++) {
  var h = d[g] || "", k = e[g] || "", l = RegExp("(\\d*)(\\D*)", "g"), p = RegExp("(\\d*)(\\D*)", "g");
  do {
    var m = l.exec(h) || ["", "", ""], n = p.exec(k) || ["", "", ""];
    if(0 == m[0].length && 0 == n[0].length) {
      break
    }
    var c = 0 == m[1].length ? 0 : parseInt(m[1], 10), q = 0 == n[1].length ? 0 : parseInt(n[1], 10), c = goog.string.compareElements_(c, q) || goog.string.compareElements_(0 == m[2].length, 0 == n[2].length) || goog.string.compareElements_(m[2], n[2])
  }while(0 == c)
}
return c

}; goog.string.compareElements_ = function(a, b) {

return a < b ? -1 : a > b ? 1 : 0

}; goog.string.HASHCODE_MAX_ = 4294967296; goog.string.hashCode = function(a) {

for(var b = 0, c = 0;c < a.length;++c) {
  b = 31 * b + a.charCodeAt(c), b %= goog.string.HASHCODE_MAX_
}
return b

}; goog.string.uniqueStringCounter_ = 2147483648 * Math.random() | 0; goog.string.createUniqueString = function() {

return"goog_" + goog.string.uniqueStringCounter_++

}; goog.string.toNumber = function(a) {

var b = Number(a);
return 0 == b && goog.string.isEmpty(a) ? NaN : b

}; goog.string.isLowerCamelCase = function(a) {

return/^[a-z]+([A-Z][a-z]*)*$/.test(a)

}; goog.string.isUpperCamelCase = function(a) {

return/^([A-Z][a-z]*)+$/.test(a)

}; goog.string.toCamelCase = function(a) {

return String(a).replace(/\-([a-z])/g, function(a, c) {
  return c.toUpperCase()
})

}; goog.string.toSelectorCase = function(a) {

return String(a).replace(/([A-Z])/g, "-$1").toLowerCase()

}; goog.string.toTitleCase = function(a, b) {

var c = goog.isString(b) ? goog.string.regExpEscape(b) : "\\s";
return a.replace(RegExp("(^" + (c ? "|[" + c + "]+" : "") + ")([a-z])", "g"), function(a, b, c) {
  return b + c.toUpperCase()
})

}; goog.string.parseInt = function(a) {

isFinite(a) && (a = String(a));
return goog.isString(a) ? /^\s*-?0x/i.test(a) ? parseInt(a, 16) : parseInt(a, 10) : NaN

}; goog.string.splitLimit = function(a, b, c) {

a = a.split(b);
for(var d = [];0 < c && a.length;) {
  d.push(a.shift()), c--
}
a.length && d.push(a.join(b));
return d

}; goog.asserts = {}; goog.asserts.ENABLE_ASSERTS = goog.DEBUG; goog.asserts.AssertionError = function(a, b) {

b.unshift(a);
goog.debug.Error.call(this, goog.string.subs.apply(null, b));
b.shift();
this.messagePattern = a

}; goog.inherits(goog.asserts.AssertionError, goog.debug.Error); goog.asserts.AssertionError.prototype.name = “AssertionError”; goog.asserts.doAssertFailure_ = function(a, b, c, d) {

var e = "Assertion failed";
if(c) {
  var e = e + (": " + c), f = d
}else {
  a && (e += ": " + a, f = b)
}
throw new goog.asserts.AssertionError("" + e, f || []);

}; goog.asserts.assert = function(a, b, c) {

goog.asserts.ENABLE_ASSERTS && !a && goog.asserts.doAssertFailure_("", null, b, Array.prototype.slice.call(arguments, 2));
return a

}; goog.asserts.fail = function(a, b) {

if(goog.asserts.ENABLE_ASSERTS) {
  throw new goog.asserts.AssertionError("Failure" + (a ? ": " + a : ""), Array.prototype.slice.call(arguments, 1));
}

}; goog.asserts.assertNumber = function(a, b, c) {

goog.asserts.ENABLE_ASSERTS && !goog.isNumber(a) && goog.asserts.doAssertFailure_("Expected number but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
return a

}; goog.asserts.assertString = function(a, b, c) {

goog.asserts.ENABLE_ASSERTS && !goog.isString(a) && goog.asserts.doAssertFailure_("Expected string but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
return a

}; goog.asserts.assertFunction = function(a, b, c) {

goog.asserts.ENABLE_ASSERTS && !goog.isFunction(a) && goog.asserts.doAssertFailure_("Expected function but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
return a

}; goog.asserts.assertObject = function(a, b, c) {

goog.asserts.ENABLE_ASSERTS && !goog.isObject(a) && goog.asserts.doAssertFailure_("Expected object but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
return a

}; goog.asserts.assertArray = function(a, b, c) {

goog.asserts.ENABLE_ASSERTS && !goog.isArray(a) && goog.asserts.doAssertFailure_("Expected array but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
return a

}; goog.asserts.assertBoolean = function(a, b, c) {

goog.asserts.ENABLE_ASSERTS && !goog.isBoolean(a) && goog.asserts.doAssertFailure_("Expected boolean but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
return a

}; goog.asserts.assertInstanceof = function(a, b, c, d) {

!goog.asserts.ENABLE_ASSERTS || a instanceof b || goog.asserts.doAssertFailure_("instanceof check failed.", null, c, Array.prototype.slice.call(arguments, 3));
return a

}; goog.array = {}; goog.NATIVE_ARRAY_PROTOTYPES = goog.TRUSTED_SITE; goog.array.peek = function(a) {

return a[a.length - 1]

}; goog.array.ARRAY_PROTOTYPE_ = Array.prototype; goog.array.indexOf = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.indexOf ? function(a, b, c) {

goog.asserts.assert(null != a.length);
return goog.array.ARRAY_PROTOTYPE_.indexOf.call(a, b, c)

} : function(a, b, c) {

c = null == c ? 0 : 0 > c ? Math.max(0, a.length + c) : c;
if(goog.isString(a)) {
  return goog.isString(b) && 1 == b.length ? a.indexOf(b, c) : -1
}
for(;c < a.length;c++) {
  if(c in a && a[c] === b) {
    return c
  }
}
return-1

}; goog.array.lastIndexOf = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.lastIndexOf ? function(a, b, c) {

goog.asserts.assert(null != a.length);
return goog.array.ARRAY_PROTOTYPE_.lastIndexOf.call(a, b, null == c ? a.length - 1 : c)

} : function(a, b, c) {

c = null == c ? a.length - 1 : c;
0 > c && (c = Math.max(0, a.length + c));
if(goog.isString(a)) {
  return goog.isString(b) && 1 == b.length ? a.lastIndexOf(b, c) : -1
}
for(;0 <= c;c--) {
  if(c in a && a[c] === b) {
    return c
  }
}
return-1

}; goog.array.forEach = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.forEach ? function(a, b, c) {

goog.asserts.assert(null != a.length);
goog.array.ARRAY_PROTOTYPE_.forEach.call(a, b, c)

} : function(a, b, c) {

for(var d = a.length, e = goog.isString(a) ? a.split("") : a, f = 0;f < d;f++) {
  f in e && b.call(c, e[f], f, a)
}

}; goog.array.forEachRight = function(a, b, c) {

for(var d = a.length, e = goog.isString(a) ? a.split("") : a, d = d - 1;0 <= d;--d) {
  d in e && b.call(c, e[d], d, a)
}

}; goog.array.filter = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.filter ? function(a, b, c) {

goog.asserts.assert(null != a.length);
return goog.array.ARRAY_PROTOTYPE_.filter.call(a, b, c)

} : function(a, b, c) {

for(var d = a.length, e = [], f = 0, g = goog.isString(a) ? a.split("") : a, h = 0;h < d;h++) {
  if(h in g) {
    var k = g[h];
    b.call(c, k, h, a) && (e[f++] = k)
  }
}
return e

}; goog.array.map = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.map ? function(a, b, c) {

goog.asserts.assert(null != a.length);
return goog.array.ARRAY_PROTOTYPE_.map.call(a, b, c)

} : function(a, b, c) {

for(var d = a.length, e = Array(d), f = goog.isString(a) ? a.split("") : a, g = 0;g < d;g++) {
  g in f && (e[g] = b.call(c, f[g], g, a))
}
return e

}; goog.array.reduce = function(a, b, c, d) {

if(a.reduce) {
  return d ? a.reduce(goog.bind(b, d), c) : a.reduce(b, c)
}
var e = c;
goog.array.forEach(a, function(c, g) {
  e = b.call(d, e, c, g, a)
});
return e

}; goog.array.reduceRight = function(a, b, c, d) {

if(a.reduceRight) {
  return d ? a.reduceRight(goog.bind(b, d), c) : a.reduceRight(b, c)
}
var e = c;
goog.array.forEachRight(a, function(c, g) {
  e = b.call(d, e, c, g, a)
});
return e

}; goog.array.some = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.some ? function(a, b, c) {

goog.asserts.assert(null != a.length);
return goog.array.ARRAY_PROTOTYPE_.some.call(a, b, c)

} : function(a, b, c) {

for(var d = a.length, e = goog.isString(a) ? a.split("") : a, f = 0;f < d;f++) {
  if(f in e && b.call(c, e[f], f, a)) {
    return!0
  }
}
return!1

}; goog.array.every = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.every ? function(a, b, c) {

goog.asserts.assert(null != a.length);
return goog.array.ARRAY_PROTOTYPE_.every.call(a, b, c)

} : function(a, b, c) {

for(var d = a.length, e = goog.isString(a) ? a.split("") : a, f = 0;f < d;f++) {
  if(f in e && !b.call(c, e[f], f, a)) {
    return!1
  }
}
return!0

}; goog.array.count = function(a, b, c) {

var d = 0;
goog.array.forEach(a, function(a, f, g) {
  b.call(c, a, f, g) && ++d
}, c);
return d

}; goog.array.find = function(a, b, c) {

b = goog.array.findIndex(a, b, c);
return 0 > b ? null : goog.isString(a) ? a.charAt(b) : a[b]

}; goog.array.findIndex = function(a, b, c) {

for(var d = a.length, e = goog.isString(a) ? a.split("") : a, f = 0;f < d;f++) {
  if(f in e && b.call(c, e[f], f, a)) {
    return f
  }
}
return-1

}; goog.array.findRight = function(a, b, c) {

b = goog.array.findIndexRight(a, b, c);
return 0 > b ? null : goog.isString(a) ? a.charAt(b) : a[b]

}; goog.array.findIndexRight = function(a, b, c) {

for(var d = a.length, e = goog.isString(a) ? a.split("") : a, d = d - 1;0 <= d;d--) {
  if(d in e && b.call(c, e[d], d, a)) {
    return d
  }
}
return-1

}; goog.array.contains = function(a, b) {

return 0 <= goog.array.indexOf(a, b)

}; goog.array.isEmpty = function(a) {

return 0 == a.length

}; goog.array.clear = function(a) {

if(!goog.isArray(a)) {
  for(var b = a.length - 1;0 <= b;b--) {
    delete a[b]
  }
}
a.length = 0

}; goog.array.insert = function(a, b) {

goog.array.contains(a, b) || a.push(b)

}; goog.array.insertAt = function(a, b, c) {

goog.array.splice(a, c, 0, b)

}; goog.array.insertArrayAt = function(a, b, c) {

goog.partial(goog.array.splice, a, c, 0).apply(null, b)

}; goog.array.insertBefore = function(a, b, c) {

var d;
2 == arguments.length || 0 > (d = goog.array.indexOf(a, c)) ? a.push(b) : goog.array.insertAt(a, b, d)

}; goog.array.remove = function(a, b) {

var c = goog.array.indexOf(a, b), d;
(d = 0 <= c) && goog.array.removeAt(a, c);
return d

}; goog.array.removeAt = function(a, b) {

goog.asserts.assert(null != a.length);
return 1 == goog.array.ARRAY_PROTOTYPE_.splice.call(a, b, 1).length

}; goog.array.removeIf = function(a, b, c) {

b = goog.array.findIndex(a, b, c);
return 0 <= b ? (goog.array.removeAt(a, b), !0) : !1

}; goog.array.concat = function(a) {

return goog.array.ARRAY_PROTOTYPE_.concat.apply(goog.array.ARRAY_PROTOTYPE_, arguments)

}; goog.array.toArray = function(a) {

var b = a.length;
if(0 < b) {
  for(var c = Array(b), d = 0;d < b;d++) {
    c[d] = a[d]
  }
  return c
}
return[]

}; goog.array.clone = goog.array.toArray; goog.array.extend = function(a, b) {

for(var c = 1;c < arguments.length;c++) {
  var d = arguments[c], e;
  if(goog.isArray(d) || (e = goog.isArrayLike(d)) && Object.prototype.hasOwnProperty.call(d, "callee")) {
    a.push.apply(a, d)
  }else {
    if(e) {
      for(var f = a.length, g = d.length, h = 0;h < g;h++) {
        a[f + h] = d[h]
      }
    }else {
      a.push(d)
    }
  }
}

}; goog.array.splice = function(a, b, c, d) {

goog.asserts.assert(null != a.length);
return goog.array.ARRAY_PROTOTYPE_.splice.apply(a, goog.array.slice(arguments, 1))

}; goog.array.slice = function(a, b, c) {

goog.asserts.assert(null != a.length);
return 2 >= arguments.length ? goog.array.ARRAY_PROTOTYPE_.slice.call(a, b) : goog.array.ARRAY_PROTOTYPE_.slice.call(a, b, c)

}; goog.array.removeDuplicates = function(a, b) {

for(var c = b || a, d = {}, e = 0, f = 0;f < a.length;) {
  var g = a[f++], h = goog.isObject(g) ? "o" + goog.getUid(g) : (typeof g).charAt(0) + g;
  Object.prototype.hasOwnProperty.call(d, h) || (d[h] = !0, c[e++] = g)
}
c.length = e

}; goog.array.binarySearch = function(a, b, c) {

return goog.array.binarySearch_(a, c || goog.array.defaultCompare, !1, b)

}; goog.array.binarySelect = function(a, b, c) {

return goog.array.binarySearch_(a, b, !0, void 0, c)

}; goog.array.binarySearch_ = function(a, b, c, d, e) {

for(var f = 0, g = a.length, h;f < g;) {
  var k = f + g >> 1, l;
  l = c ? b.call(e, a[k], k, a) : b(d, a[k]);
  0 < l ? f = k + 1 : (g = k, h = !l)
}
return h ? f : ~f

}; goog.array.sort = function(a, b) {

goog.asserts.assert(null != a.length);
goog.array.ARRAY_PROTOTYPE_.sort.call(a, b || goog.array.defaultCompare)

}; goog.array.stableSort = function(a, b) {

for(var c = 0;c < a.length;c++) {
  a[c] = {index:c, value:a[c]}
}
var d = b || goog.array.defaultCompare;
goog.array.sort(a, function(a, b) {
  return d(a.value, b.value) || a.index - b.index
});
for(c = 0;c < a.length;c++) {
  a[c] = a[c].value
}

}; goog.array.sortObjectsByKey = function(a, b, c) {

var d = c || goog.array.defaultCompare;
goog.array.sort(a, function(a, c) {
  return d(a[b], c[b])
})

}; goog.array.isSorted = function(a, b, c) {

b = b || goog.array.defaultCompare;
for(var d = 1;d < a.length;d++) {
  var e = b(a[d - 1], a[d]);
  if(0 < e || 0 == e && c) {
    return!1
  }
}
return!0

}; goog.array.equals = function(a, b, c) {

if(!goog.isArrayLike(a) || !goog.isArrayLike(b) || a.length != b.length) {
  return!1
}
var d = a.length;
c = c || goog.array.defaultCompareEquality;
for(var e = 0;e < d;e++) {
  if(!c(a[e], b[e])) {
    return!1
  }
}
return!0

}; goog.array.compare = function(a, b, c) {

return goog.array.equals(a, b, c)

}; goog.array.compare3 = function(a, b, c) {

c = c || goog.array.defaultCompare;
for(var d = Math.min(a.length, b.length), e = 0;e < d;e++) {
  var f = c(a[e], b[e]);
  if(0 != f) {
    return f
  }
}
return goog.array.defaultCompare(a.length, b.length)

}; goog.array.defaultCompare = function(a, b) {

return a > b ? 1 : a < b ? -1 : 0

}; goog.array.defaultCompareEquality = function(a, b) {

return a === b

}; goog.array.binaryInsert = function(a, b, c) {

c = goog.array.binarySearch(a, b, c);
return 0 > c ? (goog.array.insertAt(a, b, -(c + 1)), !0) : !1

}; goog.array.binaryRemove = function(a, b, c) {

b = goog.array.binarySearch(a, b, c);
return 0 <= b ? goog.array.removeAt(a, b) : !1

}; goog.array.bucket = function(a, b, c) {

for(var d = {}, e = 0;e < a.length;e++) {
  var f = a[e], g = b.call(c, f, e, a);
  goog.isDef(g) && (d[g] || (d[g] = [])).push(f)
}
return d

}; goog.array.toObject = function(a, b, c) {

var d = {};
goog.array.forEach(a, function(e, f) {
  d[b.call(c, e, f, a)] = e
});
return d

}; goog.array.range = function(a, b, c) {

var d = [], e = 0, f = a;
c = c || 1;
void 0 !== b && (e = a, f = b);
if(0 > c * (f - e)) {
  return[]
}
if(0 < c) {
  for(a = e;a < f;a += c) {
    d.push(a)
  }
}else {
  for(a = e;a > f;a += c) {
    d.push(a)
  }
}
return d

}; goog.array.repeat = function(a, b) {

for(var c = [], d = 0;d < b;d++) {
  c[d] = a
}
return c

}; goog.array.flatten = function(a) {

for(var b = [], c = 0;c < arguments.length;c++) {
  var d = arguments[c];
  goog.isArray(d) ? b.push.apply(b, goog.array.flatten.apply(null, d)) : b.push(d)
}
return b

}; goog.array.rotate = function(a, b) {

goog.asserts.assert(null != a.length);
a.length && (b %= a.length, 0 < b ? goog.array.ARRAY_PROTOTYPE_.unshift.apply(a, a.splice(-b, b)) : 0 > b && goog.array.ARRAY_PROTOTYPE_.push.apply(a, a.splice(0, -b)));
return a

}; goog.array.zip = function(a) {

if(!arguments.length) {
  return[]
}
for(var b = [], c = 0;;c++) {
  for(var d = [], e = 0;e < arguments.length;e++) {
    var f = arguments[e];
    if(c >= f.length) {
      return b
    }
    d.push(f[c])
  }
  b.push(d)
}

}; goog.array.shuffle = function(a, b) {

for(var c = b || Math.random, d = a.length - 1;0 < d;d--) {
  var e = Math.floor(c() * (d + 1)), f = a[d];
  a[d] = a[e];
  a[e] = f
}

}; goog.object = {}; goog.object.forEach = function(a, b, c) {

for(var d in a) {
  b.call(c, a[d], d, a)
}

}; goog.object.filter = function(a, b, c) {

var d = {}, e;
for(e in a) {
  b.call(c, a[e], e, a) && (d[e] = a[e])
}
return d

}; goog.object.map = function(a, b, c) {

var d = {}, e;
for(e in a) {
  d[e] = b.call(c, a[e], e, a)
}
return d

}; goog.object.some = function(a, b, c) {

for(var d in a) {
  if(b.call(c, a[d], d, a)) {
    return!0
  }
}
return!1

}; goog.object.every = function(a, b, c) {

for(var d in a) {
  if(!b.call(c, a[d], d, a)) {
    return!1
  }
}
return!0

}; goog.object.getCount = function(a) {

var b = 0, c;
for(c in a) {
  b++
}
return b

}; goog.object.getAnyKey = function(a) {

for(var b in a) {
  return b
}

}; goog.object.getAnyValue = function(a) {

for(var b in a) {
  return a[b]
}

}; goog.object.contains = function(a, b) {

return goog.object.containsValue(a, b)

}; goog.object.getValues = function(a) {

var b = [], c = 0, d;
for(d in a) {
  b[c++] = a[d]
}
return b

}; goog.object.getKeys = function(a) {

var b = [], c = 0, d;
for(d in a) {
  b[c++] = d
}
return b

}; goog.object.getValueByKeys = function(a, b) {

for(var c = goog.isArrayLike(b), d = c ? b : arguments, c = c ? 0 : 1;c < d.length && (a = a[d[c]], goog.isDef(a));c++) {
}
return a

}; goog.object.containsKey = function(a, b) {

return b in a

}; goog.object.containsValue = function(a, b) {

for(var c in a) {
  if(a[c] == b) {
    return!0
  }
}
return!1

}; goog.object.findKey = function(a, b, c) {

for(var d in a) {
  if(b.call(c, a[d], d, a)) {
    return d
  }
}

}; goog.object.findValue = function(a, b, c) {

return(b = goog.object.findKey(a, b, c)) && a[b]

}; goog.object.isEmpty = function(a) {

for(var b in a) {
  return!1
}
return!0

}; goog.object.clear = function(a) {

for(var b in a) {
  delete a[b]
}

}; goog.object.remove = function(a, b) {

var c;
(c = b in a) && delete a[b];
return c

}; goog.object.add = function(a, b, c) {

if(b in a) {
  throw Error('The object already contains the key "' + b + '"');
}
goog.object.set(a, b, c)

}; goog.object.get = function(a, b, c) {

return b in a ? a[b] : c

}; goog.object.set = function(a, b, c) {

a[b] = c

}; goog.object.setIfUndefined = function(a, b, c) {

return b in a ? a[b] : a[b] = c

}; goog.object.clone = function(a) {

var b = {}, c;
for(c in a) {
  b[c] = a[c]
}
return b

}; goog.object.unsafeClone = function(a) {

var b = goog.typeOf(a);
if("object" == b || "array" == b) {
  if(a.clone) {
    return a.clone()
  }
  var b = "array" == b ? [] : {}, c;
  for(c in a) {
    b[c] = goog.object.unsafeClone(a[c])
  }
  return b
}
return a

}; goog.object.transpose = function(a) {

var b = {}, c;
for(c in a) {
  b[a[c]] = c
}
return b

}; goog.object.PROTOTYPE_FIELDS_ = “constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf”.split(“ ”); goog.object.extend = function(a, b) {

for(var c, d, e = 1;e < arguments.length;e++) {
  d = arguments[e];
  for(c in d) {
    a[c] = d[c]
  }
  for(var f = 0;f < goog.object.PROTOTYPE_FIELDS_.length;f++) {
    c = goog.object.PROTOTYPE_FIELDS_[f], Object.prototype.hasOwnProperty.call(d, c) && (a[c] = d[c])
  }
}

}; goog.object.create = function(a) {

var b = arguments.length;
if(1 == b && goog.isArray(arguments[0])) {
  return goog.object.create.apply(null, arguments[0])
}
if(b % 2) {
  throw Error("Uneven number of arguments");
}
for(var c = {}, d = 0;d < b;d += 2) {
  c[arguments[d]] = arguments[d + 1]
}
return c

}; goog.object.createSet = function(a) {

var b = arguments.length;
if(1 == b && goog.isArray(arguments[0])) {
  return goog.object.createSet.apply(null, arguments[0])
}
for(var c = {}, d = 0;d < b;d++) {
  c[arguments[d]] = !0
}
return c

}; goog.object.createImmutableView = function(a) {

var b = a;
Object.isFrozen && !Object.isFrozen(a) && (b = Object.create(a), Object.freeze(b));
return b

}; goog.object.isImmutableView = function(a) {

return!!Object.isFrozen && Object.isFrozen(a)

}; goog.structs = {}; goog.structs.getCount = function(a) {

return"function" == typeof a.getCount ? a.getCount() : goog.isArrayLike(a) || goog.isString(a) ? a.length : goog.object.getCount(a)

}; goog.structs.getValues = function(a) {

if("function" == typeof a.getValues) {
  return a.getValues()
}
if(goog.isString(a)) {
  return a.split("")
}
if(goog.isArrayLike(a)) {
  for(var b = [], c = a.length, d = 0;d < c;d++) {
    b.push(a[d])
  }
  return b
}
return goog.object.getValues(a)

}; goog.structs.getKeys = function(a) {

if("function" == typeof a.getKeys) {
  return a.getKeys()
}
if("function" != typeof a.getValues) {
  if(goog.isArrayLike(a) || goog.isString(a)) {
    var b = [];
    a = a.length;
    for(var c = 0;c < a;c++) {
      b.push(c)
    }
    return b
  }
  return goog.object.getKeys(a)
}

}; goog.structs.contains = function(a, b) {

return"function" == typeof a.contains ? a.contains(b) : "function" == typeof a.containsValue ? a.containsValue(b) : goog.isArrayLike(a) || goog.isString(a) ? goog.array.contains(a, b) : goog.object.containsValue(a, b)

}; goog.structs.isEmpty = function(a) {

return"function" == typeof a.isEmpty ? a.isEmpty() : goog.isArrayLike(a) || goog.isString(a) ? goog.array.isEmpty(a) : goog.object.isEmpty(a)

}; goog.structs.clear = function(a) {

"function" == typeof a.clear ? a.clear() : goog.isArrayLike(a) ? goog.array.clear(a) : goog.object.clear(a)

}; goog.structs.forEach = function(a, b, c) {

if("function" == typeof a.forEach) {
  a.forEach(b, c)
}else {
  if(goog.isArrayLike(a) || goog.isString(a)) {
    goog.array.forEach(a, b, c)
  }else {
    for(var d = goog.structs.getKeys(a), e = goog.structs.getValues(a), f = e.length, g = 0;g < f;g++) {
      b.call(c, e[g], d && d[g], a)
    }
  }
}

}; goog.structs.filter = function(a, b, c) {

if("function" == typeof a.filter) {
  return a.filter(b, c)
}
if(goog.isArrayLike(a) || goog.isString(a)) {
  return goog.array.filter(a, b, c)
}
var d, e = goog.structs.getKeys(a), f = goog.structs.getValues(a), g = f.length;
if(e) {
  d = {};
  for(var h = 0;h < g;h++) {
    b.call(c, f[h], e[h], a) && (d[e[h]] = f[h])
  }
}else {
  for(d = [], h = 0;h < g;h++) {
    b.call(c, f[h], void 0, a) && d.push(f[h])
  }
}
return d

}; goog.structs.map = function(a, b, c) {

if("function" == typeof a.map) {
  return a.map(b, c)
}
if(goog.isArrayLike(a) || goog.isString(a)) {
  return goog.array.map(a, b, c)
}
var d, e = goog.structs.getKeys(a), f = goog.structs.getValues(a), g = f.length;
if(e) {
  d = {};
  for(var h = 0;h < g;h++) {
    d[e[h]] = b.call(c, f[h], e[h], a)
  }
}else {
  for(d = [], h = 0;h < g;h++) {
    d[h] = b.call(c, f[h], void 0, a)
  }
}
return d

}; goog.structs.some = function(a, b, c) {

if("function" == typeof a.some) {
  return a.some(b, c)
}
if(goog.isArrayLike(a) || goog.isString(a)) {
  return goog.array.some(a, b, c)
}
for(var d = goog.structs.getKeys(a), e = goog.structs.getValues(a), f = e.length, g = 0;g < f;g++) {
  if(b.call(c, e[g], d && d[g], a)) {
    return!0
  }
}
return!1

}; goog.structs.every = function(a, b, c) {

if("function" == typeof a.every) {
  return a.every(b, c)
}
if(goog.isArrayLike(a) || goog.isString(a)) {
  return goog.array.every(a, b, c)
}
for(var d = goog.structs.getKeys(a), e = goog.structs.getValues(a), f = e.length, g = 0;g < f;g++) {
  if(!b.call(c, e[g], d && d[g], a)) {
    return!1
  }
}
return!0

}; goog.iter = {}; goog.iter.StopIteration = “StopIteration” in goog.global ? goog.global.StopIteration : Error(“StopIteration”); goog.iter.Iterator = function() { }; goog.iter.Iterator.prototype.next = function() {

throw goog.iter.StopIteration;

}; goog.iter.Iterator.prototype.__iterator__ = function(a) {

return this

}; goog.iter.toIterator = function(a) {

if(a instanceof goog.iter.Iterator) {
  return a
}
if("function" == typeof a.__iterator__) {
  return a.__iterator__(!1)
}
if(goog.isArrayLike(a)) {
  var b = 0, c = new goog.iter.Iterator;
  c.next = function() {
    for(;;) {
      if(b >= a.length) {
        throw goog.iter.StopIteration;
      }
      if(b in a) {
        return a[b++]
      }
      b++
    }
  };
  return c
}
throw Error("Not implemented");

}; goog.iter.forEach = function(a, b, c) {

if(goog.isArrayLike(a)) {
  try {
    goog.array.forEach(a, b, c)
  }catch(d) {
    if(d !== goog.iter.StopIteration) {
      throw d;
    }
  }
}else {
  a = goog.iter.toIterator(a);
  try {
    for(;;) {
      b.call(c, a.next(), void 0, a)
    }
  }catch(e) {
    if(e !== goog.iter.StopIteration) {
      throw e;
    }
  }
}

}; goog.iter.filter = function(a, b, c) {

var d = goog.iter.toIterator(a);
a = new goog.iter.Iterator;
a.next = function() {
  for(;;) {
    var a = d.next();
    if(b.call(c, a, void 0, d)) {
      return a
    }
  }
};
return a

}; goog.iter.range = function(a, b, c) {

var d = 0, e = a, f = c || 1;
1 < arguments.length && (d = a, e = b);
if(0 == f) {
  throw Error("Range step argument must not be zero");
}
var g = new goog.iter.Iterator;
g.next = function() {
  if(0 < f && d >= e || 0 > f && d <= e) {
    throw goog.iter.StopIteration;
  }
  var a = d;
  d += f;
  return a
};
return g

}; goog.iter.join = function(a, b) {

return goog.iter.toArray(a).join(b)

}; goog.iter.map = function(a, b, c) {

var d = goog.iter.toIterator(a);
a = new goog.iter.Iterator;
a.next = function() {
  for(;;) {
    var a = d.next();
    return b.call(c, a, void 0, d)
  }
};
return a

}; goog.iter.reduce = function(a, b, c, d) {

var e = c;
goog.iter.forEach(a, function(a) {
  e = b.call(d, e, a)
});
return e

}; goog.iter.some = function(a, b, c) {

a = goog.iter.toIterator(a);
try {
  for(;;) {
    if(b.call(c, a.next(), void 0, a)) {
      return!0
    }
  }
}catch(d) {
  if(d !== goog.iter.StopIteration) {
    throw d;
  }
}
return!1

}; goog.iter.every = function(a, b, c) {

a = goog.iter.toIterator(a);
try {
  for(;;) {
    if(!b.call(c, a.next(), void 0, a)) {
      return!1
    }
  }
}catch(d) {
  if(d !== goog.iter.StopIteration) {
    throw d;
  }
}
return!0

}; goog.iter.chain = function(a) {

var b = arguments, c = b.length, d = 0, e = new goog.iter.Iterator;
e.next = function() {
  try {
    if(d >= c) {
      throw goog.iter.StopIteration;
    }
    return goog.iter.toIterator(b[d]).next()
  }catch(a) {
    if(a !== goog.iter.StopIteration || d >= c) {
      throw a;
    }
    d++;
    return this.next()
  }
};
return e

}; goog.iter.dropWhile = function(a, b, c) {

var d = goog.iter.toIterator(a);
a = new goog.iter.Iterator;
var e = !0;
a.next = function() {
  for(;;) {
    var a = d.next();
    if(!e || !b.call(c, a, void 0, d)) {
      return e = !1, a
    }
  }
};
return a

}; goog.iter.takeWhile = function(a, b, c) {

var d = goog.iter.toIterator(a);
a = new goog.iter.Iterator;
var e = !0;
a.next = function() {
  for(;;) {
    if(e) {
      var a = d.next();
      if(b.call(c, a, void 0, d)) {
        return a
      }
      e = !1
    }else {
      throw goog.iter.StopIteration;
    }
  }
};
return a

}; goog.iter.toArray = function(a) {

if(goog.isArrayLike(a)) {
  return goog.array.toArray(a)
}
a = goog.iter.toIterator(a);
var b = [];
goog.iter.forEach(a, function(a) {
  b.push(a)
});
return b

}; goog.iter.equals = function(a, b) {

a = goog.iter.toIterator(a);
b = goog.iter.toIterator(b);
var c, d;
try {
  for(;;) {
    c = d = !1;
    var e = a.next();
    c = !0;
    var f = b.next();
    d = !0;
    if(e != f) {
      break
    }
  }
}catch(g) {
  if(g !== goog.iter.StopIteration) {
    throw g;
  }
  if(c && !d) {
    return!1
  }
  if(!d) {
    try {
      b.next()
    }catch(h) {
      if(h !== goog.iter.StopIteration) {
        throw h;
      }
      return!0
    }
  }
}
return!1

}; goog.iter.nextOrValue = function(a, b) {

try {
  return goog.iter.toIterator(a).next()
}catch(c) {
  if(c != goog.iter.StopIteration) {
    throw c;
  }
  return b
}

}; goog.iter.product = function(a) {

if(goog.array.some(arguments, function(a) {
  return!a.length
}) || !arguments.length) {
  return new goog.iter.Iterator
}
var b = new goog.iter.Iterator, c = arguments, d = goog.array.repeat(0, c.length);
b.next = function() {
  if(d) {
    for(var a = goog.array.map(d, function(a, b) {
      return c[b][a]
    }), b = d.length - 1;0 <= b;b--) {
      goog.asserts.assert(d);
      if(d[b] < c[b].length - 1) {
        d[b]++;
        break
      }
      if(0 == b) {
        d = null;
        break
      }
      d[b] = 0
    }
    return a
  }
  throw goog.iter.StopIteration;
};
return b

}; goog.iter.cycle = function(a) {

var b = goog.iter.toIterator(a), c = [], d = 0;
a = new goog.iter.Iterator;
var e = !1;
a.next = function() {
  var a = null;
  if(!e) {
    try {
      return a = b.next(), c.push(a), a
    }catch(g) {
      if(g != goog.iter.StopIteration || goog.array.isEmpty(c)) {
        throw g;
      }
      e = !0
    }
  }
  a = c[d];
  d = (d + 1) % c.length;
  return a
};
return a

}; goog.structs.Map = function(a, b) {

this.map_ = {};
this.keys_ = [];
var c = arguments.length;
if(1 < c) {
  if(c % 2) {
    throw Error("Uneven number of arguments");
  }
  for(var d = 0;d < c;d += 2) {
    this.set(arguments[d], arguments[d + 1])
  }
}else {
  a && this.addAll(a)
}

}; goog.structs.Map.prototype.count_ = 0; goog.structs.Map.prototype.version_ = 0; goog.structs.Map.prototype.getCount = function() {

return this.count_

}; goog.structs.Map.prototype.getValues = function() {

this.cleanupKeysArray_();
for(var a = [], b = 0;b < this.keys_.length;b++) {
  a.push(this.map_[this.keys_[b]])
}
return a

}; goog.structs.Map.prototype.getKeys = function() {

this.cleanupKeysArray_();
return this.keys_.concat()

}; goog.structs.Map.prototype.containsKey = function(a) {

return goog.structs.Map.hasKey_(this.map_, a)

}; goog.structs.Map.prototype.containsValue = function(a) {

for(var b = 0;b < this.keys_.length;b++) {
  var c = this.keys_[b];
  if(goog.structs.Map.hasKey_(this.map_, c) && this.map_[c] == a) {
    return!0
  }
}
return!1

}; goog.structs.Map.prototype.equals = function(a, b) {

if(this === a) {
  return!0
}
if(this.count_ != a.getCount()) {
  return!1
}
var c = b || goog.structs.Map.defaultEquals;
this.cleanupKeysArray_();
for(var d, e = 0;d = this.keys_[e];e++) {
  if(!c(this.get(d), a.get(d))) {
    return!1
  }
}
return!0

}; goog.structs.Map.defaultEquals = function(a, b) {

return a === b

}; goog.structs.Map.prototype.isEmpty = function() {

return 0 == this.count_

}; goog.structs.Map.prototype.clear = function() {

this.map_ = {};
this.version_ = this.count_ = this.keys_.length = 0

}; goog.structs.Map.prototype.remove = function(a) {

return goog.structs.Map.hasKey_(this.map_, a) ? (delete this.map_[a], this.count_--, this.version_++, this.keys_.length > 2 * this.count_ && this.cleanupKeysArray_(), !0) : !1

}; goog.structs.Map.prototype.cleanupKeysArray_ = function() {

if(this.count_ != this.keys_.length) {
  for(var a = 0, b = 0;a < this.keys_.length;) {
    var c = this.keys_[a];
    goog.structs.Map.hasKey_(this.map_, c) && (this.keys_[b++] = c);
    a++
  }
  this.keys_.length = b
}
if(this.count_ != this.keys_.length) {
  for(var d = {}, b = a = 0;a < this.keys_.length;) {
    c = this.keys_[a], goog.structs.Map.hasKey_(d, c) || (this.keys_[b++] = c, d[c] = 1), a++
  }
  this.keys_.length = b
}

}; goog.structs.Map.prototype.get = function(a, b) {

return goog.structs.Map.hasKey_(this.map_, a) ? this.map_[a] : b

}; goog.structs.Map.prototype.set = function(a, b) {

goog.structs.Map.hasKey_(this.map_, a) || (this.count_++, this.keys_.push(a), this.version_++);
this.map_[a] = b

}; goog.structs.Map.prototype.addAll = function(a) {

var b;
a instanceof goog.structs.Map ? (b = a.getKeys(), a = a.getValues()) : (b = goog.object.getKeys(a), a = goog.object.getValues(a));
for(var c = 0;c < b.length;c++) {
  this.set(b[c], a[c])
}

}; goog.structs.Map.prototype.clone = function() {

return new goog.structs.Map(this)

}; goog.structs.Map.prototype.transpose = function() {

for(var a = new goog.structs.Map, b = 0;b < this.keys_.length;b++) {
  var c = this.keys_[b];
  a.set(this.map_[c], c)
}
return a

}; goog.structs.Map.prototype.toObject = function() {

this.cleanupKeysArray_();
for(var a = {}, b = 0;b < this.keys_.length;b++) {
  var c = this.keys_[b];
  a[c] = this.map_[c]
}
return a

}; goog.structs.Map.prototype.getKeyIterator = function() {

return this.__iterator__(!0)

}; goog.structs.Map.prototype.getValueIterator = function() {

return this.__iterator__(!1)

}; goog.structs.Map.prototype.__iterator__ = function(a) {

this.cleanupKeysArray_();
var b = 0, c = this.keys_, d = this.map_, e = this.version_, f = this, g = new goog.iter.Iterator;
g.next = function() {
  for(;;) {
    if(e != f.version_) {
      throw Error("The map has changed since the iterator was created");
    }
    if(b >= c.length) {
      throw goog.iter.StopIteration;
    }
    var g = c[b++];
    return a ? g : d[g]
  }
};
return g

}; goog.structs.Map.hasKey_ = function(a, b) {

return Object.prototype.hasOwnProperty.call(a, b)

}; goog.userAgent = {}; goog.userAgent.ASSUME_IE = !1; goog.userAgent.ASSUME_GECKO = !1; goog.userAgent.ASSUME_WEBKIT = !0; goog.userAgent.ASSUME_MOBILE_WEBKIT = !1; goog.userAgent.ASSUME_OPERA = !1; goog.userAgent.ASSUME_ANY_VERSION = !1; goog.userAgent.BROWSER_KNOWN_ = goog.userAgent.ASSUME_IE || goog.userAgent.ASSUME_GECKO || goog.userAgent.ASSUME_MOBILE_WEBKIT || goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_OPERA; goog.userAgent.getUserAgentString = function() {

return goog.global.navigator ? goog.global.navigator.userAgent : null

}; goog.userAgent.getNavigator = function() {

return goog.global.navigator

}; goog.userAgent.init_ = function() {

goog.userAgent.detectedOpera_ = !1;
goog.userAgent.detectedIe_ = !1;
goog.userAgent.detectedWebkit_ = !1;
goog.userAgent.detectedMobile_ = !1;
goog.userAgent.detectedGecko_ = !1;
var a;
if(!goog.userAgent.BROWSER_KNOWN_ && (a = goog.userAgent.getUserAgentString())) {
  var b = goog.userAgent.getNavigator();
  goog.userAgent.detectedOpera_ = 0 == a.indexOf("Opera");
  goog.userAgent.detectedIe_ = !goog.userAgent.detectedOpera_ && -1 != a.indexOf("MSIE");
  goog.userAgent.detectedWebkit_ = !goog.userAgent.detectedOpera_ && -1 != a.indexOf("WebKit");
  goog.userAgent.detectedMobile_ = goog.userAgent.detectedWebkit_ && -1 != a.indexOf("Mobile");
  goog.userAgent.detectedGecko_ = !goog.userAgent.detectedOpera_ && !goog.userAgent.detectedWebkit_ && "Gecko" == b.product
}

}; goog.userAgent.BROWSER_KNOWN_ || goog.userAgent.init_(); goog.userAgent.OPERA = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_OPERA : goog.userAgent.detectedOpera_; goog.userAgent.IE = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_IE : goog.userAgent.detectedIe_; goog.userAgent.GECKO = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_GECKO : goog.userAgent.detectedGecko_; goog.userAgent.WEBKIT = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_MOBILE_WEBKIT : goog.userAgent.detectedWebkit_; goog.userAgent.MOBILE = goog.userAgent.ASSUME_MOBILE_WEBKIT || goog.userAgent.detectedMobile_; goog.userAgent.SAFARI = goog.userAgent.WEBKIT; goog.userAgent.determinePlatform_ = function() {

var a = goog.userAgent.getNavigator();
return a && a.platform || ""

}; goog.userAgent.PLATFORM = goog.userAgent.determinePlatform_(); goog.userAgent.ASSUME_MAC = !1; goog.userAgent.ASSUME_WINDOWS = !1; goog.userAgent.ASSUME_LINUX = !1; goog.userAgent.ASSUME_X11 = !1; goog.userAgent.ASSUME_ANDROID = !1; goog.userAgent.ASSUME_IPHONE = !1; goog.userAgent.ASSUME_IPAD = !1; goog.userAgent.PLATFORM_KNOWN_ = goog.userAgent.ASSUME_MAC || goog.userAgent.ASSUME_WINDOWS || goog.userAgent.ASSUME_LINUX || goog.userAgent.ASSUME_X11 || goog.userAgent.ASSUME_ANDROID || goog.userAgent.ASSUME_IPHONE || goog.userAgent.ASSUME_IPAD; goog.userAgent.initPlatform_ = function() {

goog.userAgent.detectedMac_ = goog.string.contains(goog.userAgent.PLATFORM, "Mac");
goog.userAgent.detectedWindows_ = goog.string.contains(goog.userAgent.PLATFORM, "Win");
goog.userAgent.detectedLinux_ = goog.string.contains(goog.userAgent.PLATFORM, "Linux");
goog.userAgent.detectedX11_ = !!goog.userAgent.getNavigator() && goog.string.contains(goog.userAgent.getNavigator().appVersion || "", "X11");
var a = goog.userAgent.getUserAgentString();
goog.userAgent.detectedAndroid_ = !!a && 0 <= a.indexOf("Android");
goog.userAgent.detectedIPhone_ = !!a && 0 <= a.indexOf("iPhone");
goog.userAgent.detectedIPad_ = !!a && 0 <= a.indexOf("iPad")

}; goog.userAgent.PLATFORM_KNOWN_ || goog.userAgent.initPlatform_(); goog.userAgent.MAC = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_MAC : goog.userAgent.detectedMac_; goog.userAgent.WINDOWS = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_WINDOWS : goog.userAgent.detectedWindows_; goog.userAgent.LINUX = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_LINUX : goog.userAgent.detectedLinux_; goog.userAgent.X11 = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_X11 : goog.userAgent.detectedX11_; goog.userAgent.ANDROID = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_ANDROID : goog.userAgent.detectedAndroid_; goog.userAgent.IPHONE = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPHONE : goog.userAgent.detectedIPhone_; goog.userAgent.IPAD = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPAD : goog.userAgent.detectedIPad_; goog.userAgent.determineVersion_ = function() {

var a = "", b;
goog.userAgent.OPERA && goog.global.opera ? (a = goog.global.opera.version, a = "function" == typeof a ? a() : a) : (goog.userAgent.GECKO ? b = /rv\:([^\);]+)(\)|;)/ : goog.userAgent.IE ? b = /MSIE\s+([^\);]+)(\)|;)/ : goog.userAgent.WEBKIT && (b = /WebKit\/(\S+)/), b && (a = (a = b.exec(goog.userAgent.getUserAgentString())) ? a[1] : ""));
return goog.userAgent.IE && (b = goog.userAgent.getDocumentMode_(), b > parseFloat(a)) ? String(b) : a

}; goog.userAgent.getDocumentMode_ = function() {

var a = goog.global.document;
return a ? a.documentMode : void 0

}; goog.userAgent.VERSION = goog.userAgent.determineVersion_(); goog.userAgent.compare = function(a, b) {

return goog.string.compareVersions(a, b)

}; goog.userAgent.isVersionOrHigherCache_ = {}; goog.userAgent.isVersionOrHigher = function(a) {

return goog.userAgent.ASSUME_ANY_VERSION || goog.userAgent.isVersionOrHigherCache_[a] || (goog.userAgent.isVersionOrHigherCache_[a] = 0 <= goog.string.compareVersions(goog.userAgent.VERSION, a))

}; goog.userAgent.isVersion = goog.userAgent.isVersionOrHigher; goog.userAgent.isDocumentModeOrHigher = function(a) {

return goog.userAgent.IE && goog.userAgent.DOCUMENT_MODE >= a

}; goog.userAgent.isDocumentMode = goog.userAgent.isDocumentModeOrHigher; goog.userAgent.DOCUMENT_MODE = function() {

var a = goog.global.document;
return a && goog.userAgent.IE ? goog.userAgent.getDocumentMode_() || ("CSS1Compat" == a.compatMode ? parseInt(goog.userAgent.VERSION, 10) : 5) : void 0

}(); goog.uri = {}; goog.uri.utils = {}; goog.uri.utils.CharCode_ = {AMPERSAND:38, EQUAL:61, HASH:35, QUESTION:63}; goog.uri.utils.buildFromEncodedParts = function(a, b, c, d, e, f, g) {

var h = "";
a && (h += a + ":");
c && (h += "//", b && (h += b + "@"), h += c, d && (h += ":" + d));
e && (h += e);
f && (h += "?" + f);
g && (h += "#" + g);
return h

}; goog.uri.utils.splitRe_ = RegExp(“^(?:(+):)?(?://(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=|$))?([^?#]+)?(?:\?([^#]*))?(?:#(.*))?$”); goog.uri.utils.ComponentIndex = {SCHEME:1, USER_INFO:2, DOMAIN:3, PORT:4, PATH:5, QUERY_DATA:6, FRAGMENT:7}; goog.uri.utils.split = function(a) {

goog.uri.utils.phishingProtection_();
return a.match(goog.uri.utils.splitRe_)

}; goog.uri.utils.needsPhishingProtection_ = goog.userAgent.WEBKIT; goog.uri.utils.phishingProtection_ = function() {

if(goog.uri.utils.needsPhishingProtection_) {
  goog.uri.utils.needsPhishingProtection_ = !1;
  var a = goog.global.location;
  if(a) {
    var b = a.href;
    if(b && (b = goog.uri.utils.getDomain(b)) && b != a.hostname) {
      throw goog.uri.utils.needsPhishingProtection_ = !0, Error();
    }
  }
}

}; goog.uri.utils.decodeIfPossible_ = function(a) {

return a && decodeURIComponent(a)

}; goog.uri.utils.getComponentByIndex_ = function(a, b) {

return goog.uri.utils.split(b)[a] || null

}; goog.uri.utils.getScheme = function(a) {

return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.SCHEME, a)

}; goog.uri.utils.getEffectiveScheme = function(a) {

a = goog.uri.utils.getScheme(a);
!a && self.location && (a = self.location.protocol, a = a.substr(0, a.length - 1));
return a ? a.toLowerCase() : ""

}; goog.uri.utils.getUserInfoEncoded = function(a) {

return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.USER_INFO, a)

}; goog.uri.utils.getUserInfo = function(a) {

return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getUserInfoEncoded(a))

}; goog.uri.utils.getDomainEncoded = function(a) {

return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.DOMAIN, a)

}; goog.uri.utils.getDomain = function(a) {

return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getDomainEncoded(a))

}; goog.uri.utils.getPort = function(a) {

return Number(goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.PORT, a)) || null

}; goog.uri.utils.getPathEncoded = function(a) {

return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.PATH, a)

}; goog.uri.utils.getPath = function(a) {

return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getPathEncoded(a))

}; goog.uri.utils.getQueryData = function(a) {

return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.QUERY_DATA, a)

}; goog.uri.utils.getFragmentEncoded = function(a) {

var b = a.indexOf("#");
return 0 > b ? null : a.substr(b + 1)

}; goog.uri.utils.setFragmentEncoded = function(a, b) {

return goog.uri.utils.removeFragment(a) + (b ? "#" + b : "")

}; goog.uri.utils.getFragment = function(a) {

return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getFragmentEncoded(a))

}; goog.uri.utils.getHost = function(a) {

a = goog.uri.utils.split(a);
return goog.uri.utils.buildFromEncodedParts(a[goog.uri.utils.ComponentIndex.SCHEME], a[goog.uri.utils.ComponentIndex.USER_INFO], a[goog.uri.utils.ComponentIndex.DOMAIN], a[goog.uri.utils.ComponentIndex.PORT])

}; goog.uri.utils.getPathAndAfter = function(a) {

a = goog.uri.utils.split(a);
return goog.uri.utils.buildFromEncodedParts(null, null, null, null, a[goog.uri.utils.ComponentIndex.PATH], a[goog.uri.utils.ComponentIndex.QUERY_DATA], a[goog.uri.utils.ComponentIndex.FRAGMENT])

}; goog.uri.utils.removeFragment = function(a) {

var b = a.indexOf("#");
return 0 > b ? a : a.substr(0, b)

}; goog.uri.utils.haveSameDomain = function(a, b) {

var c = goog.uri.utils.split(a), d = goog.uri.utils.split(b);
return c[goog.uri.utils.ComponentIndex.DOMAIN] == d[goog.uri.utils.ComponentIndex.DOMAIN] && c[goog.uri.utils.ComponentIndex.SCHEME] == d[goog.uri.utils.ComponentIndex.SCHEME] && c[goog.uri.utils.ComponentIndex.PORT] == d[goog.uri.utils.ComponentIndex.PORT]

}; goog.uri.utils.assertNoFragmentsOrQueries_ = function(a) {

if(goog.DEBUG && (0 <= a.indexOf("#") || 0 <= a.indexOf("?"))) {
  throw Error("goog.uri.utils: Fragment or query identifiers are not supported: [" + a + "]");
}

}; goog.uri.utils.appendQueryData_ = function(a) {

if(a[1]) {
  var b = a[0], c = b.indexOf("#");
  0 <= c && (a.push(b.substr(c)), a[0] = b = b.substr(0, c));
  c = b.indexOf("?");
  0 > c ? a[1] = "?" : c == b.length - 1 && (a[1] = void 0)
}
return a.join("")

}; goog.uri.utils.appendKeyValuePairs_ = function(a, b, c) {

if(goog.isArray(b)) {
  goog.asserts.assertArray(b);
  for(var d = 0;d < b.length;d++) {
    goog.uri.utils.appendKeyValuePairs_(a, String(b[d]), c)
  }
}else {
  null != b && c.push("&", a, "" === b ? "" : "=", goog.string.urlEncode(b))
}

}; goog.uri.utils.buildQueryDataBuffer_ = function(a, b, c) {

goog.asserts.assert(0 == Math.max(b.length - (c || 0), 0) % 2, "goog.uri.utils: Key/value lists must be even in length.");
for(c = c || 0;c < b.length;c += 2) {
  goog.uri.utils.appendKeyValuePairs_(b[c], b[c + 1], a)
}
return a

}; goog.uri.utils.buildQueryData = function(a, b) {

var c = goog.uri.utils.buildQueryDataBuffer_([], a, b);
c[0] = "";
return c.join("")

}; goog.uri.utils.buildQueryDataBufferFromMap_ = function(a, b) {

for(var c in b) {
  goog.uri.utils.appendKeyValuePairs_(c, b[c], a)
}
return a

}; goog.uri.utils.buildQueryDataFromMap = function(a) {

a = goog.uri.utils.buildQueryDataBufferFromMap_([], a);
a[0] = "";
return a.join("")

}; goog.uri.utils.appendParams = function(a, b) {

return goog.uri.utils.appendQueryData_(2 == arguments.length ? goog.uri.utils.buildQueryDataBuffer_([a], arguments[1], 0) : goog.uri.utils.buildQueryDataBuffer_([a], arguments, 1))

}; goog.uri.utils.appendParamsFromMap = function(a, b) {

return goog.uri.utils.appendQueryData_(goog.uri.utils.buildQueryDataBufferFromMap_([a], b))

}; goog.uri.utils.appendParam = function(a, b, c) {

a = [a, "&", b];
goog.isDefAndNotNull(c) && a.push("=", goog.string.urlEncode(c));
return goog.uri.utils.appendQueryData_(a)

}; goog.uri.utils.findParam_ = function(a, b, c, d) {

for(var e = c.length;0 <= (b = a.indexOf(c, b)) && b < d;) {
  var f = a.charCodeAt(b - 1);
  if(f == goog.uri.utils.CharCode_.AMPERSAND || f == goog.uri.utils.CharCode_.QUESTION) {
    if(f = a.charCodeAt(b + e), !f || f == goog.uri.utils.CharCode_.EQUAL || f == goog.uri.utils.CharCode_.AMPERSAND || f == goog.uri.utils.CharCode_.HASH) {
      return b
    }
  }
  b += e + 1
}
return-1

}; goog.uri.utils.hashOrEndRe_ = /#|$/; goog.uri.utils.hasParam = function(a, b) {

return 0 <= goog.uri.utils.findParam_(a, 0, b, a.search(goog.uri.utils.hashOrEndRe_))

}; goog.uri.utils.getParamValue = function(a, b) {

var c = a.search(goog.uri.utils.hashOrEndRe_), d = goog.uri.utils.findParam_(a, 0, b, c);
if(0 > d) {
  return null
}
var e = a.indexOf("&", d);
if(0 > e || e > c) {
  e = c
}
d += b.length + 1;
return goog.string.urlDecode(a.substr(d, e - d))

}; goog.uri.utils.getParamValues = function(a, b) {

for(var c = a.search(goog.uri.utils.hashOrEndRe_), d = 0, e, f = [];0 <= (e = goog.uri.utils.findParam_(a, d, b, c));) {
  d = a.indexOf("&", e);
  if(0 > d || d > c) {
    d = c
  }
  e += b.length + 1;
  f.push(goog.string.urlDecode(a.substr(e, d - e)))
}
return f

}; goog.uri.utils.trailingQueryPunctuationRe_ = /[?&]($|#)/; goog.uri.utils.removeParam = function(a, b) {

for(var c = a.search(goog.uri.utils.hashOrEndRe_), d = 0, e, f = [];0 <= (e = goog.uri.utils.findParam_(a, d, b, c));) {
  f.push(a.substring(d, e)), d = Math.min(a.indexOf("&", e) + 1 || c, c)
}
f.push(a.substr(d));
return f.join("").replace(goog.uri.utils.trailingQueryPunctuationRe_, "$1")

}; goog.uri.utils.setParam = function(a, b, c) {

return goog.uri.utils.appendParam(goog.uri.utils.removeParam(a, b), b, c)

}; goog.uri.utils.appendPath = function(a, b) {

goog.uri.utils.assertNoFragmentsOrQueries_(a);
goog.string.endsWith(a, "/") && (a = a.substr(0, a.length - 1));
goog.string.startsWith(b, "/") && (b = b.substr(1));
return goog.string.buildString(a, "/", b)

}; goog.uri.utils.StandardQueryParam = {RANDOM:“zx”}; goog.uri.utils.makeUnique = function(a) {

return goog.uri.utils.setParam(a, goog.uri.utils.StandardQueryParam.RANDOM, goog.string.getRandomString())

}; goog.Uri = function(a, b) {

var c;
a instanceof goog.Uri ? (this.ignoreCase_ = goog.isDef(b) ? b : a.getIgnoreCase(), this.setScheme(a.getScheme()), this.setUserInfo(a.getUserInfo()), this.setDomain(a.getDomain()), this.setPort(a.getPort()), this.setPath(a.getPath()), this.setQueryData(a.getQueryData().clone()), this.setFragment(a.getFragment())) : a && (c = goog.uri.utils.split(String(a))) ? (this.ignoreCase_ = !!b, this.setScheme(c[goog.uri.utils.ComponentIndex.SCHEME] || "", !0), this.setUserInfo(c[goog.uri.utils.ComponentIndex.USER_INFO] || 
"", !0), this.setDomain(c[goog.uri.utils.ComponentIndex.DOMAIN] || "", !0), this.setPort(c[goog.uri.utils.ComponentIndex.PORT]), this.setPath(c[goog.uri.utils.ComponentIndex.PATH] || "", !0), this.setQueryData(c[goog.uri.utils.ComponentIndex.QUERY_DATA] || "", !0), this.setFragment(c[goog.uri.utils.ComponentIndex.FRAGMENT] || "", !0)) : (this.ignoreCase_ = !!b, this.queryData_ = new goog.Uri.QueryData(null, null, this.ignoreCase_))

}; goog.Uri.preserveParameterTypesCompatibilityFlag = !1; goog.Uri.RANDOM_PARAM = goog.uri.utils.StandardQueryParam.RANDOM; goog.Uri.prototype.scheme_ = “”; goog.Uri.prototype.userInfo_ = “”; goog.Uri.prototype.domain_ = “”; goog.Uri.prototype.port_ = null; goog.Uri.prototype.path_ = “”; goog.Uri.prototype.fragment_ = “”; goog.Uri.prototype.isReadOnly_ = !1; goog.Uri.prototype.ignoreCase_ = !1; goog.Uri.prototype.toString = function() {

var a = [], b = this.getScheme();
b && a.push(goog.Uri.encodeSpecialChars_(b, goog.Uri.reDisallowedInSchemeOrUserInfo_), ":");
if(b = this.getDomain()) {
  a.push("//");
  var c = this.getUserInfo();
  c && a.push(goog.Uri.encodeSpecialChars_(c, goog.Uri.reDisallowedInSchemeOrUserInfo_), "@");
  a.push(goog.string.urlEncode(b));
  b = this.getPort();
  null != b && a.push(":", String(b))
}
if(b = this.getPath()) {
  this.hasDomain() && "/" != b.charAt(0) && a.push("/"), a.push(goog.Uri.encodeSpecialChars_(b, "/" == b.charAt(0) ? goog.Uri.reDisallowedInAbsolutePath_ : goog.Uri.reDisallowedInRelativePath_))
}
(b = this.getEncodedQuery()) && a.push("?", b);
(b = this.getFragment()) && a.push("#", goog.Uri.encodeSpecialChars_(b, goog.Uri.reDisallowedInFragment_));
return a.join("")

}; goog.Uri.prototype.resolve = function(a) {

var b = this.clone(), c = a.hasScheme();
c ? b.setScheme(a.getScheme()) : c = a.hasUserInfo();
c ? b.setUserInfo(a.getUserInfo()) : c = a.hasDomain();
c ? b.setDomain(a.getDomain()) : c = a.hasPort();
var d = a.getPath();
if(c) {
  b.setPort(a.getPort())
}else {
  if(c = a.hasPath()) {
    if("/" != d.charAt(0)) {
      if(this.hasDomain() && !this.hasPath()) {
        d = "/" + d
      }else {
        var e = b.getPath().lastIndexOf("/");
        -1 != e && (d = b.getPath().substr(0, e + 1) + d)
      }
    }
    d = goog.Uri.removeDotSegments(d)
  }
}
c ? b.setPath(d) : c = a.hasQuery();
c ? b.setQueryData(a.getDecodedQuery()) : c = a.hasFragment();
c && b.setFragment(a.getFragment());
return b

}; goog.Uri.prototype.clone = function() {

return new goog.Uri(this)

}; goog.Uri.prototype.getScheme = function() {

return this.scheme_

}; goog.Uri.prototype.setScheme = function(a, b) {

this.enforceReadOnly();
if(this.scheme_ = b ? goog.Uri.decodeOrEmpty_(a) : a) {
  this.scheme_ = this.scheme_.replace(/:$/, "")
}
return this

}; goog.Uri.prototype.hasScheme = function() {

return!!this.scheme_

}; goog.Uri.prototype.getUserInfo = function() {

return this.userInfo_

}; goog.Uri.prototype.setUserInfo = function(a, b) {

this.enforceReadOnly();
this.userInfo_ = b ? goog.Uri.decodeOrEmpty_(a) : a;
return this

}; goog.Uri.prototype.hasUserInfo = function() {

return!!this.userInfo_

}; goog.Uri.prototype.getDomain = function() {

return this.domain_

}; goog.Uri.prototype.setDomain = function(a, b) {

this.enforceReadOnly();
this.domain_ = b ? goog.Uri.decodeOrEmpty_(a) : a;
return this

}; goog.Uri.prototype.hasDomain = function() {

return!!this.domain_

}; goog.Uri.prototype.getPort = function() {

return this.port_

}; goog.Uri.prototype.setPort = function(a) {

this.enforceReadOnly();
if(a) {
  a = Number(a);
  if(isNaN(a) || 0 > a) {
    throw Error("Bad port number " + a);
  }
  this.port_ = a
}else {
  this.port_ = null
}
return this

}; goog.Uri.prototype.hasPort = function() {

return null != this.port_

}; goog.Uri.prototype.getPath = function() {

return this.path_

}; goog.Uri.prototype.setPath = function(a, b) {

this.enforceReadOnly();
this.path_ = b ? goog.Uri.decodeOrEmpty_(a) : a;
return this

}; goog.Uri.prototype.hasPath = function() {

return!!this.path_

}; goog.Uri.prototype.hasQuery = function() {

return"" !== this.queryData_.toString()

}; goog.Uri.prototype.setQueryData = function(a, b) {

this.enforceReadOnly();
a instanceof goog.Uri.QueryData ? (this.queryData_ = a, this.queryData_.setIgnoreCase(this.ignoreCase_)) : (b || (a = goog.Uri.encodeSpecialChars_(a, goog.Uri.reDisallowedInQuery_)), this.queryData_ = new goog.Uri.QueryData(a, null, this.ignoreCase_));
return this

}; goog.Uri.prototype.setQuery = function(a, b) {

return this.setQueryData(a, b)

}; goog.Uri.prototype.getEncodedQuery = function() {

return this.queryData_.toString()

}; goog.Uri.prototype.getDecodedQuery = function() {

return this.queryData_.toDecodedString()

}; goog.Uri.prototype.getQueryData = function() {

return this.queryData_

}; goog.Uri.prototype.getQuery = function() {

return this.getEncodedQuery()

}; goog.Uri.prototype.setParameterValue = function(a, b) {

this.enforceReadOnly();
this.queryData_.set(a, b);
return this

}; goog.Uri.prototype.setParameterValues = function(a, b) {

this.enforceReadOnly();
goog.isArray(b) || (b = [String(b)]);
this.queryData_.setValues(a, b);
return this

}; goog.Uri.prototype.getParameterValues = function(a) {

return this.queryData_.getValues(a)

}; goog.Uri.prototype.getParameterValue = function(a) {

return this.queryData_.get(a)

}; goog.Uri.prototype.getFragment = function() {

return this.fragment_

}; goog.Uri.prototype.setFragment = function(a, b) {

this.enforceReadOnly();
this.fragment_ = b ? goog.Uri.decodeOrEmpty_(a) : a;
return this

}; goog.Uri.prototype.hasFragment = function() {

return!!this.fragment_

}; goog.Uri.prototype.hasSameDomainAs = function(a) {

return(!this.hasDomain() && !a.hasDomain() || this.getDomain() == a.getDomain()) && (!this.hasPort() && !a.hasPort() || this.getPort() == a.getPort())

}; goog.Uri.prototype.makeUnique = function() {

this.enforceReadOnly();
this.setParameterValue(goog.Uri.RANDOM_PARAM, goog.string.getRandomString());
return this

}; goog.Uri.prototype.removeParameter = function(a) {

this.enforceReadOnly();
this.queryData_.remove(a);
return this

}; goog.Uri.prototype.setReadOnly = function(a) {

this.isReadOnly_ = a;
return this

}; goog.Uri.prototype.isReadOnly = function() {

return this.isReadOnly_

}; goog.Uri.prototype.enforceReadOnly = function() {

if(this.isReadOnly_) {
  throw Error("Tried to modify a read-only Uri");
}

}; goog.Uri.prototype.setIgnoreCase = function(a) {

this.ignoreCase_ = a;
this.queryData_ && this.queryData_.setIgnoreCase(a);
return this

}; goog.Uri.prototype.getIgnoreCase = function() {

return this.ignoreCase_

}; goog.Uri.parse = function(a, b) {

return a instanceof goog.Uri ? a.clone() : new goog.Uri(a, b)

}; goog.Uri.create = function(a, b, c, d, e, f, g, h) {

h = new goog.Uri(null, h);
a && h.setScheme(a);
b && h.setUserInfo(b);
c && h.setDomain(c);
d && h.setPort(d);
e && h.setPath(e);
f && h.setQueryData(f);
g && h.setFragment(g);
return h

}; goog.Uri.resolve = function(a, b) {

a instanceof goog.Uri || (a = goog.Uri.parse(a));
b instanceof goog.Uri || (b = goog.Uri.parse(b));
return a.resolve(b)

}; goog.Uri.removeDotSegments = function(a) {

if(".." == a || "." == a) {
  return""
}
if(goog.string.contains(a, "./") || goog.string.contains(a, "/.")) {
  var b = goog.string.startsWith(a, "/");
  a = a.split("/");
  for(var c = [], d = 0;d < a.length;) {
    var e = a[d++];
    "." == e ? b && d == a.length && c.push("") : ".." == e ? ((1 < c.length || 1 == c.length && "" != c[0]) && c.pop(), b && d == a.length && c.push("")) : (c.push(e), b = !0)
  }
  return c.join("/")
}
return a

}; goog.Uri.decodeOrEmpty_ = function(a) {

return a ? decodeURIComponent(a) : ""

}; goog.Uri.encodeSpecialChars_ = function(a, b) {

return goog.isString(a) ? encodeURI(a).replace(b, goog.Uri.encodeChar_) : null

}; goog.Uri.encodeChar_ = function(a) {

a = a.charCodeAt(0);
return"%" + (a >> 4 & 15).toString(16) + (a & 15).toString(16)

}; goog.Uri.reDisallowedInSchemeOrUserInfo_ = /[#/?@]/g; goog.Uri.reDisallowedInRelativePath_ = /[#?:]/g; goog.Uri.reDisallowedInAbsolutePath_ = /[#?]/g; goog.Uri.reDisallowedInQuery_ = /[#?@]/g; goog.Uri.reDisallowedInFragment_ = /#/g; goog.Uri.haveSameDomain = function(a, b) {

var c = goog.uri.utils.split(a), d = goog.uri.utils.split(b);
return c[goog.uri.utils.ComponentIndex.DOMAIN] == d[goog.uri.utils.ComponentIndex.DOMAIN] && c[goog.uri.utils.ComponentIndex.PORT] == d[goog.uri.utils.ComponentIndex.PORT]

}; goog.Uri.QueryData = function(a, b, c) {

this.encodedQuery_ = a || null;
this.ignoreCase_ = !!c

}; goog.Uri.QueryData.prototype.ensureKeyMapInitialized_ = function() {

if(!this.keyMap_ && (this.keyMap_ = new goog.structs.Map, this.count_ = 0, this.encodedQuery_)) {
  for(var a = this.encodedQuery_.split("&"), b = 0;b < a.length;b++) {
    var c = a[b].indexOf("="), d = null, e = null;
    0 <= c ? (d = a[b].substring(0, c), e = a[b].substring(c + 1)) : d = a[b];
    d = goog.string.urlDecode(d);
    d = this.getKeyName_(d);
    this.add(d, e ? goog.string.urlDecode(e) : "")
  }
}

}; goog.Uri.QueryData.createFromMap = function(a, b, c) {

b = goog.structs.getKeys(a);
if("undefined" == typeof b) {
  throw Error("Keys are undefined");
}
c = new goog.Uri.QueryData(null, null, c);
a = goog.structs.getValues(a);
for(var d = 0;d < b.length;d++) {
  var e = b[d], f = a[d];
  goog.isArray(f) ? c.setValues(e, f) : c.add(e, f)
}
return c

}; goog.Uri.QueryData.createFromKeysValues = function(a, b, c, d) {

if(a.length != b.length) {
  throw Error("Mismatched lengths for keys/values");
}
c = new goog.Uri.QueryData(null, null, d);
for(d = 0;d < a.length;d++) {
  c.add(a[d], b[d])
}
return c

}; goog.Uri.QueryData.prototype.keyMap_ = null; goog.Uri.QueryData.prototype.count_ = null; goog.Uri.QueryData.prototype.getCount = function() {

this.ensureKeyMapInitialized_();
return this.count_

}; goog.Uri.QueryData.prototype.add = function(a, b) {

this.ensureKeyMapInitialized_();
this.invalidateCache_();
a = this.getKeyName_(a);
var c = this.keyMap_.get(a);
c || this.keyMap_.set(a, c = []);
c.push(b);
this.count_++;
return this

}; goog.Uri.QueryData.prototype.remove = function(a) {

this.ensureKeyMapInitialized_();
a = this.getKeyName_(a);
return this.keyMap_.containsKey(a) ? (this.invalidateCache_(), this.count_ -= this.keyMap_.get(a).length, this.keyMap_.remove(a)) : !1

}; goog.Uri.QueryData.prototype.clear = function() {

this.invalidateCache_();
this.keyMap_ = null;
this.count_ = 0

}; goog.Uri.QueryData.prototype.isEmpty = function() {

this.ensureKeyMapInitialized_();
return 0 == this.count_

}; goog.Uri.QueryData.prototype.containsKey = function(a) {

this.ensureKeyMapInitialized_();
a = this.getKeyName_(a);
return this.keyMap_.containsKey(a)

}; goog.Uri.QueryData.prototype.containsValue = function(a) {

var b = this.getValues();
return goog.array.contains(b, a)

}; goog.Uri.QueryData.prototype.getKeys = function() {

this.ensureKeyMapInitialized_();
for(var a = this.keyMap_.getValues(), b = this.keyMap_.getKeys(), c = [], d = 0;d < b.length;d++) {
  for(var e = a[d], f = 0;f < e.length;f++) {
    c.push(b[d])
  }
}
return c

}; goog.Uri.QueryData.prototype.getValues = function(a) {

this.ensureKeyMapInitialized_();
var b = [];
if(a) {
  this.containsKey(a) && (b = goog.array.concat(b, this.keyMap_.get(this.getKeyName_(a))))
}else {
  a = this.keyMap_.getValues();
  for(var c = 0;c < a.length;c++) {
    b = goog.array.concat(b, a[c])
  }
}
return b

}; goog.Uri.QueryData.prototype.set = function(a, b) {

this.ensureKeyMapInitialized_();
this.invalidateCache_();
a = this.getKeyName_(a);
this.containsKey(a) && (this.count_ -= this.keyMap_.get(a).length);
this.keyMap_.set(a, [b]);
this.count_++;
return this

}; goog.Uri.QueryData.prototype.get = function(a, b) {

var c = a ? this.getValues(a) : [];
return goog.Uri.preserveParameterTypesCompatibilityFlag ? 0 < c.length ? c[0] : b : 0 < c.length ? String(c[0]) : b

}; goog.Uri.QueryData.prototype.setValues = function(a, b) {

this.remove(a);
0 < b.length && (this.invalidateCache_(), this.keyMap_.set(this.getKeyName_(a), goog.array.clone(b)), this.count_ += b.length)

}; goog.Uri.QueryData.prototype.toString = function() {

if(this.encodedQuery_) {
  return this.encodedQuery_
}
if(!this.keyMap_) {
  return""
}
for(var a = [], b = this.keyMap_.getKeys(), c = 0;c < b.length;c++) {
  for(var d = b[c], e = goog.string.urlEncode(d), d = this.getValues(d), f = 0;f < d.length;f++) {
    var g = e;
    "" !== d[f] && (g += "=" + goog.string.urlEncode(d[f]));
    a.push(g)
  }
}
return this.encodedQuery_ = a.join("&")

}; goog.Uri.QueryData.prototype.toDecodedString = function() {

return goog.Uri.decodeOrEmpty_(this.toString())

}; goog.Uri.QueryData.prototype.invalidateCache_ = function() {

this.encodedQuery_ = null

}; goog.Uri.QueryData.prototype.filterKeys = function(a) {

this.ensureKeyMapInitialized_();
goog.structs.forEach(this.keyMap_, function(b, c, d) {
  goog.array.contains(a, c) || this.remove(c)
}, this);
return this

}; goog.Uri.QueryData.prototype.clone = function() {

var a = new goog.Uri.QueryData;
a.encodedQuery_ = this.encodedQuery_;
this.keyMap_ && (a.keyMap_ = this.keyMap_.clone(), a.count_ = this.count_);
return a

}; goog.Uri.QueryData.prototype.getKeyName_ = function(a) {

a = String(a);
this.ignoreCase_ && (a = a.toLowerCase());
return a

}; goog.Uri.QueryData.prototype.setIgnoreCase = function(a) {

a && !this.ignoreCase_ && (this.ensureKeyMapInitialized_(), this.invalidateCache_(), goog.structs.forEach(this.keyMap_, function(a, c) {
  var d = c.toLowerCase();
  c != d && (this.remove(c), this.setValues(d, a))
}, this));
this.ignoreCase_ = a

}; goog.Uri.QueryData.prototype.extend = function(a) {

for(var b = 0;b < arguments.length;b++) {
  goog.structs.forEach(arguments[b], function(a, b) {
    this.add(b, a)
  }, this)
}

}; goog.debug.RelativeTimeProvider = function() {

this.relativeTimeStart_ = goog.now()

}; goog.debug.RelativeTimeProvider.defaultInstance_ = new goog.debug.RelativeTimeProvider; goog.debug.RelativeTimeProvider.prototype.set = function(a) {

this.relativeTimeStart_ = a

}; goog.debug.RelativeTimeProvider.prototype.reset = function() {

this.set(goog.now())

}; goog.debug.RelativeTimeProvider.prototype.get = function() {

return this.relativeTimeStart_

}; goog.debug.RelativeTimeProvider.getDefaultInstance = function() {

return goog.debug.RelativeTimeProvider.defaultInstance_

}; goog.debug.Formatter = function(a) {

this.prefix_ = a || "";
this.startTimeProvider_ = goog.debug.RelativeTimeProvider.getDefaultInstance()

}; goog.debug.Formatter.prototype.showAbsoluteTime = !0; goog.debug.Formatter.prototype.showRelativeTime = !0; goog.debug.Formatter.prototype.showLoggerName = !0; goog.debug.Formatter.prototype.showExceptionText = !1; goog.debug.Formatter.prototype.showSeverityLevel = !1; goog.debug.Formatter.prototype.setStartTimeProvider = function(a) {

this.startTimeProvider_ = a

}; goog.debug.Formatter.prototype.getStartTimeProvider = function() {

return this.startTimeProvider_

}; goog.debug.Formatter.prototype.resetRelativeTimeStart = function() {

this.startTimeProvider_.reset()

}; goog.debug.Formatter.getDateTimeStamp_ = function(a) {

a = new Date(a.getMillis());
return goog.debug.Formatter.getTwoDigitString_(a.getFullYear() - 2E3) + goog.debug.Formatter.getTwoDigitString_(a.getMonth() + 1) + goog.debug.Formatter.getTwoDigitString_(a.getDate()) + " " + goog.debug.Formatter.getTwoDigitString_(a.getHours()) + ":" + goog.debug.Formatter.getTwoDigitString_(a.getMinutes()) + ":" + goog.debug.Formatter.getTwoDigitString_(a.getSeconds()) + "." + goog.debug.Formatter.getTwoDigitString_(Math.floor(a.getMilliseconds() / 10))

}; goog.debug.Formatter.getTwoDigitString_ = function(a) {

return 10 > a ? "0" + a : String(a)

}; goog.debug.Formatter.getRelativeTime_ = function(a, b) {

var c = (a.getMillis() - b) / 1E3, d = c.toFixed(3), e = 0;
if(1 > c) {
  e = 2
}else {
  for(;100 > c;) {
    e++, c *= 10
  }
}
for(;0 < e--;) {
  d = " " + d
}
return d

}; goog.debug.HtmlFormatter = function(a) {

goog.debug.Formatter.call(this, a)

}; goog.inherits(goog.debug.HtmlFormatter, goog.debug.Formatter); goog.debug.HtmlFormatter.prototype.showExceptionText = !0; goog.debug.HtmlFormatter.prototype.formatRecord = function(a) {

var b;
switch(a.getLevel().value) {
  case goog.debug.Logger.Level.SHOUT.value:
    b = "dbg-sh";
    break;
  case goog.debug.Logger.Level.SEVERE.value:
    b = "dbg-sev";
    break;
  case goog.debug.Logger.Level.WARNING.value:
    b = "dbg-w";
    break;
  case goog.debug.Logger.Level.INFO.value:
    b = "dbg-i";
    break;
  default:
    b = "dbg-f"
}
var c = [];
c.push(this.prefix_, " ");
this.showAbsoluteTime && c.push("[", goog.debug.Formatter.getDateTimeStamp_(a), "] ");
this.showRelativeTime && c.push("[", goog.string.whitespaceEscape(goog.debug.Formatter.getRelativeTime_(a, this.startTimeProvider_.get())), "s] ");
this.showLoggerName && c.push("[", goog.string.htmlEscape(a.getLoggerName()), "] ");
this.showSeverityLevel && c.push("[", goog.string.htmlEscape(a.getLevel().name), "] ");
c.push('<span class="', b, '">', goog.string.newLineToBr(goog.string.whitespaceEscape(goog.string.htmlEscape(a.getMessage()))));
this.showExceptionText && a.getException() && c.push("<br>", goog.string.newLineToBr(goog.string.whitespaceEscape(a.getExceptionText() || "")));
c.push("</span><br>");
return c.join("")

}; goog.debug.TextFormatter = function(a) {

goog.debug.Formatter.call(this, a)

}; goog.inherits(goog.debug.TextFormatter, goog.debug.Formatter); goog.debug.TextFormatter.prototype.formatRecord = function(a) {

var b = [];
b.push(this.prefix_, " ");
this.showAbsoluteTime && b.push("[", goog.debug.Formatter.getDateTimeStamp_(a), "] ");
this.showRelativeTime && b.push("[", goog.debug.Formatter.getRelativeTime_(a, this.startTimeProvider_.get()), "s] ");
this.showLoggerName && b.push("[", a.getLoggerName(), "] ");
this.showSeverityLevel && b.push("[", a.getLevel().name, "] ");
b.push(a.getMessage(), "\n");
this.showExceptionText && a.getException() && b.push(a.getExceptionText(), "\n");
return b.join("")

}; goog.structs.Collection = function() { }; goog.structs.Set = function(a) {

this.map_ = new goog.structs.Map;
a && this.addAll(a)

}; goog.structs.Set.getKey_ = function(a) {

var b = typeof a;
return"object" == b && a || "function" == b ? "o" + goog.getUid(a) : b.substr(0, 1) + a

}; goog.structs.Set.prototype.getCount = function() {

return this.map_.getCount()

}; goog.structs.Set.prototype.add = function(a) {

this.map_.set(goog.structs.Set.getKey_(a), a)

}; goog.structs.Set.prototype.addAll = function(a) {

a = goog.structs.getValues(a);
for(var b = a.length, c = 0;c < b;c++) {
  this.add(a[c])
}

}; goog.structs.Set.prototype.removeAll = function(a) {

a = goog.structs.getValues(a);
for(var b = a.length, c = 0;c < b;c++) {
  this.remove(a[c])
}

}; goog.structs.Set.prototype.remove = function(a) {

return this.map_.remove(goog.structs.Set.getKey_(a))

}; goog.structs.Set.prototype.clear = function() {

this.map_.clear()

}; goog.structs.Set.prototype.isEmpty = function() {

return this.map_.isEmpty()

}; goog.structs.Set.prototype.contains = function(a) {

return this.map_.containsKey(goog.structs.Set.getKey_(a))

}; goog.structs.Set.prototype.containsAll = function(a) {

return goog.structs.every(a, this.contains, this)

}; goog.structs.Set.prototype.intersection = function(a) {

var b = new goog.structs.Set;
a = goog.structs.getValues(a);
for(var c = 0;c < a.length;c++) {
  var d = a[c];
  this.contains(d) && b.add(d)
}
return b

}; goog.structs.Set.prototype.difference = function(a) {

var b = this.clone();
b.removeAll(a);
return b

}; goog.structs.Set.prototype.getValues = function() {

return this.map_.getValues()

}; goog.structs.Set.prototype.clone = function() {

return new goog.structs.Set(this)

}; goog.structs.Set.prototype.equals = function(a) {

return this.getCount() == goog.structs.getCount(a) && this.isSubsetOf(a)

}; goog.structs.Set.prototype.isSubsetOf = function(a) {

var b = goog.structs.getCount(a);
if(this.getCount() > b) {
  return!1
}
!(a instanceof goog.structs.Set) && 5 < b && (a = new goog.structs.Set(a));
return goog.structs.every(this, function(b) {
  return goog.structs.contains(a, b)
})

}; goog.structs.Set.prototype.__iterator__ = function(a) {

return this.map_.__iterator__(!1)

}; goog.debug.LOGGING_ENABLED = goog.DEBUG; goog.debug.catchErrors = function(a, b, c) {

c = c || goog.global;
var d = c.onerror, e = !!b;
goog.userAgent.WEBKIT && !goog.userAgent.isVersionOrHigher("535.3") && (e = !e);
c.onerror = function(b, c, h) {
  d && d(b, c, h);
  a({message:b, fileName:c, line:h});
  return e
}

}; goog.debug.expose = function(a, b) {

if("undefined" == typeof a) {
  return"undefined"
}
if(null == a) {
  return"NULL"
}
var c = [], d;
for(d in a) {
  if(b || !goog.isFunction(a[d])) {
    var e = d + " = ";
    try {
      e += a[d]
    }catch(f) {
      e += "*** " + f + " ***"
    }
    c.push(e)
  }
}
return c.join("\n")

}; goog.debug.deepExpose = function(a, b) {

var c = new goog.structs.Set, d = [], e = function(a, g) {
  var h = g + "  ";
  try {
    if(goog.isDef(a)) {
      if(goog.isNull(a)) {
        d.push("NULL")
      }else {
        if(goog.isString(a)) {
          d.push('"' + a.replace(/\n/g, "\n" + g) + '"')
        }else {
          if(goog.isFunction(a)) {
            d.push(String(a).replace(/\n/g, "\n" + g))
          }else {
            if(goog.isObject(a)) {
              if(c.contains(a)) {
                d.push("*** reference loop detected ***")
              }else {
                c.add(a);
                d.push("{");
                for(var k in a) {
                  if(b || !goog.isFunction(a[k])) {
                    d.push("\n"), d.push(h), d.push(k + " = "), e(a[k], h)
                  }
                }
                d.push("\n" + g + "}")
              }
            }else {
              d.push(a)
            }
          }
        }
      }
    }else {
      d.push("undefined")
    }
  }catch(l) {
    d.push("*** " + l + " ***")
  }
};
e(a, "");
return d.join("")

}; goog.debug.exposeArray = function(a) {

for(var b = [], c = 0;c < a.length;c++) {
  goog.isArray(a[c]) ? b.push(goog.debug.exposeArray(a[c])) : b.push(a[c])
}
return"[ " + b.join(", ") + " ]"

}; goog.debug.exposeException = function(a, b) {

try {
  var c = goog.debug.normalizeErrorObject(a);
  return"Message: " + goog.string.htmlEscape(c.message) + '\nUrl: <a href="view-source:' + c.fileName + '" target="_new">' + c.fileName + "</a>\nLine: " + c.lineNumber + "\n\nBrowser stack:\n" + goog.string.htmlEscape(c.stack + "-> ") + "[end]\n\nJS stack traversal:\n" + goog.string.htmlEscape(goog.debug.getStacktrace(b) + "-> ")
}catch(d) {
  return"Exception trying to expose exception! You win, we lose. " + d
}

}; goog.debug.normalizeErrorObject = function(a) {

var b = goog.getObjectByName("window.location.href");
if(goog.isString(a)) {
  return{message:a, name:"Unknown error", lineNumber:"Not available", fileName:b, stack:"Not available"}
}
var c, d, e = !1;
try {
  c = a.lineNumber || a.line || "Not available"
}catch(f) {
  c = "Not available", e = !0
}
try {
  d = a.fileName || a.filename || a.sourceURL || goog.global.$googDebugFname || b
}catch(g) {
  d = "Not available", e = !0
}
return!e && a.lineNumber && a.fileName && a.stack ? a : {message:a.message, name:a.name, lineNumber:c, fileName:d, stack:a.stack || "Not available"}

}; goog.debug.enhanceError = function(a, b) {

var c = "string" == typeof a ? Error(a) : a;
c.stack || (c.stack = goog.debug.getStacktrace(arguments.callee.caller));
if(b) {
  for(var d = 0;c["message" + d];) {
    ++d
  }
  c["message" + d] = String(b)
}
return c

}; goog.debug.getStacktraceSimple = function(a) {

for(var b = [], c = arguments.callee.caller, d = 0;c && (!a || d < a);) {
  b.push(goog.debug.getFunctionName(c));
  b.push("()\n");
  try {
    c = c.caller
  }catch(e) {
    b.push("[exception trying to get caller]\n");
    break
  }
  d++;
  if(d >= goog.debug.MAX_STACK_DEPTH) {
    b.push("[...long stack...]");
    break
  }
}
a && d >= a ? b.push("[...reached max depth limit...]") : b.push("[end]");
return b.join("")

}; goog.debug.MAX_STACK_DEPTH = 50; goog.debug.getStacktrace = function(a) {

return goog.debug.getStacktraceHelper_(a || arguments.callee.caller, [])

}; goog.debug.getStacktraceHelper_ = function(a, b) {

var c = [];
if(goog.array.contains(b, a)) {
  c.push("[...circular reference...]")
}else {
  if(a && b.length < goog.debug.MAX_STACK_DEPTH) {
    c.push(goog.debug.getFunctionName(a) + "(");
    for(var d = a.arguments, e = 0;e < d.length;e++) {
      0 < e && c.push(", ");
      var f;
      f = d[e];
      switch(typeof f) {
        case "object":
          f = f ? "object" : "null";
          break;
        case "string":
          break;
        case "number":
          f = String(f);
          break;
        case "boolean":
          f = f ? "true" : "false";
          break;
        case "function":
          f = (f = goog.debug.getFunctionName(f)) ? f : "[fn]";
          break;
        default:
          f = typeof f
      }
      40 < f.length && (f = f.substr(0, 40) + "...");
      c.push(f)
    }
    b.push(a);
    c.push(")\n");
    try {
      c.push(goog.debug.getStacktraceHelper_(a.caller, b))
    }catch(g) {
      c.push("[exception trying to get caller]\n")
    }
  }else {
    a ? c.push("[...long stack...]") : c.push("[end]")
  }
}
return c.join("")

}; goog.debug.setFunctionResolver = function(a) {

goog.debug.fnNameResolver_ = a

}; goog.debug.getFunctionName = function(a) {

if(goog.debug.fnNameCache_[a]) {
  return goog.debug.fnNameCache_[a]
}
if(goog.debug.fnNameResolver_) {
  var b = goog.debug.fnNameResolver_(a);
  if(b) {
    return goog.debug.fnNameCache_[a] = b
  }
}
a = String(a);
goog.debug.fnNameCache_[a] || (b = /function ([^\(]+)/.exec(a), goog.debug.fnNameCache_[a] = b ? b[1] : "[Anonymous]");
return goog.debug.fnNameCache_[a]

}; goog.debug.makeWhitespaceVisible = function(a) {

return a.replace(/ /g, "[_]").replace(/\f/g, "[f]").replace(/\n/g, "[n]\n").replace(/\r/g, "[r]").replace(/\t/g, "[t]")

}; goog.debug.fnNameCache_ = {}; goog.debug.LogRecord = function(a, b, c, d, e) {

this.reset(a, b, c, d, e)

}; goog.debug.LogRecord.prototype.sequenceNumber_ = 0; goog.debug.LogRecord.prototype.exception_ = null; goog.debug.LogRecord.prototype.exceptionText_ = null; goog.debug.LogRecord.ENABLE_SEQUENCE_NUMBERS = !0; goog.debug.LogRecord.nextSequenceNumber_ = 0; goog.debug.LogRecord.prototype.reset = function(a, b, c, d, e) {

goog.debug.LogRecord.ENABLE_SEQUENCE_NUMBERS && (this.sequenceNumber_ = "number" == typeof e ? e : goog.debug.LogRecord.nextSequenceNumber_++);
this.time_ = d || goog.now();
this.level_ = a;
this.msg_ = b;
this.loggerName_ = c;
delete this.exception_;
delete this.exceptionText_

}; goog.debug.LogRecord.prototype.getLoggerName = function() {

return this.loggerName_

}; goog.debug.LogRecord.prototype.getException = function() {

return this.exception_

}; goog.debug.LogRecord.prototype.setException = function(a) {

this.exception_ = a

}; goog.debug.LogRecord.prototype.getExceptionText = function() {

return this.exceptionText_

}; goog.debug.LogRecord.prototype.setExceptionText = function(a) {

this.exceptionText_ = a

}; goog.debug.LogRecord.prototype.setLoggerName = function(a) {

this.loggerName_ = a

}; goog.debug.LogRecord.prototype.getLevel = function() {

return this.level_

}; goog.debug.LogRecord.prototype.setLevel = function(a) {

this.level_ = a

}; goog.debug.LogRecord.prototype.getMessage = function() {

return this.msg_

}; goog.debug.LogRecord.prototype.setMessage = function(a) {

this.msg_ = a

}; goog.debug.LogRecord.prototype.getMillis = function() {

return this.time_

}; goog.debug.LogRecord.prototype.setMillis = function(a) {

this.time_ = a

}; goog.debug.LogRecord.prototype.getSequenceNumber = function() {

return this.sequenceNumber_

}; goog.debug.LogBuffer = function() {

goog.asserts.assert(goog.debug.LogBuffer.isBufferingEnabled(), "Cannot use goog.debug.LogBuffer without defining goog.debug.LogBuffer.CAPACITY.");
this.clear()

}; goog.debug.LogBuffer.getInstance = function() {

goog.debug.LogBuffer.instance_ || (goog.debug.LogBuffer.instance_ = new goog.debug.LogBuffer);
return goog.debug.LogBuffer.instance_

}; goog.debug.LogBuffer.CAPACITY = 0; goog.debug.LogBuffer.prototype.addRecord = function(a, b, c) {

var d = (this.curIndex_ + 1) % goog.debug.LogBuffer.CAPACITY;
this.curIndex_ = d;
if(this.isFull_) {
  return d = this.buffer_[d], d.reset(a, b, c), d
}
this.isFull_ = d == goog.debug.LogBuffer.CAPACITY - 1;
return this.buffer_[d] = new goog.debug.LogRecord(a, b, c)

}; goog.debug.LogBuffer.isBufferingEnabled = function() {

return 0 < goog.debug.LogBuffer.CAPACITY

}; goog.debug.LogBuffer.prototype.clear = function() {

this.buffer_ = Array(goog.debug.LogBuffer.CAPACITY);
this.curIndex_ = -1;
this.isFull_ = !1

}; goog.debug.LogBuffer.prototype.forEachRecord = function(a) {

var b = this.buffer_;
if(b[0]) {
  var c = this.curIndex_, d = this.isFull_ ? c : -1;
  do {
    d = (d + 1) % goog.debug.LogBuffer.CAPACITY, a(b[d])
  }while(d != c)
}

}; goog.debug.Logger = function(a) {

this.name_ = a

}; goog.debug.Logger.prototype.parent_ = null; goog.debug.Logger.prototype.level_ = null; goog.debug.Logger.prototype.children_ = null; goog.debug.Logger.prototype.handlers_ = null; goog.debug.Logger.ENABLE_HIERARCHY = !0; goog.debug.Logger.ENABLE_HIERARCHY || (goog.debug.Logger.rootHandlers_ = []); goog.debug.Logger.Level = function(a, b) {

this.name = a;
this.value = b

}; goog.debug.Logger.Level.prototype.toString = function() {

return this.name

}; goog.debug.Logger.Level.OFF = new goog.debug.Logger.Level(“OFF”, Infinity); goog.debug.Logger.Level.SHOUT = new goog.debug.Logger.Level(“SHOUT”, 1200); goog.debug.Logger.Level.SEVERE = new goog.debug.Logger.Level(“SEVERE”, 1E3); goog.debug.Logger.Level.WARNING = new goog.debug.Logger.Level(“WARNING”, 900); goog.debug.Logger.Level.INFO = new goog.debug.Logger.Level(“INFO”, 800); goog.debug.Logger.Level.CONFIG = new goog.debug.Logger.Level(“CONFIG”, 700); goog.debug.Logger.Level.FINE = new goog.debug.Logger.Level(“FINE”, 500); goog.debug.Logger.Level.FINER = new goog.debug.Logger.Level(“FINER”, 400); goog.debug.Logger.Level.FINEST = new goog.debug.Logger.Level(“FINEST”, 300); goog.debug.Logger.Level.ALL = new goog.debug.Logger.Level(“ALL”, 0); goog.debug.Logger.Level.PREDEFINED_LEVELS = [goog.debug.Logger.Level.OFF, goog.debug.Logger.Level.SHOUT, goog.debug.Logger.Level.SEVERE, goog.debug.Logger.Level.WARNING, goog.debug.Logger.Level.INFO, goog.debug.Logger.Level.CONFIG, goog.debug.Logger.Level.FINE, goog.debug.Logger.Level.FINER, goog.debug.Logger.Level.FINEST, goog.debug.Logger.Level.ALL]; goog.debug.Logger.Level.predefinedLevelsCache_ = null; goog.debug.Logger.Level.createPredefinedLevelsCache_ = function() {

goog.debug.Logger.Level.predefinedLevelsCache_ = {};
for(var a = 0, b;b = goog.debug.Logger.Level.PREDEFINED_LEVELS[a];a++) {
  goog.debug.Logger.Level.predefinedLevelsCache_[b.value] = b, goog.debug.Logger.Level.predefinedLevelsCache_[b.name] = b
}

}; goog.debug.Logger.Level.getPredefinedLevel = function(a) {

goog.debug.Logger.Level.predefinedLevelsCache_ || goog.debug.Logger.Level.createPredefinedLevelsCache_();
return goog.debug.Logger.Level.predefinedLevelsCache_[a] || null

}; goog.debug.Logger.Level.getPredefinedLevelByValue = function(a) {

goog.debug.Logger.Level.predefinedLevelsCache_ || goog.debug.Logger.Level.createPredefinedLevelsCache_();
if(a in goog.debug.Logger.Level.predefinedLevelsCache_) {
  return goog.debug.Logger.Level.predefinedLevelsCache_[a]
}
for(var b = 0;b < goog.debug.Logger.Level.PREDEFINED_LEVELS.length;++b) {
  var c = goog.debug.Logger.Level.PREDEFINED_LEVELS[b];
  if(c.value <= a) {
    return c
  }
}
return null

}; goog.debug.Logger.getLogger = function(a) {

return goog.debug.LogManager.getLogger(a)

}; goog.debug.Logger.logToProfilers = function(a) {

goog.global.console && (goog.global.console.timeStamp ? goog.global.console.timeStamp(a) : goog.global.console.markTimeline && goog.global.console.markTimeline(a));
goog.global.msWriteProfilerMark && goog.global.msWriteProfilerMark(a)

}; goog.debug.Logger.prototype.getName = function() {

return this.name_

}; goog.debug.Logger.prototype.addHandler = function(a) {

goog.debug.LOGGING_ENABLED && (goog.debug.Logger.ENABLE_HIERARCHY ? (this.handlers_ || (this.handlers_ = []), this.handlers_.push(a)) : (goog.asserts.assert(!this.name_, "Cannot call addHandler on a non-root logger when goog.debug.Logger.ENABLE_HIERARCHY is false."), goog.debug.Logger.rootHandlers_.push(a)))

}; goog.debug.Logger.prototype.removeHandler = function(a) {

if(goog.debug.LOGGING_ENABLED) {
  var b = goog.debug.Logger.ENABLE_HIERARCHY ? this.handlers_ : goog.debug.Logger.rootHandlers_;
  return!!b && goog.array.remove(b, a)
}
return!1

}; goog.debug.Logger.prototype.getParent = function() {

return this.parent_

}; goog.debug.Logger.prototype.getChildren = function() {

this.children_ || (this.children_ = {});
return this.children_

}; goog.debug.Logger.prototype.setLevel = function(a) {

goog.debug.LOGGING_ENABLED && (goog.debug.Logger.ENABLE_HIERARCHY ? this.level_ = a : (goog.asserts.assert(!this.name_, "Cannot call setLevel() on a non-root logger when goog.debug.Logger.ENABLE_HIERARCHY is false."), goog.debug.Logger.rootLevel_ = a))

}; goog.debug.Logger.prototype.getLevel = function() {

return goog.debug.LOGGING_ENABLED ? this.level_ : goog.debug.Logger.Level.OFF

}; goog.debug.Logger.prototype.getEffectiveLevel = function() {

if(!goog.debug.LOGGING_ENABLED) {
  return goog.debug.Logger.Level.OFF
}
if(!goog.debug.Logger.ENABLE_HIERARCHY) {
  return goog.debug.Logger.rootLevel_
}
if(this.level_) {
  return this.level_
}
if(this.parent_) {
  return this.parent_.getEffectiveLevel()
}
goog.asserts.fail("Root logger has no level set.");
return null

}; goog.debug.Logger.prototype.isLoggable = function(a) {

return goog.debug.LOGGING_ENABLED && a.value >= this.getEffectiveLevel().value

}; goog.debug.Logger.prototype.log = function(a, b, c) {

goog.debug.LOGGING_ENABLED && this.isLoggable(a) && this.doLogRecord_(this.getLogRecord(a, b, c))

}; goog.debug.Logger.prototype.getLogRecord = function(a, b, c) {

var d = goog.debug.LogBuffer.isBufferingEnabled() ? goog.debug.LogBuffer.getInstance().addRecord(a, b, this.name_) : new goog.debug.LogRecord(a, String(b), this.name_);
c && (d.setException(c), d.setExceptionText(goog.debug.exposeException(c, arguments.callee.caller)));
return d

}; goog.debug.Logger.prototype.shout = function(a, b) {

goog.debug.LOGGING_ENABLED && this.log(goog.debug.Logger.Level.SHOUT, a, b)

}; goog.debug.Logger.prototype.severe = function(a, b) {

goog.debug.LOGGING_ENABLED && this.log(goog.debug.Logger.Level.SEVERE, a, b)

}; goog.debug.Logger.prototype.warning = function(a, b) {

goog.debug.LOGGING_ENABLED && this.log(goog.debug.Logger.Level.WARNING, a, b)

}; goog.debug.Logger.prototype.info = function(a, b) {

goog.debug.LOGGING_ENABLED && this.log(goog.debug.Logger.Level.INFO, a, b)

}; goog.debug.Logger.prototype.config = function(a, b) {

goog.debug.LOGGING_ENABLED && this.log(goog.debug.Logger.Level.CONFIG, a, b)

}; goog.debug.Logger.prototype.fine = function(a, b) {

goog.debug.LOGGING_ENABLED && this.log(goog.debug.Logger.Level.FINE, a, b)

}; goog.debug.Logger.prototype.finer = function(a, b) {

goog.debug.LOGGING_ENABLED && this.log(goog.debug.Logger.Level.FINER, a, b)

}; goog.debug.Logger.prototype.finest = function(a, b) {

goog.debug.LOGGING_ENABLED && this.log(goog.debug.Logger.Level.FINEST, a, b)

}; goog.debug.Logger.prototype.logRecord = function(a) {

goog.debug.LOGGING_ENABLED && this.isLoggable(a.getLevel()) && this.doLogRecord_(a)

}; goog.debug.Logger.prototype.doLogRecord_ = function(a) {

goog.debug.Logger.logToProfilers("log:" + a.getMessage());
if(goog.debug.Logger.ENABLE_HIERARCHY) {
  for(var b = this;b;) {
    b.callPublish_(a), b = b.getParent()
  }
}else {
  for(var b = 0, c;c = goog.debug.Logger.rootHandlers_[b++];) {
    c(a)
  }
}

}; goog.debug.Logger.prototype.callPublish_ = function(a) {

if(this.handlers_) {
  for(var b = 0, c;c = this.handlers_[b];b++) {
    c(a)
  }
}

}; goog.debug.Logger.prototype.setParent_ = function(a) {

this.parent_ = a

}; goog.debug.Logger.prototype.addChild_ = function(a, b) {

this.getChildren()[a] = b

}; goog.debug.LogManager = {}; goog.debug.LogManager.loggers_ = {}; goog.debug.LogManager.rootLogger_ = null; goog.debug.LogManager.initialize = function() {

goog.debug.LogManager.rootLogger_ || (goog.debug.LogManager.rootLogger_ = new goog.debug.Logger(""), goog.debug.LogManager.loggers_[""] = goog.debug.LogManager.rootLogger_, goog.debug.LogManager.rootLogger_.setLevel(goog.debug.Logger.Level.CONFIG))

}; goog.debug.LogManager.getLoggers = function() {

return goog.debug.LogManager.loggers_

}; goog.debug.LogManager.getRoot = function() {

goog.debug.LogManager.initialize();
return goog.debug.LogManager.rootLogger_

}; goog.debug.LogManager.getLogger = function(a) {

goog.debug.LogManager.initialize();
return goog.debug.LogManager.loggers_[a] || goog.debug.LogManager.createLogger_(a)

}; goog.debug.LogManager.createFunctionForCatchErrors = function(a) {

return function(b) {
  (a || goog.debug.LogManager.getRoot()).severe("Error: " + b.message + " (" + b.fileName + " @ Line: " + b.line + ")")
}

}; goog.debug.LogManager.createLogger_ = function(a) {

var b = new goog.debug.Logger(a);
if(goog.debug.Logger.ENABLE_HIERARCHY) {
  var c = a.lastIndexOf("."), d = a.substr(0, c), c = a.substr(c + 1), d = goog.debug.LogManager.getLogger(d);
  d.addChild_(c, b);
  b.setParent_(d)
}
return goog.debug.LogManager.loggers_[a] = b

}; goog.dom = {}; goog.dom.BrowserFeature = {CAN_ADD_NAME_OR_TYPE_ATTRIBUTES:!goog.userAgent.IE || goog.userAgent.isDocumentModeOrHigher(9), CAN_USE_CHILDREN_ATTRIBUTE:!goog.userAgent.GECKO && !goog.userAgent.IE || goog.userAgent.IE && goog.userAgent.isDocumentModeOrHigher(9) || goog.userAgent.GECKO && goog.userAgent.isVersionOrHigher(“1.9.1”), CAN_USE_INNER_TEXT:goog.userAgent.IE && !goog.userAgent.isVersionOrHigher(“9”), CAN_USE_PARENT_ELEMENT_PROPERTY:goog.userAgent.IE || goog.userAgent.OPERA || goog.userAgent.WEBKIT, INNER_HTML_NEEDS_SCOPED_ELEMENT:goog.userAgent.IE}; goog.dom.TagName = {A:“A”, ABBR:“ABBR”, ACRONYM:“ACRONYM”, ADDRESS:“ADDRESS”, APPLET:“APPLET”, AREA:“AREA”, ARTICLE:“ARTICLE”, ASIDE:“ASIDE”, AUDIO:“AUDIO”, B:“B”, BASE:“BASE”, BASEFONT:“BASEFONT”, BDI:“BDI”, BDO:“BDO”, BIG:“BIG”, BLOCKQUOTE:“BLOCKQUOTE”, BODY:“BODY”, BR:“BR”, BUTTON:“BUTTON”, CANVAS:“CANVAS”, CAPTION:“CAPTION”, CENTER:“CENTER”, CITE:“CITE”, CODE:“CODE”, COL:“COL”, COLGROUP:“COLGROUP”, COMMAND:“COMMAND”, DATA:“DATA”, DATALIST:“DATALIST”, DD:“DD”, DEL:“DEL”, DETAILS:“DETAILS”, DFN:“DFN”, DIALOG:“DIALOG”, DIR:“DIR”, DIV:“DIV”, DL:“DL”, DT:“DT”, EM:“EM”, EMBED:“EMBED”, FIELDSET:“FIELDSET”, FIGCAPTION:“FIGCAPTION”, FIGURE:“FIGURE”, FONT:“FONT”, FOOTER:“FOOTER”, FORM:“FORM”, FRAME:“FRAME”, FRAMESET:“FRAMESET”, H1:“H1”, H2:“H2”, H3:“H3”, H4:“H4”, H5:“H5”, H6:“H6”, HEAD:“HEAD”, HEADER:“HEADER”, HGROUP:“HGROUP”, HR:“HR”, HTML:“HTML”, I:“I”, IFRAME:“IFRAME”, IMG:“IMG”, INPUT:“INPUT”, INS:“INS”, ISINDEX:“ISINDEX”, KBD:“KBD”, KEYGEN:“KEYGEN”, LABEL:“LABEL”, LEGEND:“LEGEND”, LI:“LI”, LINK:“LINK”, MAP:“MAP”, MARK:“MARK”, MATH:“MATH”, MENU:“MENU”, META:“META”, METER:“METER”, NAV:“NAV”, NOFRAMES:“NOFRAMES”, NOSCRIPT:“NOSCRIPT”, OBJECT:“OBJECT”, OL:“OL”, OPTGROUP:“OPTGROUP”, OPTION:“OPTION”, OUTPUT:“OUTPUT”, P:“P”, PARAM:“PARAM”, PRE:“PRE”, PROGRESS:“PROGRESS”, Q:“Q”, RP:“RP”, RT:“RT”, RUBY:“RUBY”, S:“S”, SAMP:“SAMP”, SCRIPT:“SCRIPT”, SECTION:“SECTION”, SELECT:“SELECT”, SMALL:“SMALL”, SOURCE:“SOURCE”, SPAN:“SPAN”, STRIKE:“STRIKE”, STRONG:“STRONG”, STYLE:“STYLE”, SUB:“SUB”, SUMMARY:“SUMMARY”, SUP:“SUP”, SVG:“SVG”, TABLE:“TABLE”, TBODY:“TBODY”, TD:“TD”, TEXTAREA:“TEXTAREA”, TFOOT:“TFOOT”, TH:“TH”, THEAD:“THEAD”, TIME:“TIME”, TITLE:“TITLE”, TR:“TR”, TRACK:“TRACK”, TT:“TT”, U:“U”, UL:“UL”, VAR:“VAR”, VIDEO:“VIDEO”, WBR:“WBR”}; goog.dom.classes = {}; goog.dom.classes.set = function(a, b) {

a.className = b

}; goog.dom.classes.get = function(a) {

a = a.className;
return goog.isString(a) && a.match(/\S+/g) || []

}; goog.dom.classes.add = function(a, b) {

var c = goog.dom.classes.get(a), d = goog.array.slice(arguments, 1), e = c.length + d.length;
goog.dom.classes.add_(c, d);
goog.dom.classes.set(a, c.join(" "));
return c.length == e

}; goog.dom.classes.remove = function(a, b) {

var c = goog.dom.classes.get(a), d = goog.array.slice(arguments, 1), e = goog.dom.classes.getDifference_(c, d);
goog.dom.classes.set(a, e.join(" "));
return e.length == c.length - d.length

}; goog.dom.classes.add_ = function(a, b) {

for(var c = 0;c < b.length;c++) {
  goog.array.contains(a, b[c]) || a.push(b[c])
}

}; goog.dom.classes.getDifference_ = function(a, b) {

return goog.array.filter(a, function(a) {
  return!goog.array.contains(b, a)
})

}; goog.dom.classes.swap = function(a, b, c) {

for(var d = goog.dom.classes.get(a), e = !1, f = 0;f < d.length;f++) {
  d[f] == b && (goog.array.splice(d, f--, 1), e = !0)
}
e && (d.push(c), goog.dom.classes.set(a, d.join(" ")));
return e

}; goog.dom.classes.addRemove = function(a, b, c) {

var d = goog.dom.classes.get(a);
goog.isString(b) ? goog.array.remove(d, b) : goog.isArray(b) && (d = goog.dom.classes.getDifference_(d, b));
goog.isString(c) && !goog.array.contains(d, c) ? d.push(c) : goog.isArray(c) && goog.dom.classes.add_(d, c);
goog.dom.classes.set(a, d.join(" "))

}; goog.dom.classes.has = function(a, b) {

return goog.array.contains(goog.dom.classes.get(a), b)

}; goog.dom.classes.enable = function(a, b, c) {

c ? goog.dom.classes.add(a, b) : goog.dom.classes.remove(a, b)

}; goog.dom.classes.toggle = function(a, b) {

var c = !goog.dom.classes.has(a, b);
goog.dom.classes.enable(a, b, c);
return c

}; goog.math = {}; goog.math.randomInt = function(a) {

return Math.floor(Math.random() * a)

}; goog.math.uniformRandom = function(a, b) {

return a + Math.random() * (b - a)

}; goog.math.clamp = function(a, b, c) {

return Math.min(Math.max(a, b), c)

}; goog.math.modulo = function(a, b) {

var c = a % b;
return 0 > c * b ? c + b : c

}; goog.math.lerp = function(a, b, c) {

return a + c * (b - a)

}; goog.math.nearlyEquals = function(a, b, c) {

return Math.abs(a - b) <= (c || 1E-6)

}; goog.math.standardAngle = function(a) {

return goog.math.modulo(a, 360)

}; goog.math.toRadians = function(a) {

return a * Math.PI / 180

}; goog.math.toDegrees = function(a) {

return 180 * a / Math.PI

}; goog.math.angleDx = function(a, b) {

return b * Math.cos(goog.math.toRadians(a))

}; goog.math.angleDy = function(a, b) {

return b * Math.sin(goog.math.toRadians(a))

}; goog.math.angle = function(a, b, c, d) {

return goog.math.standardAngle(goog.math.toDegrees(Math.atan2(d - b, c - a)))

}; goog.math.angleDifference = function(a, b) {

var c = goog.math.standardAngle(b) - goog.math.standardAngle(a);
180 < c ? c -= 360 : -180 >= c && (c = 360 + c);
return c

}; goog.math.sign = function(a) {

return 0 == a ? 0 : 0 > a ? -1 : 1

}; goog.math.longestCommonSubsequence = function(a, b, c, d) {

c = c || function(a, b) {
  return a == b
};
d = d || function(b, c) {
  return a[b]
};
for(var e = a.length, f = b.length, g = [], h = 0;h < e + 1;h++) {
  g[h] = [], g[h][0] = 0
}
for(var k = 0;k < f + 1;k++) {
  g[0][k] = 0
}
for(h = 1;h <= e;h++) {
  for(k = 1;k <= f;k++) {
    c(a[h - 1], b[k - 1]) ? g[h][k] = g[h - 1][k - 1] + 1 : g[h][k] = Math.max(g[h - 1][k], g[h][k - 1])
  }
}
for(var l = [], h = e, k = f;0 < h && 0 < k;) {
  c(a[h - 1], b[k - 1]) ? (l.unshift(d(h - 1, k - 1)), h--, k--) : g[h - 1][k] > g[h][k - 1] ? h-- : k--
}
return l

}; goog.math.sum = function(a) {

return goog.array.reduce(arguments, function(a, c) {
  return a + c
}, 0)

}; goog.math.average = function(a) {

return goog.math.sum.apply(null, arguments) / arguments.length

}; goog.math.standardDeviation = function(a) {

var b = arguments.length;
if(2 > b) {
  return 0
}
var c = goog.math.average.apply(null, arguments), b = goog.math.sum.apply(null, goog.array.map(arguments, function(a) {
  return Math.pow(a - c, 2)
})) / (b - 1);
return Math.sqrt(b)

}; goog.math.isInt = function(a) {

return isFinite(a) && 0 == a % 1

}; goog.math.isFiniteNumber = function(a) {

return isFinite(a) && !isNaN(a)

}; goog.math.safeFloor = function(a, b) {

goog.asserts.assert(!goog.isDef(b) || 0 < b);
return Math.floor(a + (b || 2E-15))

}; goog.math.safeCeil = function(a, b) {

goog.asserts.assert(!goog.isDef(b) || 0 < b);
return Math.ceil(a - (b || 2E-15))

}; goog.math.Coordinate = function(a, b) {

this.x = goog.isDef(a) ? a : 0;
this.y = goog.isDef(b) ? b : 0

}; goog.math.Coordinate.prototype.clone = function() {

return new goog.math.Coordinate(this.x, this.y)

}; goog.DEBUG && (goog.math.Coordinate.prototype.toString = function() {

return"(" + this.x + ", " + this.y + ")"

}); goog.math.Coordinate.equals = function(a, b) {

return a == b ? !0 : a && b ? a.x == b.x && a.y == b.y : !1

}; goog.math.Coordinate.distance = function(a, b) {

var c = a.x - b.x, d = a.y - b.y;
return Math.sqrt(c * c + d * d)

}; goog.math.Coordinate.magnitude = function(a) {

return Math.sqrt(a.x * a.x + a.y * a.y)

}; goog.math.Coordinate.azimuth = function(a) {

return goog.math.angle(0, 0, a.x, a.y)

}; goog.math.Coordinate.squaredDistance = function(a, b) {

var c = a.x - b.x, d = a.y - b.y;
return c * c + d * d

}; goog.math.Coordinate.difference = function(a, b) {

return new goog.math.Coordinate(a.x - b.x, a.y - b.y)

}; goog.math.Coordinate.sum = function(a, b) {

return new goog.math.Coordinate(a.x + b.x, a.y + b.y)

}; goog.math.Coordinate.prototype.ceil = function() {

this.x = Math.ceil(this.x);
this.y = Math.ceil(this.y);
return this

}; goog.math.Coordinate.prototype.floor = function() {

this.x = Math.floor(this.x);
this.y = Math.floor(this.y);
return this

}; goog.math.Coordinate.prototype.round = function() {

this.x = Math.round(this.x);
this.y = Math.round(this.y);
return this

}; goog.math.Coordinate.prototype.translate = function(a, b) {

a instanceof goog.math.Coordinate ? (this.x += a.x, this.y += a.y) : (this.x += a, goog.isNumber(b) && (this.y += b));
return this

}; goog.math.Coordinate.prototype.scale = function(a, b) {

var c = goog.isNumber(b) ? b : a;
this.x *= a;
this.y *= c;
return this

}; goog.math.Size = function(a, b) {

this.width = a;
this.height = b

}; goog.math.Size.equals = function(a, b) {

return a == b ? !0 : a && b ? a.width == b.width && a.height == b.height : !1

}; goog.math.Size.prototype.clone = function() {

return new goog.math.Size(this.width, this.height)

}; goog.DEBUG && (goog.math.Size.prototype.toString = function() {

return"(" + this.width + " x " + this.height + ")"

}); goog.math.Size.prototype.getLongest = function() {

return Math.max(this.width, this.height)

}; goog.math.Size.prototype.getShortest = function() {

return Math.min(this.width, this.height)

}; goog.math.Size.prototype.area = function() {

return this.width * this.height

}; goog.math.Size.prototype.perimeter = function() {

return 2 * (this.width + this.height)

}; goog.math.Size.prototype.aspectRatio = function() {

return this.width / this.height

}; goog.math.Size.prototype.isEmpty = function() {

return!this.area()

}; goog.math.Size.prototype.ceil = function() {

this.width = Math.ceil(this.width);
this.height = Math.ceil(this.height);
return this

}; goog.math.Size.prototype.fitsInside = function(a) {

return this.width <= a.width && this.height <= a.height

}; goog.math.Size.prototype.floor = function() {

this.width = Math.floor(this.width);
this.height = Math.floor(this.height);
return this

}; goog.math.Size.prototype.round = function() {

this.width = Math.round(this.width);
this.height = Math.round(this.height);
return this

}; goog.math.Size.prototype.scale = function(a, b) {

var c = goog.isNumber(b) ? b : a;
this.width *= a;
this.height *= c;
return this

}; goog.math.Size.prototype.scaleToFit = function(a) {

a = this.aspectRatio() > a.aspectRatio() ? a.width / this.width : a.height / this.height;
return this.scale(a)

}; goog.dom.ASSUME_QUIRKS_MODE = !1; goog.dom.ASSUME_STANDARDS_MODE = !1; goog.dom.COMPAT_MODE_KNOWN_ = goog.dom.ASSUME_QUIRKS_MODE || goog.dom.ASSUME_STANDARDS_MODE; goog.dom.NodeType = {ELEMENT:1, ATTRIBUTE:2, TEXT:3, CDATA_SECTION:4, ENTITY_REFERENCE:5, ENTITY:6, PROCESSING_INSTRUCTION:7, COMMENT:8, DOCUMENT:9, DOCUMENT_TYPE:10, DOCUMENT_FRAGMENT:11, NOTATION:12}; goog.dom.getDomHelper = function(a) {

return a ? new goog.dom.DomHelper(goog.dom.getOwnerDocument(a)) : goog.dom.defaultDomHelper_ || (goog.dom.defaultDomHelper_ = new goog.dom.DomHelper)

}; goog.dom.getDocument = function() {

return document

}; goog.dom.getElement = function(a) {

return goog.isString(a) ? document.getElementById(a) : a

}; goog.dom.$ = goog.dom.getElement; goog.dom.getElementsByTagNameAndClass = function(a, b, c) {

return goog.dom.getElementsByTagNameAndClass_(document, a, b, c)

}; goog.dom.getElementsByClass = function(a, b) {

var c = b || document;
return goog.dom.canUseQuerySelector_(c) ? c.querySelectorAll("." + a) : c.getElementsByClassName ? c.getElementsByClassName(a) : goog.dom.getElementsByTagNameAndClass_(document, "*", a, b)

}; goog.dom.getElementByClass = function(a, b) {

var c = b || document, d = null;
return(d = goog.dom.canUseQuerySelector_(c) ? c.querySelector("." + a) : goog.dom.getElementsByClass(a, b)[0]) || null

}; goog.dom.canUseQuerySelector_ = function(a) {

return!(!a.querySelectorAll || !a.querySelector)

}; goog.dom.getElementsByTagNameAndClass_ = function(a, b, c, d) {

a = d || a;
b = b && "*" != b ? b.toUpperCase() : "";
if(goog.dom.canUseQuerySelector_(a) && (b || c)) {
  return a.querySelectorAll(b + (c ? "." + c : ""))
}
if(c && a.getElementsByClassName) {
  a = a.getElementsByClassName(c);
  if(b) {
    d = {};
    for(var e = 0, f = 0, g;g = a[f];f++) {
      b == g.nodeName && (d[e++] = g)
    }
    d.length = e;
    return d
  }
  return a
}
a = a.getElementsByTagName(b || "*");
if(c) {
  d = {};
  for(f = e = 0;g = a[f];f++) {
    b = g.className, "function" == typeof b.split && goog.array.contains(b.split(/\s+/), c) && (d[e++] = g)
  }
  d.length = e;
  return d
}
return a

}; goog.dom.$$ = goog.dom.getElementsByTagNameAndClass; goog.dom.setProperties = function(a, b) {

goog.object.forEach(b, function(b, d) {
  "style" == d ? a.style.cssText = b : "class" == d ? a.className = b : "for" == d ? a.htmlFor = b : d in goog.dom.DIRECT_ATTRIBUTE_MAP_ ? a.setAttribute(goog.dom.DIRECT_ATTRIBUTE_MAP_[d], b) : goog.string.startsWith(d, "aria-") || goog.string.startsWith(d, "data-") ? a.setAttribute(d, b) : a[d] = b
})

}; goog.dom.DIRECT_ATTRIBUTE_MAP_ = {cellpadding:“cellPadding”, cellspacing:“cellSpacing”, colspan:“colSpan”, frameborder:“frameBorder”, height:“height”, maxlength:“maxLength”, role:“role”, rowspan:“rowSpan”, type:“type”, usemap:“useMap”, valign:“vAlign”, width:“width”}; goog.dom.getViewportSize = function(a) {

return goog.dom.getViewportSize_(a || window)

}; goog.dom.getViewportSize_ = function(a) {

a = a.document;
a = goog.dom.isCss1CompatMode_(a) ? a.documentElement : a.body;
return new goog.math.Size(a.clientWidth, a.clientHeight)

}; goog.dom.getDocumentHeight = function() {

return goog.dom.getDocumentHeight_(window)

}; goog.dom.getDocumentHeight_ = function(a) {

var b = a.document, c = 0;
if(b) {
  a = goog.dom.getViewportSize_(a).height;
  var c = b.body, d = b.documentElement;
  if(goog.dom.isCss1CompatMode_(b) && d.scrollHeight) {
    c = d.scrollHeight != a ? d.scrollHeight : d.offsetHeight
  }else {
    var b = d.scrollHeight, e = d.offsetHeight;
    d.clientHeight != e && (b = c.scrollHeight, e = c.offsetHeight);
    c = b > a ? b > e ? b : e : b < e ? b : e
  }
}
return c

}; goog.dom.getPageScroll = function(a) {

return goog.dom.getDomHelper((a || goog.global || window).document).getDocumentScroll()

}; goog.dom.getDocumentScroll = function() {

return goog.dom.getDocumentScroll_(document)

}; goog.dom.getDocumentScroll_ = function(a) {

var b = goog.dom.getDocumentScrollElement_(a);
a = goog.dom.getWindow_(a);
return goog.userAgent.IE && goog.userAgent.isVersionOrHigher("10") && a.pageYOffset != b.scrollTop ? new goog.math.Coordinate(b.scrollLeft, b.scrollTop) : new goog.math.Coordinate(a.pageXOffset || b.scrollLeft, a.pageYOffset || b.scrollTop)

}; goog.dom.getDocumentScrollElement = function() {

return goog.dom.getDocumentScrollElement_(document)

}; goog.dom.getDocumentScrollElement_ = function(a) {

return!goog.userAgent.WEBKIT && goog.dom.isCss1CompatMode_(a) ? a.documentElement : a.body || a.documentElement

}; goog.dom.getWindow = function(a) {

return a ? goog.dom.getWindow_(a) : window

}; goog.dom.getWindow_ = function(a) {

return a.parentWindow || a.defaultView

}; goog.dom.createDom = function(a, b, c) {

return goog.dom.createDom_(document, arguments)

}; goog.dom.createDom_ = function(a, b) {

var c = b[0], d = b[1];
if(!goog.dom.BrowserFeature.CAN_ADD_NAME_OR_TYPE_ATTRIBUTES && d && (d.name || d.type)) {
  c = ["<", c];
  d.name && c.push(' name="', goog.string.htmlEscape(d.name), '"');
  if(d.type) {
    c.push(' type="', goog.string.htmlEscape(d.type), '"');
    var e = {};
    goog.object.extend(e, d);
    delete e.type;
    d = e
  }
  c.push(">");
  c = c.join("")
}
c = a.createElement(c);
d && (goog.isString(d) ? c.className = d : goog.isArray(d) ? goog.dom.classes.add.apply(null, [c].concat(d)) : goog.dom.setProperties(c, d));
2 < b.length && goog.dom.append_(a, c, b, 2);
return c

}; goog.dom.append_ = function(a, b, c, d) {

function e(c) {
  c && b.appendChild(goog.isString(c) ? a.createTextNode(c) : c)
}
for(;d < c.length;d++) {
  var f = c[d];
  goog.isArrayLike(f) && !goog.dom.isNodeLike(f) ? goog.array.forEach(goog.dom.isNodeList(f) ? goog.array.toArray(f) : f, e) : e(f)
}

}; goog.dom.$dom = goog.dom.createDom; goog.dom.createElement = function(a) {

return document.createElement(a)

}; goog.dom.createTextNode = function(a) {

return document.createTextNode(String(a))

}; goog.dom.createTable = function(a, b, c) {

return goog.dom.createTable_(document, a, b, !!c)

}; goog.dom.createTable_ = function(a, b, c, d) {

for(var e = ["<tr>"], f = 0;f < c;f++) {
  e.push(d ? "<td>&nbsp;</td>" : "<td></td>")
}
e.push("</tr>");
e = e.join("");
c = ["<table>"];
for(f = 0;f < b;f++) {
  c.push(e)
}
c.push("</table>");
a = a.createElement(goog.dom.TagName.DIV);
a.innerHTML = c.join("");
return a.removeChild(a.firstChild)

}; goog.dom.htmlToDocumentFragment = function(a) {

return goog.dom.htmlToDocumentFragment_(document, a)

}; goog.dom.htmlToDocumentFragment_ = function(a, b) {

var c = a.createElement("div");
goog.dom.BrowserFeature.INNER_HTML_NEEDS_SCOPED_ELEMENT ? (c.innerHTML = "<br>" + b, c.removeChild(c.firstChild)) : c.innerHTML = b;
if(1 == c.childNodes.length) {
  return c.removeChild(c.firstChild)
}
for(var d = a.createDocumentFragment();c.firstChild;) {
  d.appendChild(c.firstChild)
}
return d

}; goog.dom.getCompatMode = function() {

return goog.dom.isCss1CompatMode() ? "CSS1Compat" : "BackCompat"

}; goog.dom.isCss1CompatMode = function() {

return goog.dom.isCss1CompatMode_(document)

}; goog.dom.isCss1CompatMode_ = function(a) {

return goog.dom.COMPAT_MODE_KNOWN_ ? goog.dom.ASSUME_STANDARDS_MODE : "CSS1Compat" == a.compatMode

}; goog.dom.canHaveChildren = function(a) {

if(a.nodeType != goog.dom.NodeType.ELEMENT) {
  return!1
}
switch(a.tagName) {
  case goog.dom.TagName.APPLET:
  ;
  case goog.dom.TagName.AREA:
  ;
  case goog.dom.TagName.BASE:
  ;
  case goog.dom.TagName.BR:
  ;
  case goog.dom.TagName.COL:
  ;
  case goog.dom.TagName.COMMAND:
  ;
  case goog.dom.TagName.EMBED:
  ;
  case goog.dom.TagName.FRAME:
  ;
  case goog.dom.TagName.HR:
  ;
  case goog.dom.TagName.IMG:
  ;
  case goog.dom.TagName.INPUT:
  ;
  case goog.dom.TagName.IFRAME:
  ;
  case goog.dom.TagName.ISINDEX:
  ;
  case goog.dom.TagName.KEYGEN:
  ;
  case goog.dom.TagName.LINK:
  ;
  case goog.dom.TagName.NOFRAMES:
  ;
  case goog.dom.TagName.NOSCRIPT:
  ;
  case goog.dom.TagName.META:
  ;
  case goog.dom.TagName.OBJECT:
  ;
  case goog.dom.TagName.PARAM:
  ;
  case goog.dom.TagName.SCRIPT:
  ;
  case goog.dom.TagName.SOURCE:
  ;
  case goog.dom.TagName.STYLE:
  ;
  case goog.dom.TagName.TRACK:
  ;
  case goog.dom.TagName.WBR:
    return!1
}
return!0

}; goog.dom.appendChild = function(a, b) {

a.appendChild(b)

}; goog.dom.append = function(a, b) {

goog.dom.append_(goog.dom.getOwnerDocument(a), a, arguments, 1)

}; goog.dom.removeChildren = function(a) {

for(var b;b = a.firstChild;) {
  a.removeChild(b)
}

}; goog.dom.insertSiblingBefore = function(a, b) {

b.parentNode && b.parentNode.insertBefore(a, b)

}; goog.dom.insertSiblingAfter = function(a, b) {

b.parentNode && b.parentNode.insertBefore(a, b.nextSibling)

}; goog.dom.insertChildAt = function(a, b, c) {

a.insertBefore(b, a.childNodes[c] || null)

}; goog.dom.removeNode = function(a) {

return a && a.parentNode ? a.parentNode.removeChild(a) : null

}; goog.dom.replaceNode = function(a, b) {

var c = b.parentNode;
c && c.replaceChild(a, b)

}; goog.dom.flattenElement = function(a) {

var b, c = a.parentNode;
if(c && c.nodeType != goog.dom.NodeType.DOCUMENT_FRAGMENT) {
  if(a.removeNode) {
    return a.removeNode(!1)
  }
  for(;b = a.firstChild;) {
    c.insertBefore(b, a)
  }
  return goog.dom.removeNode(a)
}

}; goog.dom.getChildren = function(a) {

return goog.dom.BrowserFeature.CAN_USE_CHILDREN_ATTRIBUTE && void 0 != a.children ? a.children : goog.array.filter(a.childNodes, function(a) {
  return a.nodeType == goog.dom.NodeType.ELEMENT
})

}; goog.dom.getFirstElementChild = function(a) {

return void 0 != a.firstElementChild ? a.firstElementChild : goog.dom.getNextElementNode_(a.firstChild, !0)

}; goog.dom.getLastElementChild = function(a) {

return void 0 != a.lastElementChild ? a.lastElementChild : goog.dom.getNextElementNode_(a.lastChild, !1)

}; goog.dom.getNextElementSibling = function(a) {

return void 0 != a.nextElementSibling ? a.nextElementSibling : goog.dom.getNextElementNode_(a.nextSibling, !0)

}; goog.dom.getPreviousElementSibling = function(a) {

return void 0 != a.previousElementSibling ? a.previousElementSibling : goog.dom.getNextElementNode_(a.previousSibling, !1)

}; goog.dom.getNextElementNode_ = function(a, b) {

for(;a && a.nodeType != goog.dom.NodeType.ELEMENT;) {
  a = b ? a.nextSibling : a.previousSibling
}
return a

}; goog.dom.getNextNode = function(a) {

if(!a) {
  return null
}
if(a.firstChild) {
  return a.firstChild
}
for(;a && !a.nextSibling;) {
  a = a.parentNode
}
return a ? a.nextSibling : null

}; goog.dom.getPreviousNode = function(a) {

if(!a) {
  return null
}
if(!a.previousSibling) {
  return a.parentNode
}
for(a = a.previousSibling;a && a.lastChild;) {
  a = a.lastChild
}
return a

}; goog.dom.isNodeLike = function(a) {

return goog.isObject(a) && 0 < a.nodeType

}; goog.dom.isElement = function(a) {

return goog.isObject(a) && a.nodeType == goog.dom.NodeType.ELEMENT

}; goog.dom.isWindow = function(a) {

return goog.isObject(a) && a.window == a

}; goog.dom.getParentElement = function(a) {

if(goog.dom.BrowserFeature.CAN_USE_PARENT_ELEMENT_PROPERTY && !(goog.userAgent.IE && goog.userAgent.isVersionOrHigher("9") && !goog.userAgent.isVersionOrHigher("10") && goog.global.SVGElement && a instanceof goog.global.SVGElement)) {
  return a.parentElement
}
a = a.parentNode;
return goog.dom.isElement(a) ? a : null

}; goog.dom.contains = function(a, b) {

if(a.contains && b.nodeType == goog.dom.NodeType.ELEMENT) {
  return a == b || a.contains(b)
}
if("undefined" != typeof a.compareDocumentPosition) {
  return a == b || Boolean(a.compareDocumentPosition(b) & 16)
}
for(;b && a != b;) {
  b = b.parentNode
}
return b == a

}; goog.dom.compareNodeOrder = function(a, b) {

if(a == b) {
  return 0
}
if(a.compareDocumentPosition) {
  return a.compareDocumentPosition(b) & 2 ? 1 : -1
}
if(goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9)) {
  if(a.nodeType == goog.dom.NodeType.DOCUMENT) {
    return-1
  }
  if(b.nodeType == goog.dom.NodeType.DOCUMENT) {
    return 1
  }
}
if("sourceIndex" in a || a.parentNode && "sourceIndex" in a.parentNode) {
  var c = a.nodeType == goog.dom.NodeType.ELEMENT, d = b.nodeType == goog.dom.NodeType.ELEMENT;
  if(c && d) {
    return a.sourceIndex - b.sourceIndex
  }
  var e = a.parentNode, f = b.parentNode;
  return e == f ? goog.dom.compareSiblingOrder_(a, b) : !c && goog.dom.contains(e, b) ? -1 * goog.dom.compareParentsDescendantNodeIe_(a, b) : !d && goog.dom.contains(f, a) ? goog.dom.compareParentsDescendantNodeIe_(b, a) : (c ? a.sourceIndex : e.sourceIndex) - (d ? b.sourceIndex : f.sourceIndex)
}
d = goog.dom.getOwnerDocument(a);
c = d.createRange();
c.selectNode(a);
c.collapse(!0);
d = d.createRange();
d.selectNode(b);
d.collapse(!0);
return c.compareBoundaryPoints(goog.global.Range.START_TO_END, d)

}; goog.dom.compareParentsDescendantNodeIe_ = function(a, b) {

var c = a.parentNode;
if(c == b) {
  return-1
}
for(var d = b;d.parentNode != c;) {
  d = d.parentNode
}
return goog.dom.compareSiblingOrder_(d, a)

}; goog.dom.compareSiblingOrder_ = function(a, b) {

for(var c = b;c = c.previousSibling;) {
  if(c == a) {
    return-1
  }
}
return 1

}; goog.dom.findCommonAncestor = function(a) {

var b, c = arguments.length;
if(!c) {
  return null
}
if(1 == c) {
  return arguments[0]
}
var d = [], e = Infinity;
for(b = 0;b < c;b++) {
  for(var f = [], g = arguments[b];g;) {
    f.unshift(g), g = g.parentNode
  }
  d.push(f);
  e = Math.min(e, f.length)
}
f = null;
for(b = 0;b < e;b++) {
  for(var g = d[0][b], h = 1;h < c;h++) {
    if(g != d[h][b]) {
      return f
    }
  }
  f = g
}
return f

}; goog.dom.getOwnerDocument = function(a) {

return a.nodeType == goog.dom.NodeType.DOCUMENT ? a : a.ownerDocument || a.document

}; goog.dom.getFrameContentDocument = function(a) {

return a.contentDocument || a.contentWindow.document

}; goog.dom.getFrameContentWindow = function(a) {

return a.contentWindow || goog.dom.getWindow_(goog.dom.getFrameContentDocument(a))

}; goog.dom.setTextContent = function(a, b) {

if("textContent" in a) {
  a.textContent = b
}else {
  if(a.firstChild && a.firstChild.nodeType == goog.dom.NodeType.TEXT) {
    for(;a.lastChild != a.firstChild;) {
      a.removeChild(a.lastChild)
    }
    a.firstChild.data = b
  }else {
    goog.dom.removeChildren(a);
    var c = goog.dom.getOwnerDocument(a);
    a.appendChild(c.createTextNode(String(b)))
  }
}

}; goog.dom.getOuterHtml = function(a) {

if("outerHTML" in a) {
  return a.outerHTML
}
var b = goog.dom.getOwnerDocument(a).createElement("div");
b.appendChild(a.cloneNode(!0));
return b.innerHTML

}; goog.dom.findNode = function(a, b) {

var c = [];
return goog.dom.findNodes_(a, b, c, !0) ? c[0] : void 0

}; goog.dom.findNodes = function(a, b) {

var c = [];
goog.dom.findNodes_(a, b, c, !1);
return c

}; goog.dom.findNodes_ = function(a, b, c, d) {

if(null != a) {
  for(a = a.firstChild;a;) {
    if(b(a) && (c.push(a), d) || goog.dom.findNodes_(a, b, c, d)) {
      return!0
    }
    a = a.nextSibling
  }
}
return!1

}; goog.dom.TAGS_TO_IGNORE_ = {SCRIPT:1, STYLE:1, HEAD:1, IFRAME:1, OBJECT:1}; goog.dom.PREDEFINED_TAG_VALUES_ = {IMG:“ ”, BR:“n”}; goog.dom.isFocusableTabIndex = function(a) {

var b = a.getAttributeNode("tabindex");
return b && b.specified ? (a = a.tabIndex, goog.isNumber(a) && 0 <= a && 32768 > a) : !1

}; goog.dom.setFocusableTabIndex = function(a, b) {

b ? a.tabIndex = 0 : (a.tabIndex = -1, a.removeAttribute("tabIndex"))

}; goog.dom.getTextContent = function(a) {

if(goog.dom.BrowserFeature.CAN_USE_INNER_TEXT && "innerText" in a) {
  a = goog.string.canonicalizeNewlines(a.innerText)
}else {
  var b = [];
  goog.dom.getTextContent_(a, b, !0);
  a = b.join("")
}
a = a.replace(/ \xAD /g, " ").replace(/\xAD/g, "");
a = a.replace(/\u200B/g, "");
goog.dom.BrowserFeature.CAN_USE_INNER_TEXT || (a = a.replace(/ +/g, " "));
" " != a && (a = a.replace(/^\s*/, ""));
return a

}; goog.dom.getRawTextContent = function(a) {

var b = [];
goog.dom.getTextContent_(a, b, !1);
return b.join("")

}; goog.dom.getTextContent_ = function(a, b, c) {

if(!(a.nodeName in goog.dom.TAGS_TO_IGNORE_)) {
  if(a.nodeType == goog.dom.NodeType.TEXT) {
    c ? b.push(String(a.nodeValue).replace(/(\r\n|\r|\n)/g, "")) : b.push(a.nodeValue)
  }else {
    if(a.nodeName in goog.dom.PREDEFINED_TAG_VALUES_) {
      b.push(goog.dom.PREDEFINED_TAG_VALUES_[a.nodeName])
    }else {
      for(a = a.firstChild;a;) {
        goog.dom.getTextContent_(a, b, c), a = a.nextSibling
      }
    }
  }
}

}; goog.dom.getNodeTextLength = function(a) {

return goog.dom.getTextContent(a).length

}; goog.dom.getNodeTextOffset = function(a, b) {

for(var c = b || goog.dom.getOwnerDocument(a).body, d = [];a && a != c;) {
  for(var e = a;e = e.previousSibling;) {
    d.unshift(goog.dom.getTextContent(e))
  }
  a = a.parentNode
}
return goog.string.trimLeft(d.join("")).replace(/ +/g, " ").length

}; goog.dom.getNodeAtOffset = function(a, b, c) {

a = [a];
for(var d = 0, e = null;0 < a.length && d < b;) {
  if(e = a.pop(), !(e.nodeName in goog.dom.TAGS_TO_IGNORE_)) {
    if(e.nodeType == goog.dom.NodeType.TEXT) {
      var f = e.nodeValue.replace(/(\r\n|\r|\n)/g, "").replace(/ +/g, " "), d = d + f.length
    }else {
      if(e.nodeName in goog.dom.PREDEFINED_TAG_VALUES_) {
        d += goog.dom.PREDEFINED_TAG_VALUES_[e.nodeName].length
      }else {
        for(f = e.childNodes.length - 1;0 <= f;f--) {
          a.push(e.childNodes[f])
        }
      }
    }
  }
}
goog.isObject(c) && (c.remainder = e ? e.nodeValue.length + b - d - 1 : 0, c.node = e);
return e

}; goog.dom.isNodeList = function(a) {

if(a && "number" == typeof a.length) {
  if(goog.isObject(a)) {
    return"function" == typeof a.item || "string" == typeof a.item
  }
  if(goog.isFunction(a)) {
    return"function" == typeof a.item
  }
}
return!1

}; goog.dom.getAncestorByTagNameAndClass = function(a, b, c) {

if(!b && !c) {
  return null
}
var d = b ? b.toUpperCase() : null;
return goog.dom.getAncestor(a, function(a) {
  return(!d || a.nodeName == d) && (!c || goog.dom.classes.has(a, c))
}, !0)

}; goog.dom.getAncestorByClass = function(a, b) {

return goog.dom.getAncestorByTagNameAndClass(a, null, b)

}; goog.dom.getAncestor = function(a, b, c, d) {

c || (a = a.parentNode);
c = null == d;
for(var e = 0;a && (c || e <= d);) {
  if(b(a)) {
    return a
  }
  a = a.parentNode;
  e++
}
return null

}; goog.dom.getActiveElement = function(a) {

try {
  return a && a.activeElement
}catch(b) {
}
return null

}; goog.dom.DomHelper = function(a) {

this.document_ = a || goog.global.document || document

}; goog.dom.DomHelper.prototype.getDomHelper = goog.dom.getDomHelper; goog.dom.DomHelper.prototype.setDocument = function(a) {

this.document_ = a

}; goog.dom.DomHelper.prototype.getDocument = function() {

return this.document_

}; goog.dom.DomHelper.prototype.getElement = function(a) {

return goog.isString(a) ? this.document_.getElementById(a) : a

}; goog.dom.DomHelper.prototype.$ = goog.dom.DomHelper.prototype.getElement; goog.dom.DomHelper.prototype.getElementsByTagNameAndClass = function(a, b, c) {

return goog.dom.getElementsByTagNameAndClass_(this.document_, a, b, c)

}; goog.dom.DomHelper.prototype.getElementsByClass = function(a, b) {

return goog.dom.getElementsByClass(a, b || this.document_)

}; goog.dom.DomHelper.prototype.getElementByClass = function(a, b) {

return goog.dom.getElementByClass(a, b || this.document_)

}; goog.dom.DomHelper.prototype.$$ = goog.dom.DomHelper.prototype.getElementsByTagNameAndClass; goog.dom.DomHelper.prototype.setProperties = goog.dom.setProperties; goog.dom.DomHelper.prototype.getViewportSize = function(a) {

return goog.dom.getViewportSize(a || this.getWindow())

}; goog.dom.DomHelper.prototype.getDocumentHeight = function() {

return goog.dom.getDocumentHeight_(this.getWindow())

}; goog.dom.DomHelper.prototype.createDom = function(a, b, c) {

return goog.dom.createDom_(this.document_, arguments)

}; goog.dom.DomHelper.prototype.$dom = goog.dom.DomHelper.prototype.createDom; goog.dom.DomHelper.prototype.createElement = function(a) {

return this.document_.createElement(a)

}; goog.dom.DomHelper.prototype.createTextNode = function(a) {

return this.document_.createTextNode(String(a))

}; goog.dom.DomHelper.prototype.createTable = function(a, b, c) {

return goog.dom.createTable_(this.document_, a, b, !!c)

}; goog.dom.DomHelper.prototype.htmlToDocumentFragment = function(a) {

return goog.dom.htmlToDocumentFragment_(this.document_, a)

}; goog.dom.DomHelper.prototype.getCompatMode = function() {

return this.isCss1CompatMode() ? "CSS1Compat" : "BackCompat"

}; goog.dom.DomHelper.prototype.isCss1CompatMode = function() {

return goog.dom.isCss1CompatMode_(this.document_)

}; goog.dom.DomHelper.prototype.getWindow = function() {

return goog.dom.getWindow_(this.document_)

}; goog.dom.DomHelper.prototype.getDocumentScrollElement = function() {

return goog.dom.getDocumentScrollElement_(this.document_)

}; goog.dom.DomHelper.prototype.getDocumentScroll = function() {

return goog.dom.getDocumentScroll_(this.document_)

}; goog.dom.DomHelper.prototype.getActiveElement = function(a) {

return goog.dom.getActiveElement(a || this.document_)

}; goog.dom.DomHelper.prototype.appendChild = goog.dom.appendChild; goog.dom.DomHelper.prototype.append = goog.dom.append; goog.dom.DomHelper.prototype.canHaveChildren = goog.dom.canHaveChildren; goog.dom.DomHelper.prototype.removeChildren = goog.dom.removeChildren; goog.dom.DomHelper.prototype.insertSiblingBefore = goog.dom.insertSiblingBefore; goog.dom.DomHelper.prototype.insertSiblingAfter = goog.dom.insertSiblingAfter; goog.dom.DomHelper.prototype.insertChildAt = goog.dom.insertChildAt; goog.dom.DomHelper.prototype.removeNode = goog.dom.removeNode; goog.dom.DomHelper.prototype.replaceNode = goog.dom.replaceNode; goog.dom.DomHelper.prototype.flattenElement = goog.dom.flattenElement; goog.dom.DomHelper.prototype.getChildren = goog.dom.getChildren; goog.dom.DomHelper.prototype.getFirstElementChild = goog.dom.getFirstElementChild; goog.dom.DomHelper.prototype.getLastElementChild = goog.dom.getLastElementChild; goog.dom.DomHelper.prototype.getNextElementSibling = goog.dom.getNextElementSibling; goog.dom.DomHelper.prototype.getPreviousElementSibling = goog.dom.getPreviousElementSibling; goog.dom.DomHelper.prototype.getNextNode = goog.dom.getNextNode; goog.dom.DomHelper.prototype.getPreviousNode = goog.dom.getPreviousNode; goog.dom.DomHelper.prototype.isNodeLike = goog.dom.isNodeLike; goog.dom.DomHelper.prototype.isElement = goog.dom.isElement; goog.dom.DomHelper.prototype.isWindow = goog.dom.isWindow; goog.dom.DomHelper.prototype.getParentElement = goog.dom.getParentElement; goog.dom.DomHelper.prototype.contains = goog.dom.contains; goog.dom.DomHelper.prototype.compareNodeOrder = goog.dom.compareNodeOrder; goog.dom.DomHelper.prototype.findCommonAncestor = goog.dom.findCommonAncestor; goog.dom.DomHelper.prototype.getOwnerDocument = goog.dom.getOwnerDocument; goog.dom.DomHelper.prototype.getFrameContentDocument = goog.dom.getFrameContentDocument; goog.dom.DomHelper.prototype.getFrameContentWindow = goog.dom.getFrameContentWindow; goog.dom.DomHelper.prototype.setTextContent = goog.dom.setTextContent; goog.dom.DomHelper.prototype.getOuterHtml = goog.dom.getOuterHtml; goog.dom.DomHelper.prototype.findNode = goog.dom.findNode; goog.dom.DomHelper.prototype.findNodes = goog.dom.findNodes; goog.dom.DomHelper.prototype.isFocusableTabIndex = goog.dom.isFocusableTabIndex; goog.dom.DomHelper.prototype.setFocusableTabIndex = goog.dom.setFocusableTabIndex; goog.dom.DomHelper.prototype.getTextContent = goog.dom.getTextContent; goog.dom.DomHelper.prototype.getNodeTextLength = goog.dom.getNodeTextLength; goog.dom.DomHelper.prototype.getNodeTextOffset = goog.dom.getNodeTextOffset; goog.dom.DomHelper.prototype.getNodeAtOffset = goog.dom.getNodeAtOffset; goog.dom.DomHelper.prototype.isNodeList = goog.dom.isNodeList; goog.dom.DomHelper.prototype.getAncestorByTagNameAndClass = goog.dom.getAncestorByTagNameAndClass; goog.dom.DomHelper.prototype.getAncestorByClass = goog.dom.getAncestorByClass; goog.dom.DomHelper.prototype.getAncestor = goog.dom.getAncestor; goog.dom.vendor = {}; goog.dom.vendor.getVendorJsPrefix = function() {

return goog.userAgent.WEBKIT ? "Webkit" : goog.userAgent.GECKO ? "Moz" : goog.userAgent.IE ? "ms" : goog.userAgent.OPERA ? "O" : null

}; goog.dom.vendor.getVendorPrefix = function() {

return goog.userAgent.WEBKIT ? "-webkit" : goog.userAgent.GECKO ? "-moz" : goog.userAgent.IE ? "-ms" : goog.userAgent.OPERA ? "-o" : null

}; goog.math.Box = function(a, b, c, d) {

this.top = a;
this.right = b;
this.bottom = c;
this.left = d

}; goog.math.Box.boundingBox = function(a) {

for(var b = new goog.math.Box(arguments[0].y, arguments[0].x, arguments[0].y, arguments[0].x), c = 1;c < arguments.length;c++) {
  var d = arguments[c];
  b.top = Math.min(b.top, d.y);
  b.right = Math.max(b.right, d.x);
  b.bottom = Math.max(b.bottom, d.y);
  b.left = Math.min(b.left, d.x)
}
return b

}; goog.math.Box.prototype.clone = function() {

return new goog.math.Box(this.top, this.right, this.bottom, this.left)

}; goog.DEBUG && (goog.math.Box.prototype.toString = function() {

return"(" + this.top + "t, " + this.right + "r, " + this.bottom + "b, " + this.left + "l)"

}); goog.math.Box.prototype.contains = function(a) {

return goog.math.Box.contains(this, a)

}; goog.math.Box.prototype.expand = function(a, b, c, d) {

goog.isObject(a) ? (this.top -= a.top, this.right += a.right, this.bottom += a.bottom, this.left -= a.left) : (this.top -= a, this.right += b, this.bottom += c, this.left -= d);
return this

}; goog.math.Box.prototype.expandToInclude = function(a) {

this.left = Math.min(this.left, a.left);
this.top = Math.min(this.top, a.top);
this.right = Math.max(this.right, a.right);
this.bottom = Math.max(this.bottom, a.bottom)

}; goog.math.Box.equals = function(a, b) {

return a == b ? !0 : a && b ? a.top == b.top && a.right == b.right && a.bottom == b.bottom && a.left == b.left : !1

}; goog.math.Box.contains = function(a, b) {

return a && b ? b instanceof goog.math.Box ? b.left >= a.left && b.right <= a.right && b.top >= a.top && b.bottom <= a.bottom : b.x >= a.left && b.x <= a.right && b.y >= a.top && b.y <= a.bottom : !1

}; goog.math.Box.relativePositionX = function(a, b) {

return b.x < a.left ? b.x - a.left : b.x > a.right ? b.x - a.right : 0

}; goog.math.Box.relativePositionY = function(a, b) {

return b.y < a.top ? b.y - a.top : b.y > a.bottom ? b.y - a.bottom : 0

}; goog.math.Box.distance = function(a, b) {

var c = goog.math.Box.relativePositionX(a, b), d = goog.math.Box.relativePositionY(a, b);
return Math.sqrt(c * c + d * d)

}; goog.math.Box.intersects = function(a, b) {

return a.left <= b.right && b.left <= a.right && a.top <= b.bottom && b.top <= a.bottom

}; goog.math.Box.intersectsWithPadding = function(a, b, c) {

return a.left <= b.right + c && b.left <= a.right + c && a.top <= b.bottom + c && b.top <= a.bottom + c

}; goog.math.Box.prototype.ceil = function() {

this.top = Math.ceil(this.top);
this.right = Math.ceil(this.right);
this.bottom = Math.ceil(this.bottom);
this.left = Math.ceil(this.left);
return this

}; goog.math.Box.prototype.floor = function() {

this.top = Math.floor(this.top);
this.right = Math.floor(this.right);
this.bottom = Math.floor(this.bottom);
this.left = Math.floor(this.left);
return this

}; goog.math.Box.prototype.round = function() {

this.top = Math.round(this.top);
this.right = Math.round(this.right);
this.bottom = Math.round(this.bottom);
this.left = Math.round(this.left);
return this

}; goog.math.Box.prototype.translate = function(a, b) {

a instanceof goog.math.Coordinate ? (this.left += a.x, this.right += a.x, this.top += a.y, this.bottom += a.y) : (this.left += a, this.right += a, goog.isNumber(b) && (this.top += b, this.bottom += b));
return this

}; goog.math.Box.prototype.scale = function(a, b) {

var c = goog.isNumber(b) ? b : a;
this.left *= a;
this.right *= a;
this.top *= c;
this.bottom *= c;
return this

}; goog.math.Rect = function(a, b, c, d) {

this.left = a;
this.top = b;
this.width = c;
this.height = d

}; goog.math.Rect.prototype.clone = function() {

return new goog.math.Rect(this.left, this.top, this.width, this.height)

}; goog.math.Rect.prototype.toBox = function() {

return new goog.math.Box(this.top, this.left + this.width, this.top + this.height, this.left)

}; goog.math.Rect.createFromBox = function(a) {

return new goog.math.Rect(a.left, a.top, a.right - a.left, a.bottom - a.top)

}; goog.DEBUG && (goog.math.Rect.prototype.toString = function() {

return"(" + this.left + ", " + this.top + " - " + this.width + "w x " + this.height + "h)"

}); goog.math.Rect.equals = function(a, b) {

return a == b ? !0 : a && b ? a.left == b.left && a.width == b.width && a.top == b.top && a.height == b.height : !1

}; goog.math.Rect.prototype.intersection = function(a) {

var b = Math.max(this.left, a.left), c = Math.min(this.left + this.width, a.left + a.width);
if(b <= c) {
  var d = Math.max(this.top, a.top);
  a = Math.min(this.top + this.height, a.top + a.height);
  if(d <= a) {
    return this.left = b, this.top = d, this.width = c - b, this.height = a - d, !0
  }
}
return!1

}; goog.math.Rect.intersection = function(a, b) {

var c = Math.max(a.left, b.left), d = Math.min(a.left + a.width, b.left + b.width);
if(c <= d) {
  var e = Math.max(a.top, b.top), f = Math.min(a.top + a.height, b.top + b.height);
  if(e <= f) {
    return new goog.math.Rect(c, e, d - c, f - e)
  }
}
return null

}; goog.math.Rect.intersects = function(a, b) {

return a.left <= b.left + b.width && b.left <= a.left + a.width && a.top <= b.top + b.height && b.top <= a.top + a.height

}; goog.math.Rect.prototype.intersects = function(a) {

return goog.math.Rect.intersects(this, a)

}; goog.math.Rect.difference = function(a, b) {

var c = goog.math.Rect.intersection(a, b);
if(!c || !c.height || !c.width) {
  return[a.clone()]
}
var c = [], d = a.top, e = a.height, f = a.left + a.width, g = a.top + a.height, h = b.left + b.width, k = b.top + b.height;
b.top > a.top && (c.push(new goog.math.Rect(a.left, a.top, a.width, b.top - a.top)), d = b.top, e -= b.top - a.top);
k < g && (c.push(new goog.math.Rect(a.left, k, a.width, g - k)), e = k - d);
b.left > a.left && c.push(new goog.math.Rect(a.left, d, b.left - a.left, e));
h < f && c.push(new goog.math.Rect(h, d, f - h, e));
return c

}; goog.math.Rect.prototype.difference = function(a) {

return goog.math.Rect.difference(this, a)

}; goog.math.Rect.prototype.boundingRect = function(a) {

var b = Math.max(this.left + this.width, a.left + a.width), c = Math.max(this.top + this.height, a.top + a.height);
this.left = Math.min(this.left, a.left);
this.top = Math.min(this.top, a.top);
this.width = b - this.left;
this.height = c - this.top

}; goog.math.Rect.boundingRect = function(a, b) {

if(!a || !b) {
  return null
}
var c = a.clone();
c.boundingRect(b);
return c

}; goog.math.Rect.prototype.contains = function(a) {

return a instanceof goog.math.Rect ? this.left <= a.left && this.left + this.width >= a.left + a.width && this.top <= a.top && this.top + this.height >= a.top + a.height : a.x >= this.left && a.x <= this.left + this.width && a.y >= this.top && a.y <= this.top + this.height

}; goog.math.Rect.prototype.squaredDistance = function(a) {

var b = a.x < this.left ? this.left - a.x : Math.max(a.x - (this.left + this.width), 0);
a = a.y < this.top ? this.top - a.y : Math.max(a.y - (this.top + this.height), 0);
return b * b + a * a

}; goog.math.Rect.prototype.distance = function(a) {

return Math.sqrt(this.squaredDistance(a))

}; goog.math.Rect.prototype.getSize = function() {

return new goog.math.Size(this.width, this.height)

}; goog.math.Rect.prototype.getTopLeft = function() {

return new goog.math.Coordinate(this.left, this.top)

}; goog.math.Rect.prototype.getCenter = function() {

return new goog.math.Coordinate(this.left + this.width / 2, this.top + this.height / 2)

}; goog.math.Rect.prototype.getBottomRight = function() {

return new goog.math.Coordinate(this.left + this.width, this.top + this.height)

}; goog.math.Rect.prototype.ceil = function() {

this.left = Math.ceil(this.left);
this.top = Math.ceil(this.top);
this.width = Math.ceil(this.width);
this.height = Math.ceil(this.height);
return this

}; goog.math.Rect.prototype.floor = function() {

this.left = Math.floor(this.left);
this.top = Math.floor(this.top);
this.width = Math.floor(this.width);
this.height = Math.floor(this.height);
return this

}; goog.math.Rect.prototype.round = function() {

this.left = Math.round(this.left);
this.top = Math.round(this.top);
this.width = Math.round(this.width);
this.height = Math.round(this.height);
return this

}; goog.math.Rect.prototype.translate = function(a, b) {

a instanceof goog.math.Coordinate ? (this.left += a.x, this.top += a.y) : (this.left += a, goog.isNumber(b) && (this.top += b));
return this

}; goog.math.Rect.prototype.scale = function(a, b) {

var c = goog.isNumber(b) ? b : a;
this.left *= a;
this.width *= a;
this.top *= c;
this.height *= c;
return this

}; goog.style = {}; goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS = !1; goog.style.setStyle = function(a, b, c) {

goog.isString(b) ? goog.style.setStyle_(a, c, b) : goog.object.forEach(b, goog.partial(goog.style.setStyle_, a))

}; goog.style.setStyle_ = function(a, b, c) {

(c = goog.style.getVendorJsStyleName_(a, c)) && (a.style[c] = b)

}; goog.style.getVendorJsStyleName_ = function(a, b) {

var c = goog.string.toCamelCase(b);
if(void 0 === a.style[c]) {
  var d = goog.dom.vendor.getVendorJsPrefix() + goog.string.toTitleCase(b);
  if(void 0 !== a.style[d]) {
    return d
  }
}
return c

}; goog.style.getVendorStyleName_ = function(a, b) {

var c = goog.string.toCamelCase(b);
return void 0 === a.style[c] && (c = goog.dom.vendor.getVendorJsPrefix() + goog.string.toTitleCase(b), void 0 !== a.style[c]) ? goog.dom.vendor.getVendorPrefix() + "-" + b : b

}; goog.style.getStyle = function(a, b) {

var c = a.style[goog.string.toCamelCase(b)];
return"undefined" !== typeof c ? c : a.style[goog.style.getVendorJsStyleName_(a, b)] || ""

}; goog.style.getComputedStyle = function(a, b) {

var c = goog.dom.getOwnerDocument(a);
return c.defaultView && c.defaultView.getComputedStyle && (c = c.defaultView.getComputedStyle(a, null)) ? c[b] || c.getPropertyValue(b) || "" : ""

}; goog.style.getCascadedStyle = function(a, b) {

return a.currentStyle ? a.currentStyle[b] : null

}; goog.style.getStyle_ = function(a, b) {

return goog.style.getComputedStyle(a, b) || goog.style.getCascadedStyle(a, b) || a.style && a.style[b]

}; goog.style.getComputedPosition = function(a) {

return goog.style.getStyle_(a, "position")

}; goog.style.getBackgroundColor = function(a) {

return goog.style.getStyle_(a, "backgroundColor")

}; goog.style.getComputedOverflowX = function(a) {

return goog.style.getStyle_(a, "overflowX")

}; goog.style.getComputedOverflowY = function(a) {

return goog.style.getStyle_(a, "overflowY")

}; goog.style.getComputedZIndex = function(a) {

return goog.style.getStyle_(a, "zIndex")

}; goog.style.getComputedTextAlign = function(a) {

return goog.style.getStyle_(a, "textAlign")

}; goog.style.getComputedCursor = function(a) {

return goog.style.getStyle_(a, "cursor")

}; goog.style.setPosition = function(a, b, c) {

var d, e = goog.userAgent.GECKO && (goog.userAgent.MAC || goog.userAgent.X11) && goog.userAgent.isVersionOrHigher("1.9");
b instanceof goog.math.Coordinate ? (d = b.x, b = b.y) : (d = b, b = c);
a.style.left = goog.style.getPixelStyleValue_(d, e);
a.style.top = goog.style.getPixelStyleValue_(b, e)

}; goog.style.getPosition = function(a) {

return new goog.math.Coordinate(a.offsetLeft, a.offsetTop)

}; goog.style.getClientViewportElement = function(a) {

a = a ? goog.dom.getOwnerDocument(a) : goog.dom.getDocument();
return!goog.userAgent.IE || goog.userAgent.isDocumentModeOrHigher(9) || goog.dom.getDomHelper(a).isCss1CompatMode() ? a.documentElement : a.body

}; goog.style.getViewportPageOffset = function(a) {

var b = a.body;
a = a.documentElement;
return new goog.math.Coordinate(b.scrollLeft || a.scrollLeft, b.scrollTop || a.scrollTop)

}; goog.style.getBoundingClientRect_ = function(a) {

var b;
try {
  b = a.getBoundingClientRect()
}catch(c) {
  return{left:0, top:0, right:0, bottom:0}
}
goog.userAgent.IE && a.ownerDocument.body && (a = a.ownerDocument, b.left -= a.documentElement.clientLeft + a.body.clientLeft, b.top -= a.documentElement.clientTop + a.body.clientTop);
return b

}; goog.style.getOffsetParent = function(a) {

if(goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(8)) {
  return a.offsetParent
}
var b = goog.dom.getOwnerDocument(a), c = goog.style.getStyle_(a, "position"), d = "fixed" == c || "absolute" == c;
for(a = a.parentNode;a && a != b;a = a.parentNode) {
  if(c = goog.style.getStyle_(a, "position"), d = d && "static" == c && a != b.documentElement && a != b.body, !d && (a.scrollWidth > a.clientWidth || a.scrollHeight > a.clientHeight || "fixed" == c || "absolute" == c || "relative" == c)) {
    return a
  }
}
return null

}; goog.style.getVisibleRectForElement = function(a) {

for(var b = new goog.math.Box(0, Infinity, Infinity, 0), c = goog.dom.getDomHelper(a), d = c.getDocument().body, e = c.getDocument().documentElement, f = c.getDocumentScrollElement();a = goog.style.getOffsetParent(a);) {
  if(!(goog.userAgent.IE && 0 == a.clientWidth || goog.userAgent.WEBKIT && 0 == a.clientHeight && a == d || a == d || a == e || "visible" == goog.style.getStyle_(a, "overflow"))) {
    var g = goog.style.getPageOffset(a), h = goog.style.getClientLeftTop(a);
    g.x += h.x;
    g.y += h.y;
    b.top = Math.max(b.top, g.y);
    b.right = Math.min(b.right, g.x + a.clientWidth);
    b.bottom = Math.min(b.bottom, g.y + a.clientHeight);
    b.left = Math.max(b.left, g.x)
  }
}
d = f.scrollLeft;
f = f.scrollTop;
b.left = Math.max(b.left, d);
b.top = Math.max(b.top, f);
c = c.getViewportSize();
b.right = Math.min(b.right, d + c.width);
b.bottom = Math.min(b.bottom, f + c.height);
return 0 <= b.top && 0 <= b.left && b.bottom > b.top && b.right > b.left ? b : null

}; goog.style.getContainerOffsetToScrollInto = function(a, b, c) {

var d = goog.style.getPageOffset(a), e = goog.style.getPageOffset(b), f = goog.style.getBorderBox(b), g = d.x - e.x - f.left, d = d.y - e.y - f.top, e = b.clientWidth - a.offsetWidth;
a = b.clientHeight - a.offsetHeight;
f = b.scrollLeft;
b = b.scrollTop;
c ? (f += g - e / 2, b += d - a / 2) : (f += Math.min(g, Math.max(g - e, 0)), b += Math.min(d, Math.max(d - a, 0)));
return new goog.math.Coordinate(f, b)

}; goog.style.scrollIntoContainerView = function(a, b, c) {

a = goog.style.getContainerOffsetToScrollInto(a, b, c);
b.scrollLeft = a.x;
b.scrollTop = a.y

}; goog.style.getClientLeftTop = function(a) {

if(goog.userAgent.GECKO && !goog.userAgent.isVersionOrHigher("1.9")) {
  var b = parseFloat(goog.style.getComputedStyle(a, "borderLeftWidth"));
  if(goog.style.isRightToLeft(a)) {
    var c = a.offsetWidth - a.clientWidth - b - parseFloat(goog.style.getComputedStyle(a, "borderRightWidth")), b = b + c
  }
  return new goog.math.Coordinate(b, parseFloat(goog.style.getComputedStyle(a, "borderTopWidth")))
}
return new goog.math.Coordinate(a.clientLeft, a.clientTop)

}; goog.style.getPageOffset = function(a) {

var b, c = goog.dom.getOwnerDocument(a), d = goog.style.getStyle_(a, "position");
goog.asserts.assertObject(a, "Parameter is required");
var e = !goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS && goog.userAgent.GECKO && c.getBoxObjectFor && !a.getBoundingClientRect && "absolute" == d && (b = c.getBoxObjectFor(a)) && (0 > b.screenX || 0 > b.screenY), f = new goog.math.Coordinate(0, 0), g = goog.style.getClientViewportElement(c);
if(a == g) {
  return f
}
if(goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS || a.getBoundingClientRect) {
  b = goog.style.getBoundingClientRect_(a), a = goog.dom.getDomHelper(c).getDocumentScroll(), f.x = b.left + a.x, f.y = b.top + a.y
}else {
  if(c.getBoxObjectFor && !e) {
    b = c.getBoxObjectFor(a), a = c.getBoxObjectFor(g), f.x = b.screenX - a.screenX, f.y = b.screenY - a.screenY
  }else {
    b = a;
    do {
      f.x += b.offsetLeft;
      f.y += b.offsetTop;
      b != a && (f.x += b.clientLeft || 0, f.y += b.clientTop || 0);
      if(goog.userAgent.WEBKIT && "fixed" == goog.style.getComputedPosition(b)) {
        f.x += c.body.scrollLeft;
        f.y += c.body.scrollTop;
        break
      }
      b = b.offsetParent
    }while(b && b != a);
    if(goog.userAgent.OPERA || goog.userAgent.WEBKIT && "absolute" == d) {
      f.y -= c.body.offsetTop
    }
    for(b = a;(b = goog.style.getOffsetParent(b)) && b != c.body && b != g;) {
      f.x -= b.scrollLeft, goog.userAgent.OPERA && "TR" == b.tagName || (f.y -= b.scrollTop)
    }
  }
}
return f

}; goog.style.getPageOffsetLeft = function(a) {

return goog.style.getPageOffset(a).x

}; goog.style.getPageOffsetTop = function(a) {

return goog.style.getPageOffset(a).y

}; goog.style.getFramedPageOffset = function(a, b) {

var c = new goog.math.Coordinate(0, 0), d = goog.dom.getWindow(goog.dom.getOwnerDocument(a)), e = a;
do {
  var f = d == b ? goog.style.getPageOffset(e) : goog.style.getClientPositionForElement_(goog.asserts.assert(e));
  c.x += f.x;
  c.y += f.y
}while(d && d != b && (e = d.frameElement) && (d = d.parent));
return c

}; goog.style.translateRectForAnotherFrame = function(a, b, c) {

if(b.getDocument() != c.getDocument()) {
  var d = b.getDocument().body;
  c = goog.style.getFramedPageOffset(d, c.getWindow());
  c = goog.math.Coordinate.difference(c, goog.style.getPageOffset(d));
  goog.userAgent.IE && !b.isCss1CompatMode() && (c = goog.math.Coordinate.difference(c, b.getDocumentScroll()));
  a.left += c.x;
  a.top += c.y
}

}; goog.style.getRelativePosition = function(a, b) {

var c = goog.style.getClientPosition(a), d = goog.style.getClientPosition(b);
return new goog.math.Coordinate(c.x - d.x, c.y - d.y)

}; goog.style.getClientPositionForElement_ = function(a) {

var b;
if(goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS || a.getBoundingClientRect) {
  b = goog.style.getBoundingClientRect_(a), b = new goog.math.Coordinate(b.left, b.top)
}else {
  b = goog.dom.getDomHelper(a).getDocumentScroll();
  var c = goog.style.getPageOffset(a);
  b = new goog.math.Coordinate(c.x - b.x, c.y - b.y)
}
return goog.userAgent.GECKO && !goog.userAgent.isVersionOrHigher(12) ? goog.math.Coordinate.sum(b, goog.style.getCssTranslation(a)) : b

}; goog.style.getClientPosition = function(a) {

goog.asserts.assert(a);
if(a.nodeType == goog.dom.NodeType.ELEMENT) {
  return goog.style.getClientPositionForElement_(a)
}
var b = goog.isFunction(a.getBrowserEvent), c = a;
a.targetTouches ? c = a.targetTouches[0] : b && a.getBrowserEvent().targetTouches && (c = a.getBrowserEvent().targetTouches[0]);
return new goog.math.Coordinate(c.clientX, c.clientY)

}; goog.style.setPageOffset = function(a, b, c) {

var d = goog.style.getPageOffset(a);
b instanceof goog.math.Coordinate && (c = b.y, b = b.x);
goog.style.setPosition(a, a.offsetLeft + (b - d.x), a.offsetTop + (c - d.y))

}; goog.style.setSize = function(a, b, c) {

if(b instanceof goog.math.Size) {
  c = b.height, b = b.width
}else {
  if(void 0 == c) {
    throw Error("missing height argument");
  }
}
goog.style.setWidth(a, b);
goog.style.setHeight(a, c)

}; goog.style.getPixelStyleValue_ = function(a, b) {

"number" == typeof a && (a = (b ? Math.round(a) : a) + "px");
return a

}; goog.style.setHeight = function(a, b) {

a.style.height = goog.style.getPixelStyleValue_(b, !0)

}; goog.style.setWidth = function(a, b) {

a.style.width = goog.style.getPixelStyleValue_(b, !0)

}; goog.style.getSize = function(a) {

if("none" != goog.style.getStyle_(a, "display")) {
  return goog.style.getSizeWithDisplay_(a)
}
var b = a.style, c = b.display, d = b.visibility, e = b.position;
b.visibility = "hidden";
b.position = "absolute";
b.display = "inline";
a = goog.style.getSizeWithDisplay_(a);
b.display = c;
b.position = e;
b.visibility = d;
return a

}; goog.style.getSizeWithDisplay_ = function(a) {

var b = a.offsetWidth, c = a.offsetHeight, d = goog.userAgent.WEBKIT && !b && !c;
return goog.isDef(b) && !d || !a.getBoundingClientRect ? new goog.math.Size(b, c) : (a = goog.style.getBoundingClientRect_(a), new goog.math.Size(a.right - a.left, a.bottom - a.top))

}; goog.style.getBounds = function(a) {

var b = goog.style.getPageOffset(a);
a = goog.style.getSize(a);
return new goog.math.Rect(b.x, b.y, a.width, a.height)

}; goog.style.toCamelCase = function(a) {

return goog.string.toCamelCase(String(a))

}; goog.style.toSelectorCase = function(a) {

return goog.string.toSelectorCase(a)

}; goog.style.getOpacity = function(a) {

var b = a.style;
a = "";
"opacity" in b ? a = b.opacity : "MozOpacity" in b ? a = b.MozOpacity : "filter" in b && (b = b.filter.match(/alpha\(opacity=([\d.]+)\)/)) && (a = String(b[1] / 100));
return"" == a ? a : Number(a)

}; goog.style.setOpacity = function(a, b) {

var c = a.style;
"opacity" in c ? c.opacity = b : "MozOpacity" in c ? c.MozOpacity = b : "filter" in c && (c.filter = "" === b ? "" : "alpha(opacity=" + 100 * b + ")")

}; goog.style.setTransparentBackgroundImage = function(a, b) {

var c = a.style;
goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("8") ? c.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + b + '", sizingMethod="crop")' : (c.backgroundImage = "url(" + b + ")", c.backgroundPosition = "top left", c.backgroundRepeat = "no-repeat")

}; goog.style.clearTransparentBackgroundImage = function(a) {

a = a.style;
"filter" in a ? a.filter = "" : a.backgroundImage = "none"

}; goog.style.showElement = function(a, b) {

goog.style.setElementShown(a, b)

}; goog.style.setElementShown = function(a, b) {

a.style.display = b ? "" : "none"

}; goog.style.isElementShown = function(a) {

return"none" != a.style.display

}; goog.style.installStyles = function(a, b) {

var c = goog.dom.getDomHelper(b), d = null;
if(goog.userAgent.IE) {
  d = c.getDocument().createStyleSheet(), goog.style.setStyles(d, a)
}else {
  var e = c.getElementsByTagNameAndClass("head")[0];
  e || (d = c.getElementsByTagNameAndClass("body")[0], e = c.createDom("head"), d.parentNode.insertBefore(e, d));
  d = c.createDom("style");
  goog.style.setStyles(d, a);
  c.appendChild(e, d)
}
return d

}; goog.style.uninstallStyles = function(a) {

goog.dom.removeNode(a.ownerNode || a.owningElement || a)

}; goog.style.setStyles = function(a, b) {

goog.userAgent.IE ? a.cssText = b : a.innerHTML = b

}; goog.style.setPreWrap = function(a) {

a = a.style;
goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("8") ? (a.whiteSpace = "pre", a.wordWrap = "break-word") : a.whiteSpace = goog.userAgent.GECKO ? "-moz-pre-wrap" : "pre-wrap"

}; goog.style.setInlineBlock = function(a) {

a = a.style;
a.position = "relative";
goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("8") ? (a.zoom = "1", a.display = "inline") : a.display = goog.userAgent.GECKO ? goog.userAgent.isVersionOrHigher("1.9a") ? "inline-block" : "-moz-inline-box" : "inline-block"

}; goog.style.isRightToLeft = function(a) {

return"rtl" == goog.style.getStyle_(a, "direction")

}; goog.style.unselectableStyle_ = goog.userAgent.GECKO ? “MozUserSelect” : goog.userAgent.WEBKIT ? “WebkitUserSelect” : null; goog.style.isUnselectable = function(a) {

return goog.style.unselectableStyle_ ? "none" == a.style[goog.style.unselectableStyle_].toLowerCase() : goog.userAgent.IE || goog.userAgent.OPERA ? "on" == a.getAttribute("unselectable") : !1

}; goog.style.setUnselectable = function(a, b, c) {

c = c ? null : a.getElementsByTagName("*");
var d = goog.style.unselectableStyle_;
if(d) {
  if(b = b ? "none" : "", a.style[d] = b, c) {
    a = 0;
    for(var e;e = c[a];a++) {
      e.style[d] = b
    }
  }
}else {
  if(goog.userAgent.IE || goog.userAgent.OPERA) {
    if(b = b ? "on" : "", a.setAttribute("unselectable", b), c) {
      for(a = 0;e = c[a];a++) {
        e.setAttribute("unselectable", b)
      }
    }
  }
}

}; goog.style.getBorderBoxSize = function(a) {

return new goog.math.Size(a.offsetWidth, a.offsetHeight)

}; goog.style.setBorderBoxSize = function(a, b) {

var c = goog.dom.getOwnerDocument(a), d = goog.dom.getDomHelper(c).isCss1CompatMode();
if(!goog.userAgent.IE || d && goog.userAgent.isVersionOrHigher("8")) {
  goog.style.setBoxSizingSize_(a, b, "border-box")
}else {
  if(c = a.style, d) {
    var d = goog.style.getPaddingBox(a), e = goog.style.getBorderBox(a);
    c.pixelWidth = b.width - e.left - d.left - d.right - e.right;
    c.pixelHeight = b.height - e.top - d.top - d.bottom - e.bottom
  }else {
    c.pixelWidth = b.width, c.pixelHeight = b.height
  }
}

}; goog.style.getContentBoxSize = function(a) {

var b = goog.dom.getOwnerDocument(a), c = goog.userAgent.IE && a.currentStyle;
if(c && goog.dom.getDomHelper(b).isCss1CompatMode() && "auto" != c.width && "auto" != c.height && !c.boxSizing) {
  return b = goog.style.getIePixelValue_(a, c.width, "width", "pixelWidth"), a = goog.style.getIePixelValue_(a, c.height, "height", "pixelHeight"), new goog.math.Size(b, a)
}
c = goog.style.getBorderBoxSize(a);
b = goog.style.getPaddingBox(a);
a = goog.style.getBorderBox(a);
return new goog.math.Size(c.width - a.left - b.left - b.right - a.right, c.height - a.top - b.top - b.bottom - a.bottom)

}; goog.style.setContentBoxSize = function(a, b) {

var c = goog.dom.getOwnerDocument(a), d = goog.dom.getDomHelper(c).isCss1CompatMode();
if(!goog.userAgent.IE || d && goog.userAgent.isVersionOrHigher("8")) {
  goog.style.setBoxSizingSize_(a, b, "content-box")
}else {
  if(c = a.style, d) {
    c.pixelWidth = b.width, c.pixelHeight = b.height
  }else {
    var d = goog.style.getPaddingBox(a), e = goog.style.getBorderBox(a);
    c.pixelWidth = b.width + e.left + d.left + d.right + e.right;
    c.pixelHeight = b.height + e.top + d.top + d.bottom + e.bottom
  }
}

}; goog.style.setBoxSizingSize_ = function(a, b, c) {

a = a.style;
goog.userAgent.GECKO ? a.MozBoxSizing = c : goog.userAgent.WEBKIT ? a.WebkitBoxSizing = c : a.boxSizing = c;
a.width = Math.max(b.width, 0) + "px";
a.height = Math.max(b.height, 0) + "px"

}; goog.style.getIePixelValue_ = function(a, b, c, d) {

if(/^\d+px?$/.test(b)) {
  return parseInt(b, 10)
}
var e = a.style[c], f = a.runtimeStyle[c];
a.runtimeStyle[c] = a.currentStyle[c];
a.style[c] = b;
b = a.style[d];
a.style[c] = e;
a.runtimeStyle[c] = f;
return b

}; goog.style.getIePixelDistance_ = function(a, b) {

var c = goog.style.getCascadedStyle(a, b);
return c ? goog.style.getIePixelValue_(a, c, "left", "pixelLeft") : 0

}; goog.style.getBox_ = function(a, b) {

if(goog.userAgent.IE) {
  var c = goog.style.getIePixelDistance_(a, b + "Left"), d = goog.style.getIePixelDistance_(a, b + "Right"), e = goog.style.getIePixelDistance_(a, b + "Top"), f = goog.style.getIePixelDistance_(a, b + "Bottom");
  return new goog.math.Box(e, d, f, c)
}
c = goog.style.getComputedStyle(a, b + "Left");
d = goog.style.getComputedStyle(a, b + "Right");
e = goog.style.getComputedStyle(a, b + "Top");
f = goog.style.getComputedStyle(a, b + "Bottom");
return new goog.math.Box(parseFloat(e), parseFloat(d), parseFloat(f), parseFloat(c))

}; goog.style.getPaddingBox = function(a) {

return goog.style.getBox_(a, "padding")

}; goog.style.getMarginBox = function(a) {

return goog.style.getBox_(a, "margin")

}; goog.style.ieBorderWidthKeywords_ = {thin:2, medium:4, thick:6}; goog.style.getIePixelBorder_ = function(a, b) {

if("none" == goog.style.getCascadedStyle(a, b + "Style")) {
  return 0
}
var c = goog.style.getCascadedStyle(a, b + "Width");
return c in goog.style.ieBorderWidthKeywords_ ? goog.style.ieBorderWidthKeywords_[c] : goog.style.getIePixelValue_(a, c, "left", "pixelLeft")

}; goog.style.getBorderBox = function(a) {

if(goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9)) {
  var b = goog.style.getIePixelBorder_(a, "borderLeft"), c = goog.style.getIePixelBorder_(a, "borderRight"), d = goog.style.getIePixelBorder_(a, "borderTop");
  a = goog.style.getIePixelBorder_(a, "borderBottom");
  return new goog.math.Box(d, c, a, b)
}
b = goog.style.getComputedStyle(a, "borderLeftWidth");
c = goog.style.getComputedStyle(a, "borderRightWidth");
d = goog.style.getComputedStyle(a, "borderTopWidth");
a = goog.style.getComputedStyle(a, "borderBottomWidth");
return new goog.math.Box(parseFloat(d), parseFloat(c), parseFloat(a), parseFloat(b))

}; goog.style.getFontFamily = function(a) {

var b = goog.dom.getOwnerDocument(a), c = "";
if(b.body.createTextRange) {
  b = b.body.createTextRange();
  b.moveToElementText(a);
  try {
    c = b.queryCommandValue("FontName")
  }catch(d) {
    c = ""
  }
}
c || (c = goog.style.getStyle_(a, "fontFamily"));
a = c.split(",");
1 < a.length && (c = a[0]);
return goog.string.stripQuotes(c, "\"'")

}; goog.style.lengthUnitRegex_ = /[^d]+$/; goog.style.getLengthUnits = function(a) {

return(a = a.match(goog.style.lengthUnitRegex_)) && a[0] || null

}; goog.style.ABSOLUTE_CSS_LENGTH_UNITS_ = {cm:1, “in”:1, mm:1, pc:1, pt:1}; goog.style.CONVERTIBLE_RELATIVE_CSS_UNITS_ = {em:1, ex:1}; goog.style.getFontSize = function(a) {

var b = goog.style.getStyle_(a, "fontSize"), c = goog.style.getLengthUnits(b);
if(b && "px" == c) {
  return parseInt(b, 10)
}
if(goog.userAgent.IE) {
  if(c in goog.style.ABSOLUTE_CSS_LENGTH_UNITS_) {
    return goog.style.getIePixelValue_(a, b, "left", "pixelLeft")
  }
  if(a.parentNode && a.parentNode.nodeType == goog.dom.NodeType.ELEMENT && c in goog.style.CONVERTIBLE_RELATIVE_CSS_UNITS_) {
    return a = a.parentNode, c = goog.style.getStyle_(a, "fontSize"), goog.style.getIePixelValue_(a, b == c ? "1em" : b, "left", "pixelLeft")
  }
}
c = goog.dom.createDom("span", {style:"visibility:hidden;position:absolute;line-height:0;padding:0;margin:0;border:0;height:1em;"});
goog.dom.appendChild(a, c);
b = c.offsetHeight;
goog.dom.removeNode(c);
return b

}; goog.style.parseStyleAttribute = function(a) {

var b = {};
goog.array.forEach(a.split(/\s*;\s*/), function(a) {
  a = a.split(/\s*:\s*/);
  2 == a.length && (b[goog.string.toCamelCase(a[0].toLowerCase())] = a[1])
});
return b

}; goog.style.toStyleAttribute = function(a) {

var b = [];
goog.object.forEach(a, function(a, d) {
  b.push(goog.string.toSelectorCase(d), ":", a, ";")
});
return b.join("")

}; goog.style.setFloat = function(a, b) {

a.style[goog.userAgent.IE ? "styleFloat" : "cssFloat"] = b

}; goog.style.getFloat = function(a) {

return a.style[goog.userAgent.IE ? "styleFloat" : "cssFloat"] || ""

}; goog.style.getScrollbarWidth = function(a) {

var b = goog.dom.createElement("div");
a && (b.className = a);
b.style.cssText = "overflow:auto;position:absolute;top:0;width:100px;height:100px";
a = goog.dom.createElement("div");
goog.style.setSize(a, "200px", "200px");
b.appendChild(a);
goog.dom.appendChild(goog.dom.getDocument().body, b);
a = b.offsetWidth - b.clientWidth;
goog.dom.removeNode(b);
return a

}; goog.style.MATRIX_TRANSLATION_REGEX_ = /matrix(+, [0-9.-]+, [0-9.-]+, [0-9.-]+, ([0-9.-]+)p?x?, ([0-9.-]+)p?x?)/; goog.style.getCssTranslation = function(a) {

var b;
goog.userAgent.IE ? b = "-ms-transform" : goog.userAgent.WEBKIT ? b = "-webkit-transform" : goog.userAgent.OPERA ? b = "-o-transform" : goog.userAgent.GECKO && (b = "-moz-transform");
var c;
b && (c = goog.style.getStyle_(a, b));
c || (c = goog.style.getStyle_(a, "transform"));
return c ? (a = c.match(goog.style.MATRIX_TRANSLATION_REGEX_)) ? new goog.math.Coordinate(parseFloat(a[1]), parseFloat(a[2])) : new goog.math.Coordinate(0, 0) : new goog.math.Coordinate(0, 0)

}; goog.debug.DivConsole = function(a) {

this.publishHandler_ = goog.bind(this.addLogRecord, this);
this.formatter_ = new goog.debug.HtmlFormatter;
this.isCapturing_ = this.formatter_.showAbsoluteTime = !1;
this.element_ = a;
this.elementOwnerDocument_ = this.element_.ownerDocument || this.element_.document;
this.installStyles()

}; goog.debug.DivConsole.prototype.installStyles = function() {

goog.style.installStyles(".dbg-sev{color:#F00}.dbg-w{color:#C40}.dbg-sh{font-weight:bold;color:#000}.dbg-i{color:#444}.dbg-f{color:#999}.dbg-ev{color:#0A0}.dbg-m{color:#990}.logmsg{border-bottom:1px solid #CCC;padding:2px}.logsep{background-color: #8C8;}.logdiv{border:1px solid #CCC;background-color:#FCFCFC;font:medium monospace}", this.element_);
this.element_.className += " logdiv"

}; goog.debug.DivConsole.prototype.setCapturing = function(a) {

if(a != this.isCapturing_) {
  var b = goog.debug.LogManager.getRoot();
  a ? b.addHandler(this.publishHandler_) : (b.removeHandler(this.publishHandler_), this.logBuffer = "");
  this.isCapturing_ = a
}

}; goog.debug.DivConsole.prototype.addLogRecord = function(a) {

var b = 100 >= this.element_.scrollHeight - this.element_.scrollTop - this.element_.clientHeight, c = this.elementOwnerDocument_.createElement("div");
c.className = "logmsg";
c.innerHTML = this.formatter_.formatRecord(a);
this.element_.appendChild(c);
b && (this.element_.scrollTop = this.element_.scrollHeight)

}; goog.debug.DivConsole.prototype.getFormatter = function() {

return this.formatter_

}; goog.debug.DivConsole.prototype.setFormatter = function(a) {

this.formatter_ = a

}; goog.debug.DivConsole.prototype.addSeparator = function() {

var a = this.elementOwnerDocument_.createElement("div");
a.className = "logmsg logsep";
this.element_.appendChild(a)

}; goog.debug.DivConsole.prototype.clear = function() {

this.element_.innerHTML = ""

}; goog.userAgent.product = {}; goog.userAgent.product.ASSUME_FIREFOX = !1; goog.userAgent.product.ASSUME_CAMINO = !1; goog.userAgent.product.ASSUME_IPHONE = !1; goog.userAgent.product.ASSUME_IPAD = !1; goog.userAgent.product.ASSUME_ANDROID = !1; goog.userAgent.product.ASSUME_CHROME = !1; goog.userAgent.product.ASSUME_SAFARI = !0; goog.userAgent.product.PRODUCT_KNOWN_ = goog.userAgent.ASSUME_IE || goog.userAgent.ASSUME_OPERA || goog.userAgent.product.ASSUME_FIREFOX || goog.userAgent.product.ASSUME_CAMINO || goog.userAgent.product.ASSUME_IPHONE || goog.userAgent.product.ASSUME_IPAD || goog.userAgent.product.ASSUME_ANDROID || goog.userAgent.product.ASSUME_CHROME || goog.userAgent.product.ASSUME_SAFARI; goog.userAgent.product.init_ = function() {

goog.userAgent.product.detectedFirefox_ = !1;
goog.userAgent.product.detectedCamino_ = !1;
goog.userAgent.product.detectedIphone_ = !1;
goog.userAgent.product.detectedIpad_ = !1;
goog.userAgent.product.detectedAndroid_ = !1;
goog.userAgent.product.detectedChrome_ = !1;
goog.userAgent.product.detectedSafari_ = !1;
var a = goog.userAgent.getUserAgentString();
a && (-1 != a.indexOf("Firefox") ? goog.userAgent.product.detectedFirefox_ = !0 : -1 != a.indexOf("Camino") ? goog.userAgent.product.detectedCamino_ = !0 : -1 != a.indexOf("iPhone") || -1 != a.indexOf("iPod") ? goog.userAgent.product.detectedIphone_ = !0 : -1 != a.indexOf("iPad") ? goog.userAgent.product.detectedIpad_ = !0 : -1 != a.indexOf("Android") ? goog.userAgent.product.detectedAndroid_ = !0 : -1 != a.indexOf("Chrome") ? goog.userAgent.product.detectedChrome_ = !0 : -1 != a.indexOf("Safari") && 
(goog.userAgent.product.detectedSafari_ = !0))

}; goog.userAgent.product.PRODUCT_KNOWN_ || goog.userAgent.product.init_(); goog.userAgent.product.OPERA = goog.userAgent.OPERA; goog.userAgent.product.IE = goog.userAgent.IE; goog.userAgent.product.FIREFOX = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_FIREFOX : goog.userAgent.product.detectedFirefox_; goog.userAgent.product.CAMINO = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_CAMINO : goog.userAgent.product.detectedCamino_; goog.userAgent.product.IPHONE = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_IPHONE : goog.userAgent.product.detectedIphone_; goog.userAgent.product.IPAD = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_IPAD : goog.userAgent.product.detectedIpad_; goog.userAgent.product.ANDROID = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_ANDROID : goog.userAgent.product.detectedAndroid_; goog.userAgent.product.CHROME = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_CHROME : goog.userAgent.product.detectedChrome_; goog.userAgent.product.SAFARI = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_SAFARI : goog.userAgent.product.detectedSafari_; goog.userAgent.product.determineVersion_ = function() {

if(goog.userAgent.product.FIREFOX) {
  return goog.userAgent.product.getFirstRegExpGroup_(/Firefox\/([0-9.]+)/)
}
if(goog.userAgent.product.IE || goog.userAgent.product.OPERA) {
  return goog.userAgent.VERSION
}
if(goog.userAgent.product.CHROME) {
  return goog.userAgent.product.getFirstRegExpGroup_(/Chrome\/([0-9.]+)/)
}
if(goog.userAgent.product.SAFARI) {
  return goog.userAgent.product.getFirstRegExpGroup_(/Version\/([0-9.]+)/)
}
if(goog.userAgent.product.IPHONE || goog.userAgent.product.IPAD) {
  var a = goog.userAgent.product.execRegExp_(/Version\/(\S+).*Mobile\/(\S+)/);
  if(a) {
    return a[1] + "." + a[2]
  }
}else {
  if(goog.userAgent.product.ANDROID) {
    return(a = goog.userAgent.product.getFirstRegExpGroup_(/Android\s+([0-9.]+)/)) ? a : goog.userAgent.product.getFirstRegExpGroup_(/Version\/([0-9.]+)/)
  }
  if(goog.userAgent.product.CAMINO) {
    return goog.userAgent.product.getFirstRegExpGroup_(/Camino\/([0-9.]+)/)
  }
}
return""

}; goog.userAgent.product.getFirstRegExpGroup_ = function(a) {

return(a = goog.userAgent.product.execRegExp_(a)) ? a[1] : ""

}; goog.userAgent.product.execRegExp_ = function(a) {

return a.exec(goog.userAgent.getUserAgentString())

}; goog.userAgent.product.VERSION = goog.userAgent.product.determineVersion_(); goog.userAgent.product.isVersion = function(a) {

return 0 <= goog.string.compareVersions(goog.userAgent.product.VERSION, a)

}; var bot = {userAgent:{}}; bot.userAgent.isEngineVersion = function(a) {

return bot.userAgent.FIREFOX_EXTENSION ? bot.userAgent.FIREFOX_EXTENSION_IS_ENGINE_VERSION_(a) : goog.userAgent.IE ? 0 <= goog.string.compareVersions(goog.userAgent.DOCUMENT_MODE, a) : goog.userAgent.isVersionOrHigher(a)

}; bot.userAgent.isProductVersion = function(a) {

return bot.userAgent.FIREFOX_EXTENSION ? bot.userAgent.FIREFOX_EXTENSION_IS_PRODUCT_VERSION_(a) : goog.userAgent.product.ANDROID ? 0 <= goog.string.compareVersions(bot.userAgent.ANDROID_VERSION_, a) : goog.userAgent.product.isVersion(a)

}; bot.userAgent.FIREFOX_EXTENSION = function() {

if(!goog.userAgent.GECKO) {
  return!1
}
var a = goog.global.Components;
if(!a) {
  return!1
}
try {
  if(!a.classes) {
    return!1
  }
}catch(b) {
  return!1
}
var c = a.classes, a = a.interfaces, d = c["@mozilla.org/xpcom/version-comparator;1"].getService(a.nsIVersionComparator), c = c["@mozilla.org/xre/app-info;1"].getService(a.nsIXULAppInfo), e = c.platformVersion, f = c.version;
bot.userAgent.FIREFOX_EXTENSION_IS_ENGINE_VERSION_ = function(a) {
  return 0 <= d.compare(e, "" + a)
};
bot.userAgent.FIREFOX_EXTENSION_IS_PRODUCT_VERSION_ = function(a) {
  return 0 <= d.compare(f, "" + a)
};
return!0

}(); bot.userAgent.IOS = goog.userAgent.product.IPAD || goog.userAgent.product.IPHONE; bot.userAgent.MOBILE = bot.userAgent.IOS || goog.userAgent.product.ANDROID; bot.userAgent.ANDROID_VERSION_ = function() {

if(goog.userAgent.product.ANDROID) {
  var a = goog.userAgent.getUserAgentString();
  return(a = /Android\s+([0-9\.]+)/.exec(a)) ? a[1] : "0"
}
return"0"

}(); bot.userAgent.IE_DOC_PRE8 = goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(8); bot.userAgent.IE_DOC_9 = goog.userAgent.isDocumentModeOrHigher(9); bot.userAgent.IE_DOC_PRE9 = goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9); bot.userAgent.IE_DOC_10 = goog.userAgent.isDocumentModeOrHigher(10); bot.userAgent.IE_DOC_PRE10 = goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(10); bot.userAgent.ANDROID_PRE_GINGERBREAD = goog.userAgent.product.ANDROID && !bot.userAgent.isProductVersion(2.3); bot.userAgent.ANDROID_PRE_ICECREAMSANDWICH = goog.userAgent.product.ANDROID && !bot.userAgent.isProductVersion(4); bot.userAgent.SAFARI_6 = goog.userAgent.product.SAFARI && bot.userAgent.isProductVersion(6); bot.userAgent.WINDOWS_PHONE = goog.userAgent.IE && -1 != goog.userAgent.getUserAgentString().indexOf(“IEMobile”); goog.json = {}; goog.json.isValid_ = function(a) {

return/^\s*$/.test(a) ? !1 : /^[\],:{}\s\u2028\u2029]*$/.test(a.replace(/\\["\\\/bfnrtu]/g, "@").replace(/"[^"\\\n\r\u2028\u2029\x00-\x08\x0a-\x1f]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:[\s\u2028\u2029]*\[)+/g, ""))

}; goog.json.parse = function(a) {

a = String(a);
if(goog.json.isValid_(a)) {
  try {
    return eval("(" + a + ")")
  }catch(b) {
  }
}
throw Error("Invalid JSON string: " + a);

}; goog.json.unsafeParse = function(a) {

return eval("(" + a + ")")

}; goog.json.serialize = function(a, b) {

return(new goog.json.Serializer(b)).serialize(a)

}; goog.json.Serializer = function(a) {

this.replacer_ = a

}; goog.json.Serializer.prototype.serialize = function(a) {

var b = [];
this.serialize_(a, b);
return b.join("")

}; goog.json.Serializer.prototype.serialize_ = function(a, b) {

switch(typeof a) {
  case "string":
    this.serializeString_(a, b);
    break;
  case "number":
    this.serializeNumber_(a, b);
    break;
  case "boolean":
    b.push(a);
    break;
  case "undefined":
    b.push("null");
    break;
  case "object":
    if(null == a) {
      b.push("null");
      break
    }
    if(goog.isArray(a)) {
      this.serializeArray(a, b);
      break
    }
    this.serializeObject_(a, b);
    break;
  case "function":
    break;
  default:
    throw Error("Unknown type: " + typeof a);
}

}; goog.json.Serializer.charToJsonCharCache_ = {'“':'\”', “\”:“\\”, “/”:“\/”, “b”:“\b”, “f”:“\f”, “n”:“\n”, “r”:“\r”, “t”:“\t”, “x0B”:“\u000b”}; goog.json.Serializer.charsToReplace_ = /uffff/.test(“uffff”) ? /[\"x00-x1fx7f-uffff]/g : /[\"x00-x1fx7f-xff]/g; goog.json.Serializer.prototype.serializeString_ = function(a, b) {

b.push('"', a.replace(goog.json.Serializer.charsToReplace_, function(a) {
  if(a in goog.json.Serializer.charToJsonCharCache_) {
    return goog.json.Serializer.charToJsonCharCache_[a]
  }
  var b = a.charCodeAt(0), e = "\\u";
  16 > b ? e += "000" : 256 > b ? e += "00" : 4096 > b && (e += "0");
  return goog.json.Serializer.charToJsonCharCache_[a] = e + b.toString(16)
}), '"')

}; goog.json.Serializer.prototype.serializeNumber_ = function(a, b) {

b.push(isFinite(a) && !isNaN(a) ? a : "null")

}; goog.json.Serializer.prototype.serializeArray = function(a, b) {

var c = a.length;
b.push("[");
for(var d = "", e = 0;e < c;e++) {
  b.push(d), d = a[e], this.serialize_(this.replacer_ ? this.replacer_.call(a, String(e), d) : d, b), d = ","
}
b.push("]")

}; goog.json.Serializer.prototype.serializeObject_ = function(a, b) {

b.push("{");
var c = "", d;
for(d in a) {
  if(Object.prototype.hasOwnProperty.call(a, d)) {
    var e = a[d];
    "function" != typeof e && (b.push(c), this.serializeString_(d, b), b.push(":"), this.serialize_(this.replacer_ ? this.replacer_.call(a, d, e) : e, b), c = ",")
  }
}
b.push("}")

}; bot.json = {}; bot.json.NATIVE_JSON = !0; bot.json.SUPPORTS_NATIVE_JSON_ = goog.userAgent.WEBKIT || goog.userAgent.OPERA || goog.userAgent.GECKO && bot.userAgent.isEngineVersion(3.5) || goog.userAgent.IE && bot.userAgent.isEngineVersion(8); bot.json.stringify = bot.json.NATIVE_JSON && bot.json.SUPPORTS_NATIVE_JSON_ ? JSON.stringify : goog.json.serialize; bot.json.parse = bot.json.NATIVE_JSON && bot.json.SUPPORTS_NATIVE_JSON_ ? JSON.parse : goog.json.parse; var safaridriver = {dom:{}}; safaridriver.dom.call = function(a, b, c) {

var d = a.constructor;
if(a.window === a) {
  try {
    var e = a.constructor;
    delete a.constructor;
    d = a.constructor;
    a.constructor = e
  }catch(f) {
  }
}
return d.prototype[b].apply(a, goog.array.slice(arguments, 2))

}; safaridriver.message = {}; safaridriver.message.ASSUME_DOM_WINDOW = !1; safaridriver.message.ORIGIN = “webdriver”; safaridriver.message.LOG_ = goog.debug.Logger.getLogger(“safaridriver.message”); safaridriver.message.FORCE_SYNCHRONOUS_PROXY_SEND = !0; safaridriver.message.factoryRegistry_ = {}; safaridriver.message.registerMessageType = function(a, b) {

goog.asserts.assert(!(a in safaridriver.message.factoryRegistry_), "Message type has already been registered: " + a);
safaridriver.message.factoryRegistry_[a] = b

}; safaridriver.message.throwInvalidMessageError = function(a) {

throw Error("Invalid message: " + bot.json.stringify(a));

}; safaridriver.message.fromEvent = function(a) {

a = a.message || a.data;
goog.isString(a) && (a = bot.json.parse(a));
if(!goog.isObject(a) || !goog.isString(a[safaridriver.message.Message.Field.ORIGIN]) && !goog.isNumber(a[safaridriver.message.Message.Field.ORIGIN]) || !goog.isString(a[safaridriver.message.Message.Field.TYPE])) {
  throw safaridriver.message.throwInvalidMessageError(a);
}
var b = safaridriver.message.factoryRegistry_[a[safaridriver.message.Message.Field.TYPE]];
b || (safaridriver.message.LOG_.fine("Unknown message type; falling back to the default factory: " + bot.json.stringify(a)), b = safaridriver.message.Message.fromData_);
b = b(a);
b.setOrigin(a[safaridriver.message.Message.Field.ORIGIN]);
return b

}; safaridriver.message.Message = function(a) {

this.data_ = {};
this.data_[safaridriver.message.Message.Field.ORIGIN] = safaridriver.message.ORIGIN;
this.data_[safaridriver.message.Message.Field.TYPE] = a

}; safaridriver.message.Message.Field = {ORIGIN:“origin”, TYPE:“type”}; safaridriver.message.Message.fromData_ = function(a) {

return new safaridriver.message.Message(a[safaridriver.message.Message.Field.TYPE])

}; safaridriver.message.Message.prototype.setField = function(a, b) {

goog.asserts.assert(a !== safaridriver.message.Message.Field.TYPE, "The specified field may not be overridden: " + a);
this.data_[a] = b

}; safaridriver.message.Message.prototype.getField = function(a) {

return this.data_[a]

}; safaridriver.message.Message.prototype.setOrigin = function(a) {

this.setField(safaridriver.message.Message.Field.ORIGIN, a)

}; safaridriver.message.Message.prototype.getOrigin = function() {

return this.getField(safaridriver.message.Message.Field.ORIGIN)

}; safaridriver.message.Message.prototype.isSameOrigin = function() {

return this.getOrigin() === safaridriver.message.ORIGIN

}; safaridriver.message.Message.prototype.getType = function() {

return this.getField(safaridriver.message.Message.Field.TYPE)

}; safaridriver.message.Message.prototype.isType = function(a) {

return this.getField(safaridriver.message.Message.Field.TYPE) === a

}; safaridriver.message.Message.prototype.send = function(a) {

this.setOrigin(safaridriver.message.ORIGIN);
if(safaridriver.message.ASSUME_DOM_WINDOW || a.postMessage) {
  if(a === window) {
    this.sendSync(a)
  }else {
    if(!goog.isFunction(a.postMessage)) {
      throw Error("Unable to send message; postMessage function not available on target window");
    }
    a.postMessage(this.data_, "*")
  }
}else {
  if(safaridriver.message.FORCE_SYNCHRONOUS_PROXY_SEND && a.canLoad) {
    return this.sendSync(a)
  }
  a.dispatchMessage(this.getType(), this.data_)
}

}; safaridriver.message.Message.SYNCHRONOUS_DOM_MESSAGE_EVENT_TYPE = “safaridriver.message”; safaridriver.message.Message.SYNCHRONOUS_MESSAGE_RESPONSE_EVENT_TYPE = “safaridriver.message.response”; safaridriver.message.Message.prototype.sendSync = function(a) {

this.setOrigin(safaridriver.message.ORIGIN);
if(safaridriver.message.ASSUME_DOM_WINDOW || a.postMessage) {
  goog.asserts.assert(a === window, "Synchronous messages may only be sent to a window when that window is the same as the current context");
  var b;
  a = function(a) {
    b = a.data
  };
  safaridriver.dom.call(window, "addEventListener", safaridriver.message.Message.SYNCHRONOUS_MESSAGE_RESPONSE_EVENT_TYPE, a, !1);
  safaridriver.message.Message.sendMessageEvent_(safaridriver.message.Message.SYNCHRONOUS_DOM_MESSAGE_EVENT_TYPE, this.data_);
  safaridriver.dom.call(window, "removeEventListener", safaridriver.message.Message.SYNCHRONOUS_MESSAGE_RESPONSE_EVENT_TYPE, a, !1);
  return b
}
var c = safaridriver.dom.call(document, "createEvent", "Events");
c.initEvent("beforeload", !1, !1);
return a.canLoad(c, this.data_)

}; safaridriver.message.Message.sendSyncResponse = function(a) {

safaridriver.message.Message.sendMessageEvent_(safaridriver.message.Message.SYNCHRONOUS_MESSAGE_RESPONSE_EVENT_TYPE, a)

}; safaridriver.message.Message.sendMessageEvent_ = function(a, b) {

var c = safaridriver.dom.call(document, "createEvent", "MessageEvent");
c.initMessageEvent(a, !1, !1, b, window.location.origin, "0", window, null);
safaridriver.dom.call(window, "dispatchEvent", c)

}; safaridriver.message.Message.prototype.toJSON = function() {

return this.data_

}; safaridriver.message.Message.prototype.toString = function() {

return bot.json.stringify(this.toJSON())

}; safaridriver.message.Connect = function(a) {

safaridriver.message.Message.call(this, safaridriver.message.Connect.TYPE);
this.setField(safaridriver.message.Connect.URL_FIELD_, a)

}; goog.inherits(safaridriver.message.Connect, safaridriver.message.Message); safaridriver.message.Connect.TYPE = “connect”; safaridriver.message.Connect.URL_FIELD_ = “url”; safaridriver.message.Connect.fromData_ = function(a) {

var b = a[safaridriver.message.Connect.URL_FIELD_];
if(!goog.isString(b)) {
  throw safaridriver.message.throwInvalidMessageError(a);
}
return new safaridriver.message.Connect(b)

}; safaridriver.message.Connect.prototype.getUrl = function() {

return this.getField(safaridriver.message.Connect.URL_FIELD_)

}; safaridriver.message.registerMessageType(safaridriver.message.Connect.TYPE, safaridriver.message.Connect.fromData_); safaridriver.client = {}; safaridriver.client.init = function() {

function a() {
  d += 1;
  e.sendSync(window) ? c.info("Request acknowledged; connecting...") : 5 > d ? setTimeout(a, 250 * d) : c.severe("Unable to establish a connection with the SafariDriver")
}
var b = document.createElement("h2");
b.innerHTML = "SafariDriver Client";
document.body.appendChild(b);
b = document.createElement("div");
document.body.appendChild(b);
(new goog.debug.DivConsole(b)).setCapturing(!0);
var c = goog.debug.Logger.getLogger("safaridriver.client");
if(b = (new goog.Uri(window.location)).getQueryData().get("url")) {
  b = new goog.Uri(b);
  c.info("Requesting connection at " + b + "...");
  var d = 0, e = new safaridriver.message.Connect(b.toString());
  a()
}else {
  c.severe("No url specified. Please reload this page with the url parameter set")
}

}; goog.exportSymbol(“init”, safaridriver.client.init); ;window.onload = init;