Rat (Release Audit Tool) results

The following document contains the results of Rat (Release Audit Tool).

*****************************************************
Summary
-------
Generated at: 2018-02-05T13:10:54-05:00
Notes: 2
Binaries: 10
Archives: 0
Standards: 133

Apache Licensed: 100
Generated Documents: 0

JavaDocs are generated and so license header is optional
Generated files do not required license headers

32 Unknown Licenses

*******************************

Unapproved licenses:

  resources/overview.html
  hydra-web/.eslintrc
  hydra-web/src/templates/alerts.filter.html
  hydra-web/src/templates/job.taskdetail.html
  hydra-web/src/templates/job.dependencies.html
  hydra-web/src/templates/command.filter.html
  hydra-web/src/templates/job.expandedconf.html
  hydra-web/src/templates/job.task.html
  hydra-web/src/templates/alias.filter.html
  hydra-web/src/templates/macro.filter.html
  hydra-web/src/js/util/autofocus.es6.js
  hydra-web/src/js/components/containers/floating-bottom-footer.es6.js
  hydra-web/src/js/components/search/search-results.es6.js
  hydra-web/src/js/components/search/search-context-line.es6.js
  hydra-web/src/js/components/search/search-bar.es6.js
  hydra-web/src/js/components/search/search-result.es6.js
  hydra-web/src/js/components/views/search-results-view.es6.js
  hydra-web/src/js/components/views/spawn-view.es6.js
  hydra-web/src/js/style/color-palette.es6.js
  hydra-web/src/js/vendor/datatable-1.9.4-modified.js
  hydra-web/src/js/vendor/date.js
  hydra-web/src/js/vendor/domReady.js
  hydra-web/src/js/vendor/alertify.js
  hydra-web/src/js/key-maps/default-key-map.es6.js
  hydra-web/src/js/search-results.es6.js
  hydra-web/README.md
  hydra-web/package.json
  docs/source/_static/dependencies/sinks.svg
  docs/source/_static/dependencies/sources.svg
  docs/source/_static/dependencies/all.svg
  docs/source/_static/dependencies/connected.svg
  docs/source/_themes/hydradoc/static/hydradoc.css

*******************************

Archives:

*****************************************************
  Files with Apache License headers will be marked AL
  Binary files (which do not require AL headers) will be marked B
  Compressed archives will be marked A
  Notices, licenses etc will be marked N
   resources/stylesheet.css
 !????? resources/overview.html
 !????? hydra-web/.eslintrc
  AL    hydra-web/src/templates/host.selectable.html
  AL    hydra-web/src/templates/job.alerts.html
  AL    hydra-web/src/templates/task.selectable.html
  AL    hydra-web/src/templates/host.detail.html
  AL    hydra-web/src/templates/job.detail.html
 !????? hydra-web/src/templates/alerts.filter.html
  AL    hydra-web/src/templates/job.history.html
  AL    hydra-web/src/templates/task.detail.divider.html
 !????? hydra-web/src/templates/job.taskdetail.html
  AL    hydra-web/src/templates/macro.selectable.html
  AL    hydra-web/src/templates/task.filter.html
  AL    hydra-web/src/templates/macro.configuration.html
  AL    hydra-web/src/templates/git.properties.html
  AL    hydra-web/src/templates/task.detail.html
 !????? hydra-web/src/templates/job.dependencies.html
  AL    hydra-web/src/templates/job.filter.html
  AL    hydra-web/src/templates/command.selectable.html
  AL    hydra-web/src/templates/alerts.detail.html
  AL    hydra-web/src/templates/job.permissions.modal.html
  AL    hydra-web/src/templates/task.divider.html
  AL    hydra-web/src/templates/job.checkdirs.html
  AL    hydra-web/src/templates/host.filter.html
  AL    hydra-web/src/templates/macro.detail.html
  AL    hydra-web/src/templates/job.selectable.html
  AL    hydra-web/src/templates/index.html
  AL    hydra-web/src/templates/job.table.info.html
  AL    hydra-web/src/templates/alias.detail.html
 !????? hydra-web/src/templates/command.filter.html
  AL    hydra-web/src/templates/job.parameter.html
  AL    hydra-web/src/templates/alerts.selectable.html
  AL    hydra-web/src/templates/job.revert.modal.html
  AL    hydra-web/src/templates/alias.selectable.html
  AL    hydra-web/src/templates/job.task.breadcrumbs.html
  AL    hydra-web/src/templates/job.configuration.html
 !????? hydra-web/src/templates/job.expandedconf.html
 !????? hydra-web/src/templates/job.task.html
  AL    hydra-web/src/templates/settings.rebalance.html
 !????? hydra-web/src/templates/alias.filter.html
  AL    hydra-web/src/templates/task.breadcrumbs.html
  AL    hydra-web/src/templates/command.detail.html
 !????? hydra-web/src/templates/macro.filter.html
  AL    hydra-web/src/templates/job.setting.html
  AL    hydra-web/src/js/app.js
  AL    hydra-web/src/js/sudo.js
 !????? hydra-web/src/js/util/autofocus.es6.js
 !????? hydra-web/src/js/components/containers/floating-bottom-footer.es6.js
 !????? hydra-web/src/js/components/search/search-results.es6.js
 !????? hydra-web/src/js/components/search/search-context-line.es6.js
 !????? hydra-web/src/js/components/search/search-bar.es6.js
 !????? hydra-web/src/js/components/search/search-result.es6.js
 !????? hydra-web/src/js/components/views/search-results-view.es6.js
 !????? hydra-web/src/js/components/views/spawn-view.es6.js
 !????? hydra-web/src/js/style/color-palette.es6.js
 !????? hydra-web/src/js/vendor/datatable-1.9.4-modified.js
 !????? hydra-web/src/js/vendor/date.js
 !????? hydra-web/src/js/vendor/domReady.js
 !????? hydra-web/src/js/vendor/alertify.js
 !????? hydra-web/src/js/key-maps/default-key-map.es6.js
  AL    hydra-web/src/js/login.js
  AL    hydra-web/src/js/main.es6.js
  AL    hydra-web/src/js/router.js
 !????? hydra-web/src/js/search-results.es6.js
  AL    hydra-web/src/js/modules/graph.js
  AL    hydra-web/src/js/modules/jobs.js
  AL    hydra-web/src/js/modules/alerts.js
  AL    hydra-web/src/js/modules/server.js
  AL    hydra-web/src/js/modules/datatable.js
  AL    hydra-web/src/js/modules/util.js
  AL    hydra-web/src/js/modules/task.js
  AL    hydra-web/src/js/modules/editor.js
  AL    hydra-web/src/js/modules/macro.js
  AL    hydra-web/src/js/modules/task.log.js
  AL    hydra-web/src/js/modules/host.js
  AL    hydra-web/src/js/modules/layout.views.js
  AL    hydra-web/src/js/modules/command.js
  AL    hydra-web/src/js/modules/settings.js
  AL    hydra-web/src/js/modules/git.js
  AL    hydra-web/src/js/modules/alias.js
 !????? hydra-web/README.md
  AL    hydra-web/webpack.config.js
 !????? hydra-web/package.json
  N     LICENSE
  N     NOTICE
  AL    docs/Makefile
  AL    docs/source/guide/index.rst
  AL    docs/source/guide/spawn-balancing.rst
  AL    docs/source/guide/standards.rst
  AL    docs/source/guide/user-reference.rst
  AL    docs/source/guide/performance-tuning.rst
  AL    docs/source/guide/maven-modules.rst
  AL    docs/source/guide/gdrive-export.rst
  AL    docs/source/guide/metrics.rst
  AL    docs/source/guide/components-threads.rst
  AL    docs/source/restapi/macros-api.rst
  AL    docs/source/restapi/alias-api.rst
  AL    docs/source/restapi/jobs-api.rst
  AL    docs/source/restapi/index.rst
  AL    docs/source/restapi/hosts-api.rst
  AL    docs/source/restapi/commands-api.rst
  AL    docs/source/restapi/tasks-api.rst
  AL    docs/source/tutorial/sources.rst
  AL    docs/source/tutorial/bundle-filters.rst
  AL    docs/source/tutorial/split-job.rst
  AL    docs/source/tutorial/hydra-for-beginners.rst
  AL    docs/source/tutorial/value-filters.rst
  AL    docs/source/tutorial/sinks.rst
  AL    docs/source/tutorial/index.rst
  AL    docs/source/tutorial/codec.rst
  AL    docs/source/tutorial/map-job.rst
  B     docs/source/_static/dependencies/sinks.png
 !????? docs/source/_static/dependencies/sinks.svg
  B     docs/source/_static/dependencies/connected.png
  B     docs/source/_static/dependencies/sources.png
  B     docs/source/_static/dependencies/all.png
 !????? docs/source/_static/dependencies/sources.svg
 !????? docs/source/_static/dependencies/all.svg
 !????? docs/source/_static/dependencies/connected.svg
  B     docs/source/_static/monster_hydra.png
  B     docs/source/_static/hydra-in-row-tree-out-row.png
  B     docs/source/_static/wikipedia-cache/NetworkTopology-Mesh.png
  B     docs/source/_static/hydra-sample-root-url-date.png
  B     docs/source/_static/monster_hydra_sm.png
  AL    docs/source/index.rst
  AL    docs/source/about/index.rst
  AL    docs/source/about/release-notes.rst
  AL    docs/source/about/resources.rst
  AL    docs/source/about/faq.rst
  AL    docs/source/conf.py
  AL    docs/source/concepts/paths-trees.rst
  AL    docs/source/concepts/queries.rst
  AL    docs/source/concepts/shards-pipelines.rst
  AL    docs/source/concepts/data-attachments.rst
  AL    docs/source/concepts/index.rst
  AL    docs/source/concepts/clusters-jobs.rst
  AL    docs/source/concepts/sources-sinks.rst
  AL    docs/source/concepts/filters.rst
  AL    docs/source/concepts/bundles-values.rst
 !????? docs/source/_themes/hydradoc/static/hydradoc.css
  B     docs/source/_themes/hydradoc/static/bg-li-plus.gif
  AL    docs/source/_themes/hydradoc/theme.conf
  AL    README.mdown
  AL    pom.xml
 
