Merge branch 'master' into api-changes

This commit is contained in:
WrinklyNinja
2014-01-29 17:29:14 +00:00
30 changed files with 444 additions and 845 deletions
-5
View File
@@ -44,12 +44,7 @@ Thumbs.db
*.suo
*.sdf
*.opensdf
externals/
build/
docs/html
docs/latex
out/
bin/
ipch/
resources/graphvis
*.mo
-34
View File
@@ -40,40 +40,6 @@ BOSS requires the following libraries (version numbers used in latest developmen
BOSS expects all libraries' folders to be present alongside the BOSS repository folder that contains this readme, or otherwise installed such that the compiler and linker used can find them without suppling additional paths. All paths below are relative to the folder(s) containing the libraries and BOSS.
BOSS can also make use of [GraphVis](http://www.graphviz.org/Download_windows.php) binaries. If provided, the following binaries should be placed into `resources/graphvis/` in the BOSS repository root:
* cdt.dll
* cgraph.dll
* dot.exe
* freetype6.dll
* gvc.dll
* gvplugin_core.dll
* gvplugin_dot_layout.dll
* gvplugin_gd.dll
* gvplugin_pango.dll
* iconv.dll
* jpeg62.dll
* libcairo-2.dll
* libexpat.dll
* libfontconfig-1.dll
* libfreetype-6.dll
* libglib-2.0-0.dll
* libgmodule-2.0-0.dll
* libgobject-2.0-0.dll
* libgthread-2.0-0.dll
* libpango-1.0-0.dll
* libpangocairo-1.0-0.dll
* libpangoft2-1.0-0.dll
* libpangowin32-1.0-0.dll
* libpng12.dll
* libpng14-14.dll
* libxml2.dll
* ltdl.dll
* Pathplan.dll
* zlib1.dll
Once the binaries have been placed there, run `dot.exe -c`.
Alphanum, Libespm and PugiXML do not require any additional setup. The rest of the libraries must be built separately. Instructions for building them and BOSS itself on Windows and Linux are given below. They assume that Visual C++ 2013 is being used on Windows, and mingw-w64 is being used on Linux, though they should be similar for other compilers.
### Windows
+19 -23
View File
@@ -162,9 +162,9 @@ Visual C++ Redistributable for Visual Studio 2013 (x86)</a>. BOSS can be install
<p>Provided that masterlist updating <a href="#settingsUpdateMasterlist">is enabled</a> and that an online masterlist URL <a href="#settingsMasterlistURL">is set</a>, BOSS checks for updates to its masterlist and downloads any that are available. If there are any syntax errors in the latest masterlist (due to human error by its maintainers), the updater rolls back one version at a time until it finds a version that works. If any other errors are encountered, updating is cancelled.
<p>During the sorting process, BOSS extracts information from each of the plugins installed in the game's Data folder and combines this information with any relevant metadata provided by the masterlist and userlist. It then uses the combined data to build a graph (as in <i>graph theory</i>, not <i>drawing</i>) of all the interactions between all the installed plugins. A topological sort is then carried out on the graph to produce a list of plugins in their optimal load order, according to BOSS's criteria. If a cycle is detected (eg. A depends on B depends on A), then sorting is cancelled as it becomes impossible to generate a load order that satisfies all conditions.
<p>During the sorting process, BOSS extracts information from each of the plugins installed in the game's Data folder and combines this information with any relevant metadata provided by the masterlist and userlist. It then uses the combined data to build a directed graph of all the interactions between all the installed plugins. A topological sort is then carried out on the graph to produce a list of plugins in their optimal load order, according to BOSS's criteria. If a cycle is detected (eg. A depends on B depends on A), then sorting is cancelled as it becomes impossible to generate a load order that satisfies all conditions.
<p>If successful, the calculated load order is then displayed in the dialog shown above, which allows the user to edit the load order before it is applied. Multiple plugins may be selected and moved at once. Plugins which are empty (ie. only contain a header record) are displayed in grey text, and plugins that are not empty and load BSAs are displayed in blue text. If <q>OK</q> button is clicked, it is then applied, and any edits made are recorded in the userlist for re-application when BOSS next sorts the game's plugins. If the <q>Cancel</q> button is clicked, then the load order and any edits made are discarded.
<p>BOSS then generates a report and displays it either in a new window or in your default browser, according to the value of the <a href="#settingsViewReports">relevant setting</a>. Any errors encountered during the sorting process will be displayed in this report, including those due to graph cycles, missing dependencies or installed incompatible plugins. If it <a href="#settingsGenerateGraphImage">is enabled</a>, an SVG image of the graph is generated for display in the report. See the next section for more information on the report.
<p>BOSS then generates a report and displays it either in a new window or in your default browser, according to the value of the <a href="#settingsViewReports">relevant setting</a>. Any errors encountered during the sorting process will be displayed in this report, including those due to graph cycles, missing dependencies or installed incompatible plugins. See the next section for more information on the report.
<p>BOSS is able to sort plugins ghosted by <abbr title="Wrye Bash, Wrye Flash or Wrye Flash NV">Wrye *ash</abbr>, and can extract Bash Tags and version numbers from plugin descriptions. Provided that they have the <code>Filter</code> Bash Tag present in their description, BOSS can recognise filter patches and so avoid displaying unnecessary error messages for any of their masters that may be missing.
<p>While reading very large plugins, such as the game's main master file, BOSS may appear to stop responding: this is not an issue. The time it takes for BOSS to sort your load order depends primarily on the size of the masterlist being used, the total size of the files in your load order, and the number of plugins in your load order. The first run is likely to be longer than subsequent runs as BOSS needs to download the full masterlist, rather than just the changes made by updates. In testing, it was found that sorting ~90 plugins with a total size of ~350 MB and a 5 MB masterlist takes around 15 seconds, though performance will vary with computer hardware.
@@ -181,7 +181,6 @@ Visual C++ Redistributable for Visual Studio 2013 (x86)</a>. BOSS can be install
<ul>
<li>The <q>Summary</q> tab gives information on the versions of BOSS and the masterlist used, whether masterlist updating is enabled, and breaks down the numbers of each message type in the Summary and Details tabs. It also notifies you if there have been no changes in the <q>Details</q> tab since you last ran BOSS for the same game. Finally, the <q>Summary</q> tab is also where any global messages supplied in the masterlist and any errors encountered during sorting are displayed.
<li>The <q>Details</q> tab lists the plugins BOSS sorted in their new load order, along with any messages BOSS has provided for them. BOSS will also display the plugin's <abbr title="Cyclic Redundancy Check">CRC</abbr> value and extract its version if found in the plugin's description field.
<li>The <q>Graph</q> tab displays a graph of all the interactions between the plugins in your load order. It's not very useful to the average user, but may contain information that would aid in debugging any issues encountered, and is also provided as an item of interest. Graph image generation typically takes a long time, so it is disabled by default.
</ul>
<p>In addition, there are a few filters that can be used to selectively hide items in the <q>Details</q> tab. These filters are:
<ul>
@@ -204,9 +203,8 @@ Visual C++ Redistributable for Visual Studio 2013 (x86)</a>. BOSS can be install
<figcaption>BOSS's metadata editor.</figcaption>
</figure>
<p>BOSS's sorting algorithm uses the contents of plugins to work out where they should load relative to one another. However, this is sometimes not enough for it to produce a correct load order. In such cases, additional metadata can be supplied so that the plugins get sorted correctly. This metadata is supplied to BOSS by two sources: one is the masterlist, which is maintained by the BOSS team, and the other is the userlist, which you can edit as you desire.
<p>The metadata editor allows you to manage the metadata stored in your userlist. When opened, it lists all the plugins you have installed, and any that are missing but have existing user-added metadata, in alphabetical order. Plugins that load BSAs are displayed in blue text. Clicking on a plugin then opens its metadata for editing, and displays any existing metadata in the fields to the right of the plugin list. These fields are explained in the table below.
<p>The metadata editor allows you to manage the metadata stored in your userlist. When opened, it lists all the plugins you have installed, and any that are missing but have existing user-added metadata, in alphabetical order. Plugins that load BSAs are displayed in <span style="color: #008EDB;">blue text</span>, and plugins with user-added metadata are displayed in <b>bold text</b>. Selecting a plugin then opens its metadata for editing, and displays any existing metadata in the fields to the right of the plugin list. Right-clicking a plugin displays a context menu containing a few commands. The editor fields and context menu commands are explained in the tables below.
<p>The <q>Add &#x2026;</q>, <q>Edit &#x2026;</q> and <q>Remove &#x2026;</q> buttons are used to edit the contents of the list currently visible. The <q>Edit &#x2026;</q> and <q>Remove &#x2026;</q> buttons are greyed out if no row is selected or if the selected row is not user-added metadata, but comes from the masterlist or the plugin itself. Metadata that comes from the masterlist or the plugin itself cannot be edited or removed, only added to. This is to prevent users from accidently overriding important metadata.
<p>The <q>Copy Metadata As Text</q> copies the selected plugin's current metadata, as it appears in the userlist, to the clipboard. This makes it easier to share your metadata changes with the BOSS team, as they can then paste this text directly into the masterlist, and also avoids any typos being introduced. If posting the text in an online forum that supports BBCode (as most forums do), be sure to wrap it in <code>[code]</code> tags, eg. <code>[code]copied text[/code]</code>, so that the spaces are not removed by the forum software.
<p>The <q>Save Changes</q> button will save any user-added metadata to your userlist, including any changes made, then exit the metadata editor. The <q>Cancel</q> button will exit the editor without saving any changes.
<table>
<thead>
@@ -244,8 +242,15 @@ Visual C++ Redistributable for Visual Studio 2013 (x86)</a>. BOSS can be install
</ul>
<p>If a plugin's masters are missing, an error message will be displayed for it. Filter patches are special mods designed for use with a Bashed Patch that do not require all their masters to be present, and so any plugin with the <code>Filter</code> tag applied and missing masters will not cause any errors to be displayed.
</table>
<table>
<thead>
<tr><th>Context Menu Command<th>Description
<tbody>
<tr><td>Copy Name<td>Copies the selected plugin's filename to the clipboard.
<tr><td>Copy Metadata As Text<td>Copies the selected plugin's current metadata, as it appears in the userlist, to the clipboard. This makes it easier to share your metadata changes with the BOSS team, as they can then paste this text directly into the masterlist, and also avoids any typos being introduced. If posting the text in an online forum that supports BBCode (as most forums do), be sure to wrap it in <code>[code]</code> tags, eg. <code>[code]copied text[/code]</code>, so that the spaces are not removed by the forum software.
<tr><td>Remove All User-Added Metadata<td>This removes all saved user-added metadata from the selected plugin, <b>and</b> any unsaved data added to the plugin since the Metadata Editor window was opened.
</table>
<h3 id="usage-settings">Editing Settings</h3>
<figure>
<img src="images/settings.png">
@@ -261,7 +266,6 @@ Visual C++ Redistributable for Visual Studio 2013 (x86)</a>. BOSS can be install
<tr><td>Debug Verbosity<td>Controls the verbosity of the debug output, which is written to <code>%LOCALAPPDATA%\BOSS\BOSSDebugLog.txt</code>.
<tr><td id="settingsUpdateMasterlist">Update masterlist before sorting<td>If checked, BOSS will update its masterlist, should an update be available, before sorting plugins.
<tr><td id="settingsViewReports">View reports externally in default browser.<td>If checked, BOSS will display its report using your default web browser instead of opening its own window.
<tr><td id="settingsGenerateGraphImage">Generate and display plugin graph images.<td>If checked, BOSS will generate an SVG image of the plugin interaction graph and display it in its report. Image generation can take a long time, so this is disabled by default.
</table>
<p>The games list allows the customisation of which games BOSS offers support for, trivialising support for multiple copies of a game and Total Conversions. The games listed here will be displayed in the main window's <q>Game</q> menu when BOSS is next run. The <q>Add Game</q>, <q>Edit Game</q> and <q>Remove Game</q> buttons are used to edit the list. Each game has several columns, which are explained below.
<table>
@@ -370,7 +374,7 @@ To translate the BOSS application:
<li>For testing and feedback prior to releases: The Beta Testing &amp; Analysis Guild at <a href="http://tesalliance.org/forums/">TES Alliance</a>, AndalayBay, dAb, dj2005, Dubiousness, hyno111, Invader, matter2003, NightStar, olminator, saebel, Telyn, wiz0floyd, wormheart, Zanderat and zone22.
</ul>
</ul>
<p>BOSS is written in C++ and makes use of <a href="http://www.graphviz.org/">GraphVis</a> and the <a href="http://www.davekoelle.com/alphanum.html">Alphanum</a>, <a href="http://www.boost.org/">Boost</a>, <a href="http://github.com/WrinklyNinja/libespm">libespm</a>, <a href="http://github.com/libgit2/libgit2">libgit2</a>, <a href="http://github.com/WrinklyNinja/libloadorder">libloadorder</a>, <a href="http://code.google.com/p/pugixml/">PugiXML</a>, <a href="http://www.wxwidgets.org/">wxWidgets</a> and <a href="http://code.google.com/p/yaml-cpp/">yaml-cpp</a> libraries. BOSS's reports are written in XHTML/CSS/Javascript and make use of <a href="http://github.com/inexorabletash/polyfill">Polyfill.js</a> and <a href="https://code.google.com/p/svgweb/">svgweb</a> to provide Internet Explorer 8 compatibility. Copyright license information for all these may be found <a href="licenses/Licenses.txt">here</a>.
<p>BOSS is written in C++ and makes use of the <a href="http://www.davekoelle.com/alphanum.html">Alphanum</a>, <a href="http://www.boost.org/">Boost</a>, <a href="http://github.com/WrinklyNinja/libespm">libespm</a>, <a href="http://github.com/libgit2/libgit2">libgit2</a>, <a href="http://github.com/WrinklyNinja/libloadorder">libloadorder</a>, <a href="http://code.google.com/p/pugixml/">PugiXML</a>, <a href="http://www.wxwidgets.org/">wxWidgets</a> and <a href="http://code.google.com/p/yaml-cpp/">yaml-cpp</a> libraries. BOSS's reports are written in XHTML/CSS/Javascript and make use of <a href="http://github.com/inexorabletash/polyfill">Polyfill.js</a> to provide Internet Explorer 8 compatibility. Copyright license information for all these may be found <a href="licenses/Licenses.txt">here</a>.
<h2 id="project">Project Members</h2>
@@ -382,30 +386,20 @@ To translate the BOSS application:
<tr><th>GitHub<th>Bethesda<th>Nexus<th>Oblivion<th>Skyrim<th>Fallout 3<th>Fallout: New Vegas
<tbody class="teamTableBody">
<tr><td>Aellis-BOSS<td colspan="2">Aellis<td>&#x2713;<td><td><td>&#x2713;<td><td>
<tr><td>egocarib<td>egocarib<td>-<td><td><td><td>&#x2713;<td><td>
<tr><td colspan="3">Freso<td><td><td><td>&#x2713;<td><td>
<tr><td colspan="2">ineedbettername<td>-<td><td><td><td>&#x2713;<td><td>
<tr><td colspan="3">LotteryDiscountz<td><td><td><td>&#x2713;<td><td>
<tr><td colspan="3">niveuseverto<td><td><td><td><td><td>&#x2713;
<tr><td>noxwyll<td colspan="2">iyumichan<td>&#x2713;<td><td><td><td><td>&#x2713;
<tr><td colspan="3">PacificMorrowind<td>&#x2713;<td><td>&#x2713;<td><td><td>
<tr><td colspan="3">Sharlikran<td><td><td><td>&#x2713;<td><td>
<tr><td colspan="2">SilentSpike<td>SilentSpike69<td><td><td><td>&#x2713;<td><td>
<tr><td>TokcDK<td colspan="2">Tokc.D.K.<td><td><td>&#x2713;<td>&#x2713;<td><td>
<tr><td colspan="3">William Imm<td><td><td>&#x2713;<td>&#x2713;<td><td>
<tr><td>William-Imm<td>William Imm<td>WilliamImm<td><td><td>&#x2713;<td>&#x2713;<td><td>
<tr><td colspan="3">WrinklyNinja<td>&#x2713;<td>&#x2713;<td><td><td><td>
</table>
<p>The status of the following members is currently unknown:
<table>
<thead>
<tr><th rowspan="2">Member<th rowspan="2">Admin<th rowspan="2">Code<th colspan="4">Contributes To Masterlist
<tr><th>Oblivion<th>Skyrim<th>Fallout 3<th>Fallout: New Vegas
<tbody class="teamTableBody">
<tr><td>PacificMorrowind<td>&#x2713;<td>&#x2713;<td>&#x2713;<td><td>&#x2713;<td>
<tr><td>Random007<td>&#x2713;<td>&#x2713;<td>&#x2713;<td><td><td>
<tr><td>scrapperrm<td><td><td><td>&#x2713;<td><td>
</table>
<p>Members who have since left the project are credited below:
<table>
@@ -424,8 +418,10 @@ To translate the BOSS application:
<tr><td>Malonn<td><td><td><td><td><td>&#x2713;
<tr><td>Peste<td><td><td><td>&#x2713;<td><td>
<tr><td>Psymon<td><td><td>&#x2713;<td><td><td>
<tr class="inactive"><td>Random007<td>&#x2713;<td>&#x2713;<td>&#x2713;<td><td><td>
<tr><td>Red Eye<td><td><td><td><td><td>&#x2713;
<tr><td>RiddlingLynx<td><td><td>&#x2713;<td><td><td>
<tr><td>scrapperrm<td><td><td><td>&#x2713;<td><td>
<tr><td>Skyline<td><td><td><td><td><td>&#x2713;
<tr><td>Space Oden69<td><td><td><td><td>&#x2713;<td>
<tr><td>Televator<td><td><td><td><td>&#x2713;<td>
@@ -520,7 +516,7 @@ There are three key pieces of information that are used to accurately describe a
<tr><td>Masterlist structure &amp; syntax<td>Uses a custom file format.<td>Uses YAML 1.2, with custom condition string syntax modelled after Python's condition expressions.
<tr><td>Userlist structure &amp; syntax<td>Uses a custom file format, different from the masterlist format.<td>Uses the same format and syntax as the masterlist.
<tr><td>Morrowind support<td>Technically supports Morrowind, though its masterlist is near-empty.<td>Does not support Morrowind.
<tr><td>BOSS file locations<td>All BOSS's files are stored in the BOSS folder first installed.<td>BOSS stores any files it creates (reports, masterlists, userlists, settings, graphs) in the <code>%LOCALAPPDATA%\BOSS</code> folder.
<tr><td>BOSS file locations<td>All BOSS's files are stored in the BOSS folder first installed.<td>BOSS stores any files it creates (reports, masterlists, userlists, settings) in the <code>%LOCALAPPDATA%\BOSS</code> folder.
<tr><td>Game selection on first run.<td>BOSS asks the user to select a game from a list.<td>BOSS selects the first game detected.
<tr><td>File CRC calculation<td>File CRC calculation is optional.<td>File CRC calculation is always-on, as it no longer presents any significant additional performance impact.
<tr><td>BOSS Log / Report format<td>The BOSS Log can either be generated as plain text or as HTML.<td>The BOSS Report can only be generated as HTML.
-7
View File
@@ -9,15 +9,8 @@ BOSS uses a number of libraries, and their licenses are listed in this file.
* Libloadorder - GNU GPL v3; see "GNU GPL v3.txt" for the text.
* Polyfill.js - This code has been placed in the public domain.
* PugiXML - MIT License; see "MIT License (PugiXML).txt" for the text.
* svgweb - Apache License v2.0; see "Apache License v2.0.txt" for the text.
* wxWidgets - wxWindows License; the text is not included as allowed by the license.
* yaml-cpp - MIT License; see "MIT License (yaml-cpp).txt" for the text.
* zlib - zlib license; the text is not included as allowed by the license.
BOSS is also distributed with some binaries for the following programs:
* GraphViz - Eclipse Public License v1.0; the text is not included as allowed by the license.
Going by what the EPL FAQ page says, simply running the GraphVis binaries through system calls does not make BOSS a "derivative work", and so it is not bound by the EPL, and so it's OK for BOSS to use GraphVis even though the EPL and GPL are incompatible.
Source code for all libraries and binaries can be found on the websites linked to in the main BOSS readme.
+261 -246
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -53,6 +53,7 @@ noscript div {
.button[id] {
position:absolute;
right:0;
top:0;
}
#main {
position:absolute;
File diff suppressed because one or more lines are too long
-209
View File
@@ -1,209 +0,0 @@
(function(){function q(a,b){for(var c in b)a.prototype[c]=b[c]}function O(a,b){for(var c in b)a[c]=b[c]}function v(a,b,c,d){if(!b)b=a.documentElement;if(typeof XPathEvaluator!="undefined"){var e=new XPathEvaluator;a=a.createNSResolver(b);c=e.evaluate(c,b,a,0,null);for(b=r();e=c.iterateNext();)b.push(e);return b}else{a.setProperty("SelectionLanguage","XPath");if(d){var f="",h={};for(e=0;e<d.length;e++){var g=d[e],k=d["_"+g];if(!h["_"+g]){f+=k=="xmlns"?'xmlns="'+g+'" ':"xmlns:"+k+'="'+g+'" ';h["_"+
g]=g}}a.setProperty("SelectionNamespaces",f)}b=b.selectNodes(c);if(b===null||typeof b=="undefined")b=r();c=r();for(e=0;e<b.length;e++)c.push(b[e]);return c}}function z(a,b){if(b===undefined)b=false;var c=J[b+a];if(c)return c.cloneNode(true);var d;if(P){c=new DOMParser;try{d=c.parseFromString(a,"application/xml")}catch(e){throw e;}c=d.documentElement;if(c.nodeName=="parsererror")throw Error("There is a bug in your SVG: "+(A?(new XMLSerializer).serializeToString(c):c.xml));}else{c=["Msxml2.DOMDocument.6.0",
"Msxml2.DOMDocument.3.0"];for(var f=0;f<c.length;f++)try{if(d=new ActiveXObject(c[f]))break}catch(h){}if(!d)throw Error("Unable to instantiate XML parser");try{d.preserveWhiteSpace=b;d.resolveExternals=false;d.validateOnParse=false;d.setProperty("ProhibitDTD",false);d.async="false";if(!d.loadXML(a)||d.parseError.errorCode!==0)throw Error(d.parseError.reason);}catch(g){console.log(g.message);throw Error("Unable to parse SVG: "+g.message);}}try{J[b+a]=d.cloneNode(true)}catch(k){}return d}function B(a,
b){var c=a._nodeXML||a,d;if(A)d=(new XMLSerializer).serializeToString(c);else if(c.xml)d=c.xml;else if(typeof XMLSerializer!="undefined")d=(new XMLSerializer).serializeToString(c);d=d.replace(/urn\:__fake__internal__namespace/g,svgns);c="";if(d.indexOf("xmlns=")==-1)c='xmlns="'+svgns+'" ';if(b)for(var e=0;e<b.length;e++){var f=b[e],h=b["_"+f];if(f==svgnsFake)f=svgns;f=h!="xmlns"?"xmlns:"+h+'="'+f+'"':'xmlns="'+f+'"';if(d.indexOf(f)==-1)c+=f+" "}return d=d.replace(/<([^ ]+) /,"<$1 "+c)}function m(a,
b){if(typeof b=="string")b=a[b];return function(){return b.apply(a,arguments.length?arguments:[])}}function ca(){if(typeof XMLHttpRequest!="undefined")return new XMLHttpRequest;else if(ActiveXObject){var a=null,b;for(b=0;b<Q.length&&!a;++b)try{a=new ActiveXObject(Q[b])}catch(c){}if(!a)throw Error("XMLHttpRequest object not available on this platform");return a}}function R(){this._setXDomain();this.libraryPath=this._getLibraryPath();this.htcFilename=this._getHTCFilename();j&&!Object.defineProperty&&
l._prepareBehavior(this.libraryPath,this.htcFilename);this._interceptOnloadListeners();this._initDOMContentLoaded()}function S(){if(this._forceFlash())console.log("Forcing Flash SVG viewer for this browser");else if(this.hasNativeSVG()){this.supported=true;this.use="native";return}var a=new T;if(a.capable)if(a.isVersionOrAbove(10,0,0)){this.supported=true;this.use="flash"}else{this.supported=false;this.reason="Flash 10+ required"}else{this.supported=false;this.reason="Flash 10+ or a different browser required"}}
function T(){this._detectVersion()}function l(a){this.type=a.type;this._keyboardListeners=[];this._redrawManager=new U(this);if(this.type=="script"){this.id=a.svgID;this._xml=a.xml;this._svgString=a.svgString;this._origSVG=a.origSVG;this._scriptNode=a.scriptNode}else if(this.type=="object"){this.id=a.objID;this._objNode=a.objNode}}function o(a){this.type=a.type;this._xml=a.xml;if(this.type=="object"){this.id=a.objID;this._objNode=a.objNode}else if(this.type=="script"){this.id=a.svgID;this._svgString=
a.svgString;this._scriptNode=a.scriptNode}}function U(a){this._handler=a;this._batch=[];this._nextID=1;this._ids=[];this._timeoutIDs={}}function V(){}function i(a,b,c,d,e,f){if(!(a===undefined&&b===undefined)){this.nodeName=a;this._nodeXML=e;this._handler=f;this._listeners={};this._detachedListeners=[];this.fake=true;if(d==svgnsFake)d=svgns;if(b==i.ELEMENT_NODE&&!this._nodeXML){e='<?xml version="1.0"?>\n';e+=d==svgns&&!c?"<"+a+' xmlns="'+svgnsFake+'" xmlns:xlink="http://www.w3.org/1999/xlink"/>':
"<"+a+" xmlns:"+c+'="'+d+'"/>';this._nodeXML=z(e).documentElement}else if(b==i.DOCUMENT_FRAGMENT_NODE){e='<?xml version="1.0"?>\n<__document__fragment></__document__fragment>';this._nodeXML=z(e).documentElement}if(b!=i.DOCUMENT_NODE&&this._nodeXML){this._nodeXML.getAttribute("__guid")||this._nodeXML.setAttribute("__guid","_"+K++);this._guid=this._nodeXML.getAttribute("__guid");svgweb._guidLookup["_"+this._guid]=this}if(b==i.ELEMENT_NODE)this.localName=a.indexOf(":")!=-1?a.match(/^[^:]*:(.*)$/)[1]:
a;this.nodeType=b?b:i.ELEMENT_NODE;if(b==i.ELEMENT_NODE||b==i.DOCUMENT_NODE||b==i.DOCUMENT_FRAGMENT_NODE){this.prefix=c;this.namespaceURI=d;this._nodeValue=null}else if(b==i.TEXT_NODE){this._nodeValue=this._nodeXML.firstChild.nodeValue;this.namespaceURI=this.prefix=null;if(this._nodeValue===undefined)this._nodeValue=null}this.ownerDocument=document;if(this._handler&&this._handler.type=="object")this.ownerDocument=this._handler.document;j&&this._createEmptyMethods();this._childNodes=this._createChildNodes();
b==i.TEXT_NODE&&this._nodeXML.setAttribute("__fakeTextNode",true);if(j)j&&this.nodeType!=i.DOCUMENT_NODE&&this._createHTC();else this._defineNodeAccessors()}}function t(a,b,c,d,e){if(!(a===undefined&&c===undefined&&d===undefined&&e===undefined)){i.apply(this,[a,i.ELEMENT_NODE,b,c,d,e]);this._attributes={};this._attributes._id="";this._importAttributes(this,this._nodeXML);j||this._defineAccessors();if(this.namespaceURI==svgns){if(!(j&&this._attached&&this._handler&&this._handler.type=="script"&&this.nodeName==
"svg"))this.style=new s(this);if(!(j&&this._attached&&this._handler&&this._handler.type=="script"&&this.nodeName=="svg"))if(j)this.style._ignoreStyleChanges=false}}}function C(a){i.apply(this,["#document-fragment",i.DOCUMENT_FRAGMENT_NODE,null,null,null,null]);this.ownerDocument=a}function s(a){this._element=a;this._setup()}function W(a,b){this._handler=b;this._svgNode=a;this._scriptsToExec=[];this._htcLoaded=Object.defineProperty?true:false;this._swfLoaded=false;for(var c=0;this._svgNode._onloadListeners&&
c<this._svgNode._onloadListeners.length;c++){var d=function(e,f){return function(){f.apply(e.flash)}}(this._handler,this._svgNode._onloadListeners[c]);svgweb.addOnLoad(d)}j&&this._loadHTC();this.url=this._svgNode.getAttribute("src");if(!this.url)this.url=this._svgNode.getAttribute("data");c=m(this,function(e){this._handler._origSVG=e;e=svgweb._cleanSVG(e,true,false);this._svgString=e.svg;this._xml=e.xml;this.document=new D(this._xml,this._handler);this._handler.document=this.document;this._savedParams=
this._getPARAMs(this._svgNode);this._handler._inserter=new L("object",this._xml.documentElement,this._svgNode,this._handler)});this.url.substring(0,5)=="data:"?c(this.url.substring(this.url.indexOf(",")+1)):this._fetchURL(this.url,c,m(this,this._fallback))}function X(a){this._handler=a;this.fake=true;this.frameElement=this._handler.flash;this.location=this._createLocation();this.alert=window.alert;this.top=this.parent=window;this._onloadListeners=[]}function L(a,b,c,d){this._embedType=a;this._nodeXML=
b;this._replaceMe=c;this._handler=d;this._parentNode=c.parentNode;if(this._embedType=="object"){this._explicitWidth=this._replaceMe.getAttribute("width");this._explicitHeight=this._replaceMe.getAttribute("height")}this._setupFlash()}function E(a,b,c,d){this._attached=true;t.apply(this,["svg",null,svgns,a,d]);this._nodeXML=a;this._svgString=b;this._scriptNode=c;this._htcLoaded=Object.defineProperty?true:false;this._swfLoaded=false;if(this._handler.type=="script")this._handler.document._nodeById["_"+
this._nodeXML.getAttribute("id")]=this;this._currentScale=1;this._currentTranslate=this._createCurrentTranslate();if(j&&this._handler.type=="script"){this._addRedrawMethods();this.style=new s(this);this._readyStateListener=m(this,this._onHTCLoaded);this._htcNode.attachEvent("onreadystatechange",this._readyStateListener)}else j&&this._handler.type=="object"&&this._addRedrawMethods();if(this._handler.type=="script")this._handler._inserter=new L("script",this._nodeXML,this._scriptNode,this._handler)}
function D(a,b){i.apply(this,["#document",i.DOCUMENT_NODE,null,null,a,b],svgns);this._xml=a;this._handler=b;this._nodeById={};this._namespaces=this._getNamespaces();this.implementation=new V;if(this._handler.type=="script")this.defaultView=window}function r(){var a=[];a.item=function(b){return b>=this.length?null:this[b]};return a}function F(a,b,c,d,e,f,h){this.a=a;this.b=b;this.c=c;this.d=d;this.e=e;this.f=f;this._handler=h}function G(a){this.value=a}function H(a){this.baseVal=a;this.animVal=undefined}
function Y(a,b,c){this.type=a;this.matrix=b;this.angle=c}function I(a,b,c,d){if(c===undefined)c=false;this._formalAccessors=c;this.x=a;this.y=b;if(c){this.setX=m(this,function(e){this.x=e;d("x",e)});this.getX=m(this,function(){return this.x});this.setY=m(this,function(e){this.y=e;d("y",e)});this.getY=m(this,function(){return this.y});this.setXY=m(this,function(e,f){this.x=e;this.y=f;d("xy",e,f)})}}function M(a,b,c,d){this.x=a;this.y=b;this.width=c;this.height=d}window.svgns="http://www.w3.org/2000/svg";
window.xlinkns="http://www.w3.org/1999/xlink";svgnsFake="urn:__fake__internal__namespace";var w=false,x=false,Z=false,j=false,$=false,N=false,u=false,aa=false,P=false,A=false;(function(){var a=navigator,b=a.userAgent;a=a.appVersion;var c=parseFloat(a);if(b.indexOf("Opera")>=0)w=c;var d=Math.max(a.indexOf("WebKit"),a.indexOf("Safari"),0);if(d)x=parseFloat(a.split("Version/")[1])||parseFloat(a.substr(d+7))>419.3?3:2;b.indexOf("AdobeAIR");if(a.indexOf("Konqueror")>=0||x)$=c;if(b.indexOf("Gecko")>=0&&
!$)Z=c;if(Z)N=parseFloat(b.split("Firefox/")[1])||undefined;if(document.all&&!w)j=parseFloat(a.split("MSIE ")[1])||undefined;if(b.indexOf("Chrome")>=0)aa=1;isStandardsMode=document.documentMode?document.documentMode>5:document.compatMode=="CSS1Compat";if(document.contentType=="application/xhtml+xml")u=true;else if(typeof XMLDocument!="undefined"&&document.constructor==XMLDocument)u=true;if(typeof DOMParser!="undefined"&&typeof XPathEvaluator!="undefined"&&typeof XMLSerializer!="undefined")A=P=true})();
var da=function(){for(var a=false,b=document.getElementsByTagName("script"),c=0;c<b.length;c++)if(/svg(?:\-uncompressed)?\.js/.test(b[c].src)){a=b[c].getAttribute("data-debug");a=a==="true"||a===true?true:false}return a}();if(typeof console=="undefined"||!console.log){var y=[];console={};if(da){console.log=function(a){var b=null,c=false;try{b=document.getElementsByTagName("body")[0]}catch(d){c=true}if(j)try{document.documentElement.doScroll("left")}catch(e){c=true}if(c)y.push(a);else{for(;y.length;){var f=
y.shift();c=document.createElement("p");c.appendChild(document.createTextNode(f));b.appendChild(c)}c=document.createElement("p");c.appendChild(document.createTextNode(a));b.appendChild(c)}};if(j)var ea=window.setInterval(function(){if(document.readyState=="complete"){for(;y.length;){var a=y.shift();p=document.createElement("p");p.appendChild(document.createTextNode(a));document.body.appendChild(p)}window.clearTimeout(ea)}},50)}else console.log=function(){}}var J={},Q=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0",
"MSXML2.XMLHTTP","Microsoft.XMLHTTP"],K=0;q(R,{libraryPath:"./",config:null,pageLoaded:false,handlers:[],totalLoaded:0,_guidLookup:[],_loadListeners:[],_removedNodes:[],_allSVGNamespaces:[],addOnLoad:function(a,b,c){if(b){var d;if(c.frameElement)d=c.frameElement;else{var e;for(e=0;e<this.handlers.length;e++)if(this.handlers[e]._objNode&&this.handlers[e]._objNode.contentDocument&&this.handlers[e]._objNode.contentDocument.defaultView==c)d=this.handlers[e]._objNode}if(b&&this.getHandlerType()=="flash")a.apply(c);
else if(d._svgHandler)d._svgHandler._onObjectLoad(a,c);else{d._svgWindow=c;d._svgFunc=a}}else this._loadListeners.push(a);this.pageLoaded&&this._fireOnLoad()},getHandlerType:function(){if(this.renderer==l)return"flash";else if(this.renderer==o)return"native"},appendChild:function(a,b){if(a.nodeName.toLowerCase()=="object"&&a.getAttribute("type")=="image/svg+xml"){this.totalSVG++;this._svgObjects.push(a);if(this.getHandlerType()=="native"){a.onload=a.onsvgload;b.appendChild(a)}var c=a;if(this.getHandlerType()==
"flash"){a.onsvgload&&a.addEventListener("SVGLoad",a.onsvgload,false);c=document._createElement("div");for(var d=0;d<a.attributes.length;d++){var e=a.attributes[d],f=e.nodeValue;!f&&f!=="true"||c.setAttribute(e.nodeName,f)}b.appendChild(c);c._onloadListeners=a._onloadListeners;c=c}c=this._processSVGObject(c);a._objID=c}else if(a.nodeName.toLowerCase()=="svg"){this.totalSVG++;a.onsvgload&&a.addEventListener("SVGLoad",a.onsvgload,false);if(j&&a._fakeNode)a=a._fakeNode;c=B(a);d=document.createElement("script");
d.type="image/svg+xml";if(u)d.appendChild(document.createTextNode(c));else try{d.appendChild(document.createTextNode(c))}catch(h){d.text=c}this._svgScripts.push(d);b.appendChild(d);d._onloadListeners=a._detachedListeners||a._onloadListeners;this._processSVGScript(d)}},removeChild:function(a,b){var c=a.nodeName.toLowerCase(),d;if(c=="object"||c=="embed"||c=="svg"){this.totalSVG=this.totalSVG==0?0:this.totalSVG-1;this.totalLoaded=this.totalLoaded==0?0:this.totalLoaded-1;d=a.id;d=this.handlers[d];for(var e=
[],f=0;f<this.handlers.length;f++){var h=this.handlers[f];if(h!=d){e[h.id]=h;e.push(h)}}this.handlers=e}if(c=="object"||c=="embed"){if(this.getHandlerType()=="flash"&&d.document&&d.document.defaultView){var g=d.document.defaultView;if(g._intervalIDs)for(f=0;f<g._intervalIDs.length;f++)g.clearInterval(g._intervalIDs[f]);if(g._timeoutIDs)for(f=0;f<g._timeoutIDs.length;f++)g.clearTimeout(g._timeoutIDs[f]);for(f=0;f<d._keyboardListeners.length;f++){c=d._keyboardListeners[f];if(j){document.detachEvent("onkeydown",
c);document.detachEvent("onkeyup",c)}else{document.removeEventListener("keydown",c,true);document.removeEventListener("keydown",c,false);document.removeEventListener("keyup",c,true);document.removeEventListener("keyup",c,false)}}}c=typeof a._objID!="undefined"?a._objID:typeof a.contentDocument!="undefined"?a.contentDocument._handler.id:a._handler.id;for(f=0;f<svgweb._svgObjects.length;f++)if(svgweb._svgObjects[f]._objID===c){svgweb._svgObjects.splice(f,1);break}b.removeChild(a);if(this.getHandlerType()==
"flash"){if(c=document.getElementById("__htc_container"))for(f=0;f<c.childNodes.length;f++){e=c.childNodes[f];if(typeof e.ownerDocument!="undefined"&&e.ownerDocument==d._svgObject.document){if(typeof e._fakeNode!="undefined"&&typeof e._fakeNode._htcNode!="undefined")e._fakeNode._htcNode=null;e._fakeNode=null;e._handler=null;c.removeChild(e)}}for(var k in svgweb._guidLookup){e=svgweb._guidLookup[k];e._fake&&e.ownerDocument===d.document&&delete svgweb._guidLookup[k]}d.flash.contentDocument=null;d.flash=
null;d._xml=null;if(d.window){d.window._scope=null;d.window=null}k=d._svgObject;f=k.document;f._nodeById=null;f._xml=null;f.defaultView=null;f.documentElement=null;f.rootElement=null;f=f.defaultView=null;k._svgNode=null;k._handler=null;if(g){g._setTimeout=null;g.setTimeout=null;g._setInterval=null;g.setInterval=null}g=d=k=d._svgObject=null}}else if(c=="svg"){for(f=0;f<svgweb._svgScripts.length;f++)if(svgweb._svgScripts[f]==d._scriptNode){svgweb._svgScripts.splice(f,1);break}if(j&&this.getHandlerType()==
"flash"&&a._fakeNode)a=a._fakeNode;g=this.getHandlerType()=="native"?a:a._handler.flash;j?window.setTimeout(function(n,ba){return function(){n.removeChild(ba);ba=n=null}}(b,g),1):b.removeChild(g);if(this.getHandlerType()=="flash"){a._setUnattached();for(k in svgweb._guidLookup){e=svgweb._guidLookup[k];e._fake&&e._getFakeNode()===d&&delete svgweb._guidLookup[k]}d._scriptNode=null;d.flash.documentElement=null;d.flash=null;d=d._xml=null}}},_initDOMContentLoaded:function(){var a=this;if(document.addEventListener)document.addEventListener("DOMContentLoaded",
function(){a._onDOMContentLoaded()},false);else{document.write('<script id="__ie__svg__onload" defer src=//0><\/script>');document.getElementById("__ie__svg__onload").onreadystatechange=function(){this.readyState=="complete"&&a._onDOMContentLoaded()};var b=function(){if(window.onload){a._saveWindowOnload();document.detachEvent("onreadystatechange",b)}};document.attachEvent("onreadystatechange",b)}},_setXDomain:function(){for(var a=document.getElementsByTagName("script"),b=0;b<a.length;b++)if(/svg(?:\-uncompressed)?\.js/.test(a[b].src)&&
/^https?/.test(a[b].src)){var c=a[b].src.replace(/svg(?:\-uncompressed)?\.js/,""),d=c.match(/https?\:\/\/[^\/]*/)[0],e=window.location.protocol.replace(/:|\//g,"")+"://"+window.location.host;if(d!=e){this.xDomainURL=c;this._isXDomain=true;return}}this._isXDomain=false},_getLibraryPath:function(){for(var a=null,b=document.getElementsByTagName("meta"),c=0;c<b.length;c++)if(b[c].name=="svg.config.data-path"&&b[c].content.length>0)a=b[c].content;b=document.getElementsByTagName("script");for(c=0;c<b.length;c++)if(/svg(?:\-uncompressed)?\.js/.test(b[c].src)){if(b[c].getAttribute("data-path"))a=
b[c].getAttribute("data-path");else if(a===null){a=b[c].getAttribute("src").split("/");a.length-=1;a=a.join("/")}break}if(a===null)a="./";if(a.charAt(a.length-1)!="/")a+="/";return a},_getHTCFilename:function(){var a="svg.htc",b=window.location.toString();if(b.indexOf("svg.htcFilename=svg-htc.php")!=-1)return"svg-htc.php";else if(b.indexOf("svg.htcFilename=svg-htc.jsp")!=-1)return"svg-htc.jsp";else if(b.indexOf("svg.htcFilename=svg-htc.asp")!=-1)return"svg-htc.asp";b=document.getElementsByTagName("script");
for(var c=0;c<b.length;c++)if(/svg(?:\-uncompressed)?\.js/.test(b[c].src)&&b[c].getAttribute("data-htc-filename")){a=b[c].getAttribute("data-htc-filename");break}return a},_onDOMContentLoaded:function(){if(!arguments.callee.done){arguments.callee.done=true;this._startTime=(new Date).getTime();var a=document.getElementById("__ie__svg__onload");if(a){a.parentNode.removeChild(a);a.onreadystatechange=null}this._saveWindowOnload();this.config=new S;j&&this._watchUnload();this._svgScripts=this._getSVGScripts();
this._svgObjects=this._getSVGObjects();this.totalSVG=this._svgScripts.length+this._svgObjects.length;this._cleanupSVGObjects();this._handleHTMLTitleBug();if(this.config.supported){if(this.config.use=="flash")this.renderer=l;else if(this.config.use=="native")this.renderer=o;this.renderer._patchBrowserObjects(window,document);this.renderer.documentRef=document;if(this.config.use=="flash"){this._createResizeListener();this._attachResizeListener()}if(this.totalSVG===0)this._fireOnLoad();else{for(a=0;a<
this._svgScripts.length;a++)this._processSVGScript(this._svgScripts[a]);for(a=0;a<this._svgObjects.length;a++){var b=this._processSVGObject(this._svgObjects[a]);this._svgObjects[a]._objID=b}}}else{this._displayNotSupported(this.config.reason);this._fireOnLoad()}}},_createResizeListener:function(){this._resizeFunc=j?function(a){return function(){a._onWindowResize()}}(this):m(this,function(){this._onWindowResize()})},_attachResizeListener:function(){j?window.attachEvent("onresize",this._resizeFunc):
window.addEventListener("resize",this._resizeFunc,false)},_detachResizeListener:function(){j?window.detachEvent("onresize",this._resizeFunc):window.removeEventListener("resize",this._resizeFunc,false)},_onWindowResize:function(){if(this.pageLoaded){this._detachResizeListener();for(var a=0;a<this.handlers.length;a++){var b=this.handlers[a];if(!(!b._inserter||!b.flash||!b._loaded)){var c=b._inserter._determineSize();b.flash.width=c.width;b.flash.height=c.height;b.sendToFlash("jsHandleResize",[c.pixelsWidth,
c.pixelsHeight])}}this._attachResizeListener()}},_getSVGScripts:function(){for(var a=document.getElementsByTagName("script"),b=[],c=0;c<a.length;c++)a[c].type=="image/svg+xml"&&b.push(a[c]);return b},_getSVGObjects:function(){for(var a=document.getElementsByTagName("object"),b=[],c=0;c<a.length;c++)if(a[c].getAttribute("classid")=="image/svg+xml")b.push(a[c]);else a[c].getAttribute("type")=="image/svg+xml"&&b.push(a[c]);return b},_displayNotSupported:function(a){for(var b=0;b<this._svgObjects.length;b++){var c=
this._svgObjects[b];if(!c.childNodes.length||c.childNodes.length==1&&c.childNodes[0].nodeType==3&&/^[ ]*$/m.test(c.childNodes[0].nodeValue)){var d=document.createElement("span");d.className="svg-noscript";d.appendChild(document.createTextNode(a));c.parentNode.replaceChild(d,c)}}for(b=0;b<this._svgScripts.length;b++){c=this._svgScripts[b];d=document.createElement("span");d.className="svg-noscript";for(var e=c.nextSibling;e&&e.nodeType!=1;)e=e.nextSibling;if(e&&e.nodeName.toLowerCase()=="noscript")d.innerHTML=
e.innerHTML;else d.appendChild(document.createTextNode(a));c.parentNode.insertBefore(d,c)}},_fireOnLoad:function(){if(!(this.handlers.length<this._svgObjects.length)){for(var a=true,b=0;b<this.handlers.length;b++)if(!this.handlers[b]._loaded){a=false;break}if(a){this.pageLoaded=true;this._endTime=(new Date).getTime();if(this._loadListeners.length){var c=this;window.setTimeout(function(){var d=c._loadListeners;c._loadListeners=[];for(var e=this.totalLoaded=0;e<d.length;e++)try{d[e]()}catch(f){console.log("Error while firing onload: "+
(f.message||f))}},1)}}}},_cleanSVG:function(a,b,c){if(/^\s*<\!\[CDATA\[/.test(a)){a=a.replace(/^\s*<\!\[CDATA\[/,"");a=a.replace(/\]\]>\s*/,"")}RegExp.lastIndex=0;for(var d,e=/<!ENTITY\s+(\S+)\s+"([^"]*)"/g;e.exec(a)!=null;){var f=RegExp.$2;a=a.split("&"+RegExp.$1+";").join(f)}if(b){if(/\<\?xml/m.test(a)==false)a='<?xml version="1.0"?>\n'+a;if(/xmlns:[^=]+=['"]http:\/\/www\.w3\.org\/1999\/xlink['"]/.test(a)==false)a=a.replace("<svg",'<svg xmlns:xlink="http://www.w3.org/1999/xlink"');if(/xmlns\=['"]http:\/\/www\.w3\.org\/2000\/svg['"]/.test(a)==
false)a=a.replace("<svg",'<svg xmlns="http://www.w3.org/2000/svg"')}if(a.charAt(0)!="<")a=a.replace(/\s*<\?xml/,"<?xml");if(c)a=a.replace(/\>\s+\</gm,"><");if(this.renderer==l){a=a.replace(/<!\-\-[\s\S]*?\-\->/g,"");a=a.replace(/<svg/,"<SVGROOT");a=a.replace(/<svg/g,"<NESTEDSVG");a=a.replace(/<SVGROOT/,"<svg");b=a.match(/<svg/)[0];e=a.split(/<svg/);if(a=e[1].indexOf("<![CDATA[")!=-1){RegExp.lastIndex=0;var h=/<\!\[CDATA\[/g;d=h.exec(e[1]);var g=[];for(f=0;d&&RegExp.rightContext;){var k=h.lastIndex-
9,n=RegExp.rightContext;d=h.lastIndex+n.indexOf("]]\>")+2;n=n.substring(0,n.indexOf("]]\>"));n="<![CDATA["+n+"]]\>";g.push(n);k=e[1].substring(0,k);d=e[1].substring(d+1,e[1].length);e[1]=k+"__SVG_CDATA_TOKEN_"+f+d;d=h.exec(e[1]);f++}}e[1]=e[1].replace(/>([^<]+)</g,"><__text>$1</__text><");if(a)for(f=0;f<g.length;f++)e[1]=e[1].replace("__SVG_CDATA_TOKEN_"+f,g[f]);a=e[0]+b+e[1];for(f=2;f<e.length;f++)a+=e[f]}a=a.replace(/<NESTEDSVG/g,"<svg");if(this.renderer==l){a=l._encodeFlashData(a);a=a.replace(/xmlns(\:[^=]*)?=['"]http\:\/\/www\.w3\.org\/2000\/svg['"]/g,
'xmlns$1="'+svgnsFake+'"')}c=this._addTracking(a,c);a=A?(new XMLSerializer).serializeToString(c):c.xml;if(this.renderer==l)a=a.replace(RegExp(svgnsFake,"g"),svgns);return{svg:a,xml:c}},_processSVGScript:function(a){var b;if(u){b="";for(var c=0;c<a.childNodes.length;c++)b+=a.childNodes[c].textContent}else b=a.innerHTML;var d=this._cleanSVG(b,true,true);c=d.svg;var e=d.xml;d=e.documentElement.getAttribute("id");var f=e.documentElement.getAttribute("onload");if(f){f=new Function('var evt = { target: document.getElementById("'+
d+'") ,currentTarget: document.getElementById("'+d+'") ,preventDefault: function() { this.returnValue=false; }};'+f);this._loadListeners.push(function(h,g){return function(){var k=svgweb.handlers[g];k=svgweb.getHandlerType()=="flash"?k.document.documentElement._getProxyNode():document.getElementById(g);return h.apply(k)}}(f,d))}a=new this.renderer({type:"script",svgID:d,xml:e,svgString:c,origSVG:b,scriptNode:a});this.handlers[d]=a;this.handlers.push(a);a.start()},_processSVGObject:function(a){var b=
a.getAttribute("id");if(!b){a.setAttribute("id",svgweb._generateID("__svg__random__","__object"));b=a.getAttribute("id")}a=new this.renderer({type:"object",objID:b,objNode:a});this.handlers[b]=a;this.handlers.push(a);a.start();return b},_generateID:function(a,b){b||(b="");a||(a="");return a+("_"+K++)+b},_addTracking:function(a,b){var c=z(a,!b),d=c.documentElement;d&&!d.getAttribute("id")&&d.setAttribute("id",this._generateID("__svg__random__",null));if(this.getHandlerType()!="flash")return c;for(var e=
d;e;){e.nodeType==i.ELEMENT_NODE&&e.setAttribute("__guid","_"+K++);e.nodeType==i.ELEMENT_NODE&&!e.getAttribute("id")&&e.setAttribute("id",svgweb._generateID("__svg__random__",null));var f=e.firstChild;if(f)e=f;else for(;e;){if(e!=d)if(f=e.nextSibling){e=f;break}if(e==d)e=null;else{e=e.parentNode;if(e.nodeType!=1)e=null}}}return c},_handleDone:function(a,b,c){this.totalLoaded++;if(b=="script"&&c._scriptNode._onloadListeners){for(a=0;a<c._scriptNode._onloadListeners.length;a++){var d=c._scriptNode._onloadListeners[a];
if(svgweb.getHandlerType()=="flash")d=d.listener;else c._svgRoot.addEventListener.toString().indexOf("[native code]")!=-1&&o._patchAddEventListener(c._svgRoot);try{var e=document.getElementById(c.id);w?setTimeout(function(){d.apply(e);e=d=null},1):d.apply(e)}catch(f){console.log("Error while firing onload listener: "+f.message||f)}}c._scriptNode._onloadListeners=[]}this.totalLoaded>=this.totalSVG&&this._fireOnLoad()},_handleHTMLTitleBug:function(){var a=document.getElementsByTagName("head")[0],b=
a.getElementsByTagName("title");if(b.length===0){b=document.createElement("title");a.appendChild(b)}},_fireFlashError:function(){},_exportID:function(a){a.__defineGetter__("id",function(){return a.getAttribute("id")});a.__defineSetter__("id",function(b){return a.setAttribute("id",b)})},_watchUnload:function(){window.attachEvent("onunload",function(){window.detachEvent("onunload",arguments.callee);svgweb._fireUnload()})},_fireUnload:function(){if(j){for(var a=0;a<svgweb.handlers.length;a++)if(svgweb.handlers[a].type==
"object"){var b=svgweb.handlers[a].flash;b&&b.parentNode&&svgweb.removeChild(b,b.parentNode)}else svgweb.handlers[a].document.documentElement=null;if(b=document.getElementById("__htc_container")){for(a=0;a<b.childNodes.length;a++){var c=b.childNodes[a];if(c.nodeType==1&&c.namespaceURI==svgns){c.detachEvent("onpropertychange",c._fakeNode.style._changeListener);c.style.item=null;c.style.setProperty=null;c.style.getPropertyValue=null}if(c._fakeNode)c._fakeNode._htcNode=null;c._fakeNode=null;c._handler=
null}b.parentNode.removeChild(b)}for(a=0;a<svgweb.handlers.length;a++)svgweb.handlers[a].flash=null;svgweb.handlers=null;for(a=0;a<svgweb._removedNodes.length;a++){b=svgweb._removedNodes[a];if(b._fakeNode)b._fakeNode._htcNode=null;b._fakeNode=null;b._handler=null}svgweb._removedNodes=null;document.getElementById=document._getElementById;document._getElementById=null;document.getElementsByTagNameNS=document._getElementsByTagNameNS;document._getElementsByTagNameNS=null;document.createElementNS=document._createElementNS;
document._createElementNS=null;document.createElement=document._createElement;document._createElement=null;document.createTextNode=document._createTextNode;document._createTextNode=null;document._importNodeFunc=null;document.createDocumentFragment=document._createDocumentFragment;document._createDocumentFragment=null;window.addEventListener=null;window._addEventListener=null;window.attachEvent=window._attachEvent;J=window._attachEvent=null}},_cleanupSVGObjects:function(){if(this.config.use=="flash"&&
this.config.hasNativeSVG())for(var a=0;a<this._svgObjects.length;a++){for(var b=this._svgObjects[a],c=document.createElement("div"),d=0;d<b.attributes.length;d++){var e=b.attributes[d];c.setAttribute(e.nodeName,e.nodeValue)}c.innerHTML=b.innerHTML;b.parentNode.replaceChild(c,b);this._svgObjects[a]=c}for(a=0;a<this._svgObjects.length;a++)this._svgObjects[a].style.visibility="hidden"},_interceptOnloadListeners:function(){if(window.addEventListener){window._addEventListener=window.addEventListener;window.addEventListener=
function(a,b,c){if(a.toLowerCase()=="svgload")svgweb.addOnLoad(b);else return window._addEventListener(a,b,c)}}else window.addEventListener=function(a,b){if(a.toLowerCase()=="svgload")svgweb.addOnLoad(b);else if(j&&window.attachEvent)return window.attachEvent("on"+a,b)};if(j&&window.attachEvent){window._attachEvent=window.attachEvent;window.attachEvent=function(a,b){if(a.toLowerCase()=="onsvgload")svgweb.addOnLoad(b);else return window._attachEvent(a,b)}}},_saveWindowOnload:function(){var a=window.onsvgload;
if(document.getElementsByTagName("body")){var b=document.getElementsByTagName("body")[0];if(b.getAttribute("onsvgload")){callbackStr=b.getAttribute("onsvgload");a=function(c){return function(){eval(c)}}(callbackStr)}}if(a){j?this._loadListeners.splice(0,0,a):this._loadListeners.push(a);window.onsvgload=a=null}}});q(S,{supported:false,reason:null,use:null,_forceFlash:function(){for(var a=false,b=false,c=document.getElementsByTagName("meta"),d=0;d<c.length;d++)if(c[d].name=="svg.render.forceflash"&&
c[d].content.toLowerCase()=="true")b=a=true;if(window.location.search.indexOf("svg.render.forceflash=true")!=-1)a=true;else if(b&&window.location.search.indexOf("svg.render.forceflash=false")!=-1)a=false;return a},hasNativeSVG:function(){return document.implementation&&document.implementation.hasFeature?document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1"):false}});T.prototype={version:-1,versionMajor:-1,versionMinor:-1,versionRevision:-1,capable:false,isVersionOrAbove:function(a,
b,c){c=parseFloat("."+c);return this.versionMajor>=a&&this.versionMinor>=b&&this.versionRevision>=c?true:false},_detectVersion:function(){for(var a,b=25;b>0;b--){if(j){var c;try{c=b>6?new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+b):new ActiveXObject("ShockwaveFlash.ShockwaveFlash");if(typeof c=="object"){if(b==6)c.AllowScriptAccess="always";a=c.GetVariable("$version")}}catch(d){continue}}else a=this._JSFlashInfo(b);if(a==-1){this.capable=false;break}else if(a!==0){a=j?a.split(" ")[1].split(","):
a.split(".");this.versionMajor=a[0];this.versionMinor=a[1];this.versionRevision=a[2];this.version=parseFloat(this.versionMajor+"."+this.versionRevision);this.capable=true;break}}},_JSFlashInfo:function(){if(navigator.plugins!==null&&navigator.plugins.length>0)if(navigator.plugins["Shockwave Flash 2.0"]||navigator.plugins["Shockwave Flash"]){var a=navigator.plugins["Shockwave Flash"+(navigator.plugins["Shockwave Flash 2.0"]?" 2.0":"")].description.split(" "),b=a[2].split("."),c=b[0];b=b[1];a=(a[3]||
a[4]).split("r");return c+"."+b+"."+(a[1]>0?a[1]:0)}return-1}};l._keyboardListeners=[];l._unattachedDoc=z('<?xml version="1.0"?>\n<svg xmlns="'+svgns+'"></svg>',false);l._prepareBehavior=function(a,b){for(var c=null,d=0;d<document.namespaces.length;d++)if(document.namespaces.item(d).name=="svg"){c=document.namespaces.item(d);break}if(c===null)c=document.namespaces.add("svg",svgns);c.doImport(a+b)};l._getNode=function(a,b){var c;c=svgweb._guidLookup["_"+a.getAttribute("__guid")];var d=false;if(!c&&
a.nodeName=="__text")d=true;if(!c&&!d&&a.nodeType==i.ELEMENT_NODE)c=new t(a.nodeName,a.prefix,a.namespaceURI,a,b);else if(!c&&(a.nodeType==i.TEXT_NODE||d))c=new i("#text",i.TEXT_NODE,null,null,a,b);else if(!c)throw Error("Unknown node type given to _getNode: "+a.nodeType);return c._getProxyNode()};l._patchBrowserObjects=function(a,b){if(!b._getElementById){b._getElementById=b.getElementById;b.getElementById=l._getElementById;b._getElementsByTagNameNS=b.getElementsByTagNameNS;b.getElementsByTagNameNS=
l._getElementsByTagNameNS;b._createElementNS=b.createElementNS;b.createElementNS=l._createElementNS;b._createElement=b.createElement;b.createElement=l._createElement;b._createTextNode=b.createTextNode;b.createTextNode=l._createTextNode;b._importNodeFunc=l._importNodeFunc;b._createDocumentFragment=b.createDocumentFragment;b.createDocumentFragment=l._createDocumentFragment;b._addEventListener=b.addEventListener;b.addEventListener=l._addEventListener}};l._patchFakeObjects=function(a,b){b._addEventListener=
b.addEventListener;b.addEventListener=l._addEventListener};l._addEventListener=function(a,b,c){if(a.substring(0,3)=="key"){var d=function(e){return function(f){if(!f.preventDefault)f.preventDefault=function(){this.returnValue=false;f=null};typeof e=="object"?e.handleEvent.call(e,f):e(f)}}(b);d.__type=a;d.__listener=b;d.__useCapture=c;this._handler?this._handler._keyboardListeners.push(d):l._keyboardListeners.push(d)}if(this._addEventListener)this._addEventListener(a,b,c);else this.attachEvent&&this.attachEvent("on"+
a,b)};l._getElementById=function(a){var b=document._getElementById(a);if(b!==null)return b;for(var c=0;c<svgweb.handlers.length;c++){if(svgweb.handlers[c].type=="script")b=svgweb.handlers[c].document.getElementById(a);if(b)return b}return null};l._getElementsByTagNameNS=function(a,b){var c=r();if(document._getElementsByTagNameNS)for(var d=document._getElementsByTagNameNS(a,b),e=0;e<d.length;e++)c.push(d[e]);for(var f=0;f<svgweb.handlers.length;f++)if(svgweb.handlers[f].type=="script"){d=svgweb.handlers[f].document.getElementsByTagNameNS(a,
b);for(e=0;e<d.length;e++)c.push(d[e])}return c};l._createElementNS=function(a,b,c){if(c===undefined)c=false;if(a===null||a=="http://www.w3.org/1999/xhtml")return j?document.createElement(b):document._createElementNS(a,b);var d=false;if(a==svgns){a=svgnsFake;d=true}if(!j&&!c){if(svgweb._allSVGNamespaces["_"+a])d=true;for(c=0;!d&&c<svgweb.handlers.length;c++)if(svgweb.handlers[c].type=="script"&&svgweb.handlers[c].document._namespaces["_"+a]){d=true;break}if(!d)return document._createElementNS(a,b)}var e;
if(svgweb._allSVGNamespaces["_"+a])e=svgweb._allSVGNamespaces["_"+a];else for(c=0;c<svgweb.handlers.length;c++)if(svgweb.handlers[c].type=="script")if(e=svgweb.handlers[c].document._namespaces["_"+a])break;if(e=="xmlns"||!e)e=b.indexOf(":")!=-1?b.substring(0,b.indexOf(":")):null;return(new t(b,e,a))._getProxyNode()};l._createElement=function(a,b){if(b){if(b&&a.toLowerCase()=="object"){var c=document._createElement("object");c._onloadListeners=[];var d=c.addEventListener;(function(e,f){e.addEventListener=
function(h,g,k){if(h.toLowerCase()=="svgload")this._onloadListeners.push(g);else d?f(h,g,k):this.attachEvent("on"+h,g)}})(c,d);return c}}else return document._createElement(a)};l._createTextNode=function(a,b){if(b){var c=l._unattachedDoc,d;d=j?c.createElement("__text"):c.createElementNS(svgnsFake,"__text");d.appendChild(c.createTextNode(a));c=new i("#text",i.TEXT_NODE,null,null,d);c._nodeValue=a;c.ownerDocument=document;return c._getProxyNode()}else return document._createTextNode(a)};l._importNodeFunc=
function(a,b,c){switch(b.nodeType){case 1:var d=a.createElement(b.nodeName);if(b.attributes&&b.attributes.length>0)for(var e=0;e<b.attributes.length;e++){var f=b.attributes[e].nodeName,h=b.getAttribute(f);d.setAttribute(f,h)}if(c&&b.childNodes&&b.childNodes.length>0)for(e=0;e<b.childNodes.length;e++)d.appendChild(document._importNodeFunc(a,b.childNodes[e],c));return d;case 3:return a.createTextNode(b.nodeValue)}};l._createDocumentFragment=function(a){return a?(new C(document))._getProxyNode():document._createDocumentFragment()};
l._encodeFlashData=function(a){a=a.toString().replace(/\\/g,"\\\\");return a=a.replace(/&/g,"__SVG__AMPERSAND")};q(l,{flashID:null,flash:null,start:function(){if(this.type=="script")this._handleScript();else this.type=="object"&&this._handleObject()},_stringToMsg:function(a){if(a==null||typeof a!="string")return a;var b={};a=a.split(/__SVG__DELIMIT/g);for(var c=0;c<a.length;c++){var d=a[c].indexOf(":"),e=a[c].substring(0,d);d=a[c].substring(d+1);if(d==="true")d=true;else if(d==="false")d=false;else if(d===
"null")d=null;else if(d==="undefined")d=undefined;b[e]=d}return b},debugMsg:function(a){if(a===undefined)return"undefined";else if(a===null)return"null";var b=[],c;for(c in a)b.push(c+":"+a[c]);b=b.join(", ");return"{"+b+"}"},sendToFlash:function(a,b){var c=b.join("__SVG__DELIMIT");if(this._redrawManager.isSuspended())this._redrawManager.batch(a,c);else try{typeof this.flash[a]=="undefined"&&__flash__addCallback(this.flash,a);return this.flash[a](c)}catch(d){console.log("Call to flash but flash is not present! "+
a+": "+this.debugMsg(c)+": "+d)}},onMessage:function(a){a=this._stringToMsg(a);if(a.type=="event")this._onEvent(a);else if(a.type=="log")this._onLog(a);else if(a.type=="script")this._onObjectScript(a);else if(a.type=="viewsource")this._onViewSource();else if(a.type=="viewsourceDynamic")this._onViewSourceDynamic(a);else a.type=="error"&&this._onFlashError(a)},fireOnLoad:function(a,b){svgweb._handleDone(a,b,this)},_handleScript:function(){this.document=new D(this._xml,this);this.document.documentElement=
new E(this._xml.documentElement,this._svgString,this._scriptNode,this)},_handleObject:function(){this._svgObject=new W(this._objNode,this);this._objNode=null},_onLog:function(a){console.log("FLASH: "+a.logString)},_onEvent:function(a){if(a.eventType.substr(0,5)=="mouse"||a.eventType=="click")this._onMouseEvent(a);else if(a.eventType.substr(0,3)=="key")this._onKeyboardEvent(a);else if(a.eventType=="onRenderingFinished")if(this.type=="script")this.document.documentElement._onRenderingFinished(a);else this.type==
"object"&&this._svgObject._onRenderingFinished(a);else if(a.eventType=="onFlashLoaded")if(this.type=="script")this.document.documentElement._onFlashLoaded(a);else this.type=="object"&&this._svgObject._onFlashLoaded(a)},_onMouseEvent:function(a){var b=this._getElementByGuid(a.targetGUID),c=this._getElementByGuid(a.currentTargetGUID),d={target:b._getProxyNode(),currentTarget:c._getProxyNode(),type:a.eventType,clientX:Math.round(new Number(a.stageX)),clientY:Math.round(new Number(a.stageY)),screenX:Math.round(new Number(a.stageX)),
screenY:Math.round(new Number(a.stageY)),altKey:a.altKey,ctrlKey:a.ctrlKey,shiftKey:a.shiftKey,button:0,preventDefault:function(){this.returnValue=false},stopPropagation:function(){}},e=c._listeners[a.eventType];if(e)for(var f=0;f<e.length;f++){var h=e[f].listener;typeof h=="object"?h.handleEvent.call(h,d):h.call(d.currentTarget,d)}if(a.scriptCode!=null)this.type=="object"?this.sandbox_eval(this._svgObject._sandboxedScript('var evt = { target: document.getElementById("'+b._getProxyNode().getAttribute("id")+
'") ,\ncurrentTarget:document.getElementById("'+c._getProxyNode().getAttribute("id")+'") ,\ntype: "'+a.eventType+'",\nclientX: '+Math.round(new Number(a.stageX))+",\nclientY: "+Math.round(new Number(a.stageY))+",\nscreenX: "+Math.round(new Number(a.stageX))+",\nscreenY: "+Math.round(new Number(a.stageY))+",\naltKey: "+a.altKey+",\nctrlKey: "+a.ctrlKey+",\nshiftKey: "+a.shiftKey+",\nbutton: 0,\npreventDefault: function() { this.returnValue=false; },\nstopPropagation: function() { }\n};\n"+(";(function (evt) { "+
a.scriptCode+"; }).call(evt.currentTarget, evt);\n"))):(new Function(a.scriptCode)).call(d.currentTarget,d)},_onKeyboardEvent:function(a){var b=this._getElementByGuid(a.targetGUID),c=this._getElementByGuid(a.currentTargetGUID);a={target:b._getProxyNode(),currentTarget:c._getProxyNode(),type:a.eventType,keyCode:Number(a.keyCode),altKey:a.altKey,ctrlKey:a.ctrlKey,shiftKey:a.shiftKey,preventDefault:function(){this.returnValue=false},stopPropagation:function(){}};if(!((N||aa)&&this.flash.getAttribute("wmode")==
"transparent")){if(this.type=="script")for(b=0;b<l._keyboardListeners.length;b++){c=l._keyboardListeners[b];c.__type==a.type&&c.call(a.currentTarget,a)}var d=this._keyboardListeners;for(b=0;b<d.length;b++){c=d[b];c.__type==a.type&&c.call(a.currentTarget,a)}}},addKeyboardListener:function(a,b,c){var d=function(e){return function(f){if(!f.preventDefault)f.preventDefault=function(){this.returnValue=false;f=null};typeof e=="object"?e.handleEvent.call(e,f):e(f)}}(b);d.__type=a;d.__listener=b;d.__useCapture=
c;this._keyboardListeners.push(d)},_getElementByGuid:function(a){var b=svgweb._guidLookup["_"+a];if(b)return b;var c;if(this.type=="script")c=v(this._xml,null,'//*[@__guid="'+a+'"]');else if(this.type=="object")c=v(this._svgObject._xml,null,'//*[@__guid="'+a+'"]');if(c.length)a=c[0];else return null;b=l._getNode(a,this);if(j&&b._fakeNode)b=b._fakeNode;b._attached=true;return b},_onFlashError:function(a){this._onLog(a);svgweb._fireFlashError("FLASH: "+a.logString);throw Error("FLASH: "+a.logString);
},_onObjectScript:function(a){this._svgObject._scriptsToExec.push(a.script)},_onViewSource:function(){var a=this._origSVG;a||(a="SVG Source Not Available");a=a.replace(/>/g,"&gt;").replace(/</g,"&lt;");var b=window.open("","_blank");b.document.write("<html><body><pre>"+a+"</pre></body></html>");b.document.close()},_onViewSourceDynamic:function(a){if(a.source.indexOf("<?xml")==-1)a.source='<?xml version="1.0"?>\n'+a.source;a.source=a.source.replace(/<svg:([^ ]+) /g,"<$1 ");a.source=a.source.replace(/<\/svg:([^>]+)>/g,
"</$1>");a.source=a.source.replace(/\n\s*<__text[^\/]*\/>/gm,"");a.source=a.source.replace(/<__text[^>]*>([^<]*)<\/__text>/gm,"$1");a.source=a.source.replace(/<__text[^>]*>/g,"");a.source=a.source.replace(/<\/__text>/g,"");a.source=a.source.replace(/\s*__guid="[^"]*"/g,"");a.source=a.source.replace(/ id="__svg__random__[^"]*"/g,"");a.source=a.source.replace(/>\n\n/g,">\n");a.source=a.source.replace(/>/g,"&gt;");a.source=a.source.replace(/</g,"&lt;");var b=window.open("","_blank");b.document.write("<body><pre>"+
a.source+"</pre></body>");b.document.close()}});o._patchBrowserObjects=function(a,b){if(!b._getElementById){b._getElementById=b.getElementById;b.getElementById=function(d){var e=b._getElementById(d);if(e!==null)return e.parentNode===null?null:e;e=v(b,null,'//*[@id="'+d+'"]');if(e.length){d=e[0];d.namespaceURI!==null&&d.namespaceURI!=svgns&&d.namespaceURI!="http://www.w3.org/1999/xhtml"&&svgweb._exportID(d);return d}else return null};b._getElementsByTagNameNS=b.getElementsByTagNameNS;b.getElementsByTagNameNS=
function(d,e){var f=b._getElementsByTagNameNS(d,e);if(f!==null&&f.length!==0){if(d!==null&&d!="http://www.w3.org/1999/xhtml"&&d!=svgns){for(var h=0;h<f.length;h++){var g=f[h];svgweb._exportID(g)}return f}return f}if(f===null||f.length===0)f=r();var k;for(h=0;h<svgweb.handlers.length;h++){g=svgweb.handlers[h];if(g.type!="object")if(k=g._namespaces["_"+d]){k=v(b,g._svgRoot,k=="xmlns"?"//*[namespace-uri()='"+svgns+"' and name()='"+e+"']":k?"//"+k+":"+e:"//"+e,g._namespaces);if(k!==null&&k!==undefined&&
k.length>0){for(h=0;h<k.length;h++){g=k[h];g.namespaceURI!==null&&g.namespaceURI!=svgns&&g.namespaceURI!="http://www.w3.org/1999/xhtml"&&svgweb._exportID(g);f.push(g)}return f}}}return r()};b._createElementNS=b.createElementNS;b.createElementNS=function(d,e){if(d!=svgns||e!="svg")return b._createElementNS(d,e);var f=b._createElementNS(d,e);return f=o._patchAddEventListener(f)};b._createElement=b.createElement;b.createElement=function(d,e){if(!e)return b._createElement(d);if(e&&d=="object"){var f=
b._createElement(d);return f=o._patchAddEventListener(f)}else throw"Unknown createElement() call for SVG: "+d;};o._patchCloneNode();N&&o._patchStyleObject(a);var c=b.rootElement;c&&c.localName=="svg"&&c.namespaceURI==svgns&&o._patchSvgFileAddEventListener(a,b)}};o._patchCloneNode=function(){var a;a=typeof SVGSVGElement!="undefined"?SVGSVGElement.prototype:document.createElementNS(svgns,"svg").__proto__;if(!a._cloneNode){a._cloneNode=a.cloneNode;a.cloneNode=function(b){b=this._cloneNode(b);o._patchAddEventListener(b);
return b}}};o._patchAddEventListener=function(a){if(a.nodeName.toLowerCase()=="object"&&!o._objectAddEventListener)o._objectAddEventListener=a.addEventListener;a._addEventListener=a.nodeName.toLowerCase()=="object"?o._objectAddEventListener:a.addEventListener;a._onloadListeners=[];a.addEventListener=function(){return function(b,c,d){b.toLowerCase()=="svgload"?this._onloadListeners.push(c):a._addEventListener(b,c,d)}}();return a};o._patchStyleObject=function(a){var b=a.CSSStyleDeclaration;for(a=0;a<
s._allStyles.length;a++){var c=s._allStyles[a],d=c.replace(/([A-Z])/g,"-$1").toLowerCase();(function(e,f){b.prototype.__defineSetter__(e,function(h){return this.setProperty(f,h,null)});b.prototype.__defineGetter__(e,function(){return this.getPropertyValue(f)})})(c,d)}};o._patchSvgFileAddEventListener=function(a){var b=a.addEventListener;a.addEventListener=function(c,d,e){if(c.toLowerCase()!="svgload")b(c,d,e);else typeof d=="object"?d.handleEvent.call(d,undefined):d()};if(Object.defineProperty)Object.defineProperty(a,
"onsvgload",{get:function(){return this.__onsvgload},set:function(c){this.__onsvgload=c;this.addEventListener("SVGLoad",c,false)}});else{a.__defineGetter__("onsvgload",function(){return this.__onsvgload});a.__defineSetter__("onsvgload",function(c){this.__onsvgload=c;this.addEventListener("SVGLoad",c,false)})}};q(o,{start:function(){if(this.type=="object")this._handleObject();else this.type=="script"&&this._handleScript()},_handleScript:function(){this._namespaces=this._getNamespaces();this._processSVGScript(this._xml,
this._svgString,this._scriptNode);this._loaded=true;svgweb._handleDone(this.id,"script",this)},_handleObject:function(){this._objNode.style.overflow="hidden";this._objNode.style.visibility="visible";if(this._objNode._svgWindow)this._onObjectLoad(this._objNode._svgFunc,this._objNode._svgWindow);else{this._objNode._svgHandler=this;var a=this,b=function(){a._objNode.contentDocument&&a._onObjectLoad(a._objNode._svgFunc,a._objNode.contentDocument.defaultView)};if(this._objNode._addEventListener)this._objNode._addEventListener("load",
b,false);else if(w&&this._objNode.onload==null){var c=this._objNode.parentNode,d=this._objNode.nextSibling;c.removeChild(this._objNode);this._objNode.addEventListener("load",b,false);d?c.insertBefore(this._objNode,d):c.appendChild(this._objNode)}else this._objNode.addEventListener("load",b,false)}},_onObjectLoad:function(a,b){if(this._loaded)a&&a.apply(b);else{this._loaded=true;var c=b.document;o._patchBrowserObjects(b,c);var d=c.rootElement;d&&this._patchCurrentTranslate(d);b.svgns=svgns;b.xlinkns=
xlinkns;this._namespaces=this._getNamespaces(c);a&&a.apply(b);for(c=0;this._objNode._onloadListeners&&c<this._objNode._onloadListeners.length;c++){a=this._objNode._onloadListeners[c];a.apply(this._objNode)}svgweb._fireOnLoad()}},_processSVGScript:function(a,b,c){var d;try{d=document.importNode(a.documentElement,true)}catch(e){if(typeof DOMParser!="undefined"){a=(new DOMParser).parseFromString(b,"application/xml");d=document.adoptNode(a.documentElement,true)}}c.parentNode.replaceChild(d,c);this._svgRoot=
d;this._patchCurrentTranslate(this._svgRoot)},_getNamespaces:function(a){var b=[];a=a?a.documentElement.attributes:this._xml.documentElement.attributes;for(var c=0;c<a.length;c++){var d=a[c];if(/^xmlns:?(.*)$/.test(d.nodeName)){var e=d.nodeName.match(/^xmlns:?(.*)$/);e=e[1]?e[1]:"xmlns";d=d.nodeValue;if(!b["_"+e]){b["_"+e]=d;b["_"+d]=e;b.push(d)}}}return b},_patchCurrentTranslate:function(a){var b;if(typeof SVGRoot!="undefined")b=a.currentTranslate;else if(typeof a.currentTranslate.__proto__!="undefined")b=
a.currentTranslate.__proto__;else if(typeof SVGPoint!="undefined")b=SVGPoint.prototype;b.setX=function(c){return this.x=c};b.getX=function(){return this.x};b.setY=function(c){return this.y=c};b.getY=function(){return this.y};b.setXY=function(c,d){this.x=c;this.y=d}}});q(U,{isSuspended:function(){return this._ids.length>0},batch:function(a,b){this._batch.push(a+":"+b)},suspendRedraw:function(a,b){if(a===undefined)throw"Not enough arguments to suspendRedraw";if(b===undefined)b=true;var c=this._nextID;
this._nextID++;var d=this,e=window.setTimeout(function(){d.unsuspendRedraw(c);delete d._timeoutIDs["_"+c]},a);this._ids.push(c);this._timeoutIDs["_"+c]=e;if(b)try{typeof this._handler.flash.jsSuspendRedraw=="undefined"&&__flash__addCallback(this._handler.flash,"jsSuspendRedraw");this._handler.flash.jsSuspendRedraw()}catch(f){console.log("suspendRedraw exception: "+f)}return c},unsuspendRedraw:function(a,b){if(b===undefined)b=true;for(var c=-1,d=0;d<this._ids.length;d++)if(this._ids[d]==a){c=d;break}if(c==
-1)throw"Unknown id passed to unsuspendRedraw: "+a;this._timeoutIDs["_"+a]!=undefined&&window.clearTimeout(this._timeoutIDs["_"+a]);this._ids.splice(c,1);delete this._timeoutIDs["_"+a];if(!(this.isSuspended()||this._batch.length==0&&!b)){c=this._batch.join("__SVG__METHOD__DELIMIT");this._batch=[];try{typeof this._handler.flash.jsUnsuspendRedrawAll=="undefined"&&__flash__addCallback(this._handler.flash,"jsUnsuspendRedrawAll");this._handler.flash.jsUnsuspendRedrawAll(c)}catch(e){console.log("unsuspendRedraw exception: "+
e)}}},unsuspendRedrawAll:function(){for(var a=0;a<this._ids.length;a++)this.unsuspendRedraw(this._ids[a])},forceRedraw:function(){}});q(V,{hasFeature:function(){}});O(i,{ELEMENT_NODE:1,TEXT_NODE:3,DOCUMENT_NODE:9,DOCUMENT_FRAGMENT_NODE:11});q(i,{_listeners:null,_detachedListeners:null,insertBefore:function(a,b){if(this.nodeType!=i.ELEMENT_NODE&&this.nodeType!=i.DOCUMENT_FRAGMENT_NODE)throw"Not supported";a.parentNode&&a.parentNode.removeChild(a);a=this._getFakeNode(a);b=this._getFakeNode(b);var c=
a.nodeType==i.DOCUMENT_FRAGMENT_NODE,d;if(c)d=a._getChildNodes(true);if(c&&d.length==0){a._reset();return a._getProxyNode()}var e=this._findChild(b);if(e===null)throw Error("Invalid child passed to insertBefore");e=e.position;var f=[];if(c)for(c=0;c<d.length;c++)f.push(d[c]);else f.push(a);for(c=0;c<f.length;c++){this._nodeXML.insertBefore(this._importNode(f[c],false),b._nodeXML);this._processAppendedChildren(f[c],this,this._attached)}if(this._attached&&this._passThrough){d=l._encodeFlashData(B(a,
this._handler.document._namespaces));this._handler.sendToFlash("jsInsertBefore",[b._guid,this._guid,e,d])}if(!j)for(c=0;c<f.length;c++){this._defineChildNodeAccessor(this._childNodes.length);this._childNodes.length++}if(a.nodeType==i.DOCUMENT_FRAGMENT_NODE)a._reset();else a._attached=this._attached;return a._getProxyNode()},replaceChild:function(a,b){if(this.nodeType!=i.ELEMENT_NODE&&this.nodeType!=i.DOCUMENT_FRAGMENT_NODE)throw"Not supported";a.parentNode&&a.parentNode.removeChild(a);a=this._getFakeNode(a);
b=this._getFakeNode(b);var c=a.nodeType==i.DOCUMENT_FRAGMENT_NODE,d;if(c)d=a._getChildNodes(true);if(c&&d.length==0){a._reset();return a._getProxyNode()}var e=this._findChild(b);if(e===null)throw Error("Invalid child passed to replaceChild");e=e.position;this.removeChild(b);var f=[];if(c)for(c=0;c<d.length;c++)f.push(d[c]);else f.push(a);if(!j)for(c=0;c<f.length;c++){this._defineChildNodeAccessor(this._childNodes.length);this._childNodes.length++}d=false;if(e>=this._nodeXML.childNodes.length)d=true;
var h=e;for(c=0;c<f.length;c++){var g=this._importNode(f[c],false);if(d)this._nodeXML.appendChild(g);else{this._nodeXML.insertBefore(g,this._nodeXML.childNodes[h]);h++}}if(this._attached&&this._passThrough){f=l._encodeFlashData(B(a,this._handler.document._namespaces));this._handler.sendToFlash("jsAddChildAt",[this._guid,e,f])}this._processAppendedChildren(a,this,this._attached);b._setUnattached();svgweb._removedNodes.push(b._getProxyNode());if(a.nodeType==i.DOCUMENT_FRAGMENT_NODE)a._reset();else a._attached=
this._attached;return b._getProxyNode()},removeChild:function(a){if(this.nodeType!=i.ELEMENT_NODE&&this.nodeType!=i.DOCUMENT_FRAGMENT_NODE)throw"Not supported";if(a.nodeType!=i.ELEMENT_NODE&&a.nodeType!=i.TEXT_NODE)throw"Not supported";a=this._getFakeNode(a);var b=this._findChild(a);if(b===null)throw Error("Invalid child passed to removeChild");var c=b.position;this._nodeXML.removeChild(b.nodeXML);if(a.nodeType==i.ELEMENT_NODE)if((b=a._getId())&&this._attached)this._handler.document._nodeById["_"+
b]=undefined;a._persistEventListeners();if(j)this._childNodes.splice(c,1);else{delete this._childNodes[this._childNodes.length-1];this._childNodes.length--}this._attached&&this._passThrough&&this._handler.sendToFlash("jsRemoveChild",[a._guid]);a._setUnattached();svgweb._removedNodes.push(a._getProxyNode());return a._getProxyNode()},appendChild:function(a){if(this.nodeType!=i.ELEMENT_NODE&&this.nodeType!=i.DOCUMENT_FRAGMENT_NODE)throw"Not supported";a.parentNode&&a.parentNode.removeChild(a);a=this._getFakeNode(a);
var b=a.nodeType==i.DOCUMENT_FRAGMENT_NODE,c;if(b)c=a._getChildNodes(true);if(b&&c.length==0){a._reset();return a._getProxyNode()}if(b)for(var d=0;d<c.length;d++)this._importNode(c[d]);else this._importNode(a);if(j)if(b)for(d=0;d<c.length;d++)this._childNodes.push(c[d]._htcNode);else this._childNodes.push(a._htcNode);else if(b)for(d=0;d<c.length;d++){this._defineChildNodeAccessor(this._childNodes.length);this._childNodes.length++}else{this._defineChildNodeAccessor(this._childNodes.length);this._childNodes.length++}this._attached&&
this._passThrough&&this._handler.sendToFlash("jsAppendChild",[this._guid,l._encodeFlashData(B(a,this._handler.document._namespaces))]);this._processAppendedChildren(a,this,this._attached);if(a.nodeType==i.DOCUMENT_FRAGMENT_NODE)a._reset();else a._attached=this._attached;return a._getProxyNode()},hasChildNodes:function(){return this._getChildNodes().length>0},isSupported:function(a,b){if(b=="2.0")if(a=="Core")return true;else{if(a=="Events"||a=="UIEvents"||a=="MouseEvents")return true}else return false},
hasAttributes:function(){if(this.nodeType==i.ELEMENT_NODE)for(var a in this._attributes)if(!/^_xmlns/i.test(a))if(!(a=="_id"&&/^__svg__random__/.test(this._attributes[a])))if(!(a=="___guid"&&/^__guid/.test(this._attributes[a])))if(!(a=="___fakeTextNode"&&/^__fakeTextNode/.test(this._attributes[a])))if(/^_.*/.test(a)&&this._attributes.hasOwnProperty(a))return true;return false},addEventListener:function(a,b,c,d){if(this.nodeType!=i.ELEMENT_NODE&&this.nodeType!=i.TEXT_NODE&&(this.nodeType!=i.DOCUMENT_NODE||
a.substring(0,3)!="key"))throw"Not supported";if(!d&&!this._attached)this._detachedListeners.push({type:a,listener:b,useCapture:c});else{if(this._listeners[a]===undefined)this._listeners[a]=[];this._listeners[a].push({type:a,listener:b,useCapture:c});this._listeners[a]["_"+b.toString()+":"+c]=b;a.substring(0,3)=="key"?this._handler.addKeyboardListener(a,b,c):this._handler.sendToFlash("jsAddEventListener",[this._guid,a])}},removeEventListener:function(a,b,c){if(this.nodeType!=i.ELEMENT_NODE&&this.nodeType!=
i.TEXT_NODE)throw"Not supported";var d;if(this._attached){if(this._listeners[a]){d=this._findListener(this._listeners[a],a,b,c);if(d!==null){this._listeners[a].splice(d,1);delete this._listeners[a]["_"+b.toString()+":"+c]}}if(a.substring(0,3)=="key"){d=this._findListener(this._keyboardListeners,a,b,c);d!==null&&this._keyboardListeners.splice(d,1)}this._handler.sendToFlash("jsRemoveEventListener",[this._guid,a])}else{d=this._findListener(this._detachedListeners,a,b,c);d!==null&&this._detachedListeners.splice(d,
1)}},getScreenCTM:function(){if(this._handler){var a=this._handler.sendToFlash("jsGetScreenCTM",[this._guid]);a=this._handler._stringToMsg(a);return new F(new Number(a.a),new Number(a.b),new Number(a.c),new Number(a.d),new Number(a.e),new Number(a.f),this._handler)}else return new F(1,0,0,1,0,0)},getCTM:function(){return this.getScreenCTM()},cloneNode:function(a){var b;if(this.nodeType==i.ELEMENT_NODE&&this.namespaceURI!=svgns)b=new t(this.nodeName,this.prefix,this.namespaceURI);else if(this.nodeType==
i.ELEMENT_NODE)b=document.createElementNS(this.namespaceURI,this.nodeName);else if(this.nodeType==i.TEXT_NODE)b=document.createTextNode(this._nodeValue,true);else if(this.nodeType==i.DOCUMENT_FRAGMENT_NODE)b=document.createDocumentFragment(true);else throw"cloneNode not supported for nodeType: "+this.nodeType;b=this._getFakeNode(b);for(var c=this._nodeXML.attributes,d=0;d<c.length;d++){var e=c.item(d);e.name.match(/([^:]+):?(.*)/);var f=e.namespaceURI;if(x&&e.name.indexOf("xmlns")!=-1)b._nodeXML.setAttribute(e.name,
e.nodeValue);else{var h=b._nodeXML.ownerDocument;f=j?h.createNode(2,e.name,f):h.createAttributeNS(f,e.name);f.nodeValue=e.nodeValue;j?b._nodeXML.setAttributeNode(f):b._nodeXML.setAttributeNodeNS(f)}}b._nodeXML.setAttribute("__guid",b._guid);if(j){c=this._htcNode.style;for(d=0;d<c.length;d++){e=c.item(d);f=c.getPropertyValue(e);try{b._htcNode.style.length++}catch(g){}b.style.length++;b.style._ignoreStyleChanges=true;b._htcNode.style[e]=f;b.style._ignoreStyleChanges=false}}b.nodeType==i.ELEMENT_NODE&&
b._importAttributes(b,b._nodeXML);if(a&&(b.nodeType==i.ELEMENT_NODE||b.nodeType==i.DOCUMENT_FRAGMENT_NODE)){a=this._getChildNodes();for(d=0;d<a.length;d++){c=a[d].cloneNode(true);b.appendChild(c)}}b.ownerDocument=this.ownerDocument;return b._getProxyNode()},toString:function(){return this.namespaceURI==svgns?"[_SVG"+this.localName.charAt(0).toUpperCase()+this.localName.substring(1)+"]":this.prefix?"["+this.prefix+":"+this.localName+"]":this.localName?"["+this.localName+"]":"["+this.nodeName+"]"},
_addEvent:function(a,b,c){if(a.addEventListener)a.addEventListener(b,c,false);else if(a.attachEvent){a["e"+b+c]=c;a[b+c]=function(d,e,f){return function(){d["e"+e+f](window.event)}}(a,b,c);a.attachEvent("on"+b,a[b+c])}},nodeName:null,nodeType:null,ownerDocument:null,namespaceURI:null,localName:null,prefix:null,_getParentNode:function(){if(this.nodeType==i.DOCUMENT_NODE||this.nodeType==i.DOCUMENT_FRAGMENT_NODE)return null;if(this._attached&&this._handler&&this._getProxyNode()==this._handler.document.rootElement)if(this._handler.type==
"script")return this._handler.flash.parentNode;else if(this._handler.type=="object")return this._handler.document;var a=this._nodeXML.parentNode;if(a===null||a.nodeType==i.DOCUMENT_NODE)return null;a=l._getNode(a,this._handler);this._getFakeNode(a)._attached=this._attached;return a},_getFirstChild:function(){if(this.nodeType==i.TEXT_NODE)return null;var a=this._nodeXML.firstChild;if(a===null)return null;a=l._getNode(a,this._handler);this._getFakeNode(a)._attached=this._attached;return a},_getLastChild:function(){if(this.nodeType==
i.TEXT_NODE)return null;var a=this._nodeXML.lastChild;if(a===null)return null;a=l._getNode(a,this._handler);this._getFakeNode(a)._attached=this._attached;return a},_getPreviousSibling:function(){if(this.nodeType==i.DOCUMENT_NODE||this.nodeType==i.DOCUMENT_FRAGMENT_NODE)return null;if(this._attached&&this._handler&&this._getProxyNode()==this._handler.document.rootElement&&this._handler.type=="script"){var a=this._handler.flash.previousSibling;if(a&&a.nodeType==1&&a.className&&a.className.indexOf("embedssvg")!=
-1){a=a.getAttribute("id").replace("_flash","");a=svgweb.handlers[a].document.documentElement;return a._getProxyNode()}else return a}a=this._nodeXML.previousSibling;if(a===null||a.nodeType==7)return null;a=l._getNode(a,this._handler);this._getFakeNode(a)._attached=this._attached;return a},_getNextSibling:function(){if(this.nodeType==i.DOCUMENT_NODE||this.nodeType==i.DOCUMENT_FRAGMENT_NODE)return null;if(this._attached&&this._handler&&this._getProxyNode()==this._handler.document.rootElement&&this._handler.type==
"script"){var a=this._handler.flash.nextSibling;if(a&&a.nodeType==1&&a.className&&a.className.indexOf("embedssvg")!=-1){a=this._handler.document._nodeById["_"+a.getAttribute("id").replace("_flash","")];return a._getProxyNode()}else return a}a=this._nodeXML.nextSibling;if(a===null)return null;a=l._getNode(a,this._handler);this._getFakeNode(a)._attached=this._attached;return a},_passThrough:true,_attached:false,_fake:true,_defineNodeAccessors:function(){this.__defineGetter__("parentNode",m(this,this._getParentNode));
this.__defineGetter__("firstChild",m(this,this._getFirstChild));this.__defineGetter__("lastChild",m(this,this._getLastChild));this.__defineGetter__("previousSibling",m(this,this._getPreviousSibling));this.__defineGetter__("nextSibling",m(this,this._getNextSibling));this.__defineGetter__("childNodes",function(c){return function(){return c._childNodes}}(this));if(this.nodeName=="#text")this._childNodes.length=0;else{var a=this._nodeXML.childNodes;this._childNodes.length=a.length;for(var b=0;b<a.length;b++)this._defineChildNodeAccessor(b)}if(this.nodeType==
i.TEXT_NODE){this.__defineGetter__("data",function(c){return function(){return c._nodeValue}}(this));this.__defineSetter__("data",function(c){return function(d){return c._setNodeValue(d)}}(this));this.__defineGetter__("textContent",function(c){return function(){return c._nodeValue}}(this));this.__defineSetter__("textContent",function(c){return function(d){return c._setNodeValue(d)}}(this))}else this.__defineGetter__("textContent",function(){return function(){return""}}());this.__defineGetter__("nodeValue",
function(c){return function(){return c._nodeValue}}(this));this.__defineSetter__("nodeValue",function(c){return function(d){return c._setNodeValue(d)}}(this))},_defineChildNodeAccessor:function(a){var b=this;this._childNodes.__defineGetter__(a,function(){var c=l._getNode(b._nodeXML.childNodes[a],b._handler);c._attached=b._attached;return c})},_getChildNodes:function(a){if(!j)return this._childNodes;if(a===undefined)a=false;var b=r();if(this.nodeName=="#text")return b;if(this._nodeXML.childNodes.length==
this._childNodes.length&&!a)return this._childNodes;else{for(var c=0;c<this._nodeXML.childNodes.length;c++){var d=l._getNode(this._nodeXML.childNodes[c],this._handler);d._fakeNode._attached=this._attached;if(a)d=d._fakeNode;b.push(d)}return this._childNodes=b}},_createHTC:function(){if(Object.defineProperty){this._htcNode=document.createElement("div");this._htcNode.appendChild=function(c){return this._fakeNode.appendChild(c)};this._htcNode.addEventListener=function(c,d,e){return this._fakeNode.addEventListener(c,
d,e)};this._htcNode.beginElement=function(){return this._fakeNode.beginElement()};this._htcNode.beginElementAt=function(c){return this._fakeNode.beginElementAt(c)};this._htcNode.endElement=function(){return this._fakeNode.endElement()};this._htcNode.endElementAt=function(c){return this._fakeNode.endElementAt(c)};this._htcNode._cloneNode=this._htcNode.cloneNode;this._htcNode.cloneNode=function(c){return this._fakeNode.cloneNode(c)};this._htcNode.createSVGPoint=function(){return this._fakeNode.createSVGPoint()};
this._htcNode.createSVGRect=function(){return this._fakeNode.createSVGRect()};this._htcNode.getAttribute=function(c){return this._fakeNode.getAttribute(c)};this._htcNode.getAttributeNS=function(c,d){return this._fakeNode.getAttributeNS(c,d)};this._htcNode.getScreenCTM=function(){return this._fakeNode.getScreenCTM()};this._htcNode.getBBox=function(){return this._fakeNode.getBBox()};this._htcNode.getCTM=function(){return this._fakeNode.getCTM()};this._htcNode.getElementsByTagNameNS=function(c,d){return this._fakeNode.getElementsByTagNameNS(c,
d)};this._htcNode.hasChildNodes=function(){return this._fakeNode.hasChildNodes()};this._htcNode.hasAttributes=function(){return this._fakeNode.hasAttributes()};this._htcNode.hasAttribute=function(c){return this._fakeNode.hasAttribute(c)};this._htcNode.hasAttributeNS=function(c,d){return this._fakeNode.hasAttributeNS(c,d)};this._htcNode.insertBefore=function(c,d){return this._fakeNode.insertBefore(c,d)};this._htcNode.isSupported=function(c,d){return this._fakeNode.isSupported(c,d)};this._htcNode.setAttribute=
function(c,d){return this._fakeNode.setAttribute(c,d)};this._htcNode.setAttributeNS=function(c,d,e){return this._fakeNode.setAttributeNS(c,d,e)};this._htcNode.removeChild=function(c){return this._fakeNode.removeChild(c)};this._htcNode.replaceChild=function(c,d){return this._fakeNode.replaceChild(c,d)};this._htcNode.removeAttribute=function(c){return this._fakeNode.removeAttribute(c)};this._htcNode.removeAttributeNS=function(c,d){return this._fakeNode.removeAttributeNS(c,d)};this._htcNode.removeEventListener=
function(c,d,e){return this._fakeNode.removeEventListener(c,d,e)};this._htcNode.get=function(c){return this._fakeNode.get(c)};this._htcNode.set=function(c,d){return this._fakeNode.set(c,d)};this._htcNode.create=function(c,d,e,f,h){return this._fakeNode.create(c,d,e,f,h)};this._htcNode.createChild=function(c,d,e,f,h){return this._fakeNode.createChild(c,d,e,f,h)};this._htcNode.addChild=function(c,d){return this._fakeNode.addChild(c,d)};this._htcNode._getNodeName=function(){return this._fakeNode.nodeName};
this._htcNode._getNodeType=function(){return this._fakeNode.nodeType};this._htcNode._getLocalName=function(){return this._fakeNode.localName};this._htcNode._getPrefix=function(){return this._fakeNode.prefix};this._htcNode._getNamespaceURI=function(){return this._fakeNode.namespaceURI};this._htcNode._getChildNodes=function(){return this._fakeNode._getChildNodes()};this._htcNode._getParentNode=function(){return this._fakeNode._getParentNode()};this._htcNode._getFirstChild=function(){return this._fakeNode._getFirstChild()};
this._htcNode._getLastChild=function(){return this._fakeNode._getLastChild()};this._htcNode._getPreviousSibling=function(){return this._fakeNode._getPreviousSibling()};this._htcNode._getNextSibling=function(){return this._fakeNode._getNextSibling()};this._htcNode._getNodeValue=function(){return this._fakeNode._nodeValue};this._htcNode._setNodeValue=function(c){return this._fakeNode._setNodeValue(c)};this._htcNode._getTextContent=function(){return this._fakeNode._getTextContent()};this._htcNode._setTextContent=
function(c){return this._fakeNode._setTextContent(c)};this._htcNode._getData=function(){return this._fakeNode._getData()};this._htcNode._setData=function(c){return this._fakeNode._setData(c)};this._htcNode._getOwnerDocument=function(){return this._fakeNode.ownerDocument};this._htcNode._getId=function(){return this._fakeNode._getId()};this._htcNode._setId=function(c){return this._fakeNode._setId(c)};this._htcNode._getX=function(){return this._fakeNode._getX()};this._htcNode._getY=function(){return this._fakeNode._getY()};
this._htcNode._getWidth=function(){return this._fakeNode._getWidth()};this._htcNode._getHeight=function(){return this._fakeNode._getHeight()};this._htcNode._getCurrentScale=function(){return this._fakeNode._getCurrentScale()};this._htcNode._setCurrentScale=function(c){return this._fakeNode._setCurrentScale(c)};this._htcNode._getCurrentTranslate=function(){return this._fakeNode._getCurrentTranslate()};Object.defineProperty(this._htcNode,"currentScale",{get:function(){return this._getCurrentScale()},
set:function(c){this._setCurrentScale(c)}});Object.defineProperty(this._htcNode,"currentTranslate",{get:function(){return this._getCurrentTranslate()},set:function(){}});Object.defineProperty(this._htcNode,"nodeName",{get:function(){return this._getNodeName()},set:function(){}});Object.defineProperty(this._htcNode,"nodeType",{get:function(){return this._getNodeType()},set:function(){}});Object.defineProperty(this._htcNode,"localName",{get:function(){return this._getLocalName()},set:function(){}});
Object.defineProperty(this._htcNode,"prefix",{get:function(){return this._getPrefix()},set:function(){}});Object.defineProperty(this._htcNode,"namespaceURI",{get:function(){return this._getNamespaceURI()},set:function(){}});Object.defineProperty(this._htcNode,"childNodes",{get:function(){return this._getChildNodes()},set:function(){}});Object.defineProperty(this._htcNode,"parentNode",{get:function(){return this._getParentNode()},set:function(){}});Object.defineProperty(this._htcNode,"firstChild",
{get:function(){return this._getFirstChild()},set:function(){}});Object.defineProperty(this._htcNode,"id",{get:function(){return this._getId()},set:function(c){this._setId(c)}});Object.defineProperty(this._htcNode,"lastChild",{get:function(){return this._getLastChild()},set:function(){}});Object.defineProperty(this._htcNode,"previousSibling",{get:function(){return this._getPreviousSibling()},set:function(){}});Object.defineProperty(this._htcNode,"nextSibling",{get:function(){return this._getNextSibling()},
set:function(){}});Object.defineProperty(this._htcNode,"nodeValue",{get:function(){return this._getNodeValue()},set:function(c){this._setNodeValue(c)}});Object.defineProperty(this._htcNode,"textContent",{get:function(){return this._getTextContent()},set:function(c){this._setTextContent(c)}});Object.defineProperty(this._htcNode,"data",{get:function(){return this._getData()},set:function(c){this._setData(c)}});Object.defineProperty(this._htcNode,"ownerDocument",{get:function(){return this._getOwnerDocument()},
set:function(){}});Object.defineProperty(this._htcNode,"x",{get:function(){return this._getX()},set:function(){}});Object.defineProperty(this._htcNode,"y",{get:function(){return this._getY()},set:function(){}});Object.defineProperty(this._htcNode,"width",{get:function(){return this._getWidth()},set:function(){}});Object.defineProperty(this._htcNode,"height",{get:function(){return this._getHeight()},set:function(){}});this._htcNode._fakeNode=this;this._htcNode._handler=this._handler}else{if(!this._htcContainer){this._htcContainer=
document.getElementById("__htc_container");if(!this._htcContainer){var a=document.getElementsByTagName("body")[0],b=document.createElement("div");b.id="__htc_container";b.style.position="absolute";b.style.top="-5000px";b.style.left="-5000px";a.appendChild(b);this._htcContainer=b}}this._htcNode=document.createElement("svg:"+this.nodeName);this._htcNode._fakeNode=this;this._htcNode._handler=this._handler;this._htcContainer.appendChild(this._htcNode)}},_setNodeValue:function(a){if(this.nodeType!=i.TEXT_NODE)return a;
this._nodeValue=a;this._nodeXML.firstChild.nodeValue=a;if(this._attached&&this._passThrough){var b=l._encodeFlashData(a);this._handler.sendToFlash("jsSetText",[this._nodeXML.parentNode.getAttribute("__guid"),this._guid,b])}return a},_getFakeNode:function(a){a||(a=this);if(j&&a._fakeNode)a=a._fakeNode;return a},_processAppendedChildren:function(a,b,c){var d;b=a.nodeType==i.DOCUMENT_FRAGMENT_NODE?this._getFakeNode(a._getFirstChild()):a;if(c)d=this._handler._redrawManager.suspendRedraw(1E4,false);for(;b;){var e=
b._nodeXML;b._handler=this._handler;e=e.getAttribute("id");if(c&&b.nodeType==i.ELEMENT_NODE&&e)this._handler.document._nodeById["_"+e]=b;if(c){if(this._handler.type=="script")b.ownerDocument=document;else if(this._handler.type=="object")b.ownerDocument=this._handler.document;b._attached=true;for(e=0;e<b._detachedListeners.length;e++){var f=b._detachedListeners[e];f&&b.addEventListener(f.type,f.listener,f.useCapture,true)}b._detachedListeners=[]}if(e=(e=b._getChildNodes())&&e.length>0?e[0]:null){b=
e;if(j)b=b._fakeNode}for(;!e&&b;){if(b!=a)if(e=b._getNextSibling()){b=e;if(j)b=b._fakeNode;break}if(b==a)b=null;else{if((b=b._getParentNode())&&j)b=b._fakeNode;if(b&&(b.nodeType!=1||b._handler&&b._getProxyNode()==b._handler.document.rootElement))b=null}}}c&&this._handler._redrawManager.unsuspendRedraw(d,false)},_importNode:function(a,b){if(typeof b=="undefined")b=true;var c;c=this._attached?this._handler.document._xml:this._nodeXML.ownerDocument;c=typeof c.importNode=="undefined"?document._importNodeFunc(c,
a._nodeXML,true):c.importNode(a._nodeXML,true);b&&this._nodeXML.appendChild(c);a._importChildXML(c);return c},_importChildXML:function(a){this._nodeXML=a;a=this._getChildNodes();for(var b=0;b<a.length;b++){var c=a[b];if(j&&c._fakeNode)c=c._fakeNode;c._nodeXML=this._nodeXML.childNodes[b];c._importChildXML(this._nodeXML.childNodes[b])}},_findChild:function(a,b){if(b===undefined)b=false;for(var c={},d=0,e=0;e<this._nodeXML.childNodes.length;e++){var f=this._nodeXML.childNodes[e];if(!(f.nodeType!=i.ELEMENT_NODE&&
f.nodeType!=i.TEXT_NODE))if(!(b&&(f.getAttribute("__fakeTextNode")||f.nodeType==i.TEXT_NODE))){f.nodeType==i.ELEMENT_NODE&&d++;if(f.nodeType==i.ELEMENT_NODE&&f.getAttribute("__guid")==a._guid){c.position=b?d:e;c.nodeXML=f;return c}}}return null},_setUnattached:function(){for(var a=this._getChildNodes(),b=0;b<a.length;b++){var c=a[b];if(j)c=c._fakeNode;c._setUnattached()}this._attached=false;this._handler=null},_getProxyNode:function(){return j?this._htcNode:this},_createChildNodes:function(){var a;
if(j)a=r();else{a={};a.item=function(b){return b>=this.length?null:this[b]}}return a},_getTextContent:function(){return this.nodeType==i.TEXT_NODE?this._nodeValue:""},_setTextContent:function(a){return this.nodeType==i.TEXT_NODE?this._setNodeValue(a):""},_getData:function(){if(this.nodeType==i.TEXT_NODE)return this._nodeValue},_setData:function(a){if(this.nodeType==i.TEXT_NODE)return this._setNodeValue(a)},_createEmptyMethods:function(){if(this.nodeType==i.TEXT_NODE)this.getAttribute=this.getAttributeNS=
this.setAttribute=this.setAttributeNS=this.removeAttribute=this.removeAttributeNS=this.hasAttribute=this.hasAttributeNS=this.getElementsByTagNameNS=this._getId=this._setId=this._getX=this._getY=this._getWidth=this._getHeight=this._getCurrentScale=this._setCurrentScale=this._getCurrentTranslate=this.createSVGRect=this.createSVGPoint=function(){}},_persistEventListeners:function(){for(var a in this._listeners)for(var b=0;b<this._listeners[a].length;b++){var c=this._listeners[a][b];this._detachedListeners.push({type:c.type,
listener:c.listener,useCapture:c.useCapture})}this._listeners=[];a=this._getChildNodes();for(b=0;b<a.length;b++){c=a[b];if(c._fakeNode)c=c._fakeNode;c._persistEventListeners()}},_findListener:function(a,b,c,d){for(var e=0;e<a.length;e++){var f=a[e];if(f.listener==c&&f.type==b&&f.useCapture==d)return e}return null}});t.prototype=new i;q(t,{getAttribute:function(a){return this.getAttributeNS(null,a,true)},getAttributeNS:function(a,b,c){var d;if(a==null&&b=="__guid")return null;if(this._attached&&this._passThrough&&
!this._handler._redrawManager.isSuspended())d=this._handler.sendToFlash("jsGetAttribute",[this._guid,false,false,a,b,true]);else if(j){if(j)if(a)for(var e=0;e<this._nodeXML.attributes.length;e++){var f=this._nodeXML.attributes.item(e),h=(new String(f.name)).match(/[^:]*:?(.*)/)[1];if(f.namespaceURI&&f.namespaceURI==a&&h==b){d=f.nodeValue;break}}else d=this._nodeXML.getAttribute(b)}else d=this._nodeXML.getAttributeNS(a,b);if(a=="null"&&b=="id"&&!d)return"";if(d===undefined||d===null||/^[ ]*$/.test(d))return c?
null:"";return d},removeAttribute:function(a){this.removeAttributeNS(null,a)},removeAttributeNS:function(a,b){if(b=="id"&&this._attached&&this.namespaceURI==svgns){var c=this._handler.document,d=this._nodeXML.getAttribute("id");c._nodeById["_"+d]=undefined}var e;if(a)for(c=0;c<this._nodeXML.attributes.length;c++){d=this._nodeXML.attributes.item(c);var f=(new String(d.name)).match(/([^:]+:)?(.*)/),h;if(d.name.indexOf(":")!=-1){h=f[1];f=f[2]}else f=f[1];if(d.namespaceURI&&d.namespaceURI==a&&f==b){e=
d;break}}else e=this._nodeXML.getAttributeNode(b);if(e){this._nodeXML.removeAttributeNode(e);e=b;if(a)e=h+":"+b;this._attributes["_"+e]=undefined;this._attached&&this._passThrough&&this._handler.sendToFlash("jsRemoveAttribute",[this._guid,a,b])}else console.log("No attribute node found for: "+b+" in the namespace: "+a)},setAttribute:function(a,b){this.setAttributeNS(null,a,b)},setAttributeNS:function(a,b,c){if(c===null||typeof c=="undefined")c="";var d=b;if(b.indexOf(":")!=-1)d=b.split(":")[1];if(this._attached&&
b=="id"){var e=this._handler.document,f=this._nodeXML.getAttribute("id");e._nodeById["_"+f]=undefined;if(f===0||f)e._nodeById["_"+c]=this}if(x&&d=="style"&&this._nodeXML.parentNode!==null&&this._nodeXML.parentNode.nodeName=="clipPath"){e=this._nodeXML.nextSibling;f=this._nodeXML.parentNode;this._nodeXML.parentNode.removeChild(this._nodeXML);this._nodeXML.setAttribute("style",c);e?f.insertBefore(this._nodeXML,e):f.appendChild(this._nodeXML)}else if(a&&j){e=this._nodeXML.ownerDocument.createNode(2,
b,a);e.nodeValue=c;this._nodeXML.setAttributeNode(e)}else j?this._nodeXML.setAttribute(b,c):this._nodeXML.setAttributeNS(a,b,c);if(/^xmlns:?(.*)$/.test(b)){e=b.match(/^xmlns:?(.*)$/);e=e[1]?e[1]:"xmlns";f=c;if(!svgweb._allSVGNamespaces["_"+e]){svgweb._allSVGNamespaces["_"+e]=f;svgweb._allSVGNamespaces["_"+f]=e}}this._attributes["_"+b]=c;if(this._attached&&this._passThrough){b=l._encodeFlashData(c);this._handler.sendToFlash("jsSetAttribute",[this._guid,false,a,d,b])}if(this._handler&&this._handler.type==
"script"&&this._attached&&this._getProxyNode()==this._handler.document.rootElement&&(d=="width"||d=="height"))svgweb._onWindowResize()},hasAttribute:function(a){return this.hasAttributeNS(null,a)},hasAttributeNS:function(a,b){if(!a&&!j)return this._nodeXML.hasAttribute(b);else if(j){for(var c=null,d=0;d<this._nodeXML.attributes.length;d++){var e=this._nodeXML.attributes.item(d),f=(new String(e.name)).match(/(?:[^:]+:)?(.*)/)[1],h=e.namespaceURI;if(h=="")h=null;if(a==h&&f==b){c=e;break}}return c!=
null}else return this._nodeXML.hasAttributeNS(a,b)},getElementsByTagNameNS:function(a,b){var c=r(),d;if(a=="")a=null;if(a==svgns)a=svgnsFake;if(this._nodeXML.getElementsByTagNameNS)c=this._nodeXML.getElementsByTagNameNS(a,b);else{var e=null;if(this._attached)e=this._handler.document._namespaces;d="xmlns";if(a&&a!="*"&&e){d=e["_"+a];if(d===undefined)return r()}d=v(this._nodeXML.ownerDocument,this._nodeXML,a=="*"&&b=="*"?"//*[ancestor::*[@__guid = '"+this._guid+"']]":a=="*"?"//*[namespace-uri()='*' and local-name()='"+
b+"' and ancestor::*[@__guid = '"+this._guid+"']]":b=="*"?"//*[namespace-uri()='"+a+"' and ancestor::*[@__guid = '"+this._guid+"']]":"//"+b+"[ancestor::*[@__guid = '"+this._guid+"']]| //*[namespace-uri()='"+a+"' and local-name()='"+b+"' and ancestor::*[@__guid = '"+this._guid+"']]",e);if(d!==null&&d!==undefined&&d.length>0)for(e=0;e<d.length;e++)d[e]!==this._nodeXML&&c.push(d[e])}if((a=="*"||a==svgnsFake)&&b=="*"){d=[];for(e=0;e<c.length;e++)c[e].nodeType==i.ELEMENT_NODE&&c[e].nodeName!="__text"&&
d.push(c[e]);c=d}d=r();for(e=0;e<c.length;e++){var f=l._getNode(c[e],this._handler);this._getFakeNode(f)._attached=this._attached;d.push(f)}return d},beginElement:function(){this.beginElementAt(0)},endElement:function(){this.endElementAt(0)},beginElementAt:function(a){this._attached&&this._passThrough&&this._handler.sendToFlash("jsBeginElementAt",[this._guid,a])},endElementAt:function(a){this._attached&&this._passThrough&&this._handler.sendToFlash("jsEndElementAt",[this._guid,a])},style:null,_setClassName:function(){},
_getClassName:function(){},_setTransform:function(){},_getTransform:function(){},_getViewBox:function(){},_getId:function(){return this._attributes._id?this._attributes._id:""},_setId:function(a){return this.setAttribute("id",a)},ownerSVGElement:null,_getX:function(){var a=this._trimMeasurement(this.getAttribute("x"));return new H(new G(new Number(a)))},_getY:function(){var a=this._trimMeasurement(this.getAttribute("y"));return new H(new G(new Number(a)))},_getWidth:function(){var a=this._trimMeasurement(this.getAttribute("width"));
return new H(new G(new Number(a)))},_getHeight:function(){var a=this._trimMeasurement(this.getAttribute("height"));return new H(new G(new Number(a)))},_getCurrentScale:function(){return this._currentScale},_setCurrentScale:function(a){if(a!==this._currentScale){this._currentScale=a;this._handler.sendToFlash("jsSetCurrentScale",[a])}return a},_getCurrentTranslate:function(){return this._currentTranslate},createSVGPoint:function(){return new I(0,0)},createSVGRect:function(){return new M(0,0,0,0)},getBBox:function(){if(this._handler){var a=
this._handler.sendToFlash("jsGetBBox",[this._guid]);a=this._handler._stringToMsg(a);return new M(new Number(a.x),new Number(a.y),new Number(a.width),new Number(a.height))}else return new M(0,0,0,0)},_trimMeasurement:function(a){if(a!==null)a=a.replace(/[a-z]/gi,"");return a},_getInnerHTML:function(){},_setInnerHTML:function(){},_allEvents:["onfocusin","onfocusout","onactivate","onclick","onmousedown","onmouseup","onmouseover","onmousemove","onmouseout","onload","onunload","onabort","onerror","onresize",
"onscroll","onzoom","onbegin","onend","onrepeat"],_handleEvent:function(){},_prepareEvents:function(){},_attributes:null,_importAttributes:function(a,b){for(var c=0;c<b.attributes.length;c++){var d=b.attributes[c];this._attributes["_"+d.nodeName]=d.nodeValue}},_defineAccessors:function(){var a=this;if(this.nodeName=="svg"||this.nodeName=="use"){this.__defineGetter__("x",function(){return a._getX()});this.__defineGetter__("y",function(){return a._getY()});this.__defineGetter__("width",function(){return a._getWidth()});
this.__defineGetter__("height",function(){return a._getHeight()})}if(this.nodeName=="svg"){this.__defineGetter__("currentTranslate",function(){return a._getCurrentTranslate()});this.__defineGetter__("currentScale",function(){return a._getCurrentScale()});this.__defineSetter__("currentScale",function(b){return a._setCurrentScale(b)})}this.__defineGetter__("id",m(this,this._getId));this.__defineSetter__("id",m(this,this._setId))},_defineAccessor:function(a,b){var c=this;this.__defineGetter__(a,function(){return c.getAttribute(a)});
b&&this.__defineSetter__(a,function(d){return c.setAttribute(a,d)})}});C.prototype=new i;q(C,{_reset:function(){for(;this._nodeXML.firstChild;)this._nodeXML.removeChild(this._nodeXML.firstChild);this._childNodes=this._createChildNodes();j||this._defineNodeAccessors()}});s._allStyles=["font","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","direction","letterSpacing","textDecoration","unicodeBidi","wordSpacing","clip","color","cursor","display","overflow",
"visibility","clipPath","clipRule","mask","opacity","enableBackground","filter","floodColor","floodOpacity","lightingColor","stopColor","stopOpacity","pointerEvents","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","fill","fillOpacity","fillRule","imageRendering","marker","markerEnd","markerMid","markerStart","shapeRendering","stroke","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeWidth","textRendering",
"alignmentBaseline","baselineShift","dominantBaseline","glyphOrientationHorizontal","glyphOrientationVertical","kerning","textAnchor","writingMode"];s._allRootStyles=["border","verticalAlign","backgroundColor","top","right","bottom","left","position","width","height","margin","marginTop","marginBottom","marginRight","marginLeft","padding","paddingTop","paddingBottom","paddingLeft","paddingRight","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderTopColor","borderRightColor",
"borderBottomColor","borderLeftColor","borderTopStyle","borderRightStyle","borderBottomStyle","borderLeftStyle","zIndex","overflowX","overflowY","float","clear"];q(s,{_ignoreStyleChanges:true,_setup:function(){this._normalizeStyle();if(j){var a=this._element._htcNode.style,b=this._fromStyleString();for(f=0;f<b.length;f++){h=this._toCamelCase(b[f].styleName);var c=b[f].styleValue;try{a[h]=c}catch(d){console.log("The following exception occurred setting style."+h+" on IE: "+(d.message||d))}}try{a.length=
0}catch(e){}this.length=0;a.item=m(this,this.item);a.setProperty=m(this,this.setProperty);a.getPropertyValue=m(this,this.getPropertyValue);this._changeListener=m(this,this._onPropertyChange);this._element._htcNode.attachEvent("onpropertychange",this._changeListener);if(j&&j>=8)return a.pixelBottom}else{for(var f=0;f<s._allStyles.length;f++){var h=s._allStyles[f];this._defineAccessor(h)}if(this._element._handler&&this._element._getProxyNode()==this._element._handler.document.rootElement)for(f=0;f<
s._allRootStyles.length;f++){h=s._allRootStyles[f];this._defineAccessor(h)}this.__defineGetter__("length",m(this,this._getLength))}},_defineAccessor:function(a){var b=this;this.__defineGetter__(a,function(){return b._getStyleAttribute(a)});this.__defineSetter__(a,function(c){return b._setStyleAttribute(a,c)})},_setStyleAttribute:function(a,b){for(var c=this._fromCamelCase(a),d=this._fromStyleString(),e=false,f=0;f<d.length;f++)if(d[f].styleName===c){d[f].styleValue=b;e=true;break}e||d.push({styleName:c,
styleValue:b});d=this._toStyleString(d);this._element._nodeXML.setAttribute("style",d);this._element._attributes._style=d;if(j){d=this._element._htcNode.style;if(!e){try{d.length++}catch(h){}this.length++}this._ignoreStyleChanges=true;d[a]=b;this._ignoreStyleChanges=false}if(this._element._attached&&this._element._passThrough){e=l._encodeFlashData(b);this._element._handler.sendToFlash("jsSetAttribute",[this._element._guid,true,null,c,e])}},_getStyleAttribute:function(a){a=this._fromCamelCase(a);if(this._element._attached&&
this._element._passThrough&&!this._element._handler._redrawManager.isSuspended())return this._element._handler.sendToFlash("jsGetAttribute",[this._element._guid,true,false,null,a,false]);else{for(var b=this._fromStyleString(),c=0;c<b.length;c++)if(b[c].styleName===a)return b[c].styleValue;return null}},_fromStyleString:function(){var a=this._element._nodeXML.getAttribute("style");if(a===null||a===undefined)return[];if(a.indexOf(";")==-1)a=[a];else{a=a.split(/\s*;\s*/);a[a.length-1]||(a=a.slice(0,
a.length-1))}for(var b=[],c=0;c<a.length;c++){var d=a[c].split(":");if(d.length==2){var e=d[0];d=d[1];e=e.replace(/^\s+/,"");d=d.replace(/^\s+/,"");b.push({styleName:e,styleValue:d})}}return b},_toStyleString:function(a){for(var b="",c=0;c<a.length;c++){b+=a[c].styleName+": ";b+=a[c].styleValue+";";if(c!=a.length-1)b+=" "}return b},_fromCamelCase:function(a){return a.replace(/([A-Z])/g,"-$1").toLowerCase()},_toCamelCase:function(a){if(a.indexOf("-")==-1)return a;var b="";a=a.split("-");b+=a[0];for(var c=
1;c<a.length;c++)b+=a[c].charAt(0).toUpperCase()+a[c].substring(1);return b},setProperty:function(a,b){this._setStyleAttribute(this._toCamelCase(a),b);return b},getPropertyValue:function(a){return this._getStyleAttribute(this._toCamelCase(a))},item:function(a){return this._fromStyleString()[a].styleName},_getLength:function(){return this._fromStyleString().length},_normalizeStyle:function(){if(this._element._nodeXML.getAttribute("style"))if(/[A-Z]/.test(this._element._nodeXML.getAttribute("style"))){for(var a=
this._fromStyleString(),b=0;b<a.length;b++){a[b].styleName=a[b].styleName.toLowerCase();if(a[b].styleValue.indexOf("url(")==-1)a[b].styleValue=a[b].styleValue.toLowerCase()}var c="";for(b=0;b<a.length;b++)c+=a[b].styleName+": "+a[b].styleValue+"; ";if(c.charAt(c.length-1)==" ")c=c.substring(0,c.length-1);this._element._passThrough=false;this._element.setAttribute("style",c);this._element._passThrough=true}},_onPropertyChange:function(){if(!this._ignoreStyleChanges){var a=window.event.propertyName;
if(a&&/^style\./.test(a)&&a!="style.length"){a=a.match(/^style\.(.*)$/)[1];this._setStyleAttribute(a,this._element._htcNode.style[a])}}}});q(W,{_scriptsToExec:null,_utf8encode:function(a){a=a.replace(/\r\n/g,"\n");for(var b="",c=0;c<a.length;c++){var d=a.charCodeAt(c);if(d<128)b+=String.fromCharCode(d);else{if(d>127&&d<2048)b+=escape(String.fromCharCode(d>>6|192));else{b+=escape(String.fromCharCode(d>>12|224));b+=escape(String.fromCharCode(d>>6&63|128))}b+=escape(String.fromCharCode(d&63|128))}}return b},
_fetchURL:function(a,b,c){var d=ca();if(j){a=this._utf8encode(a);a+=a.indexOf("?")==-1?"?":"&";a+=(new Date).getTime()}d.onreadystatechange=function(){if(d.readyState==4){d.status==200?b(d.responseText):c(d.status+": "+d.statusText);d=null}};d.open("GET",a,true);d.send(null)},_fallback:function(a){console.log("onError (fallback), error="+a)},_loadHTC:function(){this._dummyNode=document.createElement("svg:__force__load");this._dummyNode._handler=this._handler;this._readyStateListener=m(this,this._onHTCLoaded);
this._dummyNode.attachEvent("onreadystatechange",this._readyStateListener);document.getElementsByTagName("head")[0].appendChild(this._dummyNode)},_onFlashLoaded:function(a){document.getElementById(this._handler.flashID)?this._onFlashLoadedNow(a):setTimeout(function(b,c){return function(){b._onFlashLoaded(c)}}(this,a),1)},_onFlashLoadedNow:function(){this._handler.flash=document.getElementById(this._handler.flashID);if(this._savedParams.length){for(var a=0;a<this._savedParams.length;a++)this._handler.flash.appendChild(this._savedParams[a]);
this._savedParams=null}this._handler.flash.top=this._handler.flash.parent=window;this._swfLoaded=true;if(!j||this._htcLoaded)this._onEverythingLoaded()},_onHTCLoaded:function(){document.getElementsByTagName("head")[0].removeChild(this._dummyNode);this._dummyNode.detachEvent("onreadystatechange",this._readyStateListener);this._dummyNode=null;this._htcLoaded=true;this._swfLoaded&&this._onEverythingLoaded()},_onEverythingLoaded:function(){var a=this._handler._inserter._determineSize();this._handler.sendToFlash("jsHandleLoad",
[this._getRelativeTo("object"),this._getRelativeTo("page"),a.pixelsWidth,a.pixelsHeight,false,this._svgString])},_onRenderingFinished:function(){this._handler.flash.style.visibility="visible";var a=this._xml.documentElement,b=a.getAttribute("id"),c=new E(a,null,null,this._handler),d=this._handler.document;d._attached=true;d.documentElement=c._getProxyNode();d.rootElement=c._getProxyNode();d._nodeById["_"+b]=c;j&&this._handler.flash.setAttribute("contentDocument",null);try{this._handler.flash.contentDocument=
d}catch(e){try{this._handler.flash.__contentDocument=d;var f=this;Object.defineProperty(this._handler.flash,"contentDocument",{get:function(){return f._handler.flash.__contentDocument},set:function(g){f._handler.flash.__contentDocument=g}})}catch(h){console.log("This exception occurred setting object contentDocument: "+(h.message||h))}}this._handler.window=new X(this._handler);d.defaultView=this._handler.window;l._patchFakeObjects(d.defaultView,d);if(a=a.getAttribute("onload")){a=";(function(){"+
('var evt = { target: document.getElementById("'+c.getAttribute("id")+'") ,currentTarget: document.getElementById("'+c.getAttribute("id")+'") ,preventDefault: function() { this.returnValue=false; }};')+a+"}).apply(document.documentElement);";this._scriptsToExec.push(a)}c="";for(a=0;a<this._scriptsToExec.length;a++)c+=this._scriptsToExec[a]+"\n";this._executeScript(c);this._handler._loaded=true;this._handler.fireOnLoad(this._handler.id,"object")},_getRelativeTo:function(a){var b="";if((a=a=="object"?
this.url.replace(/[^:]*:\/\/[^\/]*/).match(/\/?[^\?\#]*/)[0]:window.location.pathname.toString())&&a.length>0&&a.indexOf("/")!=-1)b=a.replace(/\/([^\/]*)$/,"/");return b},_executeScript:function(a){var b=document.createElement("iframe");b.setAttribute("src","about:blank");b.style.position="absolute";b.style.top="-1000px";b.style.left="-1000px";document.getElementsByTagName("body")[0].appendChild(b);var c=b.contentDocument?b.contentDocument:b.contentWindow.document;b=b.contentWindow;this._handler.document.defaultView=
b;a=this._sandboxedScript(a);a=a+";if (__svgHandler) __svgHandler.sandbox_eval = "+(j?"window.eval;":"function(scriptCode) { return window.eval(scriptCode) };");if(w)setTimeout(function(d,e,f){return function(){e.eval.apply(e,[f]);d._fireOnload()}}(this._handler.window,b,a),1);else{c.write("<script>"+a+"<\/script>");c.close();this._handler.window._fireOnload()}},_sandboxedScript:function(a){var b="top.svgweb";if(!top.svgweb&&self.frameElement){if(!self.frameElement.id)self.frameElement.id=svgweb._generateID("__svg__random__",
"__iframe");b='top.document.getElementById("'+self.frameElement.id+'").contentWindow.svgweb'}a="var __svgHandler = "+b+'.handlers["'+this._handler.id+'"];\nwindow.svgns = "'+svgns+'";\nwindow.xlinkns = "'+xlinkns+'";\nwindow._timeoutIDs = [];\nwindow._setTimeout = window.setTimeout;\nwindow.setTimeout = \n (function() {\n return function(f, ms) {\n var timeID = window._setTimeout(f, ms);\n window._timeoutIDs.push(timeID);\n return timeID;\n };\n })();\nwindow._intervalIDs = [];\nwindow._setInterval = window.setInterval;\nwindow.setInterval = \n (function() {\n return function(f, ms) {\n var timeID = window._setInterval(f, ms);\n window._intervalIDs.push(timeID);\n return timeID;\n };\n })();\n\n\n'+
a;a=a.replace(/top\.document/g,"top.DOCUMENT");a=a.replace(/top\.window/g,"top.WINDOW");a=a.replace(/(^|[^A-Za-z0-9_])document(\.|'|"|\,| |\))/g,"$1__svgHandler.document$2");a=a.replace(/window\.(location|addEventListener|onload|frameElement)/g,"__svgHandler.window.$1");a=a.replace(/top\.DOCUMENT/g,"top.document");return a=a.replace(/top\.WINDOW/g,"top.window")},_getPARAMs:function(a){for(var b=[],c=0;c<a.childNodes.length;c++){var d=a.childNodes[c];d.nodeName.toUpperCase()=="PARAM"&&b.push(d.cloneNode(false))}return b}});
q(X,{addEventListener:function(a,b){if(a.toLowerCase()=="svgload"||a.toLowerCase()=="load")this._onloadListeners.push(b)},_fireOnload:function(){for(var a=0;a<this._onloadListeners.length;a++)try{this._onloadListeners[a]()}catch(b){console.log("The following exception occurred from an SVG onload listener: "+(b.message||b))}if(this.onload)try{this.onload()}catch(c){console.log("The following exception occurred from an SVG onload listener: "+(c.message||c))}},_createLocation:function(a){var b={},c=
this._handler._svgObject.url;a=a?a:window.location;if(/^data:/.test(c)){b.href=c;b.toString=function(){return this.href};return b}if(!/^http/.test(c))if(c.charAt(0)=="/")c=a.protocol+"//"+a.host+c;else if(a.pathname.indexOf("/")==-1)c=a.protocol+"//"+a.host+"/"+c;else{for(var d=a.pathname,e=d.length-1;e>=0;e--){if(d.charAt(e)=="/")break;d=d.substring(0,e)}c=a.protocol+"//"+a.host+d+c}c=c.match(/^(https?:)\/\/([^\/:]*):?([0-9]*)([^\?#]*)([^#]*)(#.*)?$/);b.protocol=c[1]?c[1]:a.href;if(b.protocol.charAt(b.protocol.length-
1)!=":")b.protocol+=":";b.hostname=c[2];b.port="";if(c[3])b.port=c[3];d=true;if(b.protocol!=a.protocol||b.hostname!=a.hostname||b.port&&b.port!=a.port)d=false;if(d&&!b.port)b.port=a.port;b.host=b.port?b.hostname+":"+b.port:b.hostname;b.pathname=c[4]?c[4]:"";b.search=c[5]?c[5]:"";b.hash=c[6]?c[6]:"";b.href=b.protocol+"//"+b.host+b.pathname+b.search+b.hash;b.toString=function(){return this.protocol+"//"+this.host+this.pathname+this.search+this.hash};return b}});q(L,{_setupFlash:function(){var a=this._determineSize(),
b=this._determineBackground(),c=this._determineStyle(),d=this._determineClassName(),e=this._determineCustomAttrs(),f;if(this._embedType=="script"){f=this._nodeXML.getAttribute("id");this._handler.flashID=f+"_flash"}else if(this._embedType=="object"){f=this._replaceMe.getAttribute("id");this._handler.flashID=f}this._insertFlash(this._createFlash(a,f,b,c,d,e))},_insertFlash:function(a){if(j){var b=this;window.setTimeout(function(){b._replaceMe.removeAttribute("id");b._replaceMe.removeAttribute("name");
b._replaceMe.outerHTML=a;b=null},1)}else{var c;if(u){if(u)c=a}else{var d=document.createElement("div");d.innerHTML=a;c=d.childNodes[0];d.removeChild(c);for(d=0;d<c.childNodes.length;d++){var e=c.childNodes[d];if(e.nodeName.toUpperCase()=="EMBED"){c=e;break}}}this._replaceMe.parentNode.replaceChild(c,this._replaceMe);return c}},_determineSize:function(){var a=this._parentNode.clientWidth,b=this._parentNode.clientHeight;if(b==0)this.invalidParentHeight=true;if(a==0)a=this._parentNode.offsetWidth;if(!x){a-=
this._getMargin(this._parentNode,"margin-left");a-=this._getMargin(this._parentNode,"margin-right");b-=this._getMargin(this._parentNode,"margin-top");b-=this._getMargin(this._parentNode,"margin-bottom")}return isStandardsMode?this._getStandardsSize(a,b):this._getQuirksSize(a,b)},_getQuirksSize:function(a,b){var c,d;if(this._embedType=="script")for(c=this._parentNode;c&&c.style;){if(c.nodeName.toLowerCase()=="div")break;if(c.nodeName.toLowerCase()=="body"){if(this._nodeXML.getAttribute("style")&&this._nodeXML.getAttribute("style").indexOf("fixed")!=
-1){b=window.innerHeight&&window.innerHeight>0?window.innerHeight:document.documentElement&&document.documentElement.clientHeight&&document.documentElement.clientHeight>0?document.documentElement.clientHeight:document.body.clientHeight;this.invalidParentHeight=false}else{this.invalidParentHeight=true;b=0}break}c=c.parentNode}var e=this._explicitWidth,f=this._explicitHeight,h=this._nodeXML.getAttribute("width");if(h&&h.indexOf("%")==-1)h=parseInt(h).toString();var g=this._nodeXML.getAttribute("height");
if(g&&g.indexOf("%")==-1)g=parseInt(g).toString();if(e&&f){c=e.indexOf("%")!=-1?a*parseInt(e)/100:e;if(f.indexOf("%")!=-1)if(b>0)d=b*parseInt(f)/100;else console.log("SVGWeb: unhandled resize scenario.");else d=f;return{width:e,height:d,pixelsWidth:c,pixelsHeight:d,clipMode:this._nodeXML.getAttribute("viewBox")?"neither":"both"}}if(e){c=e.indexOf("%")!=-1?a*parseInt(e)/100:e;if(this._nodeXML.getAttribute("viewBox")){if(h&&h.indexOf("%")==-1&&g&&g.indexOf("%")==-1)f=c*(g/h);else{g=this._nodeXML.getAttribute("viewBox").split(/\s+|,/);
h=g[2];g=g[3];f=c*(g/h)}return{width:e,height:f,pixelsWidth:c,pixelsHeight:f,clipMode:"neither"}}else{f=h&&h.indexOf("%")==-1&&g&&g.indexOf("%")==-1?c*(g/h):g&&g.indexOf("%")==-1?g:150;return{width:e,height:f,pixelsWidth:c,pixelsHeight:f,clipMode:"both"}}}if(f){d=f.indexOf("%")!=-1?b*parseInt(f)/100:f;if(this._nodeXML.getAttribute("viewBox")){if(h&&h.indexOf("%")==-1&&g&&g.indexOf("%")==-1)e=d*(h/g);else{g=this._nodeXML.getAttribute("viewBox").split(/\s+|,/);h=g[2];g=g[3];e=d*(h/g)}return{width:e,
height:f,pixelsWidth:e,pixelsHeight:d,clipMode:"neither"}}else{if(h&&h.indexOf("%")==-1&&g&&g.indexOf("%")==-1)c=e=d*(h/g);else{e=h?h:"100%";c=e.indexOf("%")!=-1?a*parseInt(e)/100:e}return{width:e,height:f,pixelsWidth:c,pixelsHeight:d,clipMode:"both"}}}e=h?h:"100%";c=e.indexOf("%")!=-1?a*parseInt(e)/100:e;if(g&&g.indexOf("%")==-1){f=g;return{width:e,height:f,pixelsWidth:c,pixelsHeight:f,clipMode:this._nodeXML.getAttribute("viewBox")?"neither":"both"}}else if(this._nodeXML.getAttribute("viewBox")){if(this._embedType==
"script"&&(g==null||g.indexOf("%")!=-1)&&!this.invalidParentHeight){if(g==null)g="100%";d=b*parseInt(g)/100;return{width:e,height:d,pixelsWidth:c,pixelsHeight:d,clipMode:"neither"}}g=this._nodeXML.getAttribute("viewBox").split(/\s+|,/);h=g[2];g=g[3];f=c*(g/h);return{width:e,height:f,pixelsWidth:c,pixelsHeight:f,clipMode:"neither"}}else{f=150;return{width:e,height:f,pixelsWidth:c,pixelsHeight:f,clipMode:"both"}}},_getStandardsSize:function(a,b){var c,d,e=this._explicitWidth,f=this._explicitHeight,
h=this._nodeXML.getAttribute("width");if(h&&h.indexOf("%")==-1)h=parseInt(h).toString();var g=this._nodeXML.getAttribute("height");if(g&&g.indexOf("%")==-1)g=parseInt(g).toString();if(e&&!f)return this._getQuirksSize(a,b);if(!e&&!f)return this._getQuirksSize(a,b);if(!e&&f){e=h?h:"100%";c=e.indexOf("%")!=-1?a*parseInt(e)/100:e;if(f.indexOf("%")==-1){d=f;if(h&&h.indexOf("%")==-1&&g&&g.indexOf("%")==-1)c=e=f*(h/g);else if(this._nodeXML.getAttribute("viewBox")){viewBox=this._nodeXML.getAttribute("viewBox").split(/\s+|,/);
boxWidth=viewBox[2];boxHeight=viewBox[3];c=e=d*(boxWidth/boxHeight)}return{width:e,height:f,pixelsWidth:c,pixelsHeight:f,clipMode:this._nodeXML.getAttribute("viewBox")?"neither":"both"}}else{if(g&&g.indexOf("%")==-1)d=g;else if(this._nodeXML.getAttribute("viewBox")){viewBox=this._nodeXML.getAttribute("viewBox").split(/\s+|,/);boxWidth=viewBox[2];boxHeight=viewBox[3];d=c*(boxHeight/boxWidth)}else d=150;return{width:e,height:d,pixelsWidth:c,pixelsHeight:d,clipMode:this._nodeXML.getAttribute("viewBox")?
"neither":"both"}}}if(e&&f){c=e.indexOf("%")!=-1?a*parseInt(e)/100:e;if(f.indexOf("%")==-1)return{width:e,height:f,pixelsWidth:c,pixelsHeight:f,clipMode:this._nodeXML.getAttribute("viewBox")?"neither":"both"};else if(h&&h.indexOf("%")==-1&&g&&g.indexOf("%")==-1){d=c*(g/h);return{width:e,height:d,pixelsWidth:c,pixelsHeight:d,clipMode:"neither"}}else if(this.invalidParentHeight)if(this._nodeXML.getAttribute("viewBox")){viewBox=this._nodeXML.getAttribute("viewBox").split(/\s+|,/);boxWidth=viewBox[2];
boxHeight=viewBox[3];f=c*(boxHeight/boxWidth);return{width:e,height:f,pixelsWidth:c,pixelsHeight:f,clipMode:"neither"}}else{d=g&&g.indexOf("%")==-1?g:150;return{width:e,height:d,pixelsWidth:c,pixelsHeight:d,clipMode:"both"}}else{d=b*parseInt(f)/100;return{width:e,height:d,pixelsWidth:c,pixelsHeight:d,clipMode:"neither"}}}},_getMargin:function(a,b){var c;if(a.currentStyle)c=parseInt(a.currentStyle[b]);else if(window.getComputedStyle)c=parseInt(document.defaultView.getComputedStyle(a,null).getPropertyValue(b));
return c?c:0},_determineBackground:function(){var a=false,b=null,c=this._nodeXML.getAttribute("style");if(c&&c.indexOf("background-color")!=-1)if(c=c.match(/background\-color:\s*([^;]*)/))b=c[1];if(b===null)a=true;return{color:b,transparent:a}},_determineStyle:function(){var a=this._nodeXML.getAttribute("style");a||(a="");if(a.length>0&&a.charAt(a.length-1)!=";")a+=";";if(this._embedType=="script"&&a.indexOf("display:")==-1)a+="display: inline;";if(this._embedType=="script"&&a.indexOf("overflow:")==
-1)a+="overflow: hidden;";return a},_determineClassName:function(){var a=this._nodeXML.getAttribute("class");return a?a+" embedssvg":"embedssvg"},_determineCustomAttrs:function(){var a=[];if(this._embedType=="object")for(var b=this._replaceMe,c=document._createElement("object"),d=0;d<b.attributes.length;d++){var e=b.attributes[d],f=e.nodeName;e=e.nodeValue;!e&&e!=="true"||c.getAttribute(f)||/^(id|name|width|height|data|class|style|codebase|type|_listeners|addEventListener|onload)$/.test(f)||a.push({attrName:f.toString(),
attrValue:e.toString()})}return a},_createFlash:function(a,b,c,d,e,f){b="uniqueId="+encodeURIComponent(b)+"&sourceType=string&clipMode="+a.clipMode+"&debug=true&svgId="+encodeURIComponent(b);var h;h=this._isXDomain?svgweb.xDomainURL+"svg.swf":svgweb.libraryPath+"svg.swf";var g=window.location.protocol;if(g.charAt(g.length-1)==":")g=g.substring(0,g.length-1);var k;if(u){k=document.createElement("embed");k.setAttribute("src",h);k.setAttribute("quality","high");c.color&&k.setAttribute("bgcolor",c.color);
c.transparent&&k.setAttribute("wmode","transparent");k.setAttribute("width",a.width);k.setAttribute("height",a.height);k.setAttribute("id",this._handler.flashID);k.setAttribute("name",this._handler.flashID);k.setAttribute("swLiveConnect","true");k.setAttribute("allowScriptAccess","always");k.setAttribute("type","application/x-shockwave-flash");k.setAttribute("FlashVars",b);k.setAttribute("pluginspage",g+"://www.macromedia.com/go/getflashplayer");k.setAttribute("style",d);k.setAttribute("className",
e);for(var n=0;n<f.length;n++)k.setAttribute(f[n].attrName,f[n].attrValue)}else{k="";for(n=0;n<f.length;n++)k+=" "+f[n].attrName+'="'+f[n].attrValue+'"';k='<object\n classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"\n codebase="'+g+'://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0"\n width="'+a.width+'"\n height="'+a.height+'"\n id="'+this._handler.flashID+'"\n name="'+this._handler.flashID+'"\n style="'+d+'"\n class="'+e+'"\n '+k+'\n>\n <param name="allowScriptAccess" value="always"></param>\n <param name="movie" value="'+
h+'"></param>\n <param name="quality" value="high"></param>\n <param name="FlashVars" value="'+b+'"></param>\n '+(c.color?'<param name="bgcolor" value="'+c.color+'"></param>\n ':"")+(c.transparent?'<param name="wmode" value="transparent"></param>\n ':"")+'<embed src="'+h+'" quality="high" '+(c.color?'bgcolor="'+c.color+'" \n':"")+(c.transparent?'wmode="transparent" \n':"")+'width="'+a.width+'" height="'+a.height+'" id="'+this._handler.flashID+'" name="'+this._handler.flashID+'" swLiveConnect="true" allowScriptAccess="always" type="application/x-shockwave-flash" FlashVars="'+
b+'" pluginspage="'+g+'://www.macromedia.com/go/getflashplayer" style="'+d+'"\n class="'+e+'"\n '+k+"\n /></object>"}return k}});E.prototype=new t;q(E,{suspendRedraw:function(a){return this._handler._redrawManager.suspendRedraw(a)},unsuspendRedraw:function(a){this._handler._redrawManager.unsuspendRedraw(a)},unsuspendRedrawAll:function(){this._handler._redrawManager.unsuspendRedrawAll()},forceRedraw:function(){},nearestViewportElement:null,farthestViewportElement:null,getTransformToElement:function(){},
_onHTCLoaded:function(){this._htcNode.detachEvent("onreadystatechange",this._readyStateListener);this.style._ignoreStyleChanges=false;this._htcLoaded=true;this._swfLoaded&&this._onEverythingLoaded()},_onFlashLoaded:function(a){document.getElementById(this._handler.flashID)?this._onFlashLoadedNow(a):setTimeout(function(b,c){return function(){b._onFlashLoaded(c)}}(this,a),1)},_onFlashLoadedNow:function(){this._handler.flash=document.getElementById(this._handler.flashID);this._swfLoaded=true;if(!j||
this._htcLoaded)this._onEverythingLoaded()},_onEverythingLoaded:function(){var a=this._handler._inserter._determineSize();this._handler.sendToFlash("jsHandleLoad",[this._getRelativeTo("object"),this._getRelativeTo("page"),a.pixelsWidth,a.pixelsHeight,true,this._svgString])},_onRenderingFinished:function(){if(this._handler.type=="script")this._handler.flash.documentElement=this._getProxyNode();if(this._attached)if(this._handler.type=="script")this.ownerDocument=document;else if(this._handler.type==
"object")this.ownerDocument=this._handler.document;this._handler.document.rootElement=this._getProxyNode();var a=this._nodeXML.getAttribute("id");this._handler._loaded=true;this._handler.fireOnLoad(a,"script")},_getRelativeTo:function(){var a="",b=window.location.pathname.toString();if(b&&b.length>0&&b.indexOf("/")!=-1)a=b.replace(/\/([^\/]*)$/,"/");return a},_addRedrawMethods:function(){this._htcNode.suspendRedraw=function(){return function(a){return this._fakeNode.suspendRedraw(a)}}();this._htcNode.unsuspendRedraw=
function(){return function(a){return this._fakeNode.unsuspendRedraw(a)}}();this._htcNode.unsuspendRedrawAll=function(){return function(){return this._fakeNode.unsuspendRedrawAll()}}();this._htcNode.forceRedraw=function(){return function(){return this._fakeNode.forceRedraw()}}()},_createCurrentTranslate:function(){return new I(0,0,true,m(this,this._updateCurrentTranslate))},_updateCurrentTranslate:function(a,b,c){a=="xy"?this._handler.sendToFlash("jsSetCurrentTranslate",["xy",b,c]):this._handler.sendToFlash("jsSetCurrentTranslate",
[a,b])}});D.prototype=new i;q(D,{_nodeById:null,implementation:null,documentElement:null,createElementNS:function(a,b){var c=this._namespaces["_"+a];if(c=="xmlns"||!c)c=b.indexOf(":")!=-1?b.substring(0,b.indexOf(":")):null;return(new t(b,c,a,undefined,this._handler))._getProxyNode()},createTextNode:function(a){var b=l._unattachedDoc,c;c=j?b.createElement("__text"):b.createElementNS(svgnsFake,"__text");c.appendChild(b.createTextNode(a));b=new i("#text",i.TEXT_NODE,null,null,c,this._handler);b._nodeValue=
a;b.ownerDocument=this;return b._getProxyNode()},createDocumentFragment:function(){return(new C(this))._getProxyNode()},getElementById:function(a){a=v(this._xml,null,'//*[@id="'+a+'"]');if(a.length)a=a[0];else return null;a=l._getNode(a,this._handler);this._getFakeNode(a)._attached=true;return a},getElementsByTagNameNS:function(a,b){if(this._handler.type=="script"&&!this._handler._loaded)return[];var c=this.rootElement.getElementsByTagNameNS(a,b);if(a==svgns&&b=="svg"){if(typeof c.push=="undefined"){var d=
c;c=[];for(var e=0;e<d.length;e++)c.push(d[e])}c.push(this.rootElement)}return c},_getNamespaces:function(){for(var a=[],b=this._xml.documentElement.attributes,c=0;c<b.length;c++){var d=b[c];if(/^xmlns:?(.*)$/.test(d.nodeName)){var e=d.nodeName.match(/^xmlns:?(.*)$/);e=e[1]?e[1]:"xmlns";d=d.nodeValue;if(!a["_"+e]){a["_"+e]=d;a["_"+d]=e;a.push(d)}}}return a}});q(F,{multiply:function(){},inverse:function(){var a=this._handler.sendToFlash("jsMatrixInvert",[this.a,this.b,this.c,this.d,this.e,this.f]);
a=this._handler._stringToMsg(a);return new F(new Number(a.a),new Number(a.b),new Number(a.c),new Number(a.d),new Number(a.e),new Number(a.f),this._handler)},translate:function(){},scale:function(){},scaleNonUniform:function(){},rotate:function(){},rotateFromVector:function(){},flipX:function(){},flipY:function(){},skewX:function(){},skewY:function(){}});O(Y,{SVG_TRANSFORM_UNKNOWN:0,SVG_TRANSFORM_MATRIX:1,SVG_TRANSFORM_TRANSLATE:2,SVG_TRANSFORM_SCALE:3,SVG_TRANSFORM_ROTATE:4,SVG_TRANSFORM_SKEWX:5,
SVG_TRANSFORM_SKEWY:6});q(Y,{type:null,matrix:null,angle:null,setMatrix:function(){},setTranslate:function(){},setScale:function(){},setRotate:function(){},setSkewX:function(){},setSkewY:function(){}});q(I,{matrixTransform:function(a){return new I(a.a*this.x+a.c*this.y+a.e,a.b*this.x+a.d*this.y+a.f,this._formalAccessors)}});window.svgweb=new R})();
Binary file not shown.
+6 -2
View File
@@ -259,7 +259,9 @@ BOSS_API unsigned int boss_load_lists (boss_db db, const char * const masterlist
try {
if (boost::filesystem::exists(masterlistPath)) {
if (boost::algorithm::iends_with(masterlistPath, ".yaml")) {
YAML::Node tempNode = YAML::LoadFile(masterlistPath);
boss::ifstream in(masterlistPath);
YAML::Node tempNode = YAML::Load(in);
in.close();
temp = tempNode["plugins"].as< std::list<boss::Plugin> >();
}
else {
@@ -280,7 +282,9 @@ BOSS_API unsigned int boss_load_lists (boss_db db, const char * const masterlist
if (userlistPath != NULL) {
if (boost::filesystem::exists(userlistPath)) {
if (boost::algorithm::iends_with(userlistPath, ".yaml")) {
YAML::Node tempNode = YAML::LoadFile(userlistPath);
boss::ifstream in(userlistPath);
YAML::Node tempNode = YAML::Load(in);
in.close();
userTemp = tempNode["plugins"].as< std::list<boss::Plugin> >();
}
}
-6
View File
@@ -6,8 +6,6 @@
# Files and folders that need to go in (relative to repository root):
#
# build/BOSS.exe
# resources/graphvis
# resources/svgweb
# resources/l10n/es/LC_MESSAGES/boss.mo
# resources/l10n/es/LC_MESSAGES/wxstd.mo
# resources/l10n/ru/LC_MESSAGES/boss.mo
@@ -39,10 +37,6 @@ if not os.path.exists(temp_path):
# Now copy everything into the temporary folder.
shutil.copy( os.path.join('..', 'build', 'BOSS.exe'), temp_path )
shutil.copytree( os.path.join('..', 'resources', 'graphvis'), os.path.join(temp_path, 'resources', 'graphvis') )
shutil.copytree( os.path.join('..', 'resources', 'svgweb'), os.path.join(temp_path, 'resources', 'svgweb') )
os.makedirs(os.path.join(temp_path, 'resources', 'l10n', 'es', 'LC_MESSAGES'))
os.makedirs(os.path.join(temp_path, 'resources', 'l10n', 'ru', 'LC_MESSAGES'))
shutil.copy( os.path.join('..', 'resources', 'l10n', 'es', 'LC_MESSAGES', 'boss.mo'), os.path.join(temp_path, 'resources', 'l10n', 'es', 'LC_MESSAGES') )
-4
View File
@@ -225,10 +225,6 @@ namespace boss {
return g_path_local / bossFolderName / "report.html";
}
fs::path Game::GraphPath() const {
return g_path_local / bossFolderName / "graph.svg";
}
void Game::RefreshActivePluginsList() {
BOOST_LOG_TRIVIAL(trace) << "Refreshing active plugins list for game: " << _name;
-1
View File
@@ -68,7 +68,6 @@ namespace boss {
boost::filesystem::path MasterlistPath() const;
boost::filesystem::path UserlistPath() const;
boost::filesystem::path ReportPath() const;
boost::filesystem::path GraphPath() const;
bool IsActive(const std::string& plugin) const;
+14 -69
View File
@@ -50,30 +50,6 @@ namespace boss {
}
};
inline void GetGraphWidthHeight(const boost::filesystem::path& filepath, std::string& width, std::string& height) {
BOOST_LOG_TRIVIAL(trace) << "Getting the dimensions of the plugin interactions graph image.";
boss::ifstream in(filepath);
std::string line;
while (std::getline(in, line)) {
if (boost::contains(line, "width=\"") && boost::contains(line, "length=\"")) {
size_t pos1, pos2;
pos1 = line.find("width=\"");
pos2 = line.find("\"", pos1 + 8);
width = line.substr(pos1 + 7, pos2-pos1-7);
pos1 = line.find("length=\"");
pos2 = line.find("\"", pos1 + 9);
height = line.substr(pos1 + 8, pos2-pos1-8);
break;
}
}
}
inline void WriteMessage(pugi::xml_node& listItem, unsigned int type, std::string content) {
if (type == g_message_say)
@@ -161,15 +137,9 @@ namespace boss {
node.set_name("script");
node.append_attribute("src").set_value(ToFileURL(g_path_polyfill).c_str());
node.text().set(" ");
node = head.append_child();
node.set_name("script");
node.append_attribute("src").set_value(ToFileURL(g_path_svgweb).c_str());
node.append_attribute("data-path").set_value(ToFileURL(g_path_svgweb.parent_path()).c_str());
node.text().set(" ");
}
inline void AppendNav(pugi::xml_node& body, bool createGraphTab) {
inline void AppendNav(pugi::xml_node& body) {
BOOST_LOG_TRIVIAL(trace) << "Appending navigation bar to BOSS report.";
pugi::xml_node nav, div;
@@ -190,14 +160,6 @@ namespace boss {
div.append_attribute("data-section").set_value("plugins");
div.text().set(boost::locale::translate("Details").str().c_str());
if (createGraphTab) {
div = nav.append_child();
div.set_name("div");
div.append_attribute("class").set_value("button");
div.append_attribute("data-section").set_value("graph");
div.text().set(boost::locale::translate("Graph").str().c_str());
}
div = nav.append_child();
div.set_name("div");
div.append_attribute("class").set_value("button hidden");
@@ -446,7 +408,6 @@ namespace boss {
inline void AppendMain(pugi::xml_node& body,
const std::string& oldDetails,
const std::string& masterlistVersion,
const std::string& graphPath,
bool masterlistUpdateEnabled,
const std::list<Message>& messages,
const std::list<Plugin>& plugins,
@@ -472,26 +433,6 @@ namespace boss {
pluginMessageNo = messageNo;
AppendSummary(main, hasChanged, masterlistVersion, masterlistUpdateEnabled, messageNo, warnNo, errorNo, messages);
if (boost::filesystem::exists(graphPath)) {
//Append graph tag.
pugi::xml_node graph = main.append_child();
graph.set_name("div");
graph.append_attribute("id").set_value("graph");
graph.append_attribute("class").set_value("hidden");
pugi::xml_node img = graph.append_child();
img.set_name("object");
img.append_attribute("data").set_value(ToFileURL(graphPath).c_str());
img.append_attribute("type").set_value("image/svg+xml");
//Also need to set image dimensions, get them from the graph file.
std::string width, height;
GetGraphWidthHeight(graphPath, width, height);
img.append_attribute("width").set_value(width.c_str());
img.append_attribute("height").set_value(height.c_str());
}
}
inline void AppendFilters(pugi::xml_node& body, int messageNo, int pluginNo) {
@@ -596,13 +537,12 @@ namespace boss {
}
inline void GenerateReport(const std::string& file,
inline void GenerateReport(const boost::filesystem::path& file,
const std::list<Message>& messages,
const std::list<Plugin>& plugins,
const std::string& oldDetails,
const std::string& masterlistVersion,
const bool masterlistUpdateEnabled,
const std::string& graphPath) {
const bool masterlistUpdateEnabled) {
pugi::xml_document doc;
@@ -611,19 +551,25 @@ namespace boss {
pugi::xml_node body = doc.append_child();
body.set_name("body");
AppendNav(body, boost::filesystem::exists(graphPath));
AppendNav(body);
int messageNo=0;
AppendMain(body, oldDetails, masterlistVersion, graphPath, masterlistUpdateEnabled, messages, plugins, messageNo);
AppendMain(body, oldDetails, masterlistVersion, masterlistUpdateEnabled, messages, plugins, messageNo);
AppendFilters(body, messageNo, plugins.size());
AppendScripts(body);
//PugiXML's save_file doesn't handle Unicode paths right (it can't open them right), so use a stream instead.
/*
if (!doc.save_file(file.c_str(), "\t", pugi::format_default | pugi::format_no_declaration | pugi::format_raw)) {
BOOST_LOG_TRIVIAL(error) << "Could not write BOSS report.";
BOOST_LOG_TRIVIAL(error) << "Could not write BOSS report to: " << file;
throw boss::error(boss::error::path_write_fail, boost::locale::translate("Could not write BOSS report.").str());
}
*/
boost::filesystem::path outpath(file);
boss::ofstream out(outpath);
doc.save(out, "\t", pugi::format_default | pugi::format_no_declaration | pugi::format_raw);
out.close();
}
@@ -642,7 +588,6 @@ namespace boss {
root["Debug Verbosity"] = 0;
root["Update Masterlist"] = true;
root["View Report Externally"] = false;
root["Generate Graph Image"] = false;
games.push_back(Game(g_game_tes4));
games.push_back(Game(g_game_tes5));
@@ -761,7 +706,7 @@ namespace YAML {
if (rhs.IsConditional())
out << Key << "condition" << Value << rhs.Condition();
if (!rhs.DisplayName().empty())
if (rhs.DisplayName() != rhs.Name())
out << Key << "display" << Value << rhs.DisplayName();
out << EndMap;
-2
View File
@@ -56,8 +56,6 @@ namespace boss {
const boost::filesystem::path g_path_js = boost::filesystem::current_path() / "resources" / "script.js";
const boost::filesystem::path g_path_polyfill = boost::filesystem::current_path() / "resources" / "polyfill.js";
const boost::filesystem::path g_path_l10n = boost::filesystem::current_path() / "resources" / "l10n";
const boost::filesystem::path g_path_graphvis = boost::filesystem::current_path() / "resources" / "graphvis" / "dot.exe";
const boost::filesystem::path g_path_svgweb = boost::filesystem::current_path() / "resources" / "svgweb" / "svg.js";
const boost::filesystem::path g_path_local = GetLocalAppDataPath() / "BOSS";
const boost::filesystem::path g_path_settings = g_path_local / "settings.yaml";
const boost::filesystem::path g_path_log = g_path_local / "BOSSDebugLog.txt";
-2
View File
@@ -60,8 +60,6 @@ namespace boss {
extern const boost::filesystem::path g_path_polyfill;
extern const boost::filesystem::path g_path_log;
extern const boost::filesystem::path g_path_l10n;
extern const boost::filesystem::path g_path_graphvis;
extern const boost::filesystem::path g_path_svgweb;
}
#endif
-23
View File
@@ -60,29 +60,6 @@ namespace boss {
return false;
}
void SaveGraph(const PluginGraph& graph, const boost::filesystem::path outpath) {
//First need to extract vertex names, since their stored as private members otherwise.
vector<string> names;
vertex_it vit, vit_end;
boost::tie(vit, vit_end) = boost::vertices(graph);
for (vit, vit_end; vit != vit_end; ++vit) {
names.push_back(graph[*vit].Name());
}
//Also, writing the graph requires an index map, which std::list-based VertexList graphs don't have, so one needs to be built separately.
map<vertex_t, string> index_map;
boost::associative_property_map< map<vertex_t, string> > v_index_map(index_map);
BGL_FORALL_VERTICES(v, graph, PluginGraph)
put(v_index_map, v, graph[v].Name());
//Now write graph to file.
boss::ofstream out(outpath);
boost::write_graphviz(out, graph, boost::default_writer(), boost::default_writer(), boost::default_writer(), v_index_map);
out.close();
}
void Sort(const PluginGraph& graph, std::list<Plugin>& plugins) {
//Topological sort requires an index map, which std::list-based VertexList graphs don't have, so one needs to be built separately.
-2
View File
@@ -49,8 +49,6 @@ namespace boss {
bool GetVertexByName(const PluginGraph& graph, const std::string& name, vertex_t& vertex);
void SaveGraph(const PluginGraph& graph, const boost::filesystem::path outpath);
void Sort(const PluginGraph& graph, std::list<Plugin>& plugins);
void CheckForCycles(const PluginGraph& graph);
+1 -105
View File
@@ -229,27 +229,7 @@ namespace boss {
//Turns an absolute filesystem path into a valid file:// URL.
std::string ToFileURL(const fs::path& file) {
BOOST_LOG_TRIVIAL(trace) << "Converting file path " << file << " to a URL.";
//URLs are UTF-8 encoded then any characters (equiv. their corresponding bytes) not in the unreserved set (equiv. their corresponding bytes) are replaced by a percentage sign followed by the hex representation of their binary value.
string unreserved = "-.0123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~"; //Unreserved in byte value order, plus the colon character since that's allowed for drive paths.
string url = "file:///";
for (boost::filesystem::path::const_iterator it=file.begin(), endit=file.end(); it != endit; ++it) {
string part = it->string();
if (part == "/") //Skip exta backslash after drive path.
continue;
//String iterator is byte-by-byte, not character-by-character, which is good.
for (string::const_iterator jt=part.begin(), endjt=part.end(); jt != endjt; ++jt) {
if (!binary_search(unreserved.begin(), unreserved.end(), *jt))
//Replace with percentage-hex value.
url += '%' + IntToHexString(*jt);
else
url += *jt;
}
url += '/';
}
url.resize(url.length()-1); //Get rid of trailing forward slash.
return url;
return "file:///" + file.string(); //Seems that we don't need to worry about encoding, tested with Unicode paths.
}
std::string GetLangString(const unsigned int num) {
@@ -274,90 +254,6 @@ namespace boss {
return g_lang_any;
}
//Runs a command using the Win32 API.
bool RunCommand(const std::string& command, std::string& output) {
HANDLE consoleWrite = NULL;
HANDLE consoleRead = NULL;
SECURITY_ATTRIBUTES saAttr;
PROCESS_INFORMATION piProcInfo;
STARTUPINFO siStartInfo;
CHAR chBuf[BUFSIZE];
DWORD dwRead;
DWORD exitCode;
//Init attributes.
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL;
BOOST_LOG_TRIVIAL(trace) << "Creating a pipe for the process.";
//Create I/O pipes.
if (!CreatePipe(&consoleRead, &consoleWrite, &saAttr, 0)) {
BOOST_LOG_TRIVIAL(error) << "Could not create pipe for process.";
throw error(error::windows_error, lc::translate("Could not create pipe for process."));
}
//Create a child process.
BOOST_LOG_TRIVIAL(trace) << "Creating a child process.";
ZeroMemory(&piProcInfo, sizeof(PROCESS_INFORMATION));
ZeroMemory(&siStartInfo, sizeof(STARTUPINFO));
siStartInfo.cb = sizeof(STARTUPINFO);
siStartInfo.hStdError = consoleWrite;
siStartInfo.hStdOutput = consoleWrite;
siStartInfo.dwFlags |= STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
siStartInfo.wShowWindow = SW_HIDE;
const int utf16Len = MultiByteToWideChar(CP_UTF8, 0, command.c_str(), -1, NULL, 0);
wchar_t * cmdLine = new wchar_t[utf16Len];
MultiByteToWideChar(CP_UTF8, 0, command.c_str(), -1, cmdLine, utf16Len);
bool result = CreateProcess(NULL,
cmdLine, // command line
NULL, // process security attributes
NULL, // primary thread security attributes
TRUE, // handles are inherited
CREATE_NO_WINDOW, // creation flags
NULL, // use parent's environment
NULL, // use parent's current directory
&siStartInfo, // STARTUPINFO pointer
&piProcInfo); // receives PROCESS_INFORMATION
delete [] cmdLine;
if (!result) {
BOOST_LOG_TRIVIAL(error) << "Could not create process.";
throw error(error::windows_error, lc::translate("Could not create process."));
}
BOOST_LOG_TRIVIAL(trace) << "Waiting for process to complete.";
WaitForSingleObject(piProcInfo.hProcess, INFINITE);
BOOST_LOG_TRIVIAL(trace) << "Getting the process exit code.";
if (!GetExitCodeProcess(piProcInfo.hProcess, &exitCode)) {
BOOST_LOG_TRIVIAL(error) << "Could not get process exit code.";
throw error(error::windows_error, lc::translate("Could not get process exit code."));
}
BOOST_LOG_TRIVIAL(trace) << "Getting the process output.";
if (!ReadFile(consoleRead, chBuf, BUFSIZE, &dwRead, NULL)) {
BOOST_LOG_TRIVIAL(error) << "Could not read process output.";
throw error(error::windows_error, lc::translate("Could not read process output."));
}
output = string(chBuf, dwRead);
return exitCode == 0;
}
//////////////////////////////
// Version Class Functions
-3
View File
@@ -69,9 +69,6 @@ namespace boss {
std::string GetLangString(const unsigned int num);
unsigned int GetLangNum(const std::string& str);
//Runs a command using the Win32 API.
bool RunCommand(const std::string& command, std::string& output);
//Version class for more robust version comparisons.
class Version {
private:

Some files were not shown because too many files have changed in this diff Show More