var a,COMPILED=true,goog=goog||{};goog.global=this;goog.DEBUG=true;goog.LOCALE="en";goog.evalWorksForGlobals_=null;goog.provide=function(b){if(!COMPILED){if(goog.getObjectByName(b)&&!goog.implicitNamespaces_[b])throw Error('Namespace "'+b+'" already declared.');for(var c=b;c=c.substring(0,c.lastIndexOf("."));)goog.implicitNamespaces_[c]=true}goog.exportPath_(b)};if(!COMPILED)goog.implicitNamespaces_={};
goog.exportPath_=function(b,c,d){b=b.split(".");d=d||goog.global;!(b[0]in d)&&d.execScript&&d.execScript("var "+b[0]);for(var e;b.length&&(e=b.shift());)if(!b.length&&goog.isDef(c))d[e]=c;else d=d[e]?d[e]:(d[e]={})};goog.getObjectByName=function(b,c){b=b.split(".");c=c||goog.global;for(var d;d=b.shift();)if(c[d])c=c[d];else return null;return c};goog.globalize=function(b,c){c=c||goog.global;for(var d in b)c[d]=b[d]};
goog.addDependency=function(b,c,d){if(!COMPILED){var e;b=b.replace(/\\/g,"/");for(var f=goog.dependencies_,g=0;e=c[g];g++){f.nameToPath[e]=b;b in f.pathToNames||(f.pathToNames[b]={});f.pathToNames[b][e]=true}for(e=0;c=d[e];e++){b in f.requires||(f.requires[b]={});f.requires[b][c]=true}}};
goog.require=function(b){if(!COMPILED)if(!goog.getObjectByName(b)){var c=goog.getPathFromDeps_(b);if(c){goog.included_[c]=true;goog.writeScripts_()}else{b="goog.require could not find: "+b;goog.global.console&&goog.global.console.error(b);if(goog.useStrictRequires)throw Error(b);}}};goog.useStrictRequires=false;goog.basePath="";goog.nullFunction=function(){};goog.identityFunction=function(b){return b};goog.abstractMethod=function(){throw Error("unimplemented abstract method");};
goog.addSingletonGetter=function(b){b.getInstance=function(){return b.instance_||(b.instance_=new b)}};
if(!COMPILED){goog.included_={};goog.dependencies_={pathToNames:{},nameToPath:{},requires:{},visited:{},written:{}};goog.inHtmlDocument_=function(){var b=goog.global.document;return typeof b!="undefined"&&"write"in b};goog.findBasePath_=function(){if(goog.inHtmlDocument_()){var b=goog.global.document;if(goog.global.CLOSURE_BASE_PATH)goog.basePath=goog.global.CLOSURE_BASE_PATH;else{b=b.getElementsByTagName("script");for(var c=b.length-1;c>=0;--c){var d=b[c].src,e=d.length;if(d.substr(e-7)=="base.js"){goog.basePath=
d.substr(0,e-7);return}}}}};goog.writeScriptTag_=function(b){if(goog.inHtmlDocument_()&&!goog.dependencies_.written[b]){goog.dependencies_.written[b]=true;goog.global.document.write('<script type="text/javascript" src="'+b+'"><\/script>')}};goog.writeScripts_=function(){function b(g){if(!(g in e.written)){if(!(g in e.visited)){e.visited[g]=true;if(g in e.requires)for(var h in e.requires[g])if(h in e.nameToPath)b(e.nameToPath[h]);else if(!goog.getObjectByName(h))throw Error("Undefined nameToPath for "+
h);}if(!(g in d)){d[g]=true;c.push(g)}}}var c=[],d={},e=goog.dependencies_;for(var f in goog.included_)e.written[f]||b(f);for(f=0;f<c.length;f++)if(c[f])goog.writeScriptTag_(goog.basePath+c[f]);else throw Error("Undefined script input");};goog.getPathFromDeps_=function(b){return b in goog.dependencies_.nameToPath?goog.dependencies_.nameToPath[b]:null};goog.findBasePath_();goog.global.CLOSURE_NO_DEPS||goog.writeScriptTag_(goog.basePath+"deps.js")}
goog.typeOf=function(b){var c=typeof b;if(c=="object")if(b){if(b instanceof Array||!(b instanceof Object)&&Object.prototype.toString.call(b)=="[object Array]"||typeof b.length=="number"&&typeof b.splice!="undefined"&&typeof b.propertyIsEnumerable!="undefined"&&!b.propertyIsEnumerable("splice"))return"array";if(!(b instanceof Object)&&(Object.prototype.toString.call(b)=="[object Function]"||typeof b.call!="undefined"&&typeof b.propertyIsEnumerable!="undefined"&&!b.propertyIsEnumerable("call")))return"function"}else return"null";
else if(c=="function"&&typeof b.call=="undefined")return"object";return c};goog.propertyIsEnumerableCustom_=function(b,c){if(c in b)for(var d in b)if(d==c&&Object.prototype.hasOwnProperty.call(b,c))return true;return false};goog.propertyIsEnumerable_=function(b,c){return b instanceof Object?Object.prototype.propertyIsEnumerable.call(b,c):goog.propertyIsEnumerableCustom_(b,c)};goog.isDef=function(b){return b!==undefined};goog.isNull=function(b){return b===null};
goog.isDefAndNotNull=function(b){return b!=null};goog.isArray=function(b){return goog.typeOf(b)=="array"};goog.isArrayLike=function(b){var c=goog.typeOf(b);return c=="array"||c=="object"&&typeof b.length=="number"};goog.isDateLike=function(b){return goog.isObject(b)&&typeof b.getFullYear=="function"};goog.isString=function(b){return typeof b=="string"};goog.isBoolean=function(b){return typeof b=="boolean"};goog.isNumber=function(b){return typeof b=="number"};
goog.isFunction=function(b){return goog.typeOf(b)=="function"};goog.isObject=function(b){b=goog.typeOf(b);return b=="object"||b=="array"||b=="function"};goog.getHashCode=function(b){if(b.hasOwnProperty&&b.hasOwnProperty(goog.HASH_CODE_PROPERTY_))return b[goog.HASH_CODE_PROPERTY_];b[goog.HASH_CODE_PROPERTY_]||(b[goog.HASH_CODE_PROPERTY_]=++goog.hashCodeCounter_);return b[goog.HASH_CODE_PROPERTY_]};goog.removeHashCode=function(b){"removeAttribute"in b&&b.removeAttribute(goog.HASH_CODE_PROPERTY_);try{delete b[goog.HASH_CODE_PROPERTY_]}catch(c){}};
goog.HASH_CODE_PROPERTY_="closure_hashCode_"+Math.floor(Math.random()*2147483648).toString(36);goog.hashCodeCounter_=0;goog.cloneObject=function(b){var c=goog.typeOf(b);if(c=="object"||c=="array"){if(b.clone)return b.clone.call(b);c=c=="array"?[]:{};for(var d in b)c[d]=goog.cloneObject(b[d]);return c}return b};
goog.bind=function(b,c){var d=c||goog.global;if(arguments.length>2){var e=Array.prototype.slice.call(arguments,2);return function(){var f=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(f,e);return b.apply(d,f)}}else return function(){return b.apply(d,arguments)}};goog.partial=function(b){var c=Array.prototype.slice.call(arguments,1);return function(){var d=Array.prototype.slice.call(arguments);d.unshift.apply(d,c);return b.apply(this,d)}};
goog.mixin=function(b,c){for(var d in c)b[d]=c[d]};goog.now=Date.now||function(){return+new Date};
goog.globalEval=function(b){if(goog.global.execScript)goog.global.execScript(b,"JavaScript");else if(goog.global.eval){if(goog.evalWorksForGlobals_==null){goog.global.eval("var _et_ = 1;");if(typeof goog.global._et_!="undefined"){delete goog.global._et_;goog.evalWorksForGlobals_=true}else goog.evalWorksForGlobals_=false}if(goog.evalWorksForGlobals_)goog.global.eval(b);else{var c=goog.global.document,d=c.createElement("script");d.type="text/javascript";d.defer=false;d.appendChild(c.createTextNode(b));
c.body.appendChild(d);c.body.removeChild(d)}}else throw Error("goog.globalEval not available");};goog.typedef=true;goog.getCssName=function(b,c){b=b+(c?"-"+c:"");return goog.cssNameMapping_&&b in goog.cssNameMapping_?goog.cssNameMapping_[b]:b};goog.setCssNameMapping=function(b){goog.cssNameMapping_=b};goog.getMsg=function(b,c){c=c||{};for(var d in c)b=b.replace(new RegExp("\\{\\$"+d+"\\}","gi"),c[d]);return b};goog.exportSymbol=function(b,c,d){goog.exportPath_(b,c,d)};
goog.exportProperty=function(b,c,d){b[c]=d};goog.inherits=function(b,c){function d(){}d.prototype=c.prototype;b.superClass_=c.prototype;b.prototype=new d;b.prototype.constructor=b};
goog.base=function(b,c){var d=arguments.callee.caller;if(d.superClass_)return d.superClass_.constructor.apply(b,Array.prototype.slice.call(arguments,1));for(var e=Array.prototype.slice.call(arguments,2),f=false,g=b.constructor;g;g=g.superClass_&&g.superClass_.constructor)if(g.prototype[c]===d)f=true;else if(f)return g.prototype[c].apply(b,e);if(b[c]===d)return b.constructor.prototype[c].apply(b,e);else throw Error("goog.base called from a method of one name to a method of a different name");};
goog.MODIFY_FUNCTION_PROTOTYPES=true;
if(goog.MODIFY_FUNCTION_PROTOTYPES){Function.prototype.bind=function(b){if(arguments.length>1){var c=Array.prototype.slice.call(arguments,1);c.unshift(this,b);return goog.bind.apply(null,c)}else return goog.bind(this,b)};Function.prototype.partial=function(){var b=Array.prototype.slice.call(arguments);b.unshift(this,null);return goog.bind.apply(null,b)};Function.prototype.inherits=function(b){goog.inherits(this,b)};Function.prototype.mixin=function(b){goog.mixin(this.prototype,b)}};goog.array={};goog.array.ArrayLike=goog.typedef;goog.array.peek=function(b){return b[b.length-1]};goog.array.ARRAY_PROTOTYPE_=Array.prototype;goog.array.indexOf=goog.array.ARRAY_PROTOTYPE_.indexOf?function(b,c,d){return goog.array.ARRAY_PROTOTYPE_.indexOf.call(b,c,d)}:function(b,c,d){d=d==null?0:d<0?Math.max(0,b.length+d):d;if(goog.isString(b)){if(!goog.isString(c)||c.length!=1)return-1;return b.indexOf(c,d)}for(d=d;d<b.length;d++)if(d in b&&b[d]===c)return d;return-1};
goog.array.lastIndexOf=goog.array.ARRAY_PROTOTYPE_.lastIndexOf?function(b,c,d){return goog.array.ARRAY_PROTOTYPE_.lastIndexOf.call(b,c,d==null?b.length-1:d)}:function(b,c,d){d=d==null?b.length-1:d;if(d<0)d=Math.max(0,b.length+d);if(goog.isString(b)){if(!goog.isString(c)||c.length!=1)return-1;return b.lastIndexOf(c,d)}for(d=d;d>=0;d--)if(d in b&&b[d]===c)return d;return-1};
goog.array.forEach=goog.array.ARRAY_PROTOTYPE_.forEach?function(b,c,d){goog.array.ARRAY_PROTOTYPE_.forEach.call(b,c,d)}:function(b,c,d){for(var e=b.length,f=goog.isString(b)?b.split(""):b,g=0;g<e;g++)g in f&&c.call(d,f[g],g,b)};goog.array.forEachRight=function(b,c,d){var e=b.length,f=goog.isString(b)?b.split(""):b;for(e=e-1;e>=0;--e)e in f&&c.call(d,f[e],e,b)};
goog.array.filter=goog.array.ARRAY_PROTOTYPE_.filter?function(b,c,d){return goog.array.ARRAY_PROTOTYPE_.filter.call(b,c,d)}:function(b,c,d){for(var e=b.length,f=[],g=0,h=goog.isString(b)?b.split(""):b,i=0;i<e;i++)if(i in h){var j=h[i];if(c.call(d,j,i,b))f[g++]=j}return f};
goog.array.map=goog.array.ARRAY_PROTOTYPE_.map?function(b,c,d){return goog.array.ARRAY_PROTOTYPE_.map.call(b,c,d)}:function(b,c,d){for(var e=b.length,f=new Array(e),g=goog.isString(b)?b.split(""):b,h=0;h<e;h++)if(h in g)f[h]=c.call(d,g[h],h,b);return f};goog.array.reduce=function(b,c,d,e){if(b.reduce)return e?b.reduce(goog.bind(c,e),d):b.reduce(c,d);var f=d;goog.array.forEach(b,function(g,h){f=c.call(e,f,g,h,b)});return f};
goog.array.reduceRight=function(b,c,d,e){if(b.reduceRight)return e?b.reduceRight(goog.bind(c,e),d):b.reduceRight(c,d);var f=d;goog.array.forEachRight(b,function(g,h){f=c.call(e,f,g,h,b)});return f};goog.array.some=goog.array.ARRAY_PROTOTYPE_.some?function(b,c,d){return goog.array.ARRAY_PROTOTYPE_.some.call(b,c,d)}:function(b,c,d){for(var e=b.length,f=goog.isString(b)?b.split(""):b,g=0;g<e;g++)if(g in f&&c.call(d,f[g],g,b))return true;return false};
goog.array.every=goog.array.ARRAY_PROTOTYPE_.every?function(b,c,d){return goog.array.ARRAY_PROTOTYPE_.every.call(b,c,d)}:function(b,c,d){for(var e=b.length,f=goog.isString(b)?b.split(""):b,g=0;g<e;g++)if(g in f&&!c.call(d,f[g],g,b))return false;return true};goog.array.find=function(b,c,d){c=goog.array.findIndex(b,c,d);return c<0?null:goog.isString(b)?b.charAt(c):b[c]};
goog.array.findIndex=function(b,c,d){for(var e=b.length,f=goog.isString(b)?b.split(""):b,g=0;g<e;g++)if(g in f&&c.call(d,f[g],g,b))return g;return-1};goog.array.findRight=function(b,c,d){c=goog.array.findIndexRight(b,c,d);return c<0?null:goog.isString(b)?b.charAt(c):b[c]};goog.array.findIndexRight=function(b,c,d){var e=b.length,f=goog.isString(b)?b.split(""):b;for(e=e-1;e>=0;e--)if(e in f&&c.call(d,f[e],e,b))return e;return-1};goog.array.contains=function(b,c){return goog.array.indexOf(b,c)>=0};
goog.array.isEmpty=function(b){return b.length==0};goog.array.clear=function(b){if(!goog.isArray(b))for(var c=b.length-1;c>=0;c--)delete b[c];b.length=0};goog.array.insert=function(b,c){goog.array.contains(b,c)||b.push(c)};goog.array.insertAt=function(b,c,d){goog.array.splice(b,d,0,c)};goog.array.insertArrayAt=function(b,c,d){goog.partial(goog.array.splice,b,d,0).apply(null,c)};
goog.array.insertBefore=function(b,c,d){var e;arguments.length==2||(e=goog.array.indexOf(b,d))<0?b.push(c):goog.array.insertAt(b,c,e)};goog.array.remove=function(b,c){c=goog.array.indexOf(b,c);var d;if(d=c>=0)goog.array.removeAt(b,c);return d};goog.array.removeAt=function(b,c){return goog.array.ARRAY_PROTOTYPE_.splice.call(b,c,1).length==1};goog.array.removeIf=function(b,c,d){c=goog.array.findIndex(b,c,d);if(c>=0){goog.array.removeAt(b,c);return true}return false};
goog.array.concat=function(){return goog.array.ARRAY_PROTOTYPE_.concat.apply(goog.array.ARRAY_PROTOTYPE_,arguments)};goog.array.clone=function(b){if(goog.isArray(b))return goog.array.concat(b);else{for(var c=[],d=0,e=b.length;d<e;d++)c[d]=b[d];return c}};goog.array.toArray=function(b){if(goog.isArray(b))return goog.array.concat(b);return goog.array.clone(b)};
goog.array.extend=function(b){for(var c=1;c<arguments.length;c++){var d=arguments[c],e;if(goog.isArray(d)||(e=goog.isArrayLike(d))&&d.hasOwnProperty("callee"))b.push.apply(b,d);else if(e)for(var f=b.length,g=d.length,h=0;h<g;h++)b[f+h]=d[h];else b.push(d)}};goog.array.splice=function(b){return goog.array.ARRAY_PROTOTYPE_.splice.apply(b,goog.array.slice(arguments,1))};
goog.array.slice=function(b,c,d){return arguments.length<=2?goog.array.ARRAY_PROTOTYPE_.slice.call(b,c):goog.array.ARRAY_PROTOTYPE_.slice.call(b,c,d)};goog.array.removeDuplicates=function(b,c){c=c||b;for(var d={},e=0,f=0;f<b.length;){var g=b[f++],h=goog.isObject(g)?goog.getHashCode(g):g;if(!Object.prototype.hasOwnProperty.call(d,h)){d[h]=true;c[e++]=g}}c.length=e};
goog.array.binarySearch=function(b,c,d){var e=0,f=b.length-1;for(d=d||goog.array.defaultCompare;e<=f;){var g=e+f>>1,h=d(c,b[g]);if(h>0)e=g+1;else if(h<0)f=g-1;else return g}return-(e+1)};goog.array.sort=function(b,c){goog.array.ARRAY_PROTOTYPE_.sort.call(b,c||goog.array.defaultCompare)};
goog.array.stableSort=function(b,c){function d(g,h){return f(g.value,h.value)||g.index-h.index}for(var e=0;e<b.length;e++)b[e]={index:e,value:b[e]};var f=c||goog.array.defaultCompare;goog.array.sort(b,d);for(e=0;e<b.length;e++)b[e]=b[e].value};goog.array.sortObjectsByKey=function(b,c,d){var e=d||goog.array.defaultCompare;goog.array.sort(b,function(f,g){return e(f[c],g[c])})};
goog.array.equals=function(b,c,d){if(!goog.isArrayLike(b)||!goog.isArrayLike(c)||b.length!=c.length)return false;var e=b.length;d=d||goog.array.defaultCompareEquality;for(var f=0;f<e;f++)if(!d(b[f],c[f]))return false;return true};goog.array.compare=function(b,c,d){return goog.array.equals(b,c,d)};goog.array.defaultCompare=function(b,c){return b>c?1:b<c?-1:0};goog.array.defaultCompareEquality=function(b,c){return b===c};
goog.array.binaryInsert=function(b,c,d){d=goog.array.binarySearch(b,c,d);if(d<0){goog.array.insertAt(b,c,-(d+1));return true}return false};goog.array.binaryRemove=function(b,c,d){c=goog.array.binarySearch(b,c,d);return c>=0?goog.array.removeAt(b,c):false};goog.array.bucket=function(b,c){for(var d={},e=0;e<b.length;e++){var f=b[e],g=c(f,e,b);if(goog.isDef(g))(d[g]||(d[g]=[])).push(f)}return d};goog.array.repeat=function(b,c){for(var d=[],e=0;e<c;e++)d[e]=b;return d};
goog.array.flatten=function(){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(b,c){if(b.length){c%=b.length;if(c>0)goog.array.ARRAY_PROTOTYPE_.unshift.apply(b,b.splice(-c,c));else c<0&&goog.array.ARRAY_PROTOTYPE_.push.apply(b,b.splice(0,-c))}return b};goog.dom={};
goog.dom.TagName={A:"A",ABBR:"ABBR",ACRONYM:"ACRONYM",ADDRESS:"ADDRESS",APPLET:"APPLET",AREA:"AREA",B:"B",BASE:"BASE",BASEFONT:"BASEFONT",BDO:"BDO",BIG:"BIG",BLOCKQUOTE:"BLOCKQUOTE",BODY:"BODY",BR:"BR",BUTTON:"BUTTON",CAPTION:"CAPTION",CENTER:"CENTER",CITE:"CITE",CODE:"CODE",COL:"COL",COLGROUP:"COLGROUP",DD:"DD",DEL:"DEL",DFN:"DFN",DIR:"DIR",DIV:"DIV",DL:"DL",DT:"DT",EM:"EM",FIELDSET:"FIELDSET",FONT:"FONT",FORM:"FORM",FRAME:"FRAME",FRAMESET:"FRAMESET",H1:"H1",H2:"H2",H3:"H3",H4:"H4",H5:"H5",H6:"H6",
HEAD:"HEAD",HR:"HR",HTML:"HTML",I:"I",IFRAME:"IFRAME",IMG:"IMG",INPUT:"INPUT",INS:"INS",ISINDEX:"ISINDEX",KBD:"KBD",LABEL:"LABEL",LEGEND:"LEGEND",LI:"LI",LINK:"LINK",MAP:"MAP",MENU:"MENU",META:"META",NOFRAMES:"NOFRAMES",NOSCRIPT:"NOSCRIPT",OBJECT:"OBJECT",OL:"OL",OPTGROUP:"OPTGROUP",OPTION:"OPTION",P:"P",PARAM:"PARAM",PRE:"PRE",Q:"Q",S:"S",SAMP:"SAMP",SCRIPT:"SCRIPT",SELECT:"SELECT",SMALL:"SMALL",SPAN:"SPAN",STRIKE:"STRIKE",STRONG:"STRONG",STYLE:"STYLE",SUB:"SUB",SUP:"SUP",TABLE:"TABLE",TBODY:"TBODY",
TD:"TD",TEXTAREA:"TEXTAREA",TFOOT:"TFOOT",TH:"TH",THEAD:"THEAD",TITLE:"TITLE",TR:"TR",TT:"TT",U:"U",UL:"UL",VAR:"VAR"};goog.dom.classes={};goog.dom.classes.set=function(b,c){b.className=c};goog.dom.classes.get=function(b){return(b=b.className)&&typeof b.split=="function"?b.split(" "):[]};goog.dom.classes.add=function(b){var c=goog.dom.classes.get(b),d=goog.array.slice(arguments,1);d=goog.dom.classes.add_(c,d);b.className=c.join(" ");return d};goog.dom.classes.remove=function(b){var c=goog.dom.classes.get(b),d=goog.array.slice(arguments,1);d=goog.dom.classes.remove_(c,d);b.className=c.join(" ");return d};
goog.dom.classes.add_=function(b,c){for(var d=0,e=0;e<c.length;e++)if(!goog.array.contains(b,c[e])){b.push(c[e]);d++}return d==c.length};goog.dom.classes.remove_=function(b,c){for(var d=0,e=0;e<b.length;e++)if(goog.array.contains(c,b[e])){goog.array.splice(b,e--,1);d++}return d==c.length};goog.dom.classes.swap=function(b,c,d){for(var e=goog.dom.classes.get(b),f=false,g=0;g<e.length;g++)if(e[g]==c){goog.array.splice(e,g--,1);f=true}if(f){e.push(d);b.className=e.join(" ")}return f};
goog.dom.classes.addRemove=function(b,c,d){var e=goog.dom.classes.get(b);if(goog.isString(c))goog.array.remove(e,c);else goog.isArray(c)&&goog.dom.classes.remove_(e,c);if(goog.isString(d)&&!goog.array.contains(e,d))e.push(d);else goog.isArray(d)&&goog.dom.classes.add_(e,d);b.className=e.join(" ")};goog.dom.classes.has=function(b,c){return goog.array.contains(goog.dom.classes.get(b),c)};goog.dom.classes.enable=function(b,c,d){d?goog.dom.classes.add(b,c):goog.dom.classes.remove(b,c)};
goog.dom.classes.toggle=function(b,c){var d=!goog.dom.classes.has(b,c);goog.dom.classes.enable(b,c,d);return d};goog.math={};goog.math.Coordinate=function(b,c){this.x=goog.isDef(b)?b:0;this.y=goog.isDef(c)?c:0};goog.math.Coordinate.prototype.clone=function(){return new goog.math.Coordinate(this.x,this.y)};if(goog.DEBUG)goog.math.Coordinate.prototype.toString=function(){return"("+this.x+", "+this.y+")"};goog.math.Coordinate.equals=function(b,c){if(b==c)return true;if(!b||!c)return false;return b.x==c.x&&b.y==c.y};goog.math.Coordinate.distance=function(b,c){var d=b.x-c.x;b=b.y-c.y;return Math.sqrt(d*d+b*b)};
goog.math.Coordinate.squaredDistance=function(b,c){var d=b.x-c.x;b=b.y-c.y;return d*d+b*b};goog.math.Coordinate.difference=function(b,c){return new goog.math.Coordinate(b.x-c.x,b.y-c.y)};goog.math.Coordinate.sum=function(b,c){return new goog.math.Coordinate(b.x+c.x,b.y+c.y)};goog.math.Size=function(b,c){this.width=b;this.height=c};goog.math.Size.equals=function(b,c){if(b==c)return true;if(!b||!c)return false;return b.width==c.width&&b.height==c.height};goog.math.Size.prototype.clone=function(){return new goog.math.Size(this.width,this.height)};if(goog.DEBUG)goog.math.Size.prototype.toString=function(){return"("+this.width+" x "+this.height+")"};a=goog.math.Size.prototype;a.getLongest=function(){return Math.max(this.width,this.height)};
a.getShortest=function(){return Math.min(this.width,this.height)};a.area=function(){return this.width*this.height};a.aspectRatio=function(){return this.width/this.height};a.isEmpty=function(){return!this.area()};a.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};a.fitsInside=function(b){return this.width<=b.width&&this.height<=b.height};a.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};
a.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};a.scale=function(b){this.width*=b;this.height*=b;return this};a.scaleToFit=function(b){return this.scale(this.aspectRatio()>b.aspectRatio()?b.width/this.width:b.height/this.height)};goog.object={};goog.object.forEach=function(b,c,d){for(var e in b)c.call(d,b[e],e,b)};goog.object.filter=function(b,c,d){var e={};for(var f in b)if(c.call(d,b[f],f,b))e[f]=b[f];return e};goog.object.map=function(b,c,d){var e={};for(var f in b)e[f]=c.call(d,b[f],f,b);return e};goog.object.some=function(b,c,d){for(var e in b)if(c.call(d,b[e],e,b))return true;return false};goog.object.every=function(b,c,d){for(var e in b)if(!c.call(d,b[e],e,b))return false;return true};
goog.object.getCount=function(b){var c=0;for(var d in b)c++;return c};goog.object.getAnyKey=function(b){for(var c in b)return c};goog.object.getAnyValue=function(b){for(var c in b)return b[c]};goog.object.contains=function(b,c){return goog.object.containsValue(b,c)};goog.object.getValues=function(b){var c=[],d=0;for(var e in b)c[d++]=b[e];return c};goog.object.getKeys=function(b){var c=[],d=0;for(var e in b)c[d++]=e;return c};goog.object.containsKey=function(b,c){return c in b};
goog.object.containsValue=function(b,c){for(var d in b)if(b[d]==c)return true;return false};goog.object.findKey=function(b,c,d){for(var e in b)if(c.call(d,b[e],e,b))return e};goog.object.findValue=function(b,c,d){return(c=goog.object.findKey(b,c,d))&&b[c]};goog.object.isEmpty=function(b){for(var c in b)return false;return true};goog.object.clear=function(b){for(var c=goog.object.getKeys(b),d=c.length-1;d>=0;d--)goog.object.remove(b,c[d])};
goog.object.remove=function(b,c){var d;if(d=c in b)delete b[c];return d};goog.object.add=function(b,c,d){if(c in b)throw Error('The object already contains the key "'+c+'"');goog.object.set(b,c,d)};goog.object.get=function(b,c,d){if(c in b)return b[c];return d};goog.object.set=function(b,c,d){b[c]=d};goog.object.setIfUndefined=function(b,c,d){return c in b?b[c]:(b[c]=d)};goog.object.clone=function(b){var c={};for(var d in b)c[d]=b[d];return c};
goog.object.transpose=function(b){var c={};for(var d in b)c[b[d]]=d;return c};goog.object.PROTOTYPE_FIELDS_=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"];goog.object.extend=function(b){for(var c,d,e=1;e<arguments.length;e++){d=arguments[e];for(c in d)b[c]=d[c];for(var f=0;f<goog.object.PROTOTYPE_FIELDS_.length;f++){c=goog.object.PROTOTYPE_FIELDS_[f];if(Object.prototype.hasOwnProperty.call(d,c))b[c]=d[c]}}};
goog.object.create=function(){var b=arguments.length;if(b==1&&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(){var b=arguments.length;if(b==1&&goog.isArray(arguments[0]))return goog.object.createSet.apply(null,arguments[0]);for(var c={},d=0;d<b;d++)c[arguments[d]]=true;return c};goog.string={};goog.string.Unicode={NBSP:"\u00a0"};goog.string.startsWith=function(b,c){return b.indexOf(c)==0};goog.string.endsWith=function(b,c){var d=b.length-c.length;return d>=0&&b.lastIndexOf(c,d)==d};goog.string.caseInsensitiveStartsWith=function(b,c){return goog.string.caseInsensitiveCompare(c,b.substr(0,c.length))==0};goog.string.caseInsensitiveEndsWith=function(b,c){return goog.string.caseInsensitiveCompare(c,b.substr(b.length-c.length,c.length))==0};
goog.string.subs=function(b){for(var c=1;c<arguments.length;c++){var d=String(arguments[c]).replace(/\$/g,"$$$$");b=b.replace(/\%s/,d)}return b};goog.string.collapseWhitespace=function(b){return b.replace(/[\s\xa0]+/g," ").replace(/^\s+|\s+$/g,"")};goog.string.isEmpty=function(b){return/^[\s\xa0]*$/.test(b)};goog.string.isEmptySafe=function(b){return goog.string.isEmpty(goog.string.makeSafe(b))};goog.string.isBreakingWhitespace=function(b){return!/[^\t\n\r ]/.test(b)};goog.string.isAlpha=function(b){return!/[^a-zA-Z]/.test(b)};
goog.string.isNumeric=function(b){return!/[^0-9]/.test(b)};goog.string.isAlphaNumeric=function(b){return!/[^a-zA-Z0-9]/.test(b)};goog.string.isSpace=function(b){return b==" "};goog.string.isUnicodeChar=function(b){return b.length==1&&b>=" "&&b<="~"||b>="\u0080"&&b<="\ufffd"};goog.string.stripNewlines=function(b){return b.replace(/(\r\n|\r|\n)+/g," ")};goog.string.canonicalizeNewlines=function(b){return b.replace(/(\r\n|\r|\n)/g,"\n")};
goog.string.normalizeWhitespace=function(b){return b.replace(/\xa0|\s/g," ")};goog.string.normalizeSpaces=function(b){return b.replace(/\xa0|[ \t]+/g," ")};goog.string.trim=function(b){return b.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};goog.string.trimLeft=function(b){return b.replace(/^[\s\xa0]+/,"")};goog.string.trimRight=function(b){return b.replace(/[\s\xa0]+$/,"")};goog.string.caseInsensitiveCompare=function(b,c){b=String(b).toLowerCase();c=String(c).toLowerCase();return b<c?-1:b==c?0:1};
goog.string.numerateCompareRegExp_=/(\.\d+)|(\d+)|(\D+)/g;goog.string.numerateCompare=function(b,c){if(b==c)return 0;if(!b)return-1;if(!c)return 1;for(var d=b.toLowerCase().match(goog.string.numerateCompareRegExp_),e=c.toLowerCase().match(goog.string.numerateCompareRegExp_),f=Math.min(d.length,e.length),g=0;g<f;g++){var h=d[g],i=e[g];if(h!=i){b=parseInt(h,10);if(!isNaN(b)){c=parseInt(i,10);if(!isNaN(c)&&b-c)return b-c}return h<i?-1:1}}if(d.length!=e.length)return d.length-e.length;return b<c?-1:1};
goog.string.encodeUriRegExp_=/^[a-zA-Z0-9\-_.!~*'()]*$/;goog.string.urlEncode=function(b){b=String(b);if(!goog.string.encodeUriRegExp_.test(b))return encodeURIComponent(b);return b};goog.string.urlDecode=function(b){return decodeURIComponent(b.replace(/\+/g," "))};goog.string.newLineToBr=function(b,c){return b.replace(/(\r\n|\r|\n)/g,c?"<br />":"<br>")};
goog.string.htmlEscape=function(b,c){if(c)return b.replace(goog.string.amperRe_,"&amp;").replace(goog.string.ltRe_,"&lt;").replace(goog.string.gtRe_,"&gt;").replace(goog.string.quotRe_,"&quot;");else{if(!goog.string.allRe_.test(b))return b;if(b.indexOf("&")!=-1)b=b.replace(goog.string.amperRe_,"&amp;");if(b.indexOf("<")!=-1)b=b.replace(goog.string.ltRe_,"&lt;");if(b.indexOf(">")!=-1)b=b.replace(goog.string.gtRe_,"&gt;");if(b.indexOf('"')!=-1)b=b.replace(goog.string.quotRe_,"&quot;");return b}};
goog.string.amperRe_=/&/g;goog.string.ltRe_=/</g;goog.string.gtRe_=/>/g;goog.string.quotRe_=/\"/g;goog.string.allRe_=/[&<>\"]/;goog.string.unescapeEntities=function(b){if(goog.string.contains(b,"&"))return"document"in goog.global&&!goog.string.contains(b,"<")?goog.string.unescapeEntitiesUsingDom_(b):goog.string.unescapePureXmlEntities_(b);return b};
goog.string.unescapeEntitiesUsingDom_=function(b){var c=goog.global.document.createElement("a");c.innerHTML=b;c[goog.string.NORMALIZE_FN_]&&c[goog.string.NORMALIZE_FN_]();b=c.firstChild.nodeValue;c.innerHTML="";return b};goog.string.unescapePureXmlEntities_=function(b){return b.replace(/&([^;]+);/g,function(c,d){switch(d){case "amp":return"&";case "lt":return"<";case "gt":return">";case "quot":return'"';default:if(d.charAt(0)=="#"){d=Number("0"+d.substr(1));if(!isNaN(d))return String.fromCharCode(d)}return c}})};
goog.string.NORMALIZE_FN_="normalize";goog.string.whitespaceEscape=function(b,c){return goog.string.newLineToBr(b.replace(/  /g," &#160;"),c)};goog.string.stripQuotes=function(b,c){for(var d=c.length,e=0;e<d;e++){var f=d==1?c:c.charAt(e);if(b.charAt(0)==f&&b.charAt(b.length-1)==f)return b.substring(1,b.length-1)}return b};goog.string.truncate=function(b,c,d){if(d)b=goog.string.unescapeEntities(b);if(b.length>c)b=b.substring(0,c-3)+"...";if(d)b=goog.string.htmlEscape(b);return b};
goog.string.truncateMiddle=function(b,c,d){if(d)b=goog.string.unescapeEntities(b);if(b.length>c){var e=Math.floor(c/2),f=b.length-e;e+=c%2;b=b.substring(0,e)+"..."+b.substring(f)}if(d)b=goog.string.htmlEscape(b);return b};goog.string.jsEscapeCache_={"\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\u000b":"\\x0B",'"':'\\"',"'":"\\'","\\":"\\\\"};
goog.string.quote=function(b){b=String(b);if(b.quote)return b.quote();else{for(var c=['"'],d=0;d<b.length;d++)c[d+1]=goog.string.escapeChar(b.charAt(d));c.push('"');return c.join("")}};goog.string.escapeChar=function(b){if(b in goog.string.jsEscapeCache_)return goog.string.jsEscapeCache_[b];var c=b,d=b.charCodeAt(0);if(d>31&&d<127)c=b;else{if(d<256){c="\\x";if(d<16||d>256)c+="0"}else{c="\\u";if(d<4096)c+="0"}c+=d.toString(16).toUpperCase()}return goog.string.jsEscapeCache_[b]=c};
goog.string.toMap=function(b){for(var c={},d=0;d<b.length;d++)c[b.charAt(d)]=true;return c};goog.string.contains=function(b,c){return b.indexOf(c)!=-1};goog.string.removeAt=function(b,c,d){var e=b;if(c>=0&&c<b.length&&d>0)e=b.substr(0,c)+b.substr(c+d,b.length-c-d);return e};goog.string.remove=function(b,c){c=new RegExp(goog.string.regExpEscape(c),"");return b.replace(c,"")};goog.string.removeAll=function(b,c){c=new RegExp(goog.string.regExpEscape(c),"g");return b.replace(c,"")};
goog.string.regExpEscape=function(b){return String(b).replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")};goog.string.repeat=function(b,c){return(new Array(c+1)).join(b)};goog.string.padNumber=function(b,c,d){b=goog.isDef(d)?b.toFixed(d):String(b);d=b.indexOf(".");if(d==-1)d=b.length;return goog.string.repeat("0",Math.max(0,c-d))+b};goog.string.makeSafe=function(b){return b==null?"":String(b)};goog.string.buildString=function(){return Array.prototype.join.call(arguments,"")};
goog.string.getRandomString=function(){return Math.floor(Math.random()*2147483648).toString(36)+(Math.floor(Math.random()*2147483648)^goog.now()).toString(36)};
goog.string.compareVersions=function(b,c){var d=0;b=goog.string.trim(String(b)).split(".");c=goog.string.trim(String(c)).split(".");for(var e=Math.max(b.length,c.length),f=0;d==0&&f<e;f++){var g=b[f]||"",h=c[f]||"",i=new RegExp("(\\d*)(\\D*)","g"),j=new RegExp("(\\d*)(\\D*)","g");do{var k=i.exec(g)||["","",""],l=j.exec(h)||["","",""];if(k[0].length==0&&l[0].length==0)break;d=k[1].length==0?0:parseInt(k[1],10);var m=l[1].length==0?0:parseInt(l[1],10);d=goog.string.compareElements_(d,m)||goog.string.compareElements_(k[2].length==
0,l[2].length==0)||goog.string.compareElements_(k[2],l[2])}while(d==0)}return d};goog.string.compareElements_=function(b,c){if(b<c)return-1;else if(b>c)return 1;return 0};goog.string.HASHCODE_MAX_=4294967296;goog.string.hashCode=function(b){for(var c=0,d=0;d<b.length;++d){c=31*c+b.charCodeAt(d);c%=goog.string.HASHCODE_MAX_}return c};goog.string.uniqueStringCounter_=goog.now();goog.string.createUniqueString=function(){return"goog_"+goog.string.uniqueStringCounter_++};
goog.string.toNumber=function(b){var c=Number(b);if(c==0&&goog.string.isEmpty(b))return NaN;return c};goog.userAgent={};goog.userAgent.ASSUME_IE=false;goog.userAgent.ASSUME_GECKO=false;goog.userAgent.ASSUME_WEBKIT=false;goog.userAgent.ASSUME_MOBILE_WEBKIT=false;goog.userAgent.ASSUME_OPERA=false;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_=false;goog.userAgent.detectedIe_=false;goog.userAgent.detectedWebkit_=false;goog.userAgent.detectedMobile_=false;goog.userAgent.detectedGecko_=false;var b;if(!goog.userAgent.BROWSER_KNOWN_&&(b=goog.userAgent.getUserAgentString())){var c=goog.userAgent.getNavigator();goog.userAgent.detectedOpera_=b.indexOf("Opera")==0;goog.userAgent.detectedIe_=!goog.userAgent.detectedOpera_&&b.indexOf("MSIE")!=-1;goog.userAgent.detectedWebkit_=!goog.userAgent.detectedOpera_&&
b.indexOf("WebKit")!=-1;goog.userAgent.detectedMobile_=goog.userAgent.detectedWebkit_&&b.indexOf("Mobile")!=-1;goog.userAgent.detectedGecko_=!goog.userAgent.detectedOpera_&&!goog.userAgent.detectedWebkit_&&c.product=="Gecko"}};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 b=goog.userAgent.getNavigator();return b&&b.platform||""};
goog.userAgent.PLATFORM=goog.userAgent.determinePlatform_();goog.userAgent.ASSUME_MAC=false;goog.userAgent.ASSUME_WINDOWS=false;goog.userAgent.ASSUME_LINUX=false;goog.userAgent.ASSUME_X11=false;goog.userAgent.PLATFORM_KNOWN_=goog.userAgent.ASSUME_MAC||goog.userAgent.ASSUME_WINDOWS||goog.userAgent.ASSUME_LINUX||goog.userAgent.ASSUME_X11;
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")};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.determineVersion_=function(){var b="",c;if(goog.userAgent.OPERA&&goog.global.opera){b=goog.global.opera.version;b=typeof b=="function"?b():b}else{if(goog.userAgent.GECKO)c=/rv\:([^\);]+)(\)|;)/;else if(goog.userAgent.IE)c=/MSIE\s+([^\);]+)(\)|;)/;else if(goog.userAgent.WEBKIT)c=/WebKit\/(\S+)/;if(c)b=(b=c.exec(goog.userAgent.getUserAgentString()))?b[1]:""}return b};goog.userAgent.VERSION=goog.userAgent.determineVersion_();
goog.userAgent.compare=function(b,c){return goog.string.compareVersions(b,c)};goog.userAgent.isVersionCache_={};goog.userAgent.isVersion=function(b){return goog.userAgent.isVersionCache_[b]||(goog.userAgent.isVersionCache_[b]=goog.string.compareVersions(goog.userAgent.VERSION,b)>=0)};goog.dom.ASSUME_QUIRKS_MODE=false;goog.dom.ASSUME_STANDARDS_MODE=false;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(b){return b?new goog.dom.DomHelper(goog.dom.getOwnerDocument(b)):goog.dom.defaultDomHelper_||(goog.dom.defaultDomHelper_=new goog.dom.DomHelper)};
goog.dom.getDocument=function(){return document};goog.dom.getElement=function(b){return goog.isString(b)?document.getElementById(b):b};goog.dom.$=goog.dom.getElement;goog.dom.getElementsByTagNameAndClass=function(b,c,d){return goog.dom.getElementsByTagNameAndClass_(document,b,c,d)};
goog.dom.getElementsByTagNameAndClass_=function(b,c,d,e){e=e||b;c=c&&c!="*"?c.toLowerCase():"";if(e.querySelectorAll&&(c||d)&&(!goog.userAgent.WEBKIT||goog.dom.isCss1CompatMode_(b)||goog.userAgent.isVersion("528")))return e.querySelectorAll(c+(d?"."+d:""));if(d&&e.getElementsByClassName){b=e.getElementsByClassName(d);if(c){e={};for(var f=0,g=0,h;h=b[g];g++)if(c==h.nodeName.toLowerCase())e[f++]=h;e.length=f;return e}else return b}b=e.getElementsByTagName(c||"*");if(d){e={};for(g=f=0;h=b[g];g++){c=
h.className;if(typeof c.split=="function"&&goog.array.contains(c.split(" "),d))e[f++]=h}e.length=f;return e}else return b};goog.dom.$$=goog.dom.getElementsByTagNameAndClass;goog.dom.setProperties=function(b,c){goog.object.forEach(c,function(d,e){if(e=="style")b.style.cssText=d;else if(e=="class")b.className=d;else if(e=="for")b.htmlFor=d;else if(e in goog.dom.DIRECT_ATTRIBUTE_MAP_)b.setAttribute(goog.dom.DIRECT_ATTRIBUTE_MAP_[e],d);else b[e]=d})};
goog.dom.DIRECT_ATTRIBUTE_MAP_={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",rowspan:"rowSpan",valign:"vAlign",height:"height",width:"width",usemap:"useMap",frameborder:"frameBorder",type:"type"};goog.dom.getViewportSize=function(b){return goog.dom.getViewportSize_(b||window)};
goog.dom.getViewportSize_=function(b){var c=b.document;if(goog.userAgent.WEBKIT&&!goog.userAgent.isVersion("500")&&!goog.userAgent.MOBILE){if(typeof b.innerHeight=="undefined")b=window;c=b.innerHeight;var d=b.document.documentElement.scrollHeight;if(b==b.top)if(d<c)c-=15;return new goog.math.Size(b.innerWidth,c)}b=goog.dom.isCss1CompatMode_(c)&&(!goog.userAgent.OPERA||goog.userAgent.OPERA&&goog.userAgent.isVersion("9.50"))?c.documentElement:c.body;return new goog.math.Size(b.clientWidth,b.clientHeight)};
goog.dom.getDocumentHeight=function(){return goog.dom.getDocumentHeight_(window)};goog.dom.getDocumentHeight_=function(b){var c=b.document,d=0;if(c){b=goog.dom.getViewportSize_(b).height;d=c.body;var e=c.documentElement;if(goog.dom.isCss1CompatMode_(c)&&e.scrollHeight)d=e.scrollHeight!=b?e.scrollHeight:e.offsetHeight;else{c=e.scrollHeight;var f=e.offsetHeight;if(e.clientHeight!=f){c=d.scrollHeight;f=d.offsetHeight}d=c>b?c>f?c:f:c<f?c:f}}return d};
goog.dom.getPageScroll=function(b){return goog.dom.getDomHelper((b||goog.global||window).document).getDocumentScroll()};goog.dom.getDocumentScroll=function(){return goog.dom.getDocumentScroll_(document)};goog.dom.getDocumentScroll_=function(b){b=goog.dom.getDocumentScrollElement_(b);return new goog.math.Coordinate(b.scrollLeft,b.scrollTop)};goog.dom.getDocumentScrollElement=function(){return goog.dom.getDocumentScrollElement_(document)};
goog.dom.getDocumentScrollElement_=function(b){return!goog.userAgent.WEBKIT&&goog.dom.isCss1CompatMode_(b)?b.documentElement:b.body};goog.dom.getWindow=function(b){return b?goog.dom.getWindow_(b):window};goog.dom.getWindow_=function(b){return b.parentWindow||b.defaultView};goog.dom.createDom=function(){return goog.dom.createDom_(document,arguments)};
goog.dom.createDom_=function(b,c){var d=c[0],e=c[1];if(goog.userAgent.IE&&e&&(e.name||e.type)){d=["<",d];e.name&&d.push(' name="',goog.string.htmlEscape(e.name),'"');if(e.type){d.push(' type="',goog.string.htmlEscape(e.type),'"');e=goog.cloneObject(e);delete e.type}d.push(">");d=d.join("")}var f=b.createElement(d);if(e)if(goog.isString(e))f.className=e;else goog.dom.setProperties(f,e);if(c.length>2){e=function(h){if(h)f.appendChild(goog.isString(h)?b.createTextNode(h):h)};for(d=2;d<c.length;d++){var g=
c[d];goog.isArrayLike(g)&&!goog.dom.isNodeLike(g)?goog.array.forEach(goog.dom.isNodeList(g)?goog.array.clone(g):g,e):e(g)}}return f};goog.dom.$dom=goog.dom.createDom;goog.dom.createElement=function(b){return document.createElement(b)};goog.dom.createTextNode=function(b){return document.createTextNode(b)};goog.dom.htmlToDocumentFragment=function(b){return goog.dom.htmlToDocumentFragment_(document,b)};
goog.dom.htmlToDocumentFragment_=function(b,c){var d=b.createElement("div");d.innerHTML=c;if(d.childNodes.length==1)return d.firstChild;else{for(b=b.createDocumentFragment();d.firstChild;)b.appendChild(d.firstChild);return b}};goog.dom.getCompatMode=function(){return goog.dom.isCss1CompatMode()?"CSS1Compat":"BackCompat"};goog.dom.isCss1CompatMode=function(){return goog.dom.isCss1CompatMode_(document)};
goog.dom.isCss1CompatMode_=function(b){if(goog.dom.COMPAT_MODE_KNOWN_)return goog.dom.ASSUME_STANDARDS_MODE;return b.compatMode=="CSS1Compat"};goog.dom.canHaveChildren=function(b){if(b.nodeType!=goog.dom.NodeType.ELEMENT)return false;if("canHaveChildren"in b)return b.canHaveChildren;switch(b.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.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.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.STYLE:return false}return true};
goog.dom.appendChild=function(b,c){b.appendChild(c)};goog.dom.removeChildren=function(b){for(var c;c=b.firstChild;)b.removeChild(c)};goog.dom.insertSiblingBefore=function(b,c){c.parentNode&&c.parentNode.insertBefore(b,c)};goog.dom.insertSiblingAfter=function(b,c){c.parentNode&&c.parentNode.insertBefore(b,c.nextSibling)};goog.dom.removeNode=function(b){return b&&b.parentNode?b.parentNode.removeChild(b):null};goog.dom.replaceNode=function(b,c){var d=c.parentNode;d&&d.replaceChild(b,c)};
goog.dom.flattenElement=function(b){var c,d=b.parentNode;if(d&&d.nodeType!=goog.dom.NodeType.DOCUMENT_FRAGMENT)if(b.removeNode)return b.removeNode(false);else{for(;c=b.firstChild;)d.insertBefore(c,b);return goog.dom.removeNode(b)}};goog.dom.getFirstElementChild=function(b){return goog.dom.getNextElementNode_(b.firstChild,true)};goog.dom.getLastElementChild=function(b){return goog.dom.getNextElementNode_(b.lastChild,false)};
goog.dom.getNextElementSibling=function(b){return goog.dom.getNextElementNode_(b.nextSibling,true)};goog.dom.getPreviousElementSibling=function(b){return goog.dom.getNextElementNode_(b.previousSibling,false)};goog.dom.getNextElementNode_=function(b,c){for(;b&&b.nodeType!=goog.dom.NodeType.ELEMENT;)b=c?b.nextSibling:b.previousSibling;return b};goog.dom.isNodeLike=function(b){return goog.isObject(b)&&b.nodeType>0};
goog.dom.contains=function(b,c){if(b.contains&&c.nodeType==goog.dom.NodeType.ELEMENT)return b==c||b.contains(c);if(typeof b.compareDocumentPosition!="undefined")return b==c||Boolean(b.compareDocumentPosition(c)&16);for(;c&&b!=c;)c=c.parentNode;return c==b};
goog.dom.compareNodeOrder=function(b,c){if(b==c)return 0;if(b.compareDocumentPosition)return b.compareDocumentPosition(c)&2?1:-1;if("sourceIndex"in b||b.parentNode&&"sourceIndex"in b.parentNode){var d=b.nodeType==goog.dom.NodeType.ELEMENT,e=c.nodeType==goog.dom.NodeType.ELEMENT;if(d&&e)return b.sourceIndex-c.sourceIndex;else{var f=b.parentNode,g=c.parentNode;if(f==g)return goog.dom.compareSiblingOrder_(b,c);if(!d&&goog.dom.contains(f,c))return-1*goog.dom.compareParentsDescendantNodeIe_(b,c);if(!e&&
goog.dom.contains(g,b))return goog.dom.compareParentsDescendantNodeIe_(c,b);return(d?b.sourceIndex:f.sourceIndex)-(e?c.sourceIndex:g.sourceIndex)}}e=goog.dom.getOwnerDocument(b);d=e.createRange();d.selectNode(b);d.collapse(true);b=e.createRange();b.selectNode(c);b.collapse(true);return d.compareBoundaryPoints(goog.global.Range.START_TO_END,b)};
goog.dom.compareParentsDescendantNodeIe_=function(b,c){var d=b.parentNode;if(d==c)return-1;for(c=c;c.parentNode!=d;)c=c.parentNode;return goog.dom.compareSiblingOrder_(c,b)};goog.dom.compareSiblingOrder_=function(b,c){for(c=c;c=c.previousSibling;)if(c==b)return-1;return 1};
goog.dom.findCommonAncestor=function(){var b,c=arguments.length;if(c){if(c==1)return arguments[0]}else return null;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++){g=d[0][b];for(var h=1;h<c;h++)if(g!=d[h][b])return f;f=g}return f};goog.dom.getOwnerDocument=function(b){return b.nodeType==goog.dom.NodeType.DOCUMENT?b:b.ownerDocument||b.document};
goog.dom.getFrameContentDocument=function(b){return goog.userAgent.WEBKIT?b.document||b.contentWindow.document:b.contentDocument||b.contentWindow.document};goog.dom.getFrameContentWindow=function(b){return b.contentWindow||goog.dom.getWindow_(goog.dom.getFrameContentDocument(b))};
goog.dom.setTextContent=function(b,c){if("textContent"in b)b.textContent=c;else if(b.firstChild&&b.firstChild.nodeType==goog.dom.NodeType.TEXT){for(;b.lastChild!=b.firstChild;)b.removeChild(b.lastChild);b.firstChild.data=c}else{goog.dom.removeChildren(b);var d=goog.dom.getOwnerDocument(b);b.appendChild(d.createTextNode(c))}};goog.dom.getOuterHtml=function(b){if("outerHTML"in b)return b.outerHTML;else{var c=goog.dom.getOwnerDocument(b).createElement("div");c.appendChild(b.cloneNode(true));return c.innerHTML}};
goog.dom.findNode=function(b,c){var d=[];return goog.dom.findNodes_(b,c,d,true)?d[0]:undefined};goog.dom.findNodes=function(b,c){var d=[];goog.dom.findNodes_(b,c,d,false);return d};goog.dom.findNodes_=function(b,c,d,e){if(b!=null)for(var f=0,g;g=b.childNodes[f];f++){if(c(g)){d.push(g);if(e)return true}if(goog.dom.findNodes_(g,c,d,e))return true}return false};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(b){var c=b.getAttributeNode("tabindex");if(c&&c.specified){b=b.tabIndex;return goog.isNumber(b)&&b>=0}return false};goog.dom.setFocusableTabIndex=function(b,c){if(c)b.tabIndex=0;else b.removeAttribute("tabIndex")};
goog.dom.getTextContent=function(b){if(goog.userAgent.IE&&"innerText"in b)b=goog.string.canonicalizeNewlines(b.innerText);else{var c=[];goog.dom.getTextContent_(b,c,true);b=c.join("")}b=b.replace(/\xAD/g,"");b=b.replace(/ +/g," ");if(b!=" ")b=b.replace(/^\s*/,"");return b};goog.dom.getRawTextContent=function(b){var c=[];goog.dom.getTextContent_(b,c,false);return c.join("")};
goog.dom.getTextContent_=function(b,c,d){if(!(b.nodeName in goog.dom.TAGS_TO_IGNORE_))if(b.nodeType==goog.dom.NodeType.TEXT)d?c.push(String(b.nodeValue).replace(/(\r\n|\r|\n)/g,"")):c.push(b.nodeValue);else if(b.nodeName in goog.dom.PREDEFINED_TAG_VALUES_)c.push(goog.dom.PREDEFINED_TAG_VALUES_[b.nodeName]);else for(b=b.firstChild;b;){goog.dom.getTextContent_(b,c,d);b=b.nextSibling}};goog.dom.getNodeTextLength=function(b){return goog.dom.getTextContent(b).length};
goog.dom.getNodeTextOffset=function(b,c){c=c||goog.dom.getOwnerDocument(b).body;for(var d=[];b&&b!=c;){for(var e=b;e=e.previousSibling;)d.unshift(goog.dom.getTextContent(e));b=b.parentNode}return goog.string.trimLeft(d.join("")).replace(/ +/g," ").length};
goog.dom.getNodeAtOffset=function(b,c,d){b=[b];for(var e=0,f;b.length>0&&e<c;){f=b.pop();if(!(f.nodeName in goog.dom.TAGS_TO_IGNORE_))if(f.nodeType==goog.dom.NodeType.TEXT){var g=f.nodeValue.replace(/(\r\n|\r|\n)/g,"").replace(/ +/g," ");e+=g.length}else if(f.nodeName in goog.dom.PREDEFINED_TAG_VALUES_)e+=goog.dom.PREDEFINED_TAG_VALUES_[f.nodeName].length;else for(g=f.childNodes.length-1;g>=0;g--)b.push(f.childNodes[g])}if(goog.isObject(d)){d.remainder=f?f.nodeValue.length+c-e-1:0;d.node=f}return f};
goog.dom.isNodeList=function(b){if(b&&typeof b.length=="number")if(goog.isObject(b))return typeof b.item=="function"||typeof b.item=="string";else if(goog.isFunction(b))return typeof b.item=="function";return false};goog.dom.getAncestorByTagNameAndClass=function(b,c,d){return goog.dom.getAncestor(b,function(e){return(!c||e.nodeName==c)&&(!d||goog.dom.classes.has(e,d))},true)};
goog.dom.getAncestor=function(b,c,d,e){if(!d)b=b.parentNode;d=e==null;for(var f=0;b&&(d||f<=e);){if(c(b))return b;b=b.parentNode;f++}return null};goog.dom.DomHelper=function(b){this.document_=b||goog.global.document||document};a=goog.dom.DomHelper.prototype;a.getDomHelper=goog.dom.getDomHelper;a.setDocument=function(b){this.document_=b};a.getDocument=function(){return this.document_};a.getElement=function(b){return goog.isString(b)?this.document_.getElementById(b):b};a.$=goog.dom.DomHelper.prototype.getElement;
a.getElementsByTagNameAndClass=function(b,c,d){return goog.dom.getElementsByTagNameAndClass_(this.document_,b,c,d)};a.$$=goog.dom.DomHelper.prototype.getElementsByTagNameAndClass;a.setProperties=goog.dom.setProperties;a.getViewportSize=function(b){return goog.dom.getViewportSize(b||this.getWindow())};a.getDocumentHeight=function(){return goog.dom.getDocumentHeight_(this.getWindow())};a.createDom=function(){return goog.dom.createDom_(this.document_,arguments)};a.$dom=goog.dom.DomHelper.prototype.createDom;
a.createElement=function(b){return this.document_.createElement(b)};a.createTextNode=function(b){return this.document_.createTextNode(b)};a.htmlToDocumentFragment=function(b){return goog.dom.htmlToDocumentFragment_(this.document_,b)};a.getCompatMode=function(){return this.isCss1CompatMode()?"CSS1Compat":"BackCompat"};a.isCss1CompatMode=function(){return goog.dom.isCss1CompatMode_(this.document_)};a.getWindow=function(){return goog.dom.getWindow_(this.document_)};a.getDocumentScrollElement=function(){return goog.dom.getDocumentScrollElement_(this.document_)};
a.getDocumentScroll=function(){return goog.dom.getDocumentScroll_(this.document_)};a.appendChild=goog.dom.appendChild;a.removeChildren=goog.dom.removeChildren;a.insertSiblingBefore=goog.dom.insertSiblingBefore;a.insertSiblingAfter=goog.dom.insertSiblingAfter;a.removeNode=goog.dom.removeNode;a.replaceNode=goog.dom.replaceNode;a.flattenElement=goog.dom.flattenElement;a.getFirstElementChild=goog.dom.getFirstElementChild;a.getLastElementChild=goog.dom.getLastElementChild;a.getNextElementSibling=goog.dom.getNextElementSibling;
a.getPreviousElementSibling=goog.dom.getPreviousElementSibling;a.isNodeLike=goog.dom.isNodeLike;a.contains=goog.dom.contains;a.getOwnerDocument=goog.dom.getOwnerDocument;a.getFrameContentDocument=goog.dom.getFrameContentDocument;a.getFrameContentWindow=goog.dom.getFrameContentWindow;a.setTextContent=goog.dom.setTextContent;a.findNode=goog.dom.findNode;a.findNodes=goog.dom.findNodes;a.getTextContent=goog.dom.getTextContent;a.getNodeTextLength=goog.dom.getNodeTextLength;a.getNodeTextOffset=goog.dom.getNodeTextOffset;
a.getAncestorByTagNameAndClass=goog.dom.getAncestorByTagNameAndClass;a.getAncestor=goog.dom.getAncestor;goog.math.Box=function(b,c,d,e){this.top=b;this.right=c;this.bottom=d;this.left=e};goog.math.Box.boundingBox=function(){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)};
if(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(b){return goog.math.Box.contains(this,b)};goog.math.Box.prototype.expand=function(b,c,d,e){if(goog.isObject(b)){this.top-=b.top;this.right+=b.right;this.bottom+=b.bottom;this.left-=b.left}else{this.top-=b;this.right+=c;this.bottom+=d;this.left-=e}return this};
goog.math.Box.equals=function(b,c){if(b==c)return true;if(!b||!c)return false;return b.top==c.top&&b.right==c.right&&b.bottom==c.bottom&&b.left==c.left};goog.math.Box.contains=function(b,c){if(!b||!c)return false;if(c instanceof goog.math.Box)return c.left>=b.left&&c.right<=b.right&&c.top>=b.top&&c.bottom<=b.bottom;return c.x>=b.left&&c.x<=b.right&&c.y>=b.top&&c.y<=b.bottom};
goog.math.Box.distance=function(b,c){if(c.x>=b.left&&c.x<=b.right){if(c.y>=b.top&&c.y<=b.bottom)return 0;return c.y<b.top?b.top-c.y:c.y-b.bottom}if(c.y>=b.top&&c.y<=b.bottom)return c.x<b.left?b.left-c.x:c.x-b.right;return goog.math.Coordinate.distance(c,new goog.math.Coordinate(c.x<b.left?b.left:b.right,c.y<b.top?b.top:b.bottom))};goog.math.Box.intersects=function(b,c){return b.left<=c.right&&c.left<=b.right&&b.top<=c.bottom&&c.top<=b.bottom};goog.math.Rect=function(b,c,d,e){this.left=b;this.top=c;this.width=d;this.height=e};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(b){return new goog.math.Rect(b.left,b.top,b.right-b.left,b.bottom-b.top)};
if(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(b,c){if(b==c)return true;if(!b||!c)return false;return b.left==c.left&&b.width==c.width&&b.top==c.top&&b.height==c.height};
goog.math.Rect.prototype.intersection=function(b){var c=Math.max(this.left,b.left),d=Math.min(this.left+this.width,b.left+b.width);if(c<=d){var e=Math.max(this.top,b.top);b=Math.min(this.top+this.height,b.top+b.height);if(e<=b){this.left=c;this.top=e;this.width=d-c;this.height=b-e;return true}}return false};
goog.math.Rect.intersection=function(b,c){var d=Math.max(b.left,c.left),e=Math.min(b.left+b.width,c.left+c.width);if(d<=e){var f=Math.max(b.top,c.top);b=Math.min(b.top+b.height,c.top+c.height);if(f<=b)return new goog.math.Rect(d,f,e-d,b-f)}return null};goog.math.Rect.intersects=function(b,c){return b.left<=c.left+c.width&&c.left<=b.left+b.width&&b.top<=c.top+c.height&&c.top<=b.top+b.height};goog.math.Rect.prototype.intersects=function(b){return goog.math.Rect.intersects(this,b)};
goog.math.Rect.difference=function(b,c){var d=goog.math.Rect.intersection(b,c);if(!d||!d.height||!d.width)return[b.clone()];d=[];var e=b.top,f=b.height,g=b.left+b.width,h=b.top+b.height,i=c.left+c.width,j=c.top+c.height;if(c.top>b.top){d.push(new goog.math.Rect(b.left,b.top,b.width,c.top-b.top));e=c.top;f-=c.top-b.top}if(j<h){d.push(new goog.math.Rect(b.left,j,b.width,h-j));f=j-e}c.left>b.left&&d.push(new goog.math.Rect(b.left,e,c.left-b.left,f));i<g&&d.push(new goog.math.Rect(i,e,g-i,f));return d};
goog.math.Rect.prototype.difference=function(b){return goog.math.Rect.difference(this,b)};goog.math.Rect.prototype.boundingRect=function(b){var c=Math.max(this.left+this.width,b.left+b.width),d=Math.max(this.top+this.height,b.top+b.height);this.left=Math.min(this.left,b.left);this.top=Math.min(this.top,b.top);this.width=c-this.left;this.height=d-this.top};goog.math.Rect.boundingRect=function(b,c){if(!b||!c)return null;b=b.clone();b.boundingRect(c);return b};
goog.math.Rect.prototype.contains=function(b){return b instanceof goog.math.Rect?this.left<=b.left&&this.left+this.width>=b.left+b.width&&this.top<=b.top&&this.top+this.height>=b.top+b.height:b.x>=this.left&&b.x<=this.left+this.width&&b.y>=this.top&&b.y<=this.top+this.height};goog.math.Rect.prototype.getSize=function(){return new goog.math.Size(this.width,this.height)};goog.style={};goog.style.setStyle=function(b,c,d){goog.isString(c)?goog.style.setStyle_(b,d,c):goog.object.forEach(c,goog.partial(goog.style.setStyle_,b))};goog.style.setStyle_=function(b,c,d){b.style[goog.style.toCamelCase(d)]=c};goog.style.getStyle=function(b,c){return b.style[goog.style.toCamelCase(c)]};goog.style.getComputedStyle=function(b,c){var d=goog.dom.getOwnerDocument(b);if(d.defaultView&&d.defaultView.getComputedStyle)if(b=d.defaultView.getComputedStyle(b,""))return b[c];return null};
goog.style.getCascadedStyle=function(b,c){return b.currentStyle?b.currentStyle[c]:null};goog.style.getStyle_=function(b,c){return goog.style.getComputedStyle(b,c)||goog.style.getCascadedStyle(b,c)||b.style[c]};goog.style.getComputedPosition=function(b){return goog.style.getStyle_(b,"position")};goog.style.getBackgroundColor=function(b){return goog.style.getStyle_(b,"backgroundColor")};goog.style.getComputedOverflowX=function(b){return goog.style.getStyle_(b,"overflowX")};
goog.style.getComputedOverflowY=function(b){return goog.style.getStyle_(b,"overflowY")};goog.style.getComputedZIndex=function(b){return goog.style.getStyle_(b,"zIndex")};goog.style.getComputedTextAlign=function(b){return goog.style.getStyle_(b,"textAlign")};goog.style.getComputedCursor=function(b){return goog.style.getStyle_(b,"cursor")};
goog.style.setPosition=function(b,c,d){var e,f=goog.userAgent.GECKO&&(goog.userAgent.MAC||goog.userAgent.X11)&&goog.userAgent.isVersion("1.9");if(c instanceof goog.math.Coordinate){e=c.x;c=c.y}else{e=c;c=d}b.style.left=typeof e=="number"?(f?Math.round(e):e)+"px":e;b.style.top=typeof c=="number"?(f?Math.round(c):c)+"px":c};goog.style.getPosition=function(b){return new goog.math.Coordinate(b.offsetLeft,b.offsetTop)};
goog.style.getClientViewportElement=function(b){b=b?b.nodeType==goog.dom.NodeType.DOCUMENT?b:goog.dom.getOwnerDocument(b):goog.dom.getDocument();if(goog.userAgent.IE&&!goog.dom.getDomHelper(b).isCss1CompatMode())return b.body;return b.documentElement};goog.style.getBoundingClientRect_=function(b){var c=b.getBoundingClientRect();if(goog.userAgent.IE){b=b.ownerDocument;c.left-=b.documentElement.clientLeft+b.body.clientLeft;c.top-=b.documentElement.clientTop+b.body.clientTop}return c};
goog.style.getOffsetParent=function(b){if(goog.userAgent.IE)return b.offsetParent;var c=goog.dom.getOwnerDocument(b),d=goog.style.getStyle_(b,"position"),e=d=="fixed"||d=="absolute";for(b=b.parentNode;b&&b!=c;b=b.parentNode){d=goog.style.getStyle_(b,"position");e=e&&d=="static"&&b!=c.documentElement&&b!=c.body;if(!e&&(b.scrollWidth>b.clientWidth||b.scrollHeight>b.clientHeight||d=="fixed"||d=="absolute"))return b}return null};
goog.style.getVisibleRectForElement=function(b){var c=new goog.math.Box(0,Infinity,Infinity,0),d=goog.dom.getDomHelper(b),e=d.getDocument().body,f=d.getDocumentScrollElement(),g;for(b=b;b=goog.style.getOffsetParent(b);)if((!goog.userAgent.IE||b.clientWidth!=0)&&(!goog.userAgent.WEBKIT||b.clientHeight!=0||b!=e)&&(b.scrollWidth!=b.clientWidth||b.scrollHeight!=b.clientHeight)&&goog.style.getStyle_(b,"overflow")!="visible"){var h=goog.style.getPageOffset(b),i=goog.style.getClientLeftTop(b);h.x+=i.x;h.y+=
i.y;c.top=Math.max(c.top,h.y);c.right=Math.min(c.right,h.x+b.clientWidth);c.bottom=Math.min(c.bottom,h.y+b.clientHeight);c.left=Math.max(c.left,h.x);g=g||b!=f}e=f.scrollLeft;f=f.scrollTop;if(goog.userAgent.WEBKIT){c.left+=e;c.top+=f}else{c.left=Math.max(c.left,e);c.top=Math.max(c.top,f)}if(!g||goog.userAgent.WEBKIT){c.right+=e;c.bottom+=f}d=d.getViewportSize();c.right=Math.min(c.right,e+d.width);c.bottom=Math.min(c.bottom,f+d.height);return c.top>=0&&c.left>=0&&c.bottom>c.top&&c.right>c.left?c:null};
goog.style.scrollIntoContainerView=function(b,c,d){var e=goog.style.getPageOffset(b),f=goog.style.getPageOffset(c),g=goog.style.getBorderBox(c),h=e.x-f.x-g.left;e=e.y-f.y-g.top;f=c.clientWidth-b.offsetWidth;b=c.clientHeight-b.offsetHeight;if(d){c.scrollLeft+=h-f/2;c.scrollTop+=e-b/2}else{c.scrollLeft+=Math.min(h,Math.max(h-f,0));c.scrollTop+=Math.min(e,Math.max(e-b,0))}};
goog.style.getClientLeftTop=function(b){if(goog.userAgent.GECKO&&!goog.userAgent.isVersion("1.9")){var c=parseFloat(goog.style.getComputedStyle(b,"borderLeftWidth"));if(goog.style.isRightToLeft(b)){var d=b.offsetWidth-b.clientWidth-c-parseFloat(goog.style.getComputedStyle(b,"borderRightWidth"));c+=d}return new goog.math.Coordinate(c,parseFloat(goog.style.getComputedStyle(b,"borderTopWidth")))}return new goog.math.Coordinate(b.clientLeft,b.clientTop)};
goog.style.getPageOffset=function(b){var c,d=goog.dom.getOwnerDocument(b),e=goog.style.getStyle_(b,"position"),f=goog.userAgent.GECKO&&d.getBoxObjectFor&&!b.getBoundingClientRect&&e=="absolute"&&(c=d.getBoxObjectFor(b))&&(c.screenX<0||c.screenY<0),g=new goog.math.Coordinate(0,0),h=goog.style.getClientViewportElement(d);if(b==h)return g;if(b.getBoundingClientRect){c=goog.style.getBoundingClientRect_(b);b=goog.dom.getDomHelper(d).getDocumentScroll();g.x=c.left+b.x;g.y=c.top+b.y}else if(d.getBoxObjectFor&&
!f){c=d.getBoxObjectFor(b);b=d.getBoxObjectFor(h);g.x=c.screenX-b.screenX;g.y=c.screenY-b.screenY}else{c=b;do{g.x+=c.offsetLeft;g.y+=c.offsetTop;if(c!=b){g.x+=c.clientLeft||0;g.y+=c.clientTop||0}if(goog.userAgent.WEBKIT&&goog.style.getComputedPosition(c)=="fixed"){g.x+=d.body.scrollLeft;g.y+=d.body.scrollTop;break}c=c.offsetParent}while(c&&c!=b);if(goog.userAgent.OPERA||goog.userAgent.WEBKIT&&e=="absolute")g.y-=d.body.offsetTop;for(c=b;(c=goog.style.getOffsetParent(c))&&c!=d.body&&c!=h;){g.x-=c.scrollLeft;
if(!goog.userAgent.OPERA||c.tagName!="TR")g.y-=c.scrollTop}}return g};goog.style.getPageOffsetLeft=function(b){return goog.style.getPageOffset(b).x};goog.style.getPageOffsetTop=function(b){return goog.style.getPageOffset(b).y};
goog.style.getFramedPageOffset=function(b,c){var d=new goog.math.Coordinate(0,0),e=goog.dom.getWindow(goog.dom.getOwnerDocument(b));b=b;do{var f=e==c?goog.style.getPageOffset(b):goog.style.getClientPosition(b);d.x+=f.x;d.y+=f.y}while(e&&e!=c&&(b=e.frameElement)&&(e=e.parent));return d};
goog.style.translateRectForAnotherFrame=function(b,c,d){if(c.getDocument()!=d.getDocument()){var e=c.getDocument().body;d=goog.style.getFramedPageOffset(e,d.getWindow());d=goog.math.Coordinate.difference(d,goog.style.getPageOffset(e));if(goog.userAgent.IE&&!c.isCss1CompatMode())d=goog.math.Coordinate.difference(d,c.getDocumentScroll());b.left+=d.x;b.top+=d.y}};
goog.style.getRelativePosition=function(b,c){b=goog.style.getClientPosition(b);c=goog.style.getClientPosition(c);return new goog.math.Coordinate(b.x-c.x,b.y-c.y)};goog.style.getClientPosition=function(b){var c=new goog.math.Coordinate;if(b.nodeType==goog.dom.NodeType.ELEMENT)if(b.getBoundingClientRect){var d=goog.style.getBoundingClientRect_(b);c.x=d.left;c.y=d.top}else{d=goog.dom.getDomHelper(b).getDocumentScroll();b=goog.style.getPageOffset(b);c.x=b.x-d.x;c.y=b.y-d.y}else{c.x=b.clientX;c.y=b.clientY}return c};
goog.style.setPageOffset=function(b,c,d){var e=goog.style.getPageOffset(b);if(c instanceof goog.math.Coordinate){d=c.y;c=c.x}goog.style.setPosition(b,b.offsetLeft+(c-e.x),b.offsetTop+(d-e.y))};goog.style.setSize=function(b,c,d){if(c instanceof goog.math.Size){d=c.height;c=c.width}else{if(d==undefined)throw Error("missing height argument");d=d}b.style.width=typeof c=="number"?Math.round(c)+"px":c;b.style.height=typeof d=="number"?Math.round(d)+"px":d};
goog.style.getSize=function(b){var c=goog.userAgent.OPERA&&!goog.userAgent.isVersion("10");if(goog.style.getStyle_(b,"display")!="none")return c?new goog.math.Size(b.offsetWidth||b.clientWidth,b.offsetHeight||b.clientHeight):new goog.math.Size(b.offsetWidth,b.offsetHeight);var d=b.style,e=d.display,f=d.visibility,g=d.position;d.visibility="hidden";d.position="absolute";d.display="inline";if(c){c=b.offsetWidth||b.clientWidth;b=b.offsetHeight||b.clientHeight}else{c=b.offsetWidth;b=b.offsetHeight}d.display=
e;d.position=g;d.visibility=f;return new goog.math.Size(c,b)};goog.style.getBounds=function(b){var c=goog.style.getPageOffset(b);b=goog.style.getSize(b);return new goog.math.Rect(c.x,c.y,b.width,b.height)};goog.style.toCamelCaseCache_={};goog.style.toCamelCase=function(b){return goog.style.toCamelCaseCache_[b]||(goog.style.toCamelCaseCache_[b]=String(b).replace(/\-([a-z])/g,function(c,d){return d.toUpperCase()}))};goog.style.toSelectorCase=function(b){return b.replace(/([A-Z])/g,"-$1").toLowerCase()};
goog.style.getOpacity=function(b){var c=b.style;b="";if("opacity"in c)b=c.opacity;else if("MozOpacity"in c)b=c.MozOpacity;else if("filter"in c)if(c=c.filter.match(/alpha\(opacity=([\d.]+)\)/))b=String(c[1]/100);return b==""?b:Number(b)};goog.style.setOpacity=function(b,c){b=b.style;if("opacity"in b)b.opacity=c;else if("MozOpacity"in b)b.MozOpacity=c;else if("filter"in b)b.filter=c===""?"":"alpha(opacity="+c*100+")"};
goog.style.setTransparentBackgroundImage=function(b,c){b=b.style;if(goog.userAgent.IE&&!goog.userAgent.isVersion("8"))b.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+c+'", sizingMethod="crop")';else{b.backgroundImage="url("+c+")";b.backgroundPosition="top left";b.backgroundRepeat="no-repeat"}};goog.style.clearTransparentBackgroundImage=function(b){b=b.style;if("filter"in b)b.filter="";else b.backgroundImage="none"};goog.style.showElement=function(b,c){b.style.display=c?"":"none"};
goog.style.isElementShown=function(b){return b.style.display!="none"};goog.style.installStyles=function(b,c){c=goog.dom.getDomHelper(c);var d=null;if(goog.userAgent.IE){d=c.getDocument().createStyleSheet();goog.style.setStyles(d,b)}else{var e=c.getElementsByTagNameAndClass("head")[0];if(!e){d=c.getElementsByTagNameAndClass("body")[0];e=c.createDom("head");d.parentNode.insertBefore(e,d)}d=c.createDom("style");goog.style.setStyles(d,b);c.appendChild(e,d)}return d};
goog.style.uninstallStyles=function(b){goog.dom.removeNode(b.ownerNode||b.owningElement||b)};goog.style.setStyles=function(b,c){if(goog.userAgent.IE)b.cssText=c;else b[goog.userAgent.WEBKIT?"innerText":"innerHTML"]=c};goog.style.setPreWrap=function(b){b=b.style;if(goog.userAgent.IE&&!goog.userAgent.isVersion("8")){b.whiteSpace="pre";b.wordWrap="break-word"}else b.whiteSpace=goog.userAgent.GECKO?"-moz-pre-wrap":goog.userAgent.OPERA?"-o-pre-wrap":"pre-wrap"};
goog.style.setInlineBlock=function(b){b=b.style;b.position="relative";if(goog.userAgent.IE&&!goog.userAgent.isVersion("8")){b.zoom="1";b.display="inline"}else b.display=goog.userAgent.GECKO?goog.userAgent.isVersion("1.9a")?"inline-block":"-moz-inline-box":"inline-block"};goog.style.isRightToLeft=function(b){return"rtl"==goog.style.getStyle_(b,"direction")};goog.style.unselectableStyle_=goog.userAgent.GECKO?"MozUserSelect":goog.userAgent.WEBKIT?"WebkitUserSelect":null;
goog.style.isUnselectable=function(b){if(goog.style.unselectableStyle_)return b.style[goog.style.unselectableStyle_].toLowerCase()=="none";else if(goog.userAgent.IE||goog.userAgent.OPERA)return b.getAttribute("unselectable")=="on";return false};
goog.style.setUnselectable=function(b,c,d){d=!d?b.getElementsByTagName("*"):null;var e=goog.style.unselectableStyle_;if(e){c=c?"none":"";b.style[e]=c;if(d){b=0;for(var f;f=d[b];b++)f.style[e]=c}}else if(goog.userAgent.IE||goog.userAgent.OPERA){c=c?"on":"";b.setAttribute("unselectable",c);if(d)for(b=0;f=d[b];b++)f.setAttribute("unselectable",c)}};goog.style.getBorderBoxSize=function(b){return new goog.math.Size(b.offsetWidth,b.offsetHeight)};
goog.style.setBorderBoxSize=function(b,c){var d=goog.dom.getOwnerDocument(b),e=goog.dom.getDomHelper(d).isCss1CompatMode();if(goog.userAgent.IE&&(!e||!goog.userAgent.isVersion("8"))){d=b.style;if(e){e=goog.style.getPaddingBox(b);b=goog.style.getBorderBox(b);d.pixelWidth=c.width-b.left-e.left-e.right-b.right;d.pixelHeight=c.height-b.top-e.top-e.bottom-b.bottom}else{d.pixelWidth=c.width;d.pixelHeight=c.height}}else goog.style.setBoxSizingSize_(b,c,"border-box")};
goog.style.getContentBoxSize=function(b){var c=goog.dom.getOwnerDocument(b),d=goog.userAgent.IE&&b.currentStyle;if(d&&goog.dom.getDomHelper(c).isCss1CompatMode()&&d.width!="auto"&&d.height!="auto"&&!d.boxSizing){c=goog.style.getIePixelValue_(b,d.width,"width","pixelWidth");b=goog.style.getIePixelValue_(b,d.height,"height","pixelHeight");return new goog.math.Size(c,b)}else{d=goog.style.getBorderBoxSize(b);c=goog.style.getPaddingBox(b);b=goog.style.getBorderBox(b);return new goog.math.Size(d.width-
b.left-c.left-c.right-b.right,d.height-b.top-c.top-c.bottom-b.bottom)}};
goog.style.setContentBoxSize=function(b,c){var d=goog.dom.getOwnerDocument(b),e=goog.dom.getDomHelper(d).isCss1CompatMode();if(goog.userAgent.IE&&(!e||!goog.userAgent.isVersion("8"))){d=b.style;if(e){d.pixelWidth=c.width;d.pixelHeight=c.height}else{e=goog.style.getPaddingBox(b);b=goog.style.getBorderBox(b);d.pixelWidth=c.width+b.left+e.left+e.right+b.right;d.pixelHeight=c.height+b.top+e.top+e.bottom+b.bottom}}else goog.style.setBoxSizingSize_(b,c,"content-box")};
goog.style.setBoxSizingSize_=function(b,c,d){b=b.style;if(goog.userAgent.GECKO)b.MozBoxSizing=d;else if(goog.userAgent.WEBKIT)b.WebkitBoxSizing=d;else if(goog.userAgent.OPERA&&!goog.userAgent.isVersion("9.50"))d?b.setProperty("box-sizing",d):b.removeProperty("box-sizing");else b.boxSizing=d;b.width=c.width+"px";b.height=c.height+"px"};
goog.style.getIePixelValue_=function(b,c,d,e){if(/^\d+px?$/.test(c))return parseInt(c,10);else{var f=b.style[d],g=b.runtimeStyle[d];b.runtimeStyle[d]=b.currentStyle[d];b.style[d]=c;c=b.style[e];b.style[d]=f;b.runtimeStyle[d]=g;return c}};goog.style.getIePixelDistance_=function(b,c){return goog.style.getIePixelValue_(b,goog.style.getCascadedStyle(b,c),"left","pixelLeft")};
goog.style.getBox_=function(b,c){if(goog.userAgent.IE){var d=goog.style.getIePixelDistance_(b,c+"Left"),e=goog.style.getIePixelDistance_(b,c+"Right"),f=goog.style.getIePixelDistance_(b,c+"Top");b=goog.style.getIePixelDistance_(b,c+"Bottom");return new goog.math.Box(f,e,b,d)}else{d=goog.style.getComputedStyle(b,c+"Left");e=goog.style.getComputedStyle(b,c+"Right");f=goog.style.getComputedStyle(b,c+"Top");b=goog.style.getComputedStyle(b,c+"Bottom");return new goog.math.Box(parseFloat(f),parseFloat(e),
parseFloat(b),parseFloat(d))}};goog.style.getPaddingBox=function(b){return goog.style.getBox_(b,"padding")};goog.style.getMarginBox=function(b){return goog.style.getBox_(b,"margin")};goog.style.ieBorderWidthKeywords_={thin:2,medium:4,thick:6};
goog.style.getIePixelBorder_=function(b,c){if(goog.style.getCascadedStyle(b,c+"Style")=="none")return 0;c=goog.style.getCascadedStyle(b,c+"Width");if(c in goog.style.ieBorderWidthKeywords_)return goog.style.ieBorderWidthKeywords_[c];return goog.style.getIePixelValue_(b,c,"left","pixelLeft")};
goog.style.getBorderBox=function(b){if(goog.userAgent.IE){var c=goog.style.getIePixelBorder_(b,"borderLeft"),d=goog.style.getIePixelBorder_(b,"borderRight"),e=goog.style.getIePixelBorder_(b,"borderTop");b=goog.style.getIePixelBorder_(b,"borderBottom");return new goog.math.Box(e,d,b,c)}else{c=goog.style.getComputedStyle(b,"borderLeftWidth");d=goog.style.getComputedStyle(b,"borderRightWidth");e=goog.style.getComputedStyle(b,"borderTopWidth");b=goog.style.getComputedStyle(b,"borderBottomWidth");return new goog.math.Box(parseFloat(e),
parseFloat(d),parseFloat(b),parseFloat(c))}};goog.style.getFontFamily=function(b){var c=goog.dom.getOwnerDocument(b),d="";if(c.createTextRange){d=c.body.createTextRange();d.moveToElementText(b);d=d.queryCommandValue("FontName")}if(!d){d=goog.style.getStyle_(b,"fontFamily");if(goog.userAgent.OPERA&&goog.userAgent.LINUX)d=d.replace(/ \[[^\]]*\]/,"")}b=d.split(",");if(b.length>1)d=b[0];return goog.string.stripQuotes(d,"\"'")};goog.style.lengthUnitRegex_=/[^\d]+$/;
goog.style.getLengthUnits=function(b){return(b=b.match(goog.style.lengthUnitRegex_))&&b[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(b){var c=goog.style.getStyle_(b,"fontSize"),d=goog.style.getLengthUnits(c);if(c&&"px"==d)return parseInt(c,10);if(goog.userAgent.IE)if(d in goog.style.ABSOLUTE_CSS_LENGTH_UNITS_)return goog.style.getIePixelValue_(b,c,"left","pixelLeft");else if(b.parentNode&&b.parentNode.nodeType==goog.dom.NodeType.ELEMENT&&d in goog.style.CONVERTIBLE_RELATIVE_CSS_UNITS_){b=b.parentNode;d=goog.style.getStyle_(b,"fontSize");return goog.style.getIePixelValue_(b,c==d?"1em":c,"left","pixelLeft")}d=
goog.dom.createDom("span",{style:"visibility:hidden;position:absolute;line-height:0;padding:0;margin:0;border:0;height:1em;"});goog.dom.appendChild(b,d);c=d.offsetHeight;goog.dom.removeNode(d);return c};goog.style.parseStyleAttribute=function(b){var c={};goog.array.forEach(b.split(/\s*;\s*/),function(d){d=d.split(/\s*:\s*/);if(d.length==2)c[goog.style.toCamelCase(d[0].toLowerCase())]=d[1]});return c};
goog.style.toStyleAttribute=function(b){var c=[];goog.object.forEach(b,function(d,e){c.push(goog.style.toSelectorCase(e),":",d,";")});return c.join("")};goog.style.setFloat=function(b,c){b.style[goog.userAgent.IE?"styleFloat":"cssFloat"]=c};goog.style.getFloat=function(b){return b.style[goog.userAgent.IE?"styleFloat":"cssFloat"]||""};goog.testing={};goog.testing.stacktrace={};goog.testing.stacktrace.Frame=function(b,c,d,e,f){this.context_=b;this.name_=c;this.alias_=d;this.args_=e;this.path_=f};goog.testing.stacktrace.Frame.prototype.getName=function(){return this.name_};goog.testing.stacktrace.Frame.prototype.isAnonymous=function(){return!this.name_||this.context_=="[object Object]"};
goog.testing.stacktrace.Frame.prototype.toCanonicalString=function(){var b=goog.testing.stacktrace.htmlEscape_,c=goog.testing.stacktrace.maybeDeobfuscateFunctionName_;c=[this.context_?b(this.context_)+".":"",this.name_?b(c(this.name_)):"anonymous",b(this.args_),this.alias_?" [as "+b(c(this.alias_))+"]":""];if(this.path_){c.push(" at ");if(goog.testing.stacktrace.isClosureInspectorActive_()){var d=this.path_.match(/\d+$/)[0];c.push('<a href="" onclick="CLOSURE_INSPECTOR___.showLine(\'',b(this.path_),
"', '",d,"'); return false\">",b(this.path_),"</a>")}else c.push(b(this.path_))}return c.join("")};goog.testing.stacktrace.MAX_DEPTH_=20;goog.testing.stacktrace.IDENTIFIER_PATTERN_="[a-zA-Z_$][\\w$]*";goog.testing.stacktrace.CHROME_ALIAS_PATTERN_="(?: \\[as ("+goog.testing.stacktrace.IDENTIFIER_PATTERN_+")\\])?";goog.testing.stacktrace.CHROME_FUNCTION_NAME_PATTERN_="(?:new )?(?:"+goog.testing.stacktrace.IDENTIFIER_PATTERN_+"|<anonymous>)";
goog.testing.stacktrace.CHROME_FUNCTION_CALL_PATTERN_=" (?:(.*?)\\.)?("+goog.testing.stacktrace.CHROME_FUNCTION_NAME_PATTERN_+")"+goog.testing.stacktrace.CHROME_ALIAS_PATTERN_;goog.testing.stacktrace.URL_PATTERN_="((?:http|https|file)://[^\\s)]+|javascript:.*)";goog.testing.stacktrace.CHROME_URL_PATTERN_=" (?:\\(unknown source\\)|\\(native\\)|\\((?:eval at )?"+goog.testing.stacktrace.URL_PATTERN_+"\\)|"+goog.testing.stacktrace.URL_PATTERN_+")";
goog.testing.stacktrace.CHROME_STACK_FRAME_REGEXP_=new RegExp("^    at(?:"+goog.testing.stacktrace.CHROME_FUNCTION_CALL_PATTERN_+")?"+goog.testing.stacktrace.CHROME_URL_PATTERN_+"$");goog.testing.stacktrace.FIREFOX_FUNCTION_CALL_PATTERN_="("+goog.testing.stacktrace.IDENTIFIER_PATTERN_+")?(\\(.*\\))?@";goog.testing.stacktrace.FIREFOX_STACK_FRAME_REGEXP_=new RegExp("^"+goog.testing.stacktrace.FIREFOX_FUNCTION_CALL_PATTERN_+"(?::0|"+goog.testing.stacktrace.URL_PATTERN_+")$");
goog.testing.stacktrace.FUNCTION_SOURCE_REGEXP_=new RegExp("^function ("+goog.testing.stacktrace.IDENTIFIER_PATTERN_+")");
goog.testing.stacktrace.followCallChain_=function(){for(var b=[],c=arguments.callee.caller,d=0;c&&d<goog.testing.stacktrace.MAX_DEPTH_;){var e=Function.prototype.toString.call(c).match(goog.testing.stacktrace.FUNCTION_SOURCE_REGEXP_);e=e?e[1]:"";var f=["("];if(c.arguments)for(var g=0;g<c.arguments.length;g++){var h=c.arguments[g];g>0&&f.push(", ");goog.isString(h)?f.push('"',h,'"'):f.push(String(h))}else f.push("unknown");f.push(")");f=f.join("");b.push(new goog.testing.stacktrace.Frame("",e,"",f,
""));try{c=c.caller}catch(i){break}d++}return b};goog.testing.stacktrace.parseStackFrame_=function(b){var c=b.match(goog.testing.stacktrace.CHROME_STACK_FRAME_REGEXP_);if(c)return new goog.testing.stacktrace.Frame(c[1]||"",c[2]||"",c[3]||"","",c[4]||c[5]||"");if(c=b.match(goog.testing.stacktrace.FIREFOX_STACK_FRAME_REGEXP_))return new goog.testing.stacktrace.Frame("",c[1]||"","",c[2]||"",c[3]||"");return null};
goog.testing.stacktrace.setDeobfuscateFunctionName=function(b){goog.testing.stacktrace.deobfuscateFunctionName_=b};goog.testing.stacktrace.maybeDeobfuscateFunctionName_=function(b){return goog.testing.stacktrace.deobfuscateFunctionName_?goog.testing.stacktrace.deobfuscateFunctionName_(b):b};goog.testing.stacktrace.isClosureInspectorActive_=function(){return Boolean(goog.global.CLOSURE_INSPECTOR___&&goog.global.CLOSURE_INSPECTOR___.supportsJSUnit)};
goog.testing.stacktrace.htmlEscape_=function(b){return b.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")};goog.testing.stacktrace.framesToString_=function(b){for(var c=b.length-1;b[c]&&b[c].isAnonymous();)c--;for(var d=-1,e=0;e<b.length;e++)if(b[e]&&b[e].getName()=="_assert"){d=e;break}var f=[];for(e=d+1;e<=c;e++){f.push("> ");b[e]?f.push(b[e].toCanonicalString()):f.push("(unknown)");f.push("\n")}return f.join("")};
goog.testing.stacktrace.parse_=function(b){b=b.replace(/\s*$/,"").split("\n");for(var c=[],d=0;d<b.length;d++)c.push(goog.testing.stacktrace.parseStackFrame_(b[d]));return c};goog.testing.stacktrace.canonicalize=function(b){b=goog.testing.stacktrace.parse_(b);return goog.testing.stacktrace.framesToString_(b)};goog.testing.stacktrace.get=function(){var b=(new Error).stack;b=b?goog.testing.stacktrace.parse_(b):goog.testing.stacktrace.followCallChain_();return goog.testing.stacktrace.framesToString_(b)};
goog.exportSymbol("setDeobfuscateFunctionName",goog.testing.stacktrace.setDeobfuscateFunctionName);goog.testing.asserts={};goog.testing.asserts.ArrayLike=goog.typedef;var DOUBLE_EQUALITY_PREDICATE=function(b,c){return b==c},JSUNIT_UNDEFINED_VALUE,TRIPLE_EQUALITY_PREDICATE=function(b,c){return b===c},TO_STRING_EQUALITY_PREDICATE=function(b,c){return b.toString()===c.toString()},PRIMITIVE_EQUALITY_PREDICATES={String:DOUBLE_EQUALITY_PREDICATE,Number:DOUBLE_EQUALITY_PREDICATE,Boolean:DOUBLE_EQUALITY_PREDICATE,Date:TRIPLE_EQUALITY_PREDICATE,RegExp:TO_STRING_EQUALITY_PREDICATE,Function:TO_STRING_EQUALITY_PREDICATE};
function _trueTypeOf(b){var c=typeof b;try{switch(c){case "string":break;case "boolean":break;case "number":break;case "object":case "function":switch(b.constructor){case (new String("")).constructor:c="String";break;case (new Boolean(true)).constructor:c="Boolean";break;case (new Number(0)).constructor:c="Number";break;case [].constructor:c="Array";break;case (new RegExp).constructor:c="RegExp";break;case (new Date).constructor:c="Date";break;case Function:c="Function";break;default:var d=b.constructor.toString().match(/function\s*([^( ]+)\(/);
if(d)c=d[1];else break}break}}finally{return c=c.substr(0,1).toUpperCase()+c.substr(1)}}function _displayStringForValue(b){var c="<"+b+">";b===null||b===JSUNIT_UNDEFINED_VALUE||(c+=" ("+_trueTypeOf(b)+")");return c}function fail(b){goog.testing.asserts.raiseException_("Call to fail()",b)}function argumentsIncludeComments(b,c){return c.length==b+1}function commentArg(b,c){if(argumentsIncludeComments(b,c))return c[0];return null}
function nonCommentArg(b,c,d){return argumentsIncludeComments(c,d)?d[b]:d[b-1]}function _validateArguments(b,c){b=c.length==b||c.length==b+1&&goog.isString(c[0]);_assert(null,b,"Incorrect arguments passed to assert function")}function _assert(b,c,d){c||goog.testing.asserts.raiseException_(b,d)}
function assert(){_validateArguments(1,arguments);var b=commentArg(1,arguments),c=nonCommentArg(1,1,arguments);_assert(b,goog.isBoolean(c),"Bad argument to assert(boolean)");_assert(b,c,"Call to assert(boolean) with false")}
function assertThrows(){_validateArguments(1,arguments);var b=nonCommentArg(1,1,arguments),c=commentArg(1,arguments);_assert(c,typeof b=="function","Argument passed to assertThrows is not a function");try{b()}catch(d){return d}goog.testing.asserts.raiseException_(c,"No exception thrown from function passed to assertThrows")}
function assertNotThrows(){_validateArguments(1,arguments);var b=nonCommentArg(1,1,arguments);_assert(commentArg(1,arguments),typeof b=="function","Argument passed to assertNotThrows is not a function");var c=true;try{b()}catch(d){c=false}_assert(commentArg(1,arguments),c,"A non expected exception was thrown from function passed to assertNotThrows")}
function assertTrue(){_validateArguments(1,arguments);var b=commentArg(1,arguments),c=nonCommentArg(1,1,arguments);_assert(b,goog.isBoolean(c),"Bad argument to assertTrue(boolean)");_assert(b,c,"Call to assertTrue(boolean) with false")}function assertFalse(){_validateArguments(1,arguments);var b=commentArg(1,arguments),c=nonCommentArg(1,1,arguments);_assert(b,goog.isBoolean(c),"Bad argument to assertFalse(boolean)");_assert(b,!c,"Call to assertFalse(boolean) with true")}
function assertEquals(){_validateArguments(2,arguments);var b=nonCommentArg(1,2,arguments),c=nonCommentArg(2,2,arguments);_assert(commentArg(2,arguments),b===c,"Expected "+_displayStringForValue(b)+" but was "+_displayStringForValue(c))}function assertNotEquals(){_validateArguments(2,arguments);var b=nonCommentArg(1,2,arguments),c=nonCommentArg(2,2,arguments);_assert(commentArg(2,arguments),b!==c,"Expected not to be "+_displayStringForValue(c))}
function assertNull(){_validateArguments(1,arguments);var b=nonCommentArg(1,1,arguments);_assert(commentArg(1,arguments),b===null,"Expected "+_displayStringForValue(null)+" but was "+_displayStringForValue(b))}function assertNotNull(){_validateArguments(1,arguments);var b=nonCommentArg(1,1,arguments);_assert(commentArg(1,arguments),b!==null,"Expected not to be "+_displayStringForValue(null))}
function assertUndefined(){_validateArguments(1,arguments);var b=nonCommentArg(1,1,arguments);_assert(commentArg(1,arguments),b===JSUNIT_UNDEFINED_VALUE,"Expected "+_displayStringForValue(JSUNIT_UNDEFINED_VALUE)+" but was "+_displayStringForValue(b))}function assertNotUndefined(){_validateArguments(1,arguments);var b=nonCommentArg(1,1,arguments);_assert(commentArg(1,arguments),b!==JSUNIT_UNDEFINED_VALUE,"Expected not to be "+_displayStringForValue(JSUNIT_UNDEFINED_VALUE))}
function assertNotNullNorUndefined(){_validateArguments(1,arguments);assertNotNull.apply(null,arguments);assertNotUndefined.apply(null,arguments)}function assertNonEmptyString(){_validateArguments(1,arguments);var b=nonCommentArg(1,1,arguments);_assert(commentArg(1,arguments),b!==JSUNIT_UNDEFINED_VALUE&&b!==null&&typeof b=="string"&&b!=="","Expected non-empty string but was "+_displayStringForValue(b))}
function assertNaN(){_validateArguments(1,arguments);var b=nonCommentArg(1,1,arguments);_assert(commentArg(1,arguments),isNaN(b),"Expected NaN")}function assertNotNaN(){_validateArguments(1,arguments);var b=nonCommentArg(1,1,arguments);_assert(commentArg(1,arguments),!isNaN(b),"Expected not NaN")}
function assertObjectEquals(){function b(g,h,i){if(g===h)return true;var j=_trueTypeOf(g),k=_trueTypeOf(h);if(j==k){var l=j=="Array",m=PRIMITIVE_EQUALITY_PREDICATES[j];if(m)m(g,h)||f.push(i+" expected "+_displayStringForValue(g)+" but was "+_displayStringForValue(h));else if(!l||g.length===h.length){m=i+(l?"[%s]":i?".%s":"%s");if(g.__iterator__)if(goog.isFunction(g.equals))g.equals(h)||f.push("equals() returned false for "+(i||j));else g.map_?b(g.map_,h.map_,m.replace("%s","map_")):f.push("unable to check "+
(i||j)+" for equality: it has an iterator we do not know how to handle. please add an equals method");else{for(var n in g)l||n in h?b(g[n],h[n],m.replace("%s",n)):f.push("property "+n+" not present in actual "+(i||k));if(!l)for(n in h)n in g||f.push("property "+n+" not present in expected "+(i||j))}}else f.push(i+" expected "+g.length+"-element array but got a "+h.length+"-element array")}else f.push(i+" expected "+_displayStringForValue(g)+" but was "+_displayStringForValue(h))}_validateArguments(2,
arguments);var c=nonCommentArg(1,2,arguments),d=nonCommentArg(2,2,arguments),e=commentArg(2,arguments)?commentArg(2,arguments):"",f=[""];b(c,d,"");_assert(e,f.length==1,"Expected "+_displayStringForValue(c)+" but was "+_displayStringForValue(d)+f.join("\n   "))}
function assertArrayEquals(){_validateArguments(2,arguments);var b=nonCommentArg(1,2,arguments),c=nonCommentArg(2,2,arguments),d=commentArg(2,arguments)?commentArg(2,arguments):"";b=_trueTypeOf(b);_assert(d,b=="Array","Expected an array for assertArrayEquals but found a "+b);c=_trueTypeOf(c);_assert(d,c=="Array","Expected an array for assertArrayEquals but found a "+c);assertObjectEquals.apply(null,arguments)}
function assertSameElements(){_validateArguments(2,arguments);var b=nonCommentArg(1,2,arguments),c=nonCommentArg(2,2,arguments),d=commentArg(2,arguments);assertTrue("Bad arguments to assertSameElements(opt_message, expected: ArrayLike, actual: ArrayLike)",goog.isArrayLike(b)&&goog.isArrayLike(c));b=goog.testing.asserts.toArray_(b);c=goog.testing.asserts.toArray_(c);_assert(d,b.length==c.length,"Expected "+b.length+" elements: ["+b+"], got "+c.length+" elements: ["+c+"]");for(var e=goog.testing.asserts.toArray_(b),
f=0;f<c.length;f++){var g=goog.testing.asserts.indexOf_(e,c[f]);_assert(d,g!=-1,"Expected ["+b+"], got ["+c+"]");e.splice(g,1)}}function assertEvaluatesToTrue(){_validateArguments(1,arguments);nonCommentArg(1,1,arguments)||_assert(commentArg(1,arguments),false,"Expected to evaluate to true")}function assertEvaluatesToFalse(){_validateArguments(1,arguments);nonCommentArg(1,1,arguments)&&_assert(commentArg(1,arguments),false,"Expected to evaluate to false")}
function assertHTMLEquals(){_validateArguments(2,arguments);var b=nonCommentArg(1,2,arguments),c=nonCommentArg(2,2,arguments);b=standardizeHTML(b);c=standardizeHTML(c);_assert(commentArg(2,arguments),b===c,"Expected "+_displayStringForValue(b)+" but was "+_displayStringForValue(c))}
function assertCSSValueEquals(b,c,d,e){_validateArguments(3,arguments);var f=nonCommentArg(1,3,arguments),g=nonCommentArg(2,3,arguments),h=nonCommentArg(3,3,arguments);g=standardizeCSSValue(f,g);f=standardizeCSSValue(f,h);_assert(commentArg(3,arguments),g==f,"Expected "+_displayStringForValue(g)+" but was "+_displayStringForValue(f))}
function assertHashEquals(){_validateArguments(2,arguments);var b=nonCommentArg(1,2,arguments),c=nonCommentArg(2,2,arguments),d=commentArg(2,arguments);for(var e in b){_assert(d,e in c,"Expected hash had key "+e+" that was not found");_assert(d,b[e]==c[e],"Value for key "+e+" mismatch - expected = "+b[e]+", actual = "+c[e])}for(e in c)_assert(d,e in b,"Actual hash had key "+e+" that was not expected")}
function assertRoughlyEquals(){_validateArguments(3,arguments);var b=nonCommentArg(1,3,arguments),c=nonCommentArg(2,3,arguments),d=nonCommentArg(3,3,arguments);_assert(commentArg(3,arguments),Math.abs(b-c)<=d,"Expected "+b+", but got "+c+" which was more than "+d+" away")}
function assertContains(){_validateArguments(2,arguments);var b=nonCommentArg(1,2,arguments),c=nonCommentArg(2,2,arguments);_assert(commentArg(2,arguments),goog.testing.asserts.contains_(c,b),"Expected '"+c+"' to contain '"+b+"'")}function assertNotContains(){_validateArguments(2,arguments);var b=nonCommentArg(1,2,arguments),c=nonCommentArg(2,2,arguments);_assert(commentArg(2,arguments),!goog.testing.asserts.contains_(c,b),"Expected '"+c+"' not to contain '"+b+"'")}
goog.testing.asserts.toArray_=function(b){for(var c=[],d=0;d<b.length;d++)c[d]=b[d];return c};goog.testing.asserts.indexOf_=function(b,c){if(b.indexOf)return b.indexOf(c);else{for(var d=0;d<b.length;d++)if(b[d]===c)return d;return-1}};goog.testing.asserts.contains_=function(b,c){return goog.testing.asserts.indexOf_(b,c)!=-1};function standardizeHTML(b){var c=document.createElement("DIV");c.innerHTML=b;return c.innerHTML.replace(/^\s+|\s+$/g,"")}
function standardizeCSSValue(b,c){var d=document.createElement("DIV").style;d[b]=c;return d[b]}goog.testing.asserts.raiseException_=function(b,c){goog.global.CLOSURE_INSPECTOR___&&goog.global.CLOSURE_INSPECTOR___.supportsJSUnit&&goog.global.CLOSURE_INSPECTOR___.jsUnitFailure(b,c);throw new goog.testing.JsUnitException(b,c);};goog.testing.JsUnitException=function(b,c){this.isJsUnitException=true;this.message=(b?b:"")+(b&&c?"\n":"")+(c?c:"");this.stackTrace=goog.testing.stacktrace.get()};
goog.testing.JsUnitException.prototype.toString=function(){return"[JsUnitException]"};goog.exportSymbol("fail",fail);goog.exportSymbol("assert",assert);goog.exportSymbol("assertThrows",assertThrows);goog.exportSymbol("assertNotThrows",assertNotThrows);goog.exportSymbol("assertTrue",assertTrue);goog.exportSymbol("assertFalse",assertFalse);goog.exportSymbol("assertEquals",assertEquals);goog.exportSymbol("assertNotEquals",assertNotEquals);goog.exportSymbol("assertNull",assertNull);
goog.exportSymbol("assertNotNull",assertNotNull);goog.exportSymbol("assertUndefined",assertUndefined);goog.exportSymbol("assertNotUndefined",assertNotUndefined);goog.exportSymbol("assertNotNullNorUndefined",assertNotNullNorUndefined);goog.exportSymbol("assertNonEmptyString",assertNonEmptyString);goog.exportSymbol("assertNaN",assertNaN);goog.exportSymbol("assertNotNaN",assertNotNaN);goog.exportSymbol("assertObjectEquals",assertObjectEquals);goog.exportSymbol("assertArrayEquals",assertArrayEquals);
goog.exportSymbol("assertSameElements",assertSameElements);goog.exportSymbol("assertEvaluatesToTrue",assertEvaluatesToTrue);goog.exportSymbol("assertEvaluatesToFalse",assertEvaluatesToFalse);goog.exportSymbol("assertHTMLEquals",assertHTMLEquals);goog.exportSymbol("assertHashEquals",assertHashEquals);goog.exportSymbol("assertRoughlyEquals",assertRoughlyEquals);goog.exportSymbol("assertContains",assertContains);goog.exportSymbol("assertNotContains",assertNotContains);goog.testing.TestCase=function(b){this.name_=b||"Untitled Test Case";this.tests_=[];this.testsToRun_=null;b=window.location.search;var c=b.match(/(?:\?|&)runTests=([^?&]+)/i);if(c){this.testsToRun_={};c=c[1].split(",");for(var d=0,e=c.length;d<e;d++)this.testsToRun_[c[d]]=1}if(b=b.match(/(?:\?|&)order=(natural|random|sorted)/i))this.order=b[1];this.result_=new goog.testing.TestCase.Result(this)};goog.testing.TestCase.Order={NATURAL:"natural",RANDOM:"random",SORTED:"sorted"};
goog.testing.TestCase.MAX_RUN_TIME=200;goog.testing.TestCase.prototype.order=goog.testing.TestCase.Order.SORTED;goog.testing.TestCase.protectedTimeout_=window.setTimeout;goog.testing.TestCase.setTimeoutAsString_=String(window.setTimeout);goog.testing.TestCase.currentTestName=null;goog.testing.TestCase.IS_IE=typeof opera=="undefined"&&!!navigator&&navigator.userAgent.indexOf("MSIE")!=-1;a=goog.testing.TestCase.prototype;a.started=false;a.running=false;a.startTime_=0;a.batchTime_=0;
a.currentTestPointer_=0;a.onCompleteCallback_=null;a.testRunner_=null;a.add=function(b){this.tests_.push(b)};a.getCount=function(){return this.tests_.length};a.next=function(){for(var b;b=this.tests_[this.currentTestPointer_++];)if(!this.testsToRun_||this.testsToRun_[b.name])return b;return null};a.reset=function(){this.currentTestPointer_=0;this.result_=new goog.testing.TestCase.Result(this)};a.setCompletedCallback=function(b){this.onCompleteCallback_=b};
a.setTestRunner=function(b){this.testRunner_=b};a.execute=function(){this.log("Starting tests: "+this.name_);this.started=true;this.reset();this.startTime_=this.now_();this.running=true;this.result_.totalCount=this.getCount();this.cycleTests()};
a.finalize=function(){this.saveMessage("Done");this.tearDownPage();var b=goog.testing.TestCase.protectedTimeout_==window.setTimeout;if(!b&&goog.testing.TestCase.IS_IE&&String(window.setTimeout)==goog.testing.TestCase.setTimeoutAsString_)b=true;if(!b){this.saveMessage("ERROR: Test did not restore setTimeout");this.result_.errors.push(new goog.testing.TestCase.Error(this.name_,"ERROR: Test did not restore setTimeout"))}window.setTimeout=goog.testing.TestCase.protectedTimeout_;this.endTime_=this.now_();
this.running=false;this.result_.runTime=this.endTime_-this.startTime_;this.result_.numFilesLoaded=this.countNumFilesLoaded_();this.log(this.result_.getSummary());this.result_.isSuccess()?this.log("Tests complete"):this.log("Tests Failed");if(this.onCompleteCallback_){b=this.onCompleteCallback_;b();this.onCompleteCallback_=null}};a.saveMessage=function(b){this.result_.messages.push(this.getTimeStamp_()+"  "+b)};
a.isInsideMultiTestRunner=function(){var b=goog.global.top;return b&&typeof b._allTests!="undefined"};a.log=function(b){if(!this.isInsideMultiTestRunner()&&window.console){if(typeof b=="string")b=this.getTimeStamp_()+" : "+b;window.console.log(b)}};a.isSuccess=function(){return!!this.result_&&this.result_.isSuccess()};
a.getReport=function(b){var c=[],d=this.result_.isSuccess();if(this.testRunner_)d=d&&!this.testRunner_.hasErrors();c.push(this.name_+" ["+(d?"PASSED":"FAILED")+"]");c.push(this.trimPath_(window.location.href));c.push(this.result_.getSummary());if(b)c.push(".",this.result_.messages.join("\n"));else this.result_.isSuccess()||c.push(this.result_.errors.join("\n"));c.push(" ");return c.join("\n")};a.getRunTime=function(){return this.result_.runTime};a.getNumFilesLoaded=function(){return this.result_.numFilesLoaded};
a.runTests=function(){this.setUpPage();this.execute()};a.orderTests_=function(b){switch(this.order){case goog.testing.TestCase.Order.RANDOM:for(var c=b.length;c>1;){var d=Math.floor(Math.random()*c);c--;var e=b[c];b[c]=b[d];b[d]=e}break;case goog.testing.TestCase.Order.SORTED:b.sort(function(f,g){if(f.name==g.name)return 0;return f.name<g.name?-1:1});break}};a.setUpPage=function(){};a.tearDownPage=function(){};a.setUp=function(){};a.tearDown=function(){};a.getAutoDiscoveryPrefix=function(){return"test"};
a.createTestFromAutoDiscoveredFunction=function(b,c){return new goog.testing.TestCase.Test(b,c,goog.global)};
a.autoDiscoverTests=function(){var b=this.getAutoDiscoveryPrefix(),c=typeof goog.global.RuntimeObject!="undefined"?goog.global.RuntimeObject(b+"*"):goog.global,d=[];for(var e in c){try{var f=c[e]}catch(g){}(new RegExp("^"+b)).test(e)&&goog.isFunction(f)&&d.push(this.createTestFromAutoDiscoveredFunction(e,f))}this.orderTests_(d);for(b=0;b<d.length;b++)this.add(d[b]);this.log(this.getCount()+" tests auto-discovered");if(goog.global.setUp)this.setUp=goog.global.setUp;if(goog.global.tearDown)this.tearDown=
goog.global.tearDown;if(goog.global.setUpPage)this.setUpPage=goog.global.setUpPage;if(goog.global.tearDownPage)this.tearDownPage=goog.global.tearDownPage;if(goog.global.runTests)this.runTests=goog.global.runTests};
a.cycleTests=function(){this.saveMessage("Start");this.batchTime_=this.now_();for(var b;(b=this.next())&&this.running;){this.result_.runCount++;var c=false;try{this.log("Running test: "+b.name);goog.testing.TestCase.currentTestName=b.name;this.setUp();b.execute();this.tearDown();goog.testing.TestCase.currentTestName=null;c=true;this.doSuccess(b)}catch(d){this.doError(b,d);if(!c)try{this.tearDown()}catch(e){}}if(this.currentTestPointer_<this.tests_.length&&this.now_()-this.batchTime_>goog.testing.TestCase.MAX_RUN_TIME){this.saveMessage("Breaking async");
this.timeout(goog.bind(this.cycleTests,this),100);return}}this.finalize()};a.countNumFilesLoaded_=function(){for(var b=document.getElementsByTagName("script"),c=0,d=0,e=b.length;d<e;d++)b[d].src&&c++;return c};a.timeout=function(b,c){var d=goog.testing.TestCase.protectedTimeout_;return d(b,c)};a.now_=function(){return(new Date).getTime()};
a.getTimeStamp_=function(){var b=new Date,c="00"+b.getMilliseconds();c=c.substr(c.length-3);return this.pad_(b.getHours())+":"+this.pad_(b.getMinutes())+":"+this.pad_(b.getSeconds())+"."+c};a.pad_=function(b){return b<10?"0"+b:String(b)};a.trimPath_=function(b){return b.substring(b.indexOf("google3")+8)};a.doSuccess=function(b){this.result_.successCount++;b=b.name+" : PASSED";this.saveMessage(b);this.log(b)};
a.doError=function(b,c){var d=b.name+" : FAILED";this.log(d);this.saveMessage(d);this.result_.errors.push(this.logError(b.name,c))};
a.logError=function(b,c){var d=null,e=null;if(c){this.log(c);if(goog.isString(c))d=c;else{d=c.message||c.description||c.toString();e=c.stack?goog.testing.stacktrace.canonicalize(c.stack):c.stackTrace}}else d="An unknown error occurred";b=new goog.testing.TestCase.Error(b,d,e);if(!c||!c.isJsUnitException||!c.loggedJsUnitException)this.saveMessage(b.toString());if(c&&c.isJsUnitException)c.loggedJsUnitException=true;return b};
goog.testing.TestCase.Test=function(b,c,d){this.name=b;this.ref=c;this.scope=d||null};goog.testing.TestCase.Test.prototype.execute=function(){this.ref.call(this.scope)};goog.testing.TestCase.Result=function(b){this.testCase_=b;this.numFilesLoaded=this.runTime=this.successCount=this.runCount=this.totalCount=0;this.errors=[];this.messages=[]};
goog.testing.TestCase.Result.prototype.isSuccess=function(){var b=this.runCount==this.successCount&&this.errors.length==0;if(b&&this.isStrict())return this.runCount>0;return b};
goog.testing.TestCase.Result.prototype.getSummary=function(){var b=this.runCount+" of "+this.totalCount+" tests run in "+this.runTime+"ms.\n";if(this.runCount==0){b+="No tests found.  ";if(this.isStrict())b+="Call G_testRunner.setStrict(false) if this is expected behavior.  "}else b+=this.successCount+" passed, "+(this.totalCount-this.successCount)+" failed.\n"+Math.round(this.runTime/this.runCount)+" ms/test. "+this.numFilesLoaded+" files loaded.";return b};
goog.testing.TestCase.Result.prototype.isStrict=function(){return this.testCase_.testRunner_.isStrict()};goog.testing.TestCase.Error=function(b,c,d){this.source=b;this.message=c;this.stack=d||null};goog.testing.TestCase.Error.prototype.toString=function(){return"ERROR in "+this.source+"\n"+this.message+(this.stack?"\n"+this.stack:"")};goog.testing.TestRunner=function(){this.errors=[]};a=goog.testing.TestRunner.prototype;a.testCase=null;a.initialized=false;a.logEl_=null;a.errorFilter_=null;a.strict_=true;
a.initialize=function(b){if(!this.logEl_){var c=document.getElementById("closureTestRunnerLog");if(c==null){c=document.createElement("div");document.body.appendChild(c)}this.logEl_=c}if(this.testCase&&this.testCase.running)throw Error("The test runner is already waiting for a test to complete");this.testCase=b;b.setTestRunner(this);this.initialized=true};a.setStrict=function(b){this.strict_=b};a.isStrict=function(){return this.strict_};a.isInitialized=function(){return this.initialized};
a.isFinished=function(){return this.errors.length>0||this.initialized&&!!this.testCase&&this.testCase.started&&!this.testCase.running};a.isSuccess=function(){return!this.hasErrors()&&!!this.testCase&&this.testCase.isSuccess()};a.hasErrors=function(){return this.errors.length>0};a.logError=function(b){if(!this.errorFilter_||this.errorFilter_.call(null,b))this.errors.push(b)};
a.logTestFailure=function(b){var c=goog.testing.TestCase.currentTestName;if(this.testCase)this.testCase.logError(c,b);else throw new Error("Test runner not initialized with a test case. Original exception: "+b.message);};a.setErrorFilter=function(b){this.errorFilter_=b};a.getReport=function(b){var c=[];this.testCase&&c.push(this.testCase.getReport(b));if(this.errors.length>0){c.push("JavaScript errors detected by test runner:");c.push.apply(c,this.errors);c.push("\n")}return c.join("\n")};
a.getRunTime=function(){return this.testCase?this.testCase.getRunTime():0};a.getNumFilesLoaded=function(){return this.testCase?this.testCase.getNumFilesLoaded():0};a.execute=function(){if(!this.testCase)throw Error("The test runner must be initialized with a test case before execute can be called.");this.testCase.setCompletedCallback(goog.bind(this.onComplete_,this));this.testCase.runTests()};
a.onComplete_=function(){var b=this.testCase.getReport(true);if(this.errors.length>0)b+="\n"+this.errors.join("\n");for(var c=this.logEl_;c.firstChild;)c.removeChild(c.firstChild);this.writeLog(b);b=document.createElement("a");b.style.display="block";b.style.fontSize="small";b.href="";b.onclick=goog.bind(function(){this.execute();return false},this);b.innerHTML="Run again without reloading";c.appendChild(b)};
a.writeLog=function(b){b=b.split("\n");for(var c=0;c<b.length;c++){var d=b[c],e,f=/FAILED/.test(d)||/ERROR/.test(d);e=/PASSED/.test(d)?"darkgreen":f?"darkred":"#333";var g=document.createElement("div");if(d.substr(0,2)=="> ")g.innerHTML=d;else g.appendChild(document.createTextNode(d));if(f)if(d=/(\S+) (\[[^\]]*] )?: (FAILED|ERROR)/.exec(d)){d="runTests="+d[1];if(f=window.location.search){var h=/runTests=([^&]*)/.exec(f);d=h?f.substr(0,h.index)+d+f.substr(h.index+h[0].length):f+"&"+d}else d="?"+d;
f=window.location.href;if((h=window.location.hash)&&h.charAt(0)!="#")h="#"+h;f=f.split("#")[0].split("?")[0]+d+h;d=document.createElement("A");d.innerHTML="(run individually)";d.style.fontSize="0.8em";d.href=f;g.appendChild(document.createTextNode(" "));g.appendChild(d)}g.style.color=e;g.style.font="normal 100% monospace";try{g.style.whiteSpace="pre-wrap"}catch(i){}if(c<2)g.style.fontWeight="bold";this.logEl_.appendChild(g)}};a.log=function(b){this.testCase&&this.testCase.log(b)};goog.testing.jsunit={};goog.testing.jsunit.BASE_PATH="../../third_party/java/jsunit/core/app/";goog.testing.jsunit.CORE_SCRIPT=goog.testing.jsunit.BASE_PATH+"jsUnitCore.js";goog.testing.jsunit.AUTO_RUN_ONLOAD=true;
(function(){var b=window.setTimeout;if(top.JsUnitTestManager||top.jsUnitTestManager)document.write('<script type="text/javascript" src="'+(goog.basePath+goog.testing.jsunit.CORE_SCRIPT)+'"><\/script>');else{var c=new goog.testing.TestRunner;goog.exportSymbol("G_testRunner",c);goog.exportSymbol("G_testRunner.initialize",c.initialize);goog.exportSymbol("G_testRunner.isInitialized",c.isInitialized);goog.exportSymbol("G_testRunner.isFinished",c.isFinished);goog.exportSymbol("G_testRunner.isSuccess",c.isSuccess);
goog.exportSymbol("G_testRunner.getReport",c.getReport);goog.exportSymbol("G_testRunner.getRunTime",c.getRunTime);goog.exportSymbol("G_testRunner.getNumFilesLoaded",c.getNumFilesLoaded);goog.exportSymbol("G_testRunner.setStrict",c.setStrict);goog.exportSymbol("G_testRunner.logTestFailure",c.logTestFailure);goog.global.debug||goog.exportSymbol("debug",goog.bind(c.log,c));goog.global.G_errorFilter&&c.setErrorFilter(goog.global.G_errorFilter);window.onerror=function(d,e,f){if(typeof d=="object")d.target&&
d.target.tagName=="SCRIPT"?c.logError("UNKNOWN ERROR: Script "+d.target.src):c.logError("UNKNOWN ERROR: No error information available.");else c.logError("JS ERROR: "+d+"\nURL: "+e+"\nLine: "+f)};if(goog.testing.jsunit.AUTO_RUN_ONLOAD)window.onload=function(){b(function(){if(!c.initialized){var d=new goog.testing.TestCase(document.title);d.autoDiscoverTests();c.initialize(d)}c.execute()},500);window.onload=null}}})();goog.userAgent.product={};goog.userAgent.product.ASSUME_FIREFOX=false;goog.userAgent.product.ASSUME_CAMINO=false;goog.userAgent.product.ASSUME_IPHONE=false;goog.userAgent.product.ASSUME_ANDROID=false;goog.userAgent.product.ASSUME_CHROME=false;goog.userAgent.product.ASSUME_SAFARI=false;
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_ANDROID||goog.userAgent.product.ASSUME_CHROME||goog.userAgent.product.ASSUME_SAFARI;
goog.userAgent.product.init_=function(){goog.userAgent.product.detectedFirefox_=false;goog.userAgent.product.detectedCamino_=false;goog.userAgent.product.detectedIphone_=false;goog.userAgent.product.detectedAndroid_=false;goog.userAgent.product.detectedChrome_=false;goog.userAgent.product.detectedSafari_=false;var b=goog.userAgent.getUserAgentString();if(b)if(b.indexOf("Firefox")!=-1)goog.userAgent.product.detectedFirefox_=true;else if(b.indexOf("Camino")!=-1)goog.userAgent.product.detectedCamino_=
true;else if(b.indexOf("iPhone")!=-1||b.indexOf("iPod")!=-1)goog.userAgent.product.detectedIphone_=true;else if(b.indexOf("Android")!=-1)goog.userAgent.product.detectedAndroid_=true;else if(b.indexOf("Chrome")!=-1)goog.userAgent.product.detectedChrome_=true;else if(b.indexOf("Safari")!=-1)goog.userAgent.product.detectedSafari_=true};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.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.debug={};goog.debug.RelativeTimeProvider=function(){this.relativeTimeStart_=goog.now()};goog.debug.RelativeTimeProvider.defaultInstance_=new goog.debug.RelativeTimeProvider;goog.debug.RelativeTimeProvider.prototype.set=function(b){this.relativeTimeStart_=b};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(b){this.prefix_=b||"";this.startTimeProvider_=goog.debug.RelativeTimeProvider.getDefaultInstance()};a=goog.debug.Formatter.prototype;a.showAbsoluteTime=true;a.showRelativeTime=true;a.showLoggerName=true;a.showExceptionText=false;a.setStartTimeProvider=function(b){this.startTimeProvider_=b};a.getStartTimeProvider=function(){return this.startTimeProvider_};a.resetRelativeTimeStart=function(){this.startTimeProvider_.reset()};
goog.debug.Formatter.getDateTimeStamp_=function(b){b=new Date(b.getMillis());return goog.debug.Formatter.getTwoDigitString_(b.getFullYear()-2E3)+goog.debug.Formatter.getTwoDigitString_(b.getMonth()+1)+goog.debug.Formatter.getTwoDigitString_(b.getDate())+" "+goog.debug.Formatter.getTwoDigitString_(b.getHours())+":"+goog.debug.Formatter.getTwoDigitString_(b.getMinutes())+":"+goog.debug.Formatter.getTwoDigitString_(b.getSeconds())+"."+goog.debug.Formatter.getTwoDigitString_(Math.floor(b.getMilliseconds()/
10))};goog.debug.Formatter.getTwoDigitString_=function(b){if(b<10)return"0"+b;return String(b)};goog.debug.Formatter.getRelativeTime_=function(b,c){b=(b.getMillis()-c)/1E3;c=b.toFixed(3);var d=0;if(b<1)d=2;else for(;b<100;){d++;b*=10}for(;d-- >0;)c=" "+c;return c};goog.debug.HtmlFormatter=function(b){goog.debug.Formatter.call(this,b)};goog.inherits(goog.debug.HtmlFormatter,goog.debug.Formatter);goog.debug.HtmlFormatter.prototype.showExceptionText=true;
goog.debug.HtmlFormatter.prototype.formatRecord=function(b){var c;switch(b.getLevel().value){case goog.debug.Logger.Level.SHOUT.value:c="dbg-sh";break;case goog.debug.Logger.Level.SEVERE.value:c="dbg-sev";break;case goog.debug.Logger.Level.WARNING.value:c="dbg-w";break;case goog.debug.Logger.Level.INFO.value:c="dbg-i";break;case goog.debug.Logger.Level.FINE.value:default:c="dbg-f";break}var d=[];d.push(this.prefix_," ");this.showAbsoluteTime&&d.push("[",goog.debug.Formatter.getDateTimeStamp_(b),"] ");
this.showRelativeTime&&d.push("[",goog.string.whitespaceEscape(goog.debug.Formatter.getRelativeTime_(b,this.startTimeProvider_.get())),"s] ");this.showLoggerName&&d.push("[",goog.string.htmlEscape(b.getLoggerName()),"] ");d.push('<span class="',c,'">',goog.string.newLineToBr(goog.string.whitespaceEscape(goog.string.htmlEscape(b.getMessage()))));if(this.showExceptionText&&b.getException())d.push("<br>",goog.string.newLineToBr(goog.string.whitespaceEscape(b.getExceptionText()||"")));d.push("</span><br>");
return d.join("")};goog.debug.TextFormatter=function(b){goog.debug.Formatter.call(this,b)};goog.inherits(goog.debug.TextFormatter,goog.debug.Formatter);
goog.debug.TextFormatter.prototype.formatRecord=function(b){var c=[];c.push(this.prefix_," ");this.showAbsoluteTime&&c.push("[",goog.debug.Formatter.getDateTimeStamp_(b),"] ");this.showRelativeTime&&c.push("[",goog.debug.Formatter.getRelativeTime_(b,this.startTimeProvider_.get()),"s] ");this.showLoggerName&&c.push("[",b.getLoggerName(),"] ");c.push(b.getMessage(),"\n");this.showExceptionText&&b.getException()&&c.push(b.getExceptionText(),"\n");return c.join("")};goog.structs={};goog.structs.getCount=function(b){if(typeof b.getCount=="function")return b.getCount();if(goog.isArrayLike(b)||goog.isString(b))return b.length;return goog.object.getCount(b)};goog.structs.getValues=function(b){if(typeof b.getValues=="function")return b.getValues();if(goog.isString(b))return b.split("");if(goog.isArrayLike(b)){for(var c=[],d=b.length,e=0;e<d;e++)c.push(b[e]);return c}return goog.object.getValues(b)};
goog.structs.getKeys=function(b){if(typeof b.getKeys=="function")return b.getKeys();if(typeof b.getValues!="function"){if(goog.isArrayLike(b)||goog.isString(b)){var c=[];b=b.length;for(var d=0;d<b;d++)c.push(d);return c}return goog.object.getKeys(b)}};
goog.structs.contains=function(b,c){if(typeof b.contains=="function")return b.contains(c);if(typeof b.containsValue=="function")return b.containsValue(c);if(goog.isArrayLike(b)||goog.isString(b))return goog.array.contains(b,c);return goog.object.containsValue(b,c)};goog.structs.isEmpty=function(b){if(typeof b.isEmpty=="function")return b.isEmpty();if(goog.isArrayLike(b)||goog.isString(b))return goog.array.isEmpty(b);return goog.object.isEmpty(b)};
goog.structs.clear=function(b){if(typeof b.clear=="function")b.clear();else goog.isArrayLike(b)?goog.array.clear(b):goog.object.clear(b)};goog.structs.forEach=function(b,c,d){if(typeof b.forEach=="function")b.forEach(c,d);else if(goog.isArrayLike(b)||goog.isString(b))goog.array.forEach(b,c,d);else for(var e=goog.structs.getKeys(b),f=goog.structs.getValues(b),g=f.length,h=0;h<g;h++)c.call(d,f[h],e&&e[h],b)};
goog.structs.filter=function(b,c,d){if(typeof b.filter=="function")return b.filter(c,d);if(goog.isArrayLike(b)||goog.isString(b))return goog.array.filter(b,c,d);var e,f=goog.structs.getKeys(b),g=goog.structs.getValues(b),h=g.length;if(f){e={};for(var i=0;i<h;i++)if(c.call(d,g[i],f[i],b))e[f[i]]=g[i]}else{e=[];for(i=0;i<h;i++)c.call(d,g[i],undefined,b)&&e.push(g[i])}return e};
goog.structs.map=function(b,c,d){if(typeof b.map=="function")return b.map(c,d);if(goog.isArrayLike(b)||goog.isString(b))return goog.array.map(b,c,d);var e,f=goog.structs.getKeys(b),g=goog.structs.getValues(b),h=g.length;if(f){e={};for(var i=0;i<h;i++)e[f[i]]=c.call(d,g[i],f[i],b)}else{e=[];for(i=0;i<h;i++)e[i]=c.call(d,g[i],undefined,b)}return e};
goog.structs.some=function(b,c,d){if(typeof b.some=="function")return b.some(c,d);if(goog.isArrayLike(b)||goog.isString(b))return goog.array.some(b,c,d);for(var e=goog.structs.getKeys(b),f=goog.structs.getValues(b),g=f.length,h=0;h<g;h++)if(c.call(d,f[h],e&&e[h],b))return true;return false};
goog.structs.every=function(b,c,d){if(typeof b.every=="function")return b.every(c,d);if(goog.isArrayLike(b)||goog.isString(b))return goog.array.every(b,c,d);for(var e=goog.structs.getKeys(b),f=goog.structs.getValues(b),g=f.length,h=0;h<g;h++)if(!c.call(d,f[h],e&&e[h],b))return false;return true};goog.iter={};goog.iter.Iterable=goog.typedef;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(){return this};
goog.iter.toIterator=function(b){if(b instanceof goog.iter.Iterator)return b;if(typeof b.__iterator__=="function")return b.__iterator__(false);if(goog.isArrayLike(b)){var c=0,d=new goog.iter.Iterator;d.next=function(){for(;;){if(c>=b.length)throw goog.iter.StopIteration;if(c in b)return b[c++];else c++}};return d}throw Error("Not implemented");};
goog.iter.forEach=function(b,c,d){if(goog.isArrayLike(b))try{goog.array.forEach(b,c,d)}catch(e){if(e!==goog.iter.StopIteration)throw e;}else{b=goog.iter.toIterator(b);try{for(;;)c.call(d,b.next(),undefined,b)}catch(f){if(f!==goog.iter.StopIteration)throw f;}}};goog.iter.filter=function(b,c,d){b=goog.iter.toIterator(b);var e=new goog.iter.Iterator;e.next=function(){for(;;){var f=b.next();if(c.call(d,f,undefined,b))return f}};return e};
goog.iter.range=function(b,c,d){var e=0,f=b,g=d||1;if(arguments.length>1){e=b;f=c}if(g==0)throw Error("Range step argument must not be zero");var h=new goog.iter.Iterator;h.next=function(){if(g>0&&e>=f||g<0&&e<=f)throw goog.iter.StopIteration;var i=e;e+=g;return i};return h};goog.iter.join=function(b,c){return goog.iter.toArray(b).join(c)};
goog.iter.map=function(b,c,d){b=goog.iter.toIterator(b);var e=new goog.iter.Iterator;e.next=function(){for(;;){var f=b.next();return c.call(d,f,undefined,b)}};return e};goog.iter.reduce=function(b,c,d,e){var f=d;goog.iter.forEach(b,function(g){f=c.call(e,f,g)});return f};goog.iter.some=function(b,c,d){b=goog.iter.toIterator(b);try{for(;;)if(c.call(d,b.next(),undefined,b))return true}catch(e){if(e!==goog.iter.StopIteration)throw e;}return false};
goog.iter.every=function(b,c,d){b=goog.iter.toIterator(b);try{for(;;)if(!c.call(d,b.next(),undefined,b))return false}catch(e){if(e!==goog.iter.StopIteration)throw e;}return true};goog.iter.chain=function(){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(f){if(f!==goog.iter.StopIteration||d>=c)throw f;else{d++;return this.next()}}};return e};
goog.iter.dropWhile=function(b,c,d){b=goog.iter.toIterator(b);var e=new goog.iter.Iterator,f=true;e.next=function(){for(;;){var g=b.next();if(!(f&&c.call(d,g,undefined,b))){f=false;return g}}};return e};goog.iter.takeWhile=function(b,c,d){b=goog.iter.toIterator(b);var e=new goog.iter.Iterator,f=true;e.next=function(){for(;;)if(f){var g=b.next();if(c.call(d,g,undefined,b))return g;else f=false}else throw goog.iter.StopIteration;};return e};
goog.iter.toArray=function(b){if(goog.isArrayLike(b))return goog.array.toArray(b);b=goog.iter.toIterator(b);var c=[];goog.iter.forEach(b,function(d){c.push(d)});return c};
goog.iter.equals=function(b,c){b=goog.iter.toIterator(b);c=goog.iter.toIterator(c);var d,e;try{for(;;){d=e=false;var f=b.next();d=true;var g=c.next();e=true;if(f!=g)return false}}catch(h){if(h!==goog.iter.StopIteration)throw h;else{if(d&&!e)return false;if(!e)try{c.next();return false}catch(i){if(i!==goog.iter.StopIteration)throw i;return true}}}return false};goog.iter.nextOrValue=function(b,c){try{return goog.iter.toIterator(b).next()}catch(d){if(d!=goog.iter.StopIteration)throw d;return c}};goog.structs.Map=function(b){this.map_={};this.keys_=[];var c=arguments.length;if(c>1){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 b&&this.addAll(b)};a=goog.structs.Map.prototype;a.count_=0;a.version_=0;a.getCount=function(){return this.count_};a.getValues=function(){this.cleanupKeysArray_();for(var b=[],c=0;c<this.keys_.length;c++)b.push(this.map_[this.keys_[c]]);return b};a.getKeys=function(){this.cleanupKeysArray_();return this.keys_.concat()};
a.containsKey=function(b){return goog.structs.Map.hasKey_(this.map_,b)};a.containsValue=function(b){for(var c=0;c<this.keys_.length;c++){var d=this.keys_[c];if(goog.structs.Map.hasKey_(this.map_,d)&&this.map_[d]==b)return true}return false};a.equals=function(b,c){if(this===b)return true;if(this.count_!=b.getCount())return false;c=c||goog.structs.Map.defaultEquals;this.cleanupKeysArray_();for(var d,e=0;d=this.keys_[e];e++)if(!c(this.get(d),b.get(d)))return false;return true};
goog.structs.Map.defaultEquals=function(b,c){return b===c};a=goog.structs.Map.prototype;a.isEmpty=function(){return this.count_==0};a.clear=function(){this.map_={};this.version_=this.count_=this.keys_.length=0};a.remove=function(b){if(goog.structs.Map.hasKey_(this.map_,b)){delete this.map_[b];this.count_--;this.version_++;this.keys_.length>2*this.count_&&this.cleanupKeysArray_();return true}return false};
a.cleanupKeysArray_=function(){if(this.count_!=this.keys_.length){for(var b=0,c=0;b<this.keys_.length;){var d=this.keys_[b];if(goog.structs.Map.hasKey_(this.map_,d))this.keys_[c++]=d;b++}this.keys_.length=c}if(this.count_!=this.keys_.length){var e={};for(c=b=0;b<this.keys_.length;){d=this.keys_[b];if(!goog.structs.Map.hasKey_(e,d)){this.keys_[c++]=d;e[d]=1}b++}this.keys_.length=c}};a.get=function(b,c){if(goog.structs.Map.hasKey_(this.map_,b))return this.map_[b];return c};
a.set=function(b,c){if(!goog.structs.Map.hasKey_(this.map_,b)){this.count_++;this.keys_.push(b);this.version_++}this.map_[b]=c};a.addAll=function(b){var c;if(b instanceof goog.structs.Map){c=b.getKeys();b=b.getValues()}else{c=goog.object.getKeys(b);b=goog.object.getValues(b)}for(var d=0;d<c.length;d++)this.set(c[d],b[d])};a.clone=function(){return new goog.structs.Map(this)};a.transpose=function(){for(var b=new goog.structs.Map,c=0;c<this.keys_.length;c++){var d=this.keys_[c];b.set(this.map_[d],d)}return b};
a.getKeyIterator=function(){return this.__iterator__(true)};a.getValueIterator=function(){return this.__iterator__(false)};a.__iterator__=function(b){this.cleanupKeysArray_();var c=0,d=this.keys_,e=this.map_,f=this.version_,g=this,h=new goog.iter.Iterator;h.next=function(){for(;;){if(f!=g.version_)throw Error("The map has changed since the iterator was created");if(c>=d.length)throw goog.iter.StopIteration;var i=d[c++];return b?i:e[i]}};return h};
goog.structs.Map.hasKey_=function(b,c){return Object.prototype.hasOwnProperty.call(b,c)};goog.structs.Set=function(b){this.map_=new goog.structs.Map;b&&this.addAll(b)};goog.structs.Set.getKey_=function(b){var c=typeof b;return c=="object"&&b||c=="function"?"o"+goog.getHashCode(b):c.substr(0,1)+b};a=goog.structs.Set.prototype;a.getCount=function(){return this.map_.getCount()};a.add=function(b){this.map_.set(goog.structs.Set.getKey_(b),b)};a.addAll=function(b){b=goog.structs.getValues(b);for(var c=b.length,d=0;d<c;d++)this.add(b[d])};
a.removeAll=function(b){b=goog.structs.getValues(b);for(var c=b.length,d=0;d<c;d++)this.remove(b[d])};a.remove=function(b){return this.map_.remove(goog.structs.Set.getKey_(b))};a.clear=function(){this.map_.clear()};a.isEmpty=function(){return this.map_.isEmpty()};a.contains=function(b){return this.map_.containsKey(goog.structs.Set.getKey_(b))};a.containsAll=function(b){return goog.structs.every(b,this.contains,this)};
a.intersection=function(b){var c=new goog.structs.Set;b=goog.structs.getValues(b);for(var d=0;d<b.length;d++){var e=b[d];this.contains(e)&&c.add(e)}return c};a.getValues=function(){return this.map_.getValues()};a.clone=function(){return new goog.structs.Set(this)};a.equals=function(b){return this.getCount()==goog.structs.getCount(b)&&this.isSubsetOf(b)};
a.isSubsetOf=function(b){var c=goog.structs.getCount(b);if(this.getCount()>c)return false;if(!(b instanceof goog.structs.Set)&&c>5)b=new goog.structs.Set(b);return goog.structs.every(this,function(d){return goog.structs.contains(b,d)})};a.__iterator__=function(){return this.map_.__iterator__(false)};goog.debug.catchErrors=function(b,c,d){d=d||goog.global;var e=d.onerror;d.onerror=function(f,g,h){e&&e(f,g,h);g=String(g).split(/[\/\\]/).pop();b({message:f,fileName:g,line:h});return Boolean(c)}};goog.debug.expose=function(b,c){if(typeof b=="undefined")return"undefined";if(b==null)return"NULL";var d=[];for(var e in b)if(!(!c&&goog.isFunction(b[e]))){var f=e+" = ";try{f+=b[e]}catch(g){f+="*** "+g+" ***"}d.push(f)}return d.join("\n")};
goog.debug.deepExpose=function(b,c){var d=new goog.structs.Set,e=[],f=function(g,h){var i=h+"  ",j=function(m){return m.replace(/\n/g,"\n"+h)};try{if(goog.isDef(g))if(goog.isNull(g))e.push("NULL");else if(goog.isString(g))e.push('"'+j(g)+'"');else if(goog.isFunction(g))e.push(j(String(g)));else if(goog.isObject(g))if(d.contains(g))e.push("*** reference loop detected ***");else{d.add(g);e.push("{");for(var k in g)if(!(!c&&goog.isFunction(g[k]))){e.push("\n");e.push(i);e.push(k+" = ");f(g[k],i)}e.push("\n"+
h+"}")}else e.push(g);else e.push("undefined")}catch(l){e.push("*** "+l+" ***")}};f(b,"");return e.join("")};goog.debug.exposeArray=function(b){for(var c=[],d=0;d<b.length;d++)goog.isArray(b[d])?c.push(goog.debug.exposeArray(b[d])):c.push(b[d]);return"[ "+c.join(", ")+" ]"};
goog.debug.exposeException=function(b,c){try{var d=goog.debug.normalizeErrorObject(b);return"Message: "+goog.string.htmlEscape(d.message)+'\nUrl: <a href="view-source:'+d.fileName+'" target="_new">'+d.fileName+"</a>\nLine: "+d.lineNumber+"\n\nBrowser stack:\n"+goog.string.htmlEscape(d.stack+"-> ")+"[end]\n\nJS stack traversal:\n"+goog.string.htmlEscape(goog.debug.getStacktrace(c)+"-> ")}catch(e){return"Exception trying to expose exception! You win, we lose. "+e}};
goog.debug.normalizeErrorObject=function(b){var c=goog.getObjectByName("window.location.href");return typeof b=="string"?{message:b,name:"Unknown error",lineNumber:"Not available",fileName:c,stack:"Not available"}:!b.lineNumber||!b.fileName||!b.stack?{message:b.message,name:b.name,lineNumber:b.lineNumber||b.line||"Not available",fileName:b.fileName||b.filename||b.sourceURL||c,stack:b.stack||"Not available"}:b};
goog.debug.enhanceError=function(b,c){var d=typeof b=="string"?Error(b):b;if(!d.stack)d.stack=goog.debug.getStacktrace(arguments.callee.caller);if(c){for(var e=0;d["message"+e];)++e;d["message"+e]=String(c)}return d};
goog.debug.getStacktraceSimple=function(b){for(var c=[],d=arguments.callee.caller,e=0;d&&(!b||e<b);){c.push(goog.debug.getFunctionName(d));c.push("()\n");try{d=d.caller}catch(f){c.push("[exception trying to get caller]\n");break}e++;if(e>=goog.debug.MAX_STACK_DEPTH){c.push("[...long stack...]");break}}b&&e>=b?c.push("[...reached max depth limit...]"):c.push("[end]");return c.join("")};goog.debug.MAX_STACK_DEPTH=50;
goog.debug.getStacktrace=function(b){return goog.debug.getStacktraceHelper_(b||arguments.callee.caller,[])};
goog.debug.getStacktraceHelper_=function(b,c){var d=[];if(goog.array.contains(c,b))d.push("[...circular reference...]");else if(b&&c.length<goog.debug.MAX_STACK_DEPTH){d.push(goog.debug.getFunctionName(b)+"(");for(var e=b.arguments,f=0;f<e.length;f++){f>0&&d.push(", ");var g;g=e[f];switch(typeof g){case "object":g=g?"object":"null";break;case "string":g=g;break;case "number":g=String(g);break;case "boolean":g=g?"true":"false";break;case "function":g=(g=goog.debug.getFunctionName(g))?g:"[fn]";break;
case "undefined":default:g=typeof g;break}if(g.length>40)g=g.substr(0,40)+"...";d.push(g)}c.push(b);d.push(")\n");try{d.push(goog.debug.getStacktraceHelper_(b.caller,c))}catch(h){d.push("[exception trying to get caller]\n")}}else b?d.push("[...long stack...]"):d.push("[end]");return d.join("")};goog.debug.getFunctionName=function(b){b=String(b);if(!goog.debug.fnNameCache_[b]){var c=/function ([^\(]+)/.exec(b);goog.debug.fnNameCache_[b]=c?c[1]:"[Anonymous]"}return goog.debug.fnNameCache_[b]};
goog.debug.makeWhitespaceVisible=function(b){return b.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(b,c,d,e,f){this.sequenceNumber_=typeof f=="number"?f:goog.debug.LogRecord.nextSequenceNumber_++;this.time_=e||goog.now();this.level_=b;this.msg_=c;this.loggerName_=d};goog.debug.LogRecord.prototype.exception_=null;goog.debug.LogRecord.prototype.exceptionText_=null;goog.debug.LogRecord.nextSequenceNumber_=0;a=goog.debug.LogRecord.prototype;a.getLoggerName=function(){return this.loggerName_};a.getException=function(){return this.exception_};
a.setException=function(b){this.exception_=b};a.getExceptionText=function(){return this.exceptionText_};a.setExceptionText=function(b){this.exceptionText_=b};a.setLoggerName=function(b){this.loggerName_=b};a.getLevel=function(){return this.level_};a.setLevel=function(b){this.level_=b};a.getMessage=function(){return this.msg_};a.setMessage=function(b){this.msg_=b};a.getMillis=function(){return this.time_};a.setMillis=function(b){this.time_=b};a.getSequenceNumber=function(){return this.sequenceNumber_};goog.debug.Logger=function(b){this.name_=b;this.parent_=null;this.children_={};this.handlers_=[]};goog.debug.Logger.prototype.level_=null;goog.debug.Logger.Level=function(b,c){this.name=b;this.value=c};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 b=0,c;c=goog.debug.Logger.Level.PREDEFINED_LEVELS[b];b++){goog.debug.Logger.Level.predefinedLevelsCache_[c.value]=c;goog.debug.Logger.Level.predefinedLevelsCache_[c.name]=c}};
goog.debug.Logger.Level.getPredefinedLevel=function(b){goog.debug.Logger.Level.predefinedLevelsCache_||goog.debug.Logger.Level.createPredefinedLevelsCache_();return goog.debug.Logger.Level.predefinedLevelsCache_[b]||null};
goog.debug.Logger.Level.getPredefinedLevelByValue=function(b){goog.debug.Logger.Level.predefinedLevelsCache_||goog.debug.Logger.Level.createPredefinedLevelsCache_();if(b in goog.debug.Logger.Level.predefinedLevelsCache_)return goog.debug.Logger.Level.predefinedLevelsCache_[b];for(var c=0;c<goog.debug.Logger.Level.PREDEFINED_LEVELS.length;++c){var d=goog.debug.Logger.Level.PREDEFINED_LEVELS[c];if(d.value<=b)return d}return null};goog.debug.Logger.getLogger=function(b){return goog.debug.LogManager.getLogger(b)};
a=goog.debug.Logger.prototype;a.getName=function(){return this.name_};a.addHandler=function(b){this.handlers_.push(b)};a.removeHandler=function(b){return goog.array.remove(this.handlers_,b)};a.getParent=function(){return this.parent_};a.getChildren=function(){return this.children_};a.setLevel=function(b){this.level_=b};a.getLevel=function(){return this.level_};a.getEffectiveLevel=function(){if(this.level_)return this.level_;if(this.parent_)return this.parent_.getEffectiveLevel();return null};
a.isLoggable=function(b){if(this.level_)return b.value>=this.level_.value;if(this.parent_)return this.parent_.isLoggable(b);return false};a.log=function(b,c,d){this.isLoggable(b)&&this.logRecord(this.getLogRecord(b,c,d))};a.getLogRecord=function(b,c,d){var e=new goog.debug.LogRecord(b,String(c),this.name_);if(d){e.setException(d);e.setExceptionText(goog.debug.exposeException(d,arguments.callee.caller))}return e};a.shout=function(b,c){this.log(goog.debug.Logger.Level.SHOUT,b,c)};
a.severe=function(b,c){this.log(goog.debug.Logger.Level.SEVERE,b,c)};a.warning=function(b,c){this.log(goog.debug.Logger.Level.WARNING,b,c)};a.info=function(b,c){this.log(goog.debug.Logger.Level.INFO,b,c)};a.config=function(b,c){this.log(goog.debug.Logger.Level.CONFIG,b,c)};a.fine=function(b,c){this.log(goog.debug.Logger.Level.FINE,b,c)};a.finer=function(b,c){this.log(goog.debug.Logger.Level.FINER,b,c)};a.finest=function(b,c){this.log(goog.debug.Logger.Level.FINEST,b,c)};
a.logRecord=function(b){if(this.isLoggable(b.getLevel()))for(var c=this;c;){c.callPublish_(b);c=c.getParent()}};a.callPublish_=function(b){for(var c=0;c<this.handlers_.length;c++)this.handlers_[c](b)};a.setParent_=function(b){this.parent_=b};a.addChild_=function(b,c){this.children_[b]=c};goog.debug.LogManager={};goog.debug.LogManager.loggers_={};goog.debug.LogManager.rootLogger_=null;
goog.debug.LogManager.initialize=function(){if(!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(b){goog.debug.LogManager.initialize();return b in goog.debug.LogManager.loggers_?goog.debug.LogManager.loggers_[b]:goog.debug.LogManager.createLogger_(b)};goog.debug.LogManager.createFunctionForCatchErrors=function(b){return function(c){(b||goog.debug.LogManager.getRoot()).severe("Error: "+c.message+" ("+c.fileName+" @ Line: "+c.line+")")}};
goog.debug.LogManager.createLogger_=function(b){var c=new goog.debug.Logger(b),d=b.split("."),e=d[d.length-1];d.length-=1;d=d.join(".");d=goog.debug.LogManager.getLogger(d);d.addChild_(e,c);c.setParent_(d);return goog.debug.LogManager.loggers_[b]=c};goog.debug.DivConsole=function(b){this.publishHandler_=goog.bind(this.addLogRecord,this);this.formatter_=new goog.debug.HtmlFormatter;this.isCapturing_=this.formatter_.showAbsoluteTime=false;this.element_=b;this.elementOwnerDocument_=this.element_.ownerDocument||this.element_.document;this.installStyles()};a=goog.debug.DivConsole.prototype;
a.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"};
a.setCapturing=function(b){if(b!=this.isCapturing_){var c=goog.debug.LogManager.getRoot();if(b)c.addHandler(this.publishHandler_);else{c.removeHandler(this.publishHandler_);this.logBuffer=""}this.isCapturing_=b}};
a.addLogRecord=function(b){var c=this.element_.scrollHeight-this.element_.scrollTop-this.element_.clientHeight<=100,d=this.elementOwnerDocument_.createElement("div");d.className="logmsg";d.innerHTML=this.formatter_.formatRecord(b);this.element_.appendChild(d);if(c)this.element_.scrollTop=this.element_.scrollHeight};a.getFormatter=function(){return this.formatter_};a.setFormatter=function(b){this.formatter_=b};
a.addSeparator=function(){var b=this.elementOwnerDocument_.createElement("div");b.className="logmsg logsep";this.element_.appendChild(b)};a.clear=function(){this.element_.innerHTML=""};