*****************************************************
 Printing headers for files without AL header...
 
 
=======================================================================
==resources/overview.html
=======================================================================
<html>
    <head>
       <title>Hydra User Reference</title>
    </head>
    <body>
    The Hydra user reference is divided into categories where each category corresponds to one of the
    components a Hydra job. Each category has is a summary page that provides a description
    of the category and a list of each item in the category. The list of
    items includes a brief description for each item.
    <p>The approximate status of the documentation writing for each category is:
    <table width="50%">
        <tr>
            <th style="text-align:left">Category</th>
            <th style="text-align:left">Description</th>
        </tr>
        <tr><td>&nbsp;</td></tr>
        <tr>
            <td><a href="com/addthis/hydra/task/run/TaskRunnable.html">Hydra Jobs</a></td>
            <td>top-level specification of the Hydra jobs</td>
        </tr>
        <tr>
            <td><a href="com/addthis/hydra/task/source/TaskDataSource.html">Input Sources</a></td>
            <td>input to a job</td>
        </tr>
        <tr>
            <td><a href="com/addthis/hydra/data/filter/bundle/BundleFilter.html">Bundle Filters</a></td>
            <td>transformations that accept a bundle as input</td>
        </tr>
        <tr>
            <td><a href="com/addthis/hydra/data/filter/value/AbstractValueFilter.html">Value Filters</a></td>
            <td>transformation that accept a value as input</td>
        </tr>
        <tr>
            <td><a href="com/addthis/hydra/task/output/TaskDataOutput.html">Output Sinks</a></td>
            <td>output from a job</td>
        </tr>
        <tr>
            <td><a href="com/addthis/hydra/task/output/tree/PathElement.html">Path Elements</a></td>
            <td>describe the nodes in tree output</td>
        </tr>
        <tr>
            <td><a href="com/addthis/hydra/data/tree/TreeDataParameters.html">Data Attachments</a></td>
            <td>additional information that is attached to tree nodes</td>
        </tr>
        <tr>
            <td><a href="com/addthis/hydra/data/query/QueryOp.html">Query Operations</a></td>
            <td>query operations that are performed on tree output</td>
        </tr>
    </table>
    <p>Most Hydra jobs are specified using one of the forms listed in the "Hydra Jobs" category.

