>}\n\t */\n\tURI.prototype.getParameterMap = function (paramNameUnescaped) {\n\t this.checkParameterCache_();\n\t var paramMap = {};\n\t for (var i = 0; i < this.paramCache_.length; i += 2) {\n\t var key = this.paramCache_[i++],\n\t value = this.paramCache_[i++];\n\t if (!(key in paramMap)) {\n\t paramMap[key] = [value];\n\t } else {\n\t paramMap[key].push(value);\n\t }\n\t }\n\t return paramMap;\n\t};\n\t/**\n\t * returns the first value for a given cgi parameter or null if the given\n\t * parameter name does not appear in the query string.\n\t * If the given parameter name does appear, but has no '=' following\n\t * it, then the empty string will be returned.\n\t * @return {string|null}\n\t */\n\tURI.prototype.getParameterValue = function (paramNameUnescaped) {\n\t this.checkParameterCache_();\n\t for (var i = 0; i < this.paramCache_.length; i += 2) {\n\t if (paramNameUnescaped === this.paramCache_[i]) {\n\t return this.paramCache_[i + 1];\n\t }\n\t }\n\t return null;\n\t};\n\t\n\tURI.prototype.getFragment = function () {\n\t return this.fragment_ && decodeURIComponent(this.fragment_);\n\t};\n\tURI.prototype.getRawFragment = function () {\n\t return this.fragment_;\n\t};\n\tURI.prototype.setFragment = function (newFragment) {\n\t this.fragment_ = newFragment ? encodeURIComponent(newFragment) : null;\n\t return this;\n\t};\n\tURI.prototype.setRawFragment = function (newFragment) {\n\t this.fragment_ = newFragment ? newFragment : null;\n\t return this;\n\t};\n\tURI.prototype.hasFragment = function () {\n\t return null !== this.fragment_;\n\t};\n\t\n\tfunction nullIfAbsent(matchPart) {\n\t return ('string' == typeof matchPart) && (matchPart.length > 0)\n\t ? matchPart\n\t : null;\n\t}\n\t\n\t\n\t\n\t\n\t/**\n\t * a regular expression for breaking a URI into its component parts.\n\t *\n\t * http://www.gbiv.com/protocols/uri/rfc/rfc3986.html#RFC2234 says\n\t * As the \"first-match-wins\" algorithm is identical to the \"greedy\"\n\t * disambiguation method used by POSIX regular expressions, it is natural and\n\t * commonplace to use a regular expression for parsing the potential five\n\t * components of a URI reference.\n\t *\n\t *
The following line is the regular expression for breaking-down a\n\t * well-formed URI reference into its components.\n\t *\n\t *
\n\t * ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?\n\t * 12 3 4 5 6 7 8 9\n\t *
\n\t *\n\t * The numbers in the second line above are only to assist readability; they\n\t * indicate the reference points for each subexpression (i.e., each paired\n\t * parenthesis). We refer to the value matched for subexpression as $.\n\t * For example, matching the above expression to\n\t * \n\t * http://www.ics.uci.edu/pub/ietf/uri/#Related\n\t *
\n\t * results in the following subexpression matches:\n\t * \n\t * $1 = http:\n\t * $2 = http\n\t * $3 = //www.ics.uci.edu\n\t * $4 = www.ics.uci.edu\n\t * $5 = /pub/ietf/uri/\n\t * $6 = \n\t * $7 = \n\t * $8 = #Related\n\t * $9 = Related\n\t *
\n\t * where indicates that the component is not present, as is the\n\t * case for the query component in the above example. Therefore, we can\n\t * determine the value of the five components as\n\t * \n\t * scheme = $2\n\t * authority = $4\n\t * path = $5\n\t * query = $7\n\t * fragment = $9\n\t *
\n\t *\n\t * msamuel: I have modified the regular expression slightly to expose the\n\t * credentials, domain, and port separately from the authority.\n\t * The modified version yields\n\t *
\n\t * $1 = http scheme\n\t * $2 = credentials -\\\n\t * $3 = www.ics.uci.edu domain | authority\n\t * $4 = port -/\n\t * $5 = /pub/ietf/uri/ path\n\t * $6 = query without ?\n\t * $7 = Related fragment without #\n\t *
\n\t */\n\tvar URI_RE_ = new RegExp(\n\t \"^\" +\n\t \"(?:\" +\n\t \"([^:/?#]+)\" + // scheme\n\t \":)?\" +\n\t \"(?://\" +\n\t \"(?:([^/?#]*)@)?\" + // credentials\n\t \"([^/?#:@]*)\" + // domain\n\t \"(?::([0-9]+))?\" + // port\n\t \")?\" +\n\t \"([^?#]+)?\" + // path\n\t \"(?:\\\\?([^#]*))?\" + // query\n\t \"(?:#(.*))?\" + // fragment\n\t \"$\"\n\t );\n\t\n\tvar URI_DISALLOWED_IN_SCHEME_OR_CREDENTIALS_ = /[#\\/\\?@]/g;\n\tvar URI_DISALLOWED_IN_PATH_ = /[\\#\\?]/g;\n\t\n\tURI.parse = parse;\n\tURI.create = create;\n\tURI.resolve = resolve;\n\tURI.collapse_dots = collapse_dots; // Visible for testing.\n\t\n\t// lightweight string-based api for loadModuleMaker\n\tURI.utils = {\n\t mimeTypeOf: function (uri) {\n\t var uriObj = parse(uri);\n\t if (/\\.html$/.test(uriObj.getPath())) {\n\t return 'text/html';\n\t } else {\n\t return 'application/javascript';\n\t }\n\t },\n\t resolve: function (base, uri) {\n\t if (base) {\n\t return resolve(parse(base), parse(uri)).toString();\n\t } else {\n\t return '' + uri;\n\t }\n\t }\n\t};\n\t\n\t\n\treturn URI;\n\t})();\n\t\n\t// Copyright Google Inc.\n\t// Licensed under the Apache Licence Version 2.0\n\t// Autogenerated at Mon Feb 25 13:05:42 EST 2013\n\t// @overrides window\n\t// @provides html4\n\tvar html4 = {};\n\thtml4.atype = {\n\t 'NONE': 0,\n\t 'URI': 1,\n\t 'URI_FRAGMENT': 11,\n\t 'SCRIPT': 2,\n\t 'STYLE': 3,\n\t 'HTML': 12,\n\t 'ID': 4,\n\t 'IDREF': 5,\n\t 'IDREFS': 6,\n\t 'GLOBAL_NAME': 7,\n\t 'LOCAL_NAME': 8,\n\t 'CLASSES': 9,\n\t 'FRAME_TARGET': 10,\n\t 'MEDIA_QUERY': 13\n\t};\n\thtml4[ 'atype' ] = html4.atype;\n\thtml4.ATTRIBS = {\n\t '*::class': 9,\n\t '*::dir': 0,\n\t '*::draggable': 0,\n\t '*::hidden': 0,\n\t '*::id': 4,\n\t '*::inert': 0,\n\t '*::itemprop': 0,\n\t '*::itemref': 6,\n\t '*::itemscope': 0,\n\t '*::lang': 0,\n\t '*::onblur': 2,\n\t '*::onchange': 2,\n\t '*::onclick': 2,\n\t '*::ondblclick': 2,\n\t '*::onfocus': 2,\n\t '*::onkeydown': 2,\n\t '*::onkeypress': 2,\n\t '*::onkeyup': 2,\n\t '*::onload': 2,\n\t '*::onmousedown': 2,\n\t '*::onmousemove': 2,\n\t '*::onmouseout': 2,\n\t '*::onmouseover': 2,\n\t '*::onmouseup': 2,\n\t '*::onreset': 2,\n\t '*::onscroll': 2,\n\t '*::onselect': 2,\n\t '*::onsubmit': 2,\n\t '*::onunload': 2,\n\t '*::spellcheck': 0,\n\t '*::style': 3,\n\t '*::title': 0,\n\t '*::translate': 0,\n\t 'a::accesskey': 0,\n\t 'a::coords': 0,\n\t 'a::href': 1,\n\t 'a::hreflang': 0,\n\t 'a::name': 7,\n\t 'a::onblur': 2,\n\t 'a::onfocus': 2,\n\t 'a::shape': 0,\n\t 'a::tabindex': 0,\n\t 'a::target': 10,\n\t 'a::type': 0,\n\t 'area::accesskey': 0,\n\t 'area::alt': 0,\n\t 'area::coords': 0,\n\t 'area::href': 1,\n\t 'area::nohref': 0,\n\t 'area::onblur': 2,\n\t 'area::onfocus': 2,\n\t 'area::shape': 0,\n\t 'area::tabindex': 0,\n\t 'area::target': 10,\n\t 'audio::controls': 0,\n\t 'audio::loop': 0,\n\t 'audio::mediagroup': 5,\n\t 'audio::muted': 0,\n\t 'audio::preload': 0,\n\t 'bdo::dir': 0,\n\t 'blockquote::cite': 1,\n\t 'br::clear': 0,\n\t 'button::accesskey': 0,\n\t 'button::disabled': 0,\n\t 'button::name': 8,\n\t 'button::onblur': 2,\n\t 'button::onfocus': 2,\n\t 'button::tabindex': 0,\n\t 'button::type': 0,\n\t 'button::value': 0,\n\t 'canvas::height': 0,\n\t 'canvas::width': 0,\n\t 'caption::align': 0,\n\t 'col::align': 0,\n\t 'col::char': 0,\n\t 'col::charoff': 0,\n\t 'col::span': 0,\n\t 'col::valign': 0,\n\t 'col::width': 0,\n\t 'colgroup::align': 0,\n\t 'colgroup::char': 0,\n\t 'colgroup::charoff': 0,\n\t 'colgroup::span': 0,\n\t 'colgroup::valign': 0,\n\t 'colgroup::width': 0,\n\t 'command::checked': 0,\n\t 'command::command': 5,\n\t 'command::disabled': 0,\n\t 'command::icon': 1,\n\t 'command::label': 0,\n\t 'command::radiogroup': 0,\n\t 'command::type': 0,\n\t 'data::value': 0,\n\t 'del::cite': 1,\n\t 'del::datetime': 0,\n\t 'details::open': 0,\n\t 'dir::compact': 0,\n\t 'div::align': 0,\n\t 'dl::compact': 0,\n\t 'fieldset::disabled': 0,\n\t 'font::color': 0,\n\t 'font::face': 0,\n\t 'font::size': 0,\n\t 'form::accept': 0,\n\t 'form::action': 1,\n\t 'form::autocomplete': 0,\n\t 'form::enctype': 0,\n\t 'form::method': 0,\n\t 'form::name': 7,\n\t 'form::novalidate': 0,\n\t 'form::onreset': 2,\n\t 'form::onsubmit': 2,\n\t 'form::target': 10,\n\t 'h1::align': 0,\n\t 'h2::align': 0,\n\t 'h3::align': 0,\n\t 'h4::align': 0,\n\t 'h5::align': 0,\n\t 'h6::align': 0,\n\t 'hr::align': 0,\n\t 'hr::noshade': 0,\n\t 'hr::size': 0,\n\t 'hr::width': 0,\n\t 'iframe::align': 0,\n\t 'iframe::frameborder': 0,\n\t 'iframe::height': 0,\n\t 'iframe::marginheight': 0,\n\t 'iframe::marginwidth': 0,\n\t 'iframe::width': 0,\n\t 'img::align': 0,\n\t 'img::alt': 0,\n\t 'img::border': 0,\n\t 'img::height': 0,\n\t 'img::hspace': 0,\n\t 'img::ismap': 0,\n\t 'img::name': 7,\n\t 'img::src': 1,\n\t 'img::usemap': 11,\n\t 'img::vspace': 0,\n\t 'img::width': 0,\n\t 'input::accept': 0,\n\t 'input::accesskey': 0,\n\t 'input::align': 0,\n\t 'input::alt': 0,\n\t 'input::autocomplete': 0,\n\t 'input::checked': 0,\n\t 'input::disabled': 0,\n\t 'input::inputmode': 0,\n\t 'input::ismap': 0,\n\t 'input::list': 5,\n\t 'input::max': 0,\n\t 'input::maxlength': 0,\n\t 'input::min': 0,\n\t 'input::multiple': 0,\n\t 'input::name': 8,\n\t 'input::onblur': 2,\n\t 'input::onchange': 2,\n\t 'input::onfocus': 2,\n\t 'input::onselect': 2,\n\t 'input::placeholder': 0,\n\t 'input::readonly': 0,\n\t 'input::required': 0,\n\t 'input::size': 0,\n\t 'input::src': 1,\n\t 'input::step': 0,\n\t 'input::tabindex': 0,\n\t 'input::type': 0,\n\t 'input::usemap': 11,\n\t 'input::value': 0,\n\t 'ins::cite': 1,\n\t 'ins::datetime': 0,\n\t 'label::accesskey': 0,\n\t 'label::for': 5,\n\t 'label::onblur': 2,\n\t 'label::onfocus': 2,\n\t 'legend::accesskey': 0,\n\t 'legend::align': 0,\n\t 'li::type': 0,\n\t 'li::value': 0,\n\t 'map::name': 7,\n\t 'menu::compact': 0,\n\t 'menu::label': 0,\n\t 'menu::type': 0,\n\t 'meter::high': 0,\n\t 'meter::low': 0,\n\t 'meter::max': 0,\n\t 'meter::min': 0,\n\t 'meter::value': 0,\n\t 'ol::compact': 0,\n\t 'ol::reversed': 0,\n\t 'ol::start': 0,\n\t 'ol::type': 0,\n\t 'optgroup::disabled': 0,\n\t 'optgroup::label': 0,\n\t 'option::disabled': 0,\n\t 'option::label': 0,\n\t 'option::selected': 0,\n\t 'option::value': 0,\n\t 'output::for': 6,\n\t 'output::name': 8,\n\t 'p::align': 0,\n\t 'pre::width': 0,\n\t 'progress::max': 0,\n\t 'progress::min': 0,\n\t 'progress::value': 0,\n\t 'q::cite': 1,\n\t 'select::autocomplete': 0,\n\t 'select::disabled': 0,\n\t 'select::multiple': 0,\n\t 'select::name': 8,\n\t 'select::onblur': 2,\n\t 'select::onchange': 2,\n\t 'select::onfocus': 2,\n\t 'select::required': 0,\n\t 'select::size': 0,\n\t 'select::tabindex': 0,\n\t 'source::type': 0,\n\t 'table::align': 0,\n\t 'table::bgcolor': 0,\n\t 'table::border': 0,\n\t 'table::cellpadding': 0,\n\t 'table::cellspacing': 0,\n\t 'table::frame': 0,\n\t 'table::rules': 0,\n\t 'table::summary': 0,\n\t 'table::width': 0,\n\t 'tbody::align': 0,\n\t 'tbody::char': 0,\n\t 'tbody::charoff': 0,\n\t 'tbody::valign': 0,\n\t 'td::abbr': 0,\n\t 'td::align': 0,\n\t 'td::axis': 0,\n\t 'td::bgcolor': 0,\n\t 'td::char': 0,\n\t 'td::charoff': 0,\n\t 'td::colspan': 0,\n\t 'td::headers': 6,\n\t 'td::height': 0,\n\t 'td::nowrap': 0,\n\t 'td::rowspan': 0,\n\t 'td::scope': 0,\n\t 'td::valign': 0,\n\t 'td::width': 0,\n\t 'textarea::accesskey': 0,\n\t 'textarea::autocomplete': 0,\n\t 'textarea::cols': 0,\n\t 'textarea::disabled': 0,\n\t 'textarea::inputmode': 0,\n\t 'textarea::name': 8,\n\t 'textarea::onblur': 2,\n\t 'textarea::onchange': 2,\n\t 'textarea::onfocus': 2,\n\t 'textarea::onselect': 2,\n\t 'textarea::placeholder': 0,\n\t 'textarea::readonly': 0,\n\t 'textarea::required': 0,\n\t 'textarea::rows': 0,\n\t 'textarea::tabindex': 0,\n\t 'textarea::wrap': 0,\n\t 'tfoot::align': 0,\n\t 'tfoot::char': 0,\n\t 'tfoot::charoff': 0,\n\t 'tfoot::valign': 0,\n\t 'th::abbr': 0,\n\t 'th::align': 0,\n\t 'th::axis': 0,\n\t 'th::bgcolor': 0,\n\t 'th::char': 0,\n\t 'th::charoff': 0,\n\t 'th::colspan': 0,\n\t 'th::headers': 6,\n\t 'th::height': 0,\n\t 'th::nowrap': 0,\n\t 'th::rowspan': 0,\n\t 'th::scope': 0,\n\t 'th::valign': 0,\n\t 'th::width': 0,\n\t 'thead::align': 0,\n\t 'thead::char': 0,\n\t 'thead::charoff': 0,\n\t 'thead::valign': 0,\n\t 'tr::align': 0,\n\t 'tr::bgcolor': 0,\n\t 'tr::char': 0,\n\t 'tr::charoff': 0,\n\t 'tr::valign': 0,\n\t 'track::default': 0,\n\t 'track::kind': 0,\n\t 'track::label': 0,\n\t 'track::srclang': 0,\n\t 'ul::compact': 0,\n\t 'ul::type': 0,\n\t 'video::controls': 0,\n\t 'video::height': 0,\n\t 'video::loop': 0,\n\t 'video::mediagroup': 5,\n\t 'video::muted': 0,\n\t 'video::poster': 1,\n\t 'video::preload': 0,\n\t 'video::width': 0\n\t};\n\thtml4[ 'ATTRIBS' ] = html4.ATTRIBS;\n\thtml4.eflags = {\n\t 'OPTIONAL_ENDTAG': 1,\n\t 'EMPTY': 2,\n\t 'CDATA': 4,\n\t 'RCDATA': 8,\n\t 'UNSAFE': 16,\n\t 'FOLDABLE': 32,\n\t 'SCRIPT': 64,\n\t 'STYLE': 128,\n\t 'VIRTUALIZED': 256\n\t};\n\thtml4[ 'eflags' ] = html4.eflags;\n\t// these are bitmasks of the eflags above.\n\thtml4.ELEMENTS = {\n\t 'a': 0,\n\t 'abbr': 0,\n\t 'acronym': 0,\n\t 'address': 0,\n\t 'applet': 272,\n\t 'area': 2,\n\t 'article': 0,\n\t 'aside': 0,\n\t 'audio': 0,\n\t 'b': 0,\n\t 'base': 274,\n\t 'basefont': 274,\n\t 'bdi': 0,\n\t 'bdo': 0,\n\t 'big': 0,\n\t 'blockquote': 0,\n\t 'body': 305,\n\t 'br': 2,\n\t 'button': 0,\n\t 'canvas': 0,\n\t 'caption': 0,\n\t 'center': 0,\n\t 'cite': 0,\n\t 'code': 0,\n\t 'col': 2,\n\t 'colgroup': 1,\n\t 'command': 2,\n\t 'data': 0,\n\t 'datalist': 0,\n\t 'dd': 1,\n\t 'del': 0,\n\t 'details': 0,\n\t 'dfn': 0,\n\t 'dialog': 272,\n\t 'dir': 0,\n\t 'div': 0,\n\t 'dl': 0,\n\t 'dt': 1,\n\t 'em': 0,\n\t 'fieldset': 0,\n\t 'figcaption': 0,\n\t 'figure': 0,\n\t 'font': 0,\n\t 'footer': 0,\n\t 'form': 0,\n\t 'frame': 274,\n\t 'frameset': 272,\n\t 'h1': 0,\n\t 'h2': 0,\n\t 'h3': 0,\n\t 'h4': 0,\n\t 'h5': 0,\n\t 'h6': 0,\n\t 'head': 305,\n\t 'header': 0,\n\t 'hgroup': 0,\n\t 'hr': 2,\n\t 'html': 305,\n\t 'i': 0,\n\t 'iframe': 16,\n\t 'img': 2,\n\t 'input': 2,\n\t 'ins': 0,\n\t 'isindex': 274,\n\t 'kbd': 0,\n\t 'keygen': 274,\n\t 'label': 0,\n\t 'legend': 0,\n\t 'li': 1,\n\t 'link': 274,\n\t 'map': 0,\n\t 'mark': 0,\n\t 'menu': 0,\n\t 'meta': 274,\n\t 'meter': 0,\n\t 'nav': 0,\n\t 'nobr': 0,\n\t 'noembed': 276,\n\t 'noframes': 276,\n\t 'noscript': 276,\n\t 'object': 272,\n\t 'ol': 0,\n\t 'optgroup': 0,\n\t 'option': 1,\n\t 'output': 0,\n\t 'p': 1,\n\t 'param': 274,\n\t 'pre': 0,\n\t 'progress': 0,\n\t 'q': 0,\n\t 's': 0,\n\t 'samp': 0,\n\t 'script': 84,\n\t 'section': 0,\n\t 'select': 0,\n\t 'small': 0,\n\t 'source': 2,\n\t 'span': 0,\n\t 'strike': 0,\n\t 'strong': 0,\n\t 'style': 148,\n\t 'sub': 0,\n\t 'summary': 0,\n\t 'sup': 0,\n\t 'table': 0,\n\t 'tbody': 1,\n\t 'td': 1,\n\t 'textarea': 8,\n\t 'tfoot': 1,\n\t 'th': 1,\n\t 'thead': 1,\n\t 'time': 0,\n\t 'title': 280,\n\t 'tr': 1,\n\t 'track': 2,\n\t 'tt': 0,\n\t 'u': 0,\n\t 'ul': 0,\n\t 'var': 0,\n\t 'video': 0,\n\t 'wbr': 2\n\t};\n\thtml4[ 'ELEMENTS' ] = html4.ELEMENTS;\n\thtml4.ELEMENT_DOM_INTERFACES = {\n\t 'a': 'HTMLAnchorElement',\n\t 'abbr': 'HTMLElement',\n\t 'acronym': 'HTMLElement',\n\t 'address': 'HTMLElement',\n\t 'applet': 'HTMLAppletElement',\n\t 'area': 'HTMLAreaElement',\n\t 'article': 'HTMLElement',\n\t 'aside': 'HTMLElement',\n\t 'audio': 'HTMLAudioElement',\n\t 'b': 'HTMLElement',\n\t 'base': 'HTMLBaseElement',\n\t 'basefont': 'HTMLBaseFontElement',\n\t 'bdi': 'HTMLElement',\n\t 'bdo': 'HTMLElement',\n\t 'big': 'HTMLElement',\n\t 'blockquote': 'HTMLQuoteElement',\n\t 'body': 'HTMLBodyElement',\n\t 'br': 'HTMLBRElement',\n\t 'button': 'HTMLButtonElement',\n\t 'canvas': 'HTMLCanvasElement',\n\t 'caption': 'HTMLTableCaptionElement',\n\t 'center': 'HTMLElement',\n\t 'cite': 'HTMLElement',\n\t 'code': 'HTMLElement',\n\t 'col': 'HTMLTableColElement',\n\t 'colgroup': 'HTMLTableColElement',\n\t 'command': 'HTMLCommandElement',\n\t 'data': 'HTMLElement',\n\t 'datalist': 'HTMLDataListElement',\n\t 'dd': 'HTMLElement',\n\t 'del': 'HTMLModElement',\n\t 'details': 'HTMLDetailsElement',\n\t 'dfn': 'HTMLElement',\n\t 'dialog': 'HTMLDialogElement',\n\t 'dir': 'HTMLDirectoryElement',\n\t 'div': 'HTMLDivElement',\n\t 'dl': 'HTMLDListElement',\n\t 'dt': 'HTMLElement',\n\t 'em': 'HTMLElement',\n\t 'fieldset': 'HTMLFieldSetElement',\n\t 'figcaption': 'HTMLElement',\n\t 'figure': 'HTMLElement',\n\t 'font': 'HTMLFontElement',\n\t 'footer': 'HTMLElement',\n\t 'form': 'HTMLFormElement',\n\t 'frame': 'HTMLFrameElement',\n\t 'frameset': 'HTMLFrameSetElement',\n\t 'h1': 'HTMLHeadingElement',\n\t 'h2': 'HTMLHeadingElement',\n\t 'h3': 'HTMLHeadingElement',\n\t 'h4': 'HTMLHeadingElement',\n\t 'h5': 'HTMLHeadingElement',\n\t 'h6': 'HTMLHeadingElement',\n\t 'head': 'HTMLHeadElement',\n\t 'header': 'HTMLElement',\n\t 'hgroup': 'HTMLElement',\n\t 'hr': 'HTMLHRElement',\n\t 'html': 'HTMLHtmlElement',\n\t 'i': 'HTMLElement',\n\t 'iframe': 'HTMLIFrameElement',\n\t 'img': 'HTMLImageElement',\n\t 'input': 'HTMLInputElement',\n\t 'ins': 'HTMLModElement',\n\t 'isindex': 'HTMLUnknownElement',\n\t 'kbd': 'HTMLElement',\n\t 'keygen': 'HTMLKeygenElement',\n\t 'label': 'HTMLLabelElement',\n\t 'legend': 'HTMLLegendElement',\n\t 'li': 'HTMLLIElement',\n\t 'link': 'HTMLLinkElement',\n\t 'map': 'HTMLMapElement',\n\t 'mark': 'HTMLElement',\n\t 'menu': 'HTMLMenuElement',\n\t 'meta': 'HTMLMetaElement',\n\t 'meter': 'HTMLMeterElement',\n\t 'nav': 'HTMLElement',\n\t 'nobr': 'HTMLElement',\n\t 'noembed': 'HTMLElement',\n\t 'noframes': 'HTMLElement',\n\t 'noscript': 'HTMLElement',\n\t 'object': 'HTMLObjectElement',\n\t 'ol': 'HTMLOListElement',\n\t 'optgroup': 'HTMLOptGroupElement',\n\t 'option': 'HTMLOptionElement',\n\t 'output': 'HTMLOutputElement',\n\t 'p': 'HTMLParagraphElement',\n\t 'param': 'HTMLParamElement',\n\t 'pre': 'HTMLPreElement',\n\t 'progress': 'HTMLProgressElement',\n\t 'q': 'HTMLQuoteElement',\n\t 's': 'HTMLElement',\n\t 'samp': 'HTMLElement',\n\t 'script': 'HTMLScriptElement',\n\t 'section': 'HTMLElement',\n\t 'select': 'HTMLSelectElement',\n\t 'small': 'HTMLElement',\n\t 'source': 'HTMLSourceElement',\n\t 'span': 'HTMLSpanElement',\n\t 'strike': 'HTMLElement',\n\t 'strong': 'HTMLElement',\n\t 'style': 'HTMLStyleElement',\n\t 'sub': 'HTMLElement',\n\t 'summary': 'HTMLElement',\n\t 'sup': 'HTMLElement',\n\t 'table': 'HTMLTableElement',\n\t 'tbody': 'HTMLTableSectionElement',\n\t 'td': 'HTMLTableDataCellElement',\n\t 'textarea': 'HTMLTextAreaElement',\n\t 'tfoot': 'HTMLTableSectionElement',\n\t 'th': 'HTMLTableHeaderCellElement',\n\t 'thead': 'HTMLTableSectionElement',\n\t 'time': 'HTMLTimeElement',\n\t 'title': 'HTMLTitleElement',\n\t 'tr': 'HTMLTableRowElement',\n\t 'track': 'HTMLTrackElement',\n\t 'tt': 'HTMLElement',\n\t 'u': 'HTMLElement',\n\t 'ul': 'HTMLUListElement',\n\t 'var': 'HTMLElement',\n\t 'video': 'HTMLVideoElement',\n\t 'wbr': 'HTMLElement'\n\t};\n\thtml4[ 'ELEMENT_DOM_INTERFACES' ] = html4.ELEMENT_DOM_INTERFACES;\n\thtml4.ueffects = {\n\t 'NOT_LOADED': 0,\n\t 'SAME_DOCUMENT': 1,\n\t 'NEW_DOCUMENT': 2\n\t};\n\thtml4[ 'ueffects' ] = html4.ueffects;\n\thtml4.URIEFFECTS = {\n\t 'a::href': 2,\n\t 'area::href': 2,\n\t 'blockquote::cite': 0,\n\t 'command::icon': 1,\n\t 'del::cite': 0,\n\t 'form::action': 2,\n\t 'img::src': 1,\n\t 'input::src': 1,\n\t 'ins::cite': 0,\n\t 'q::cite': 0,\n\t 'video::poster': 1\n\t};\n\thtml4[ 'URIEFFECTS' ] = html4.URIEFFECTS;\n\thtml4.ltypes = {\n\t 'UNSANDBOXED': 2,\n\t 'SANDBOXED': 1,\n\t 'DATA': 0\n\t};\n\thtml4[ 'ltypes' ] = html4.ltypes;\n\thtml4.LOADERTYPES = {\n\t 'a::href': 2,\n\t 'area::href': 2,\n\t 'blockquote::cite': 2,\n\t 'command::icon': 1,\n\t 'del::cite': 2,\n\t 'form::action': 2,\n\t 'img::src': 1,\n\t 'input::src': 1,\n\t 'ins::cite': 2,\n\t 'q::cite': 2,\n\t 'video::poster': 1\n\t};\n\thtml4[ 'LOADERTYPES' ] = html4.LOADERTYPES;\n\t\n\t// Copyright (C) 2006 Google Inc.\n\t//\n\t// Licensed under the Apache License, Version 2.0 (the \"License\");\n\t// you may not use this file except in compliance with the License.\n\t// You may obtain a copy of the License at\n\t//\n\t// http://www.apache.org/licenses/LICENSE-2.0\n\t//\n\t// Unless required by applicable law or agreed to in writing, software\n\t// distributed under the License is distributed on an \"AS IS\" BASIS,\n\t// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t// See the License for the specific language governing permissions and\n\t// limitations under the License.\n\t\n\t/**\n\t * @fileoverview\n\t * An HTML sanitizer that can satisfy a variety of security policies.\n\t *\n\t * \n\t * The HTML sanitizer is built around a SAX parser and HTML element and\n\t * attributes schemas.\n\t *\n\t * If the cssparser is loaded, inline styles are sanitized using the\n\t * css property and value schemas. Else they are remove during\n\t * sanitization.\n\t *\n\t * If it exists, uses parseCssDeclarations, sanitizeCssProperty, cssSchema\n\t *\n\t * @author mikesamuel@gmail.com\n\t * @author jasvir@gmail.com\n\t * \\@requires html4, URI\n\t * \\@overrides window\n\t * \\@provides html, html_sanitize\n\t */\n\t\n\t// The Turkish i seems to be a non-issue, but abort in case it is.\n\tif ('I'.toLowerCase() !== 'i') { throw 'I/i problem'; }\n\t\n\t/**\n\t * \\@namespace\n\t */\n\tvar html = (function(html4) {\n\t\n\t // For closure compiler\n\t var parseCssDeclarations, sanitizeCssProperty, cssSchema;\n\t if ('undefined' !== typeof window) {\n\t parseCssDeclarations = window['parseCssDeclarations'];\n\t sanitizeCssProperty = window['sanitizeCssProperty'];\n\t cssSchema = window['cssSchema'];\n\t }\n\t\n\t // The keys of this object must be 'quoted' or JSCompiler will mangle them!\n\t // This is a partial list -- lookupEntity() uses the host browser's parser\n\t // (when available) to implement full entity lookup.\n\t // Note that entities are in general case-sensitive; the uppercase ones are\n\t // explicitly defined by HTML5 (presumably as compatibility).\n\t var ENTITIES = {\n\t 'lt': '<',\n\t 'LT': '<',\n\t 'gt': '>',\n\t 'GT': '>',\n\t 'amp': '&',\n\t 'AMP': '&',\n\t 'quot': '\"',\n\t 'apos': '\\'',\n\t 'nbsp': '\\240'\n\t };\n\t\n\t // Patterns for types of entity/character reference names.\n\t var decimalEscapeRe = /^#(\\d+)$/;\n\t var hexEscapeRe = /^#x([0-9A-Fa-f]+)$/;\n\t // contains every entity per http://www.w3.org/TR/2011/WD-html5-20110113/named-character-references.html\n\t var safeEntityNameRe = /^[A-Za-z][A-za-z0-9]+$/;\n\t // Used as a hook to invoke the browser's entity parsing.