<!--
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
-->

<p>The source repository for weinre is maintained at Apache.  See the
archives information on the <a href="Installing.html">Installing</a>
page for more information on downloading a source archive.

<p>If you'd prefer to obtain the source via git, you can use one of the
following repos:

<ul>
<li>Apache repo: <td><a href="https://git-wip-us.apache.org/repos/asf/cordova-weinre.git">https://git-wip-us.apache.org/repos/asf/cordova-weinre.git</a>
<li>GitHub repo: <td><a href="https://github.com/apache/cordova-weinre">https://github.com/apache/cordova-weinre</a>
</ul>

<p>The Apache repo is the canonical repo. The url can be used in a web
browser, or as the argument of a <tt>git clone</tt> command.

<p>The GitHub repo is a clone of the Apache repo, and automatically shadowed
at some regular interval.  The url is the web view of the repo, from
which you can obtain a url to use with <tt>git clone</tt>.

<p>See the file
<tt><a href="https://git-wip-us.apache.org/repos/asf?p=cordova-weinre.git;a=blob;f=README.md;hb=HEAD">README.md<a/></tt>
in the top-most directory of the source distribution for more instructions on
how to perform a build.  A <a href="https://github.com/apache/cordova-weinre/blob/master/README.md">markdown-processed version of the README file
is available on GitHub</a>.