=======================================================================
==hydra-web/.eslintrc
=======================================================================
{
    "ecmaFeatures": {
        "jsx": true
    },
    "parser": "babel-eslint",
    "plugins": ["react"],
    "env": {
        "browser": true,
        "amd": true,
        "es6": true
    },
    "globals": {
        
    },
    "rules": {
        "no-alert": 2,
        "no-array-constructor": 2,
        "no-bitwise": 0,
        "no-caller": 2,
        "no-catch-shadow": 2,
        "no-comma-dangle": 0,
        "no-cond-assign": 2,
        "no-console": 0,
        "no-constant-condition": 2,
        "no-continue": 0,
        "no-control-regex": 2,
        "no-debugger": 2,
        "no-delete-var": 2,
        "no-div-regex": 0,
        "no-dupe-keys": 2,
        "no-dupe-args": 2,
        "no-duplicate-case": 2,
        "no-else-return": 0,
        "no-empty": 1,
        "no-empty-character-class": 2,
        "no-empty-label": 2,
        "no-eq-null": 0,
        "no-eval": 2,
        "no-ex-assign": 2,
        "no-extend-native": 2,
        "no-extra-bind": 2,
        "no-extra-boolean-cast": 2,
        "no-extra-parens": 0,
        "no-extra-semi": 2,
        "no-fallthrough": 2,
        "no-floating-decimal": 0,
        "no-func-assign": 2,
        "no-implied-eval": 2,
        "no-inline-comments": 0,
        "no-inner-declarations": [2, "functions"],

=======================================================================
==hydra-web/src/templates/alerts.filter.html
=======================================================================

=======================================================================
==hydra-web/src/templates/job.taskdetail.html
=======================================================================

=======================================================================
==hydra-web/src/templates/job.dependencies.html
=======================================================================
job dependencies for <%-job.id%>

=======================================================================
==hydra-web/src/templates/command.filter.html
=======================================================================

=======================================================================
==hydra-web/src/templates/job.expandedconf.html
=======================================================================

=======================================================================
==hydra-web/src/templates/job.task.html
=======================================================================
job tasks for <%-job.id%>

=======================================================================
==hydra-web/src/templates/alias.filter.html
=======================================================================

=======================================================================
==hydra-web/src/templates/macro.filter.html
=======================================================================

=======================================================================
==hydra-web/src/js/util/autofocus.es6.js
=======================================================================
'use strict';

import ReactDOM from 'react-dom';

export default function (el) {
    setTimeout(() => {
        const found = ReactDOM.findDOMNode(el);

        if (found) {
            found.focus();
        }
    });
}

=======================================================================
==hydra-web/src/js/components/containers/floating-bottom-footer.es6.js
=======================================================================
'use strict';

import React from 'react';

const defaultHiddenStyle = {
	display: 'none'
};

const defaultVisibleStyle = {
	display: undefined
};

export default function FloatingBottomFooter({
	visible,
	children,
	visibleStyle = defaultVisibleStyle,
	hiddenStyle = defaultHiddenStyle
}) {
	const style = visible ? visibleStyle : hiddenStyle;

	return (
		<div style={style}>
			{children}
		</div>
	);
}

FloatingBottomFooter.propTypes = {
	visible: React.PropTypes.bool.isRequired,
	visibleStyle: React.PropTypes.object,
	hiddenStyle: React.PropTypes.object
};

=======================================================================
==hydra-web/src/js/components/search/search-results.es6.js
=======================================================================
import oboe from 'oboe';
import React from 'react';
import SearchResult from './search-result';
import palette from 'style/color-palette';
import shallowCompare from 'react-addons-shallow-compare';

function SearchHeader({
    headerStyle,
    searchStringStyle,
    searchString,
    totalFiles,
    matchTotalsStyle,
    totalMatches,
    jobsWithMatches,
    done
}) {
    return (
        <div style={headerStyle}>
            Search results for <span style={searchStringStyle}> {searchString} </span>
            {totalFiles === 0 ? '... ' : `in ${totalFiles} jobs... `}
            {totalMatches > 0 || done ?
                <span style={matchTotalsStyle}>
                    found {totalMatches} occurences in {jobsWithMatches} jobs
                    {done ? '' : ' so far...'}
                </span> :
                null}
        </div>
    );
}

SearchHeader.propTypes = {
    headerStyle: React.PropTypes.object.isRequired,
    searchStringStyle: React.PropTypes.object.isRequired,
    matchTotalsStyle: React.PropTypes.object.isRequired,
    searchString: React.PropTypes.string.isRequired,
    totalFiles: React.PropTypes.number.isRequired,
    totalMatches: React.PropTypes.number.isRequired,
    jobsWithMatches: React.PropTypes.number.isRequired,
    done: React.PropTypes.bool.isRequired
};

function wrapSearchResult(type, searchResult) {
    let jobMatches = 0;

    const searchResultStyle = {
        paddingBottom: '1.5em'
    };

    const jobStyle = {
        color: palette.detail1

=======================================================================
==hydra-web/src/js/components/search/search-context-line.es6.js
=======================================================================
'use strict';

import React from 'react';
import {requiredPaletteProp} from 'style/color-palette';
import invariant from 'invariant';

function FormattedLineNum({lineNumPadding, style, lineNum}) {
    let strLineNum = String(lineNum);

    while (strLineNum.length <= lineNumPadding) {
        strLineNum = ' ' + strLineNum;
    }

    return (
        <span style={style}>
            {strLineNum + ' '}
        </span>
    );
}

FormattedLineNum.propTypes = {
    lineNumPadding: React.PropTypes.number.isRequired,
    style: React.PropTypes.object.isRequired,
    lineNum: React.PropTypes.number.isRequired
};

function buildHref({type, id, lineNum, match}) {
    switch (type) {
        case 'job':
            return `/spawn2/#jobs/${id}/line/${lineNum}/col/${match.startChar}/conf`;
        case 'macro':
            return `/spawn2/#macros/${id}/line/${lineNum}/col/${match.startChar}/conf`;
        default:
            return invariant(false, 'unrecognized link type: %s', type);
    }
}

export default function SearchContextLine(props) {
    const {
        id,
        type,
        text,
        lineNum,
        lineNumPadding,
        matches,
        palette
    } = props;

    const matchedLinkStyle = {
        color: palette.detail0,

=======================================================================
==hydra-web/src/js/components/search/search-bar.es6.js
=======================================================================
'use strict';

import React from 'react';
import ReactDOM from 'react-dom';
import linkState from 'react-link-state';
import {requiredPaletteProp} from 'style/color-palette';
import FloatingBottomFooter from 'components/containers/floating-bottom-footer';

export default class SearchBar extends React.Component {
    static propTypes = {
        palette: requiredPaletteProp,
        visible: React.PropTypes.bool.isRequired,
        formTarget: React.PropTypes.oneOf(['_blank', '_self', '_parent', '_top']),
        onSubmit: React.PropTypes.func
    }

    defaultProps = {
        formTarget: '_blank',
        onSubmit: null
    }

    state = {
        searchString: ''
    }

    componentWillReceiveProps(nextProps) {
        if (nextProps.visible && !this.props.visible) {
            const found = ReactDOM.findDOMNode(this.refs.searchInput);
            if (found) {
                setTimeout(() => found.select());
            }
        }
    }

    handleSubmit(evt) {
        // React doesn't forward the 'target' prop to the actual form element
        evt.target.target = this.props.formTarget;

        if (this.props.onSubmit) {
            this.props.onSubmit(this.state.searchString);
            evt.preventDefault();
        }
    }

    render() {
        const {
            palette,
            visible
        } = this.props;


=======================================================================
==hydra-web/src/js/components/search/search-result.es6.js
=======================================================================
'use strict';

import React from 'react';
import SearchContextLine from './search-context-line';
import {requiredPaletteProp} from 'style/color-palette';

export default class SearchResult extends React.Component {
    static propTypes = {
        id: React.PropTypes.string.isRequired,
        type: React.PropTypes.oneOf(['job', 'macro']),
        description: React.PropTypes.node,
        contextLines: React.PropTypes.arrayOf(React.PropTypes.string).isRequired,
        startLine: React.PropTypes.number.isRequired,
        matches: React.PropTypes.arrayOf(
            React.PropTypes.shape({
                lineNum: React.PropTypes.number.isRequired,
                startChar: React.PropTypes.number.isRequired,
                endChar: React.PropTypes.number.isRequired
            })
        ).isRequired,
        palette: requiredPaletteProp
    }

    static defaultProps = {
        description: <i>no description</i>
    }

    render() {
        const {
            matches,
            id,
            type,
            contextLines,
            startLine,
            palette
        } = this.props;

        // Group matches by line num
        const matchesByLine = {};
        matches.forEach(match => {
            const {lineNum} = match;

            if (matchesByLine[lineNum] === undefined) {
                matchesByLine[lineNum] = [];
            }

            matchesByLine[lineNum].push(match);
        });

        const digits = String(startLine + contextLines.length + 1).length;

=======================================================================
==hydra-web/src/js/components/views/search-results-view.es6.js
=======================================================================
'use strict';

import SearchResults from 'components/search/search-results';
import SearchBar from 'components/search/search-bar';
import React from 'react';
import palette from 'style/color-palette';
import {HotKeys} from 'react-hotkeys';
import keyMap from 'key-maps/default-key-map';
import autofocus from 'util/autofocus';

export default class SearchResultsView extends React.Component {
    constructor(props) {
        super(props);
        this.handleHashChange = this.handleHashChange.bind(this);
    }

    state = {
        searchString: window.location.hash.substring(1),
        searchBarVisible: false
    }

    componentWillMount() {
        this.handlers = {
            searchAll: this.handleSearchAllJobs.bind(this),
            esc: this.handleEsc.bind(this)
        };

        window.addEventListener('hashchange', this.handleHashChange);
    }

    componentDidMount() {
        this.focusApp();
    }

    componentsWillUnmount() {
        this.handlers = null;

        window.removeEventListener('hashchange', this.handleHashChange);
    }

    handleHashChange() {
        this.setState({
            searchString: window.location.hash.substring(1)
        });
    }

    handleSearchAllJobs() {
        this.setState({
            searchBarVisible: true
        });

=======================================================================
==hydra-web/src/js/components/views/spawn-view.es6.js
=======================================================================
'use strict';

import palette from 'style/color-palette';
import SearchBar from 'components/search/search-bar';
import React from 'react';
import {HotKeys} from 'react-hotkeys';
import keyMap from 'key-maps/default-key-map';
import autofocus from 'util/autofocus';

export default class SpawnView extends React.Component {
    state = {
        searchString: window.location.hash.substring(1),
        searchBarVisible: false
    }

    componentWillMount() {
        this.handlers = {
            searchAll: this.handleSearchAllJobs.bind(this),
            esc: this.handleEsc.bind(this)
        };

        window.addEventListener('hashchange', this.handleHashChange);
    }

    componentDidMount() {
        this.focusApp();
    }

    componentsWillUnmount() {
        this.handlers = null;

        window.removeEventListener('hashchange', this.handleHashChange);
    }

    handleSearchAllJobs() {
        this.setState({
            searchBarVisible: true
        });
    }

    handleEsc() {
        this.focusApp();
        this.setState({
            searchBarVisible: false
        });
    }

    focusApp() {
        autofocus(this.refs.hotKeys);
    }

=======================================================================
==hydra-web/src/js/style/color-palette.es6.js
=======================================================================
'use strict';

import React from 'react';

const colors = {
	darkGray: '#272822',
	gray: '#696161',
	lightGray: '#B7AEAE',
	offWhite: '#F8F8F2',
	darkPink: '#F92672',
	lightBlue: '#66D9EF',
	limeGreen: '#A6E22E',
	orange: '#FD971F'
};

class ColorPalette {
	constructor() {
		this.background0 = colors.darkGray;
		this.background1 = colors.offWhite;
		this.background2 = colors.gray;
		this.background3 = colors.lightGray;
		this.text0 = colors.offWhite;
		this.text1 = colors.darkGray;
		this.text2 = colors.lightGray;
		this.detail0 = colors.darkPink;
		this.detail1 = colors.lightBlue;
		this.detail2 = colors.limeGreen;
		this.detail3 = colors.orange;
	}
}

export default new ColorPalette();

export const optionalPaletteProp = React.PropTypes.instanceOf(ColorPalette);
export const requiredPaletteProp = React.PropTypes.instanceOf(ColorPalette).isRequired;

=======================================================================
==hydra-web/src/js/vendor/datatable-1.9.4-modified.js
=======================================================================
/**
 * @summary     DataTables
 * @description Paginate, search and sort HTML tables
 * @version     1.9.4
 * @file        jquery.dataTables.js
 * @author      Allan Jardine (www.sprymedia.co.uk)
 * @contact     www.sprymedia.co.uk/contact
 *
 * @copyright Copyright 2008-2012 Allan Jardine, all rights reserved.
 *
 * This source file is free software, under either the GPL v2 license or a
 * BSD style license, available at:
 *   http://datatables.net/license_gpl2
 *   http://datatables.net/license_bsd
 * 
 * This source file is distributed in the hope that it will be useful, but 
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
 * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
 * 
 * For details please refer to: http://www.datatables.net
 */

/*jslint evil: true, undef: true, browser: true */
/*globals $, jQuery,define,_fnExternApiFunc,_fnInitialise,_fnInitComplete,_fnLanguageCompat,_fnAddColumn,_fnColumnOptions,_fnAddData,_fnCreateTr,_fnGatherData,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnServerParams,_fnAddOptionsHtml,_fnFeatureHtmlTable,_fnScrollDraw,_fnAdjustColumnSizing,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnBuildSearchArray,_fnBuildSearchRow,_fnFilterCreateSearch,_fnDataToSearch,_fnSort,_fnSortAttachListener,_fnSortingClasses,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnFeatureHtmlLength,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnNodeToDataIndex,_fnVisbleColumns,_fnCalculateEnd,_fnConvertToWidth,_fnCalculateColumnWidths,_fnScrollingWidthAdjust,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnDetectType,_fnSettingsFromNode,_fnGetDataMaster,_fnGetTrNodes,_fnGetTdNodes,_fnEscapeRegex,_fnDeleteIndex,_fnReOrderIndex,_fnColumnOrdering,_fnLog,_fnClearTable,_fnSaveState,_fnLoadState,_fnCreateCookie,_fnReadCookie,_fnDetectHeader,_fnGetUniqueThs,_fnScrollBarWidth,_fnApplyToChildren,_fnMap,_fnGetRowData,_fnGetCellData,_fnSetCellData,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnApplyColumnDefs,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnJsonString,_fnRender,_fnNodeToColumnIndex,_fnInfoMacros,_fnBrowserDetect,_fnGetColumns*/


"use strict";

/** 
 * DataTables is a plug-in for the jQuery Javascript library. It is a 
 * highly flexible tool, based upon the foundations of progressive 
 * enhancement, which will add advanced interaction controls to any 
 * HTML table. For a full list of features please refer to
 * <a href="http://datatables.net">DataTables.net</a>.
 *
 * Note that the <i>DataTable</i> object is not a global variable but is
 * aliased to <i>jQuery.fn.DataTable</i> and <i>jQuery.fn.dataTable</i> through which 
 * it may be  accessed.
 *
 *  @class
 *  @param {object} [oInit={}] Configuration object for DataTables. Options
 *    are defined by {@link DataTable.defaults}
 *  @requires jQuery 1.3+
 * 
 *  @example
 *    // Basic initialisation
 *    $(document).ready( function {
 *      $('#example').dataTable();
 *    } );
 *  

=======================================================================
==hydra-web/src/js/vendor/date.js
=======================================================================
/**
 * Version: 1.0 Alpha-1 
 * Build Date: 13-Nov-2007
 * Copyright (c) 2006-2007, Coolite Inc. (http://www.coolite.com/). All rights reserved.
 * License: Licensed under The MIT License. See license.txt and http://www.datejs.com/license/. 
 * Website: http://www.datejs.com/ or http://www.coolite.com/datejs/
 */
Date.CultureInfo={name:"en-US",englishName:"English (United States)",nativeName:"English (United States)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"mdy",formatPatterns:{shortDate:"M/d/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, MMMM dd, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\+|after|from)/i,subtract:/^(\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\.?m?\.?|p\.?m?\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\s*(\+|\-)\s*\d\d\d\d?)|gmt)/i,ordinalSuffix:/^\s*(st|nd|rd|th)/i,timeContext:/^\s*(\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}};
Date.getMonthNumberFromName=function(name){var n=Date.CultureInfo.monthNames,m=Date.CultureInfo.abbreviatedMonthNames,s=name.toLowerCase();for(var i=0;i<n.length;i++){if(n[i].toLowerCase()==s||m[i].toLowerCase()==s){return i;}}
return-1;};Date.getDayNumberFromName=function(name){var n=Date.CultureInfo.dayNames,m=Date.CultureInfo.abbreviatedDayNames,o=Date.CultureInfo.shortestDayNames,s=name.toLowerCase();for(var i=0;i<n.length;i++){if(n[i].toLowerCase()==s||m[i].toLowerCase()==s){return i;}}
return-1;};Date.isLeapYear=function(year){return(((year%4===0)&&(year%100!==0))||(year%400===0));};Date.getDaysInMonth=function(year,month){return[31,(Date.isLeapYear(year)?29:28),31,30,31,30,31,31,30,31,30,31][month];};Date.getTimezoneOffset=function(s,dst){return(dst||false)?Date.CultureInfo.abbreviatedTimeZoneDST[s.toUpperCase()]:Date.CultureInfo.abbreviatedTimeZoneStandard[s.toUpperCase()];};Date.getTimezoneAbbreviation=function(offset,dst){var n=(dst||false)?Date.CultureInfo.abbreviatedTimeZoneDST:Date.CultureInfo.abbreviatedTimeZoneStandard,p;for(p in n){if(n[p]===offset){return p;}}
return null;};Date.prototype.clone=function(){return new Date(this.getTime());};Date.prototype.compareTo=function(date){if(isNaN(this)){throw new Error(this);}
if(date instanceof Date&&!isNaN(date)){return(this>date)?1:(this<date)?-1:0;}else{throw new TypeError(date);}};Date.prototype.equals=function(date){return(this.compareTo(date)===0);};Date.prototype.between=function(start,end){var t=this.getTime();return t>=start.getTime()&&t<=end.getTime();};Date.prototype.addMilliseconds=function(value){this.setMilliseconds(this.getMilliseconds()+value);return this;};Date.prototype.addSeconds=function(value){return this.addMilliseconds(value*1000);};Date.prototype.addMinutes=function(value){return this.addMilliseconds(value*60000);};Date.prototype.addHours=function(value){return this.addMilliseconds(value*3600000);};Date.prototype.addDays=function(value){return this.addMilliseconds(value*86400000);};Date.prototype.addWeeks=function(value){return this.addMilliseconds(value*604800000);};Date.prototype.addMonths=function(value){var n=this.getDate();this.setDate(1);this.setMonth(this.getMonth()+value);this.setDate(Math.min(n,this.getDaysInMonth()));return this;};Date.prototype.addYears=function(value){return this.addMonths(value*12);};Date.prototype.add=function(config){if(typeof config=="number"){this._orient=config;return this;}
var x=config;if(x.millisecond||x.milliseconds){this.addMilliseconds(x.millisecond||x.milliseconds);}
if(x.second||x.seconds){this.addSeconds(x.second||x.seconds);}
if(x.minute||x.minutes){this.addMinutes(x.minute||x.minutes);}
if(x.hour||x.hours){this.addHours(x.hour||x.hours);}
if(x.month||x.months){this.addMonths(x.month||x.months);}
if(x.year||x.years){this.addYears(x.year||x.years);}
if(x.day||x.days){this.addDays(x.day||x.days);}
return this;};Date._validate=function(value,min,max,name){if(typeof value!="number"){throw new TypeError(value+" is not a Number.");}else if(value<min||value>max){throw new RangeError(value+" is not a valid value for "+name+".");}
return true;};Date.validateMillisecond=function(n){return Date._validate(n,0,999,"milliseconds");};Date.validateSecond=function(n){return Date._validate(n,0,59,"seconds");};Date.validateMinute=function(n){return Date._validate(n,0,59,"minutes");};Date.validateHour=function(n){return Date._validate(n,0,23,"hours");};Date.validateDay=function(n,year,month){return Date._validate(n,1,Date.getDaysInMonth(year,month),"days");};Date.validateMonth=function(n){return Date._validate(n,0,11,"months");};Date.validateYear=function(n){return Date._validate(n,1,9999,"seconds");};Date.prototype.set=function(config){var x=config;if(!x.millisecond&&x.millisecond!==0){x.millisecond=-1;}
if(!x.second&&x.second!==0){x.second=-1;}
if(!x.minute&&x.minute!==0){x.minute=-1;}
if(!x.hour&&x.hour!==0){x.hour=-1;}
if(!x.day&&x.day!==0){x.day=-1;}
if(!x.month&&x.month!==0){x.month=-1;}
if(!x.year&&x.year!==0){x.year=-1;}
if(x.millisecond!=-1&&Date.validateMillisecond(x.millisecond)){this.addMilliseconds(x.millisecond-this.getMilliseconds());}
if(x.second!=-1&&Date.validateSecond(x.second)){this.addSeconds(x.second-this.getSeconds());}
if(x.minute!=-1&&Date.validateMinute(x.minute)){this.addMinutes(x.minute-this.getMinutes());}
if(x.hour!=-1&&Date.validateHour(x.hour)){this.addHours(x.hour-this.getHours());}
if(x.month!==-1&&Date.validateMonth(x.month)){this.addMonths(x.month-this.getMonth());}
if(x.year!=-1&&Date.validateYear(x.year)){this.addYears(x.year-this.getFullYear());}
if(x.day!=-1&&Date.validateDay(x.day,this.getFullYear(),this.getMonth())){this.addDays(x.day-this.getDate());}
if(x.timezone){this.setTimezone(x.timezone);}
if(x.timezoneOffset){this.setTimezoneOffset(x.timezoneOffset);}
return this;};Date.prototype.clearTime=function(){this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;};Date.prototype.isLeapYear=function(){var y=this.getFullYear();return(((y%4===0)&&(y%100!==0))||(y%400===0));};Date.prototype.isWeekday=function(){return!(this.is().sat()||this.is().sun());};Date.prototype.getDaysInMonth=function(){return Date.getDaysInMonth(this.getFullYear(),this.getMonth());};Date.prototype.moveToFirstDayOfMonth=function(){return this.set({day:1});};Date.prototype.moveToLastDayOfMonth=function(){return this.set({day:this.getDaysInMonth()});};Date.prototype.moveToDayOfWeek=function(day,orient){var diff=(day-this.getDay()+7*(orient||+1))%7;return this.addDays((diff===0)?diff+=7*(orient||+1):diff);};Date.prototype.moveToMonth=function(month,orient){var diff=(month-this.getMonth()+12*(orient||+1))%12;return this.addMonths((diff===0)?diff+=12*(orient||+1):diff);};Date.prototype.getDayOfYear=function(){return Math.floor((this-new Date(this.getFullYear(),0,1))/86400000);};Date.prototype.getWeekOfYear=function(firstDayOfWeek){var y=this.getFullYear(),m=this.getMonth(),d=this.getDate();var dow=firstDayOfWeek||Date.CultureInfo.firstDayOfWeek;var offset=7+1-new Date(y,0,1).getDay();if(offset==8){offset=1;}
var daynum=((Date.UTC(y,m,d,0,0,0)-Date.UTC(y,0,1,0,0,0))/86400000)+1;var w=Math.floor((daynum-offset+7)/7);if(w===dow){y--;var prevOffset=7+1-new Date(y,0,1).getDay();if(prevOffset==2||prevOffset==8){w=53;}else{w=52;}}
return w;};Date.prototype.isDST=function(){console.log('isDST');return this.toString().match(/(E|C|M|P)(S|D)T/)[2]=="D";};Date.prototype.getTimezone=function(){return Date.getTimezoneAbbreviation(this.getUTCOffset,this.isDST());};Date.prototype.setTimezoneOffset=function(s){var here=this.getTimezoneOffset(),there=Number(s)*-6/10;this.addMinutes(there-here);return this;};Date.prototype.setTimezone=function(s){return this.setTimezoneOffset(Date.getTimezoneOffset(s));};Date.prototype.getUTCOffset=function(){var n=this.getTimezoneOffset()*-10/6,r;if(n<0){r=(n-10000).toString();return r[0]+r.substr(2);}else{r=(n+10000).toString();return"+"+r.substr(1);}};Date.prototype.getDayName=function(abbrev){return abbrev?Date.CultureInfo.abbreviatedDayNames[this.getDay()]:Date.CultureInfo.dayNames[this.getDay()];};Date.prototype.getMonthName=function(abbrev){return abbrev?Date.CultureInfo.abbreviatedMonthNames[this.getMonth()]:Date.CultureInfo.monthNames[this.getMonth()];};Date.prototype._toString=Date.prototype.toString;Date.prototype.toString=function(format){var self=this;var p=function p(s){return(s.toString().length==1)?"0"+s:s;};return format?format.replace(/dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?/g,function(format){switch(format){case"hh":return p(self.getHours()<13?self.getHours():(self.getHours()-12));case"h":return self.getHours()<13?self.getHours():(self.getHours()-12);case"HH":return p(self.getHours());case"H":return self.getHours();case"mm":return p(self.getMinutes());case"m":return self.getMinutes();case"ss":return p(self.getSeconds());case"s":return self.getSeconds();case"yyyy":return self.getFullYear();case"yy":return self.getFullYear().toString().substring(2,4);case"dddd":return self.getDayName();case"ddd":return self.getDayName(true);case"dd":return p(self.getDate());case"d":return self.getDate().toString();case"MMMM":return self.getMonthName();case"MMM":return self.getMonthName(true);case"MM":return p((self.getMonth()+1));case"M":return self.getMonth()+1;case"t":return self.getHours()<12?Date.CultureInfo.amDesignator.substring(0,1):Date.CultureInfo.pmDesignator.substring(0,1);case"tt":return self.getHours()<12?Date.CultureInfo.amDesignator:Date.CultureInfo.pmDesignator;case"zzz":case"zz":case"z":return"";}}):this._toString();};
Date.now=function(){return new Date();};Date.today=function(){return Date.now().clearTime();};Date.prototype._orient=+1;Date.prototype.next=function(){this._orient=+1;return this;};Date.prototype.last=Date.prototype.prev=Date.prototype.previous=function(){this._orient=-1;return this;};Date.prototype._is=false;Date.prototype.is=function(){this._is=true;return this;};Number.prototype._dateElement="day";Number.prototype.fromNow=function(){var c={};c[this._dateElement]=this;return Date.now().add(c);};Number.prototype.ago=function(){var c={};c[this._dateElement]=this*-1;return Date.now().add(c);};(function(){var $D=Date.prototype,$N=Number.prototype;var dx=("sunday monday tuesday wednesday thursday friday saturday").split(/\s/),mx=("january february march april may june july august september october november december").split(/\s/),px=("Millisecond Second Minute Hour Day Week Month Year").split(/\s/),de;var df=function(n){return function(){if(this._is){this._is=false;return this.getDay()==n;}
return this.moveToDayOfWeek(n,this._orient);};};for(var i=0;i<dx.length;i++){$D[dx[i]]=$D[dx[i].substring(0,3)]=df(i);}
var mf=function(n){return function(){if(this._is){this._is=false;return this.getMonth()===n;}
return this.moveToMonth(n,this._orient);};};for(var j=0;j<mx.length;j++){$D[mx[j]]=$D[mx[j].substring(0,3)]=mf(j);}
var ef=function(j){return function(){if(j.substring(j.length-1)!="s"){j+="s";}
return this["add"+j](this._orient);};};var nf=function(n){return function(){this._dateElement=n;return this;};};for(var k=0;k<px.length;k++){de=px[k].toLowerCase();$D[de]=$D[de+"s"]=ef(px[k]);$N[de]=$N[de+"s"]=nf(de);}}());Date.prototype.toJSONString=function(){return this.toString("yyyy-MM-ddThh:mm:ssZ");};Date.prototype.toShortDateString=function(){return this.toString(Date.CultureInfo.formatPatterns.shortDatePattern);};Date.prototype.toLongDateString=function(){return this.toString(Date.CultureInfo.formatPatterns.longDatePattern);};Date.prototype.toShortTimeString=function(){return this.toString(Date.CultureInfo.formatPatterns.shortTimePattern);};Date.prototype.toLongTimeString=function(){return this.toString(Date.CultureInfo.formatPatterns.longTimePattern);};Date.prototype.getOrdinal=function(){switch(this.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th";}};
(function(){Date.Parsing={Exception:function(s){this.message="Parse error at '"+s.substring(0,10)+" ...'";}};var $P=Date.Parsing;var _=$P.Operators={rtoken:function(r){return function(s){var mx=s.match(r);if(mx){return([mx[0],s.substring(mx[0].length)]);}else{throw new $P.Exception(s);}};},token:function(s){return function(s){return _.rtoken(new RegExp("^\s*"+s+"\s*"))(s);};},stoken:function(s){return _.rtoken(new RegExp("^"+s));},until:function(p){return function(s){var qx=[],rx=null;while(s.length){try{rx=p.call(this,s);}catch(e){qx.push(rx[0]);s=rx[1];continue;}
break;}
return[qx,s];};},many:function(p){return function(s){var rx=[],r=null;while(s.length){try{r=p.call(this,s);}catch(e){return[rx,s];}
rx.push(r[0]);s=r[1];}

=======================================================================
==hydra-web/src/js/vendor/domReady.js
=======================================================================
/**
 * @license RequireJS domReady 2.0.1 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
 * Available via the MIT or new BSD license.
 * see: http://github.com/requirejs/domReady for details
 */
/*jslint */
/*global require: false, define: false, requirejs: false,
  window: false, clearInterval: false, document: false,
  self: false, setInterval: false */


define(function () {
    'use strict';

    var isTop, testDiv, scrollIntervalId,
        isBrowser = typeof window !== "undefined" && window.document,
        isPageLoaded = !isBrowser,
        doc = isBrowser ? document : null,
        readyCalls = [];

    function runCallbacks(callbacks) {
        var i;
        for (i = 0; i < callbacks.length; i += 1) {
            callbacks[i](doc);
        }
    }

    function callReady() {
        var callbacks = readyCalls;

        if (isPageLoaded) {
            //Call the DOM ready callbacks
            if (callbacks.length) {
                readyCalls = [];
                runCallbacks(callbacks);
            }
        }
    }

    /**
     * Sets the page as loaded.
     */
    function pageLoaded() {
        if (!isPageLoaded) {
            isPageLoaded = true;
            if (scrollIntervalId) {
                clearInterval(scrollIntervalId);
            }

            callReady();

=======================================================================
==hydra-web/src/js/vendor/alertify.js
=======================================================================
/**
 * alertifyjs 1.4.1 http://alertifyjs.com
 * AlertifyJS is a javascript framework for developing pretty browser dialogs and notifications.
 * Copyright 2015 Mohammad Younes <Mohammad@alertifyjs.com> (http://alertifyjs.com) 
 * Licensed under MIT <http://opensource.org/licenses/mit-license.php>*/
( function ( window ) {
    'use strict';
    
    /**
     * Keys enum
     * @type {Object}
     */
    var keys = {
        ENTER: 13,
        ESC: 27,
        F1: 112,
        F12: 123,
        LEFT: 37,
        RIGHT: 39
    };
    /**
     * Default options 
     * @type {Object}
     */
    var defaults = {
        modal:true,
        basic:false,
        frameless:false,
        movable:true,
        resizable:true,
        closable:true,
        closableByDimmer:true,
        maximizable:true,
        startMaximized:false,
        pinnable:true,
        pinned:true,
        padding: true,
        overflow:true,
        maintainFocus:true,
        transition:'pulse',
        autoReset:true,
        notifier:{
            delay:5,
            position:'bottom-right'
        },
        glossary:{
            title:'AlertifyJS',
            ok: 'OK',
            cancel: 'Cancel',
            acccpt: 'Accept',

=======================================================================
==hydra-web/src/js/key-maps/default-key-map.es6.js
=======================================================================
'use strict';

export default {
	searchAll: ['command+shift+f', 'ctrl+shift+f'],
    esc: ['esc']
};

=======================================================================
==hydra-web/src/js/search-results.es6.js
=======================================================================
'use strict';

import SearchResultsView from 'components/views/search-results-view';
import ReactDOM from 'react-dom';
import React from 'react';
import palette from 'style/color-palette';

document.body.style.backgroundColor = palette.background0;

ReactDOM.render(
    <SearchResultsView/>,
    document.getElementById('render-target')
);

=======================================================================
==hydra-web/README.md
=======================================================================
# hydra-web
This folder contains the sources for all compiled web assets.

## How to build
All commands should be run from `hydra-web/`. Remember to run `npm install`, and
install webpack globally:

```
npm install
npm install webpack -g
```

### Development
 - run `npm update` if you change package.json
 - build the assets 1x with `webpack -d`
 - continually build on file changes with `webpack -d --watch`

### Production
 - build the assets with `webpack -p`

## Where do built files go?
To keep existing deploy scripts working, all assets are built to 
`/hydra-main/web/`. 

## What is built?
Currently, only spawn2: `/hydra-main/web/spawn2/build`, but there are plans to
build `query` as well. Static assets are still in `hydra-main/web`, but should
be packaged in the webpack build moving forward.

## What language features are enabled?
 - ES6
 - ES7 decorators
 - Tree shaking

=======================================================================
==hydra-web/package.json
=======================================================================
{
  "name": "spawn2",
  "version": "1.0.0",
  "description": "You must update both index.html and index.min.html when making changes to the html. When html5 gains popularity we will switch to html imports.",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "./node_modules/.bin/webpack --watch -d"
  },
  "author": "",
  "license": "Apache-2.0",
  "devDependencies": {
    "babel-core": "^6.7.4",
    "babel-eslint": "^6.0.0",
    "babel-loader": "^6.2.4",
    "babel-plugin-transform-class-properties": "^6.6.0",
    "babel-plugin-transform-decorators-legacy": "^1.3.4",
    "babel-preset-es2015": "^6.6.0",
    "babel-preset-es2015-webpack": "^6.4.0",
    "babel-preset-react": "^6.5.0",
    "babel-preset-stage-0": "^6.5.0",
    "babel-preset-stage-1": "^6.5.0",
    "brace": "^0.7.0",
    "css-loader": "^0.23.1",
    "eslint-plugin-react": "^4.2.3",
    "file-loader": "^0.8.5",
    "img-loader": "^1.2.2",
    "imports-loader": "^0.6.5",
    "react": "^0.14.3",
    "react-dom": "^0.14.3",
    "react-hotkeys": "^0.7.1",
    "text-loader": "0.0.1",
    "url-loader": "^0.5.7",
    "webpack": "^1.12.14"
  },
  "dependencies": {
    "backbone": "^1.3.2",
    "backbone.localstorage": "^1.1.16",
    "bootstrap": "^3.3.6",
    "d3": "^3.5.16",
    "datatables": "1.10.12",
    "datatables.net-dt": "1.10.12",
    "invariant": "^2.2.1",
    "jquery": "^3.0.0",
    "js-cookie": "^2.1.0",
    "nvd3": "^1.8.2",
    "oboe": "^2.1.2",
    "react": "^0.14.7",
    "react-addons": "^0.9.0",
    "react-addons-shallow-compare": "^0.14.8",

=======================================================================
==docs/source/_static/dependencies/sinks.svg
=======================================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
<svg width="18cm" height="9cm" viewBox="368 278 353 163" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <g>
    <ellipse style="fill: #ffffff" cx="470" cy="310" rx="30" ry="30"/>
    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="470" cy="310" rx="30" ry="30"/>
  </g>
  <g>
    <ellipse style="fill: #ffffff" cx="400" cy="410" rx="30" ry="30"/>
    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="400" cy="410" rx="30" ry="30"/>
  </g>
  <g>
    <ellipse style="fill: #ffffff" cx="550" cy="410" rx="30" ry="30"/>
    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="550" cy="410" rx="30" ry="30"/>
  </g>
  <text font-size="18.0622" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="470" y="316.25">
    <tspan x="470" y="316.25">E</tspan>
  </text>
  <text font-size="18.0622" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="400" y="416.25">
    <tspan x="400" y="416.25">G</tspan>
  </text>
  <text font-size="18.0622" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="520" y="426.25">
    <tspan x="520" y="426.25"></tspan>
  </text>
  <text font-size="18.0622" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="520" y="446.25">
    <tspan x="520" y="446.25"></tspan>
  </text>
  <text font-size="18.0622" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="550" y="416.25">
    <tspan x="550" y="416.25">H</tspan>
  </text>
  <g>
    <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="470" y1="340" x2="541.292" y2="375.646"/>
    <polygon style="fill: #000000" points="548,379 536.82,379 541.292,375.646 541.292,370.056 "/>
    <polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="548,379 536.82,379 541.292,375.646 541.292,370.056 "/>
  </g>
  <g>
    <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="470" y1="340" x2="408.453" y2="375.17"/>
    <polygon style="fill: #000000" points="401.941,378.891 408.143,369.588 408.453,375.17 413.105,378.27 "/>
    <polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="401.941,378.891 408.143,369.588 408.453,375.17 413.105,378.27 "/>
  </g>
  <g>
    <ellipse style="fill: #ffffff" cx="690" cy="410" rx="30" ry="30"/>
    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="690" cy="410" rx="30" ry="30"/>
  </g>
  <text font-size="12.8" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="120" y="340">
    <tspan x="120" y="340"></tspan>
  </text>
  <g>
    <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="580" y1="410" x2="650.264" y2="410"/>
    <polygon style="fill: #000000" points="657.764,410 647.764,415 650.264,410 647.764,405 "/>

=======================================================================
==docs/source/_static/dependencies/sources.svg
=======================================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
<svg width="10cm" height="10cm" viewBox="378 158 194 183" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <g>
    <ellipse style="fill: #ffffff" cx="410" cy="190" rx="30" ry="30"/>
    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="410" cy="190" rx="30" ry="30"/>
  </g>
  <g>
    <ellipse style="fill: #ffffff" cx="541" cy="190" rx="30" ry="30"/>
    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="541" cy="190" rx="30" ry="30"/>
  </g>
  <g>
    <ellipse style="fill: #ffffff" cx="470" cy="310" rx="30" ry="30"/>
    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="470" cy="310" rx="30" ry="30"/>
  </g>
  <text font-size="18.0622" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="410" y="196.25">
    <tspan x="410" y="196.25">A</tspan>
  </text>
  <text font-size="18.0622" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="541" y="196.25">
    <tspan x="541" y="196.25">B</tspan>
  </text>
  <text font-size="18.0622" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="470" y="316.25">
    <tspan x="470" y="316.25">E</tspan>
  </text>
  <text font-size="18.0622" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="520" y="426.25">
    <tspan x="520" y="426.25"></tspan>
  </text>
  <text font-size="18.0622" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="520" y="446.25">
    <tspan x="520" y="446.25"></tspan>
  </text>
  <g>
    <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="440" y1="190" x2="501.264" y2="190"/>
    <polygon style="fill: #000000" points="508.764,190 498.764,195 501.264,190 498.764,185 "/>
    <polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="508.764,190 498.764,195 501.264,190 498.764,185 "/>
  </g>
  <g>
    <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="541" y1="220" x2="486.941" y2="273.173"/>
    <polygon style="fill: #000000" points="481.594,278.432 485.217,267.855 486.941,273.173 492.23,274.984 "/>
    <polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="481.594,278.432 485.217,267.855 486.941,273.173 492.23,274.984 "/>
  </g>
  <text font-size="12.8" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="120" y="340">
    <tspan x="120" y="340"></tspan>
  </text>
</svg>

=======================================================================
==docs/source/_static/dependencies/all.svg
=======================================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
<svg width="22cm" height="15cm" viewBox="298 158 423 283" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <g>
    <ellipse style="fill: #ffffff" cx="410" cy="190" rx="30" ry="30"/>
    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="410" cy="190" rx="30" ry="30"/>
  </g>
  <g>
    <ellipse style="fill: #ffffff" cx="541" cy="190" rx="30" ry="30"/>
    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="541" cy="190" rx="30" ry="30"/>
  </g>
  <g>
    <ellipse style="fill: #ffffff" cx="470" cy="310" rx="30" ry="30"/>
    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="470" cy="310" rx="30" ry="30"/>
  </g>
  <g>
    <ellipse style="fill: #ffffff" cx="400" cy="410" rx="30" ry="30"/>
    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="400" cy="410" rx="30" ry="30"/>
  </g>
  <g>
    <ellipse style="fill: #ffffff" cx="550" cy="410" rx="30" ry="30"/>
    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="550" cy="410" rx="30" ry="30"/>
  </g>
  <g>
    <ellipse style="fill: #ffffff" cx="330" cy="310" rx="30" ry="30"/>
    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="330" cy="310" rx="30" ry="30"/>
  </g>
  <g>
    <ellipse style="fill: #ffffff" cx="610" cy="310" rx="30" ry="30"/>
    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="610" cy="310" rx="30" ry="30"/>
  </g>
  <g>
    <ellipse style="fill: #ffffff" cx="690" cy="190" rx="30" ry="30"/>
    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="690" cy="190" rx="30" ry="30"/>
  </g>
  <text font-size="18.0622" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="410" y="196.25">
    <tspan x="410" y="196.25">A</tspan>
  </text>
  <text font-size="18.0622" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="541" y="196.25">
    <tspan x="541" y="196.25">B</tspan>
  </text>
  <text font-size="18.0622" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="690" y="196.25">
    <tspan x="690" y="196.25">C</tspan>
  </text>
  <text font-size="18.0622" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="330" y="316.25">
    <tspan x="330" y="316.25">D</tspan>
  </text>
  <text font-size="18.0622" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="470" y="316.25">
    <tspan x="470" y="316.25">E</tspan>
  </text>

=======================================================================
==docs/source/_static/dependencies/connected.svg
=======================================================================
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="422pt" height="282pt" viewBox="0 0 422 282" version="1.1">
<defs>
<g>
<symbol overflow="visible" id="glyph0-0">
<path style="stroke:none;" d="M 0.890625 3.1875 L 0.890625 -12.6875 L 9.890625 -12.6875 L 9.890625 3.1875 Z M 1.90625 2.1875 L 8.890625 2.1875 L 8.890625 -11.6875 L 1.90625 -11.6875 Z "/>
</symbol>
<symbol overflow="visible" id="glyph0-1">
<path style="stroke:none;" d="M 6.15625 -11.375 L 3.75 -4.84375 L 8.5625 -4.84375 Z M 5.15625 -13.125 L 7.15625 -13.125 L 12.171875 0 L 10.3125 0 L 9.125 -3.359375 L 3.203125 -3.359375 L 2.015625 0 L 0.140625 0 Z "/>
</symbol>
<symbol overflow="visible" id="glyph0-2">
<path style="stroke:none;" d="M 3.546875 -6.265625 L 3.546875 -1.453125 L 6.390625 -1.453125 C 7.347656 -1.453125 8.054688 -1.648438 8.515625 -2.046875 C 8.972656 -2.441406 9.203125 -3.050781 9.203125 -3.875 C 9.203125 -4.6875 8.972656 -5.285156 8.515625 -5.671875 C 8.054688 -6.066406 7.347656 -6.265625 6.390625 -6.265625 Z M 3.546875 -11.65625 L 3.546875 -7.703125 L 6.171875 -7.703125 C 7.035156 -7.703125 7.679688 -7.863281 8.109375 -8.1875 C 8.535156 -8.519531 8.75 -9.019531 8.75 -9.6875 C 8.75 -10.34375 8.535156 -10.832031 8.109375 -11.15625 C 7.679688 -11.488281 7.035156 -11.65625 6.171875 -11.65625 Z M 1.765625 -13.125 L 6.296875 -13.125 C 7.648438 -13.125 8.691406 -12.84375 9.421875 -12.28125 C 10.160156 -11.71875 10.53125 -10.914062 10.53125 -9.875 C 10.53125 -9.070312 10.34375 -8.429688 9.96875 -7.953125 C 9.59375 -7.484375 9.039062 -7.191406 8.3125 -7.078125 C 9.1875 -6.890625 9.863281 -6.5 10.34375 -5.90625 C 10.832031 -5.3125 11.078125 -4.566406 11.078125 -3.671875 C 11.078125 -2.503906 10.675781 -1.597656 9.875 -0.953125 C 9.082031 -0.316406 7.953125 0 6.484375 0 L 1.765625 0 Z "/>
</symbol>
<symbol overflow="visible" id="glyph0-3">
<path style="stroke:none;" d="M 3.546875 -11.65625 L 3.546875 -1.453125 L 5.6875 -1.453125 C 7.5 -1.453125 8.820312 -1.863281 9.65625 -2.6875 C 10.5 -3.507812 10.921875 -4.804688 10.921875 -6.578125 C 10.921875 -8.335938 10.5 -9.625 9.65625 -10.4375 C 8.820312 -11.25 7.5 -11.65625 5.6875 -11.65625 Z M 1.765625 -13.125 L 5.421875 -13.125 C 7.960938 -13.125 9.828125 -12.59375 11.015625 -11.53125 C 12.203125 -10.476562 12.796875 -8.828125 12.796875 -6.578125 C 12.796875 -4.316406 12.195312 -2.65625 11 -1.59375 C 9.8125 -0.53125 7.953125 0 5.421875 0 L 1.765625 0 Z "/>
</symbol>
<symbol overflow="visible" id="glyph0-4">
<path style="stroke:none;" d="M 1.765625 -13.125 L 10.0625 -13.125 L 10.0625 -11.625 L 3.546875 -11.625 L 3.546875 -7.75 L 9.796875 -7.75 L 9.796875 -6.25 L 3.546875 -6.25 L 3.546875 -1.5 L 10.21875 -1.5 L 10.21875 0 L 1.765625 0 Z "/>
</symbol>
<symbol overflow="visible" id="glyph0-5">
<path style="stroke:none;" d="M 1.765625 -13.125 L 9.3125 -13.125 L 9.3125 -11.625 L 3.546875 -11.625 L 3.546875 -7.765625 L 8.75 -7.765625 L 8.75 -6.265625 L 3.546875 -6.265625 L 3.546875 0 L 1.765625 0 Z "/>
</symbol>
<symbol overflow="visible" id="glyph0-6">
<path style="stroke:none;" d="M 10.71875 -1.875 L 10.71875 -5.390625 L 7.8125 -5.390625 L 7.8125 -6.859375 L 12.46875 -6.859375 L 12.46875 -1.21875 C 11.78125 -0.738281 11.023438 -0.375 10.203125 -0.125 C 9.378906 0.125 8.5 0.25 7.5625 0.25 C 5.507812 0.25 3.90625 -0.347656 2.75 -1.546875 C 1.59375 -2.742188 1.015625 -4.410156 1.015625 -6.546875 C 1.015625 -8.691406 1.59375 -10.363281 2.75 -11.5625 C 3.90625 -12.757812 5.507812 -13.359375 7.5625 -13.359375 C 8.414062 -13.359375 9.226562 -13.253906 10 -13.046875 C 10.769531 -12.835938 11.476562 -12.523438 12.125 -12.109375 L 12.125 -10.21875 C 11.46875 -10.78125 10.769531 -11.203125 10.03125 -11.484375 C 9.300781 -11.765625 8.523438 -11.90625 7.703125 -11.90625 C 6.097656 -11.90625 4.894531 -11.457031 4.09375 -10.5625 C 3.289062 -9.664062 2.890625 -8.328125 2.890625 -6.546875 C 2.890625 -4.773438 3.289062 -3.441406 4.09375 -2.546875 C 4.894531 -1.648438 6.097656 -1.203125 7.703125 -1.203125 C 8.335938 -1.203125 8.898438 -1.253906 9.390625 -1.359375 C 9.878906 -1.472656 10.320312 -1.644531 10.71875 -1.875 Z "/>
</symbol>
<symbol overflow="visible" id="glyph0-7">
<path style="stroke:none;" d="M 1.765625 -13.125 L 3.546875 -13.125 L 3.546875 -7.75 L 10 -7.75 L 10 -13.125 L 11.765625 -13.125 L 11.765625 0 L 10 0 L 10 -6.25 L 3.546875 -6.25 L 3.546875 0 L 1.765625 0 Z "/>
</symbol>
<symbol overflow="visible" id="glyph0-8">
<path style="stroke:none;" d="M 1.765625 -13.125 L 3.546875 -13.125 L 3.546875 0 L 1.765625 0 Z "/>
</symbol>
</g>
</defs>
<g id="surface19318">
<rect x="0" y="0" width="422" height="282" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 22 9.5 C 22 10.328516 21.328516 11 20.5 11 C 19.671484 11 19 10.328516 19 9.5 C 19 8.671484 19.671484 8 20.5 8 C 21.328516 8 22 8.671484 22 9.5 " transform="matrix(20,0,0,20,-299,-159)"/>
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 28.55 9.5 C 28.55 10.328516 27.878516 11 27.05 11 C 26.221484 11 25.55 10.328516 25.55 9.5 C 25.55 8.671484 26.221484 8 27.05 8 C 27.878516 8 28.55 8.671484 28.55 9.5 " transform="matrix(20,0,0,20,-299,-159)"/>
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 25 15.5 C 25 16.328516 24.328516 17 23.5 17 C 22.671484 17 22 16.328516 22 15.5 C 22 14.671484 22.671484 14 23.5 14 C 24.328516 14 25 14.671484 25 15.5 " transform="matrix(20,0,0,20,-299,-159)"/>
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 21.5 20.5 C 21.5 21.328516 20.828516 22 20 22 C 19.171484 22 18.5 21.328516 18.5 20.5 C 18.5 19.671484 19.171484 19 20 19 C 20.828516 19 21.5 19.671484 21.5 20.5 " transform="matrix(20,0,0,20,-299,-159)"/>
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 29 20.5 C 29 21.328516 28.328516 22 27.5 22 C 26.671484 22 26 21.328516 26 20.5 C 26 19.671484 26.671484 19 27.5 19 C 28.328516 19 29 19.671484 29 20.5 " transform="matrix(20,0,0,20,-299,-159)"/>
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 18 15.5 C 18 16.328516 17.328516 17 16.5 17 C 15.671484 17 15 16.328516 15 15.5 C 15 14.671484 15.671484 14 16.5 14 C 17.328516 14 18 14.671484 18 15.5 " transform="matrix(20,0,0,20,-299,-159)"/>
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 32 15.5 C 32 16.328516 31.328516 17 30.5 17 C 29.671484 17 29 16.328516 29 15.5 C 29 14.671484 29.671484 14 30.5 14 C 31.328516 14 32 14.671484 32 15.5 " transform="matrix(20,0,0,20,-299,-159)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph0-1" x="104.828125" y="37.25"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph0-2" x="235.808594" y="37.25"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph0-3" x="24.066406" y="157.25"/>

=======================================================================
==docs/source/_themes/hydradoc/static/hydradoc.css
=======================================================================
/*
 * hydradoc.css

 // based on tature theme
 * ~~~~~~~~~~~~
 *
 * Sphinx stylesheet -- nature theme.
 *
 * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
 * :license: BSD, see LICENSE for details.
 *
 */
 
@import url("basic.css");

/* -- font import ----------------------------------------------------------- */

@font-face {
? font-family: myHelveticaLight;
? src: local("Helvetica Neue Light"),
? ? ? ?local("HelveticaNeue-Light");
}
@font-face {
    font-family: "Open Sans";
    font-style: italic;
    font-weight: 400;
    src: local("Open Sans Italic"), local("OpenSans-Italic"), url("http://themes.googleusercontent.com/static/fonts/opensans/v6/xjAJXh38I15wypJXxuGMBobN6UDyHWBl620a-IRfuBk.woff") format("woff");
}
@font-face {
    font-family: "Open Sans";
    font-style: normal;
    font-weight: 700;
    src: local("Open Sans Bold"), local("OpenSans-Bold"), url("http://themes.googleusercontent.com/static/fonts/opensans/v6/k3k702ZOKiLJc3WVjuplzHhCUOGz7vYGh680lGh-uXM.woff") format("woff");
}
@font-face {
    font-family: "Open Sans";
    font-style: normal;
    font-weight: 600;
    src: local("Open Sans Semibold"), local("OpenSans-Semibold"), url("http://themes.googleusercontent.com/static/fonts/opensans/v6/MTP_ySUJH_bn48VBG8sNSnhCUOGz7vYGh680lGh-uXM.woff") format("woff");
}
@font-face {
    font-family: "Open Sans";
    font-style: normal;
    font-weight: 400;
    src: local("Open Sans"), local("OpenSans"), url("http://themes.googleusercontent.com/static/fonts/opensans/v6/cJZKeOuBrn4kERxqtaUH3T8E0i7KZn-EPnyo3HZu7kw.woff") format("woff");
}
@font-face {
    font-family: "Open Sans";
    font-style: normal;
    font-weight: 300;