diff --git a/contrib/auto-naming/README b/contrib/auto-naming/README
deleted file mode 100644
index e2f9ff8c2a13ea76df6688df15121366bc7d81ac..0000000000000000000000000000000000000000
--- a/contrib/auto-naming/README
+++ /dev/null
@@ -1,6 +0,0 @@
-Tor directory authorities may maintain a binding of server identities
-(their long term identity key) and nicknames.
-
-The auto-naming scripts have been moved to svn in
-projects/tor-naming/auto-naming/trunk/
-
diff --git a/contrib/bundle.nsi b/contrib/bundle.nsi
deleted file mode 100644
index 55f6b5fa3044f006ceea799e7757e1397c3bdc13..0000000000000000000000000000000000000000
--- a/contrib/bundle.nsi
+++ /dev/null
@@ -1,67 +0,0 @@
-!include "MUI.nsh"
-!include "LogicLib.nsh"
-!include "FileFunc.nsh"
-  
-!define VERSION "0.2.1.13"
-!define INSTALLER "TorBundle.exe"
-!define WEBSITE "https://www.torproject.org/"
-!define LICENSE "LICENSE"
- 
-SetCompressor /SOLID BZIP2
-RequestExecutionLevel user
-OutFile ${INSTALLER}
-InstallDir "$LOCALAPPDATA\TorInstPkgs"
-SetOverWrite on
-Name "Tor ${VERSION} Bundle"
-Caption "Tor ${VERSION} Bundle Setup"
-BrandingText "Tor Bundle Installer"
-CRCCheck on
-XPStyle on
-ShowInstDetails hide
-VIProductVersion "${VERSION}"
-VIAddVersionKey "ProductName" "Tor"
-VIAddVersionKey "Comments" "${WEBSITE}"
-VIAddVersionKey "LegalTrademarks" "Three line BSD"
-VIAddVersionKey "LegalCopyright" "©2004-2011, Roger Dingledine, Nick Mathewson, The Tor Project, Inc."
-VIAddVersionKey "FileDescription" "Tor is an implementation of Onion Routing. You can read more at ${WEBSITE}"
-VIAddVersionKey "FileVersion" "${VERSION}"
-
-!define MUI_ICON "torinst32.ico"
-!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\win.bmp"
-!insertmacro MUI_PAGE_INSTFILES
-!insertmacro MUI_LANGUAGE "English"
-
-Section "Tor" Tor
-	SectionIn RO
-	SetOutPath $INSTDIR
-	Call ExtractPackages
-        Call RunInstallers
-	Call LaunchVidalia
-SectionEnd
-
-Function ExtractPackages
-	File "license.msi"
-	File "tor.msi"
-	File "torbutton.msi"
-	File "thandy.msi"
-	File "polipo.msi"
-	File "vidalia.msi"
-        File "tbcheck.bat"
-FunctionEnd
-
-Function RunInstallers
-	ExecWait 'msiexec /i "$INSTDIR\license.msi" /qn'
-	ExecWait 'msiexec /i "$INSTDIR\tor.msi" NOSC=1 /qn'
-	ExecWait 'msiexec /i "$INSTDIR\thandy.msi" NOSC=1 /qn'
-	ExecWait 'msiexec /i "$INSTDIR\polipo.msi" NOSC=1 /qn'
-	ExecWait 'msiexec /i "$INSTDIR\torbutton.msi" /qn'
-	ExecWait 'msiexec /i "$INSTDIR\vidalia.msi" /qn'
-        ExpandEnvStrings $0 %COMSPEC%
-        Exec '"$0" /C "$INSTDIR\tbcheck.bat"'
-FunctionEnd
-
-Function LaunchVidalia
-	SetOutPath "$LOCALAPPDATA\Programs\Vidalia"
-	Exec 'vidalia.exe -loglevel info -logfile log.txt'
-FunctionEnd
-
diff --git a/contrib/tor-resolve.py b/contrib/client-tools/tor-resolve.py
similarity index 100%
rename from contrib/tor-resolve.py
rename to contrib/client-tools/tor-resolve.py
diff --git a/contrib/torify b/contrib/client-tools/torify
similarity index 100%
rename from contrib/torify
rename to contrib/client-tools/torify
diff --git a/contrib/cross.sh b/contrib/cross.sh
deleted file mode 100755
index a6085a400f0cb99209bc1ef813070039a393c362..0000000000000000000000000000000000000000
--- a/contrib/cross.sh
+++ /dev/null
@@ -1,195 +0,0 @@
-#!/bin/bash
-# Copyright 2006 Michael Mohr with modifications by Roger Dingledine
-# See LICENSE for licensing information.
-
-#######################################################################
-#  Tor-cross: a tool to help cross-compile Tor
-#
-#  The purpose of a cross-compiler is to produce an executable for
-#  one system (CPU) on another.  This is useful, for example, when
-#  the target system does not have a native compiler available.
-#  You might, for example, wish to cross-compile a program on your
-#  host (the computer you're working on now) for a target such as
-#  a router or handheld computer.
-#
-#  A number of environment variables must be set in order for this
-#  script to work:
-#        $PREFIX, $CROSSPATH, $HOST_TRIPLET, $HOST,
-#        and (optionally) $BUILD
-#  Please run the script for a description of each one.  If automated
-#  builds are desired, the above variables can be exported at the top
-#  of this script.
-#
-#  Recent releases of Tor include test programs in configure. Normally
-#  this is a good thing, since it catches a number of problems.
-#  However, this also presents a problem when cross compiling, since
-#  you can't run binary images for the target system on the host.
-#
-#  Tor-cross assumes that you know what you're doing and removes a
-#  number of checks known to cause problems with this process.
-#  Note that this does not guarantee that the program will run or
-#  even compile; it simply allows configure to generate the Makefiles.
-#
-#  Stripping the binaries should almost always be done for an
-#  embedded environment where space is at an exacting premium.
-#  However, the default is NOT to strip them since they are useful for
-#  debugging.  If you do not plan to do any debugging and you
-#  don't care about the debugging symbols, set $STRIP to "yes" before
-#  running this script.
-#
-#  Tor-cross was written by Michael Mohr.  He can be contacted at
-#  m(dot)mohr(at)laposte(dot)net.  Comments are appreciated, but
-#  flames go to /dev/null.
-#
-#  The target with which this script is tested is little-endian
-#  MIPS Linux, built on an Athlon-based Linux desktop.
-#
-#######################################################################
-
-# disable the platform-specific tests in configure
-export CROSS_COMPILE=yes
-
-# for error conditions
-EXITVAL=0
-
-if [ ! -f autogen.sh ]
-then
-  echo "Please run this script from the root of the Tor distribution"
-  exit -1
-fi
-
-if [ ! -f configure ]
-then
-  if [ -z $GEN_BUILD ]
-  then
-    echo "To automatically generate the build environment, set \$GEN_BUILD"
-    echo "to yes; for example,"
-    echo "	export GEN_BUILD=yes"
-    EXITVAL=-1
-  fi
-fi
-
-if [ -z $PREFIX ]
-then
-  echo "You must define \$PREFIX since you are cross-compiling."
-  echo "Select a non-system location (i.e. /tmp/tor-cross):"
-  echo "	export PREFIX=/tmp/tor-cross"
-  EXITVAL=-1
-fi
-
-if [ -z $CROSSPATH ]
-then
-  echo "You must define the location of your cross-compiler's"
-  echo "directory using \$CROSSPATH; for example,"
-  echo "	export CROSSPATH=/opt/cross/staging_dir_mipsel/bin"
-  EXITVAL=-1
-fi
-
-if [ -z $HOST_TRIPLET ]
-then
-  echo "You must define \$HOST_TRIPLET to continue.  For example,"
-  echo "if you normally cross-compile applications using"
-  echo "mipsel-linux-uclibc-gcc, you would set \$HOST_TRIPLET like so:"
-  echo "	export HOST_TRIPLET=mipsel-linux-uclibc-"
-  EXITVAL=-1
-fi
-
-if [ -z $HOST ]
-then
-  echo "You must specify a target processor with \$HOST; for example:"
-  echo "	export HOST=mipsel-unknown-elf"
-  EXITVAL=-1
-fi
-
-if [ -z $BUILD ]
-then
-  echo "You should specify the host machine's type with \$BUILD; for example:"
-  echo "	export BUILD=i686-pc-linux-gnu"
-  echo "If you wish to let configure autodetect the host, set \$BUILD to 'auto':"
-  echo "	export BUILD=auto"
-  EXITVAL=-1
-fi
-
-if [ ! -x $CROSSPATH/$HOST_TRIPLETgcc ]
-then
-  echo "The specified toolchain does not contain an executable C compiler."
-  echo "Please double-check your settings and rerun cross.sh."
-  EXITVAL=-1
-fi
-
-if [ $EXITVAL -ne 0 ]
-then
-  echo "Remember, you can hard-code these values in cross.sh if needed."
-  exit $EXITVAL
-fi
-
-if [ ! -z "$GEN_BUILD" -a ! -f configure ]
-then
-  export NOCONF=yes
-  ./autogen.sh
-fi
-
-# clean up any existing object files
-if [ -f src/or/tor ]
-then
-  make clean
-fi
-
-# Set up the build environment and try to run configure
-export PATH=$PATH:$CROSSPATH
-export RANLIB=${HOST_TRIPLET}ranlib
-export CC=${HOST_TRIPLET}gcc
-
-if [ $BUILD == "auto" ]
-then
-  ./configure \
-	--enable-debug \
-	--enable-eventdns \
-	--prefix=$PREFIX \
-	--host=$HOST
-else
-  ./configure \
-	--enable-debug \
-	--enable-eventdns \
-	--prefix=$PREFIX \
-	--host=$HOST \
-	--build=$BUILD
-fi
-
-# has a problem occurred?
-if [ $? -ne 0 ]
-then
-  echo ""
-  echo "A problem has been detected with configure."
-  echo "Please check the output above and rerun cross.sh"
-  echo ""
-  exit -1
-fi
-
-# Now we're cookin'
-
-make
-
-# has a problem occurred?
-if [ $? -ne 0 ]
-then
-  echo ""
-  echo "A problem has been detected with make."
-  echo "Please check the output above and rerun make."
-  echo ""
-  exit -1
-fi
-
-# if $STRIP has length (i.e. STRIP=yes), strip the binaries
-if [ ! -z $STRIP ]
-then
-${HOST_TRIPLET}strip \
-	src/or/tor \
-	src/test/test \
-	src/tools/tor-resolve
-fi
-
-echo ""
-echo "Tor should be compiled at this point.  Now run 'make install' to"
-echo "install to $PREFIX"
-echo ""
diff --git a/contrib/add-tor b/contrib/dirauth-tools/add-tor
similarity index 100%
rename from contrib/add-tor
rename to contrib/dirauth-tools/add-tor
diff --git a/contrib/nagios-check-tor-authority-cert b/contrib/dirauth-tools/nagios-check-tor-authority-cert
similarity index 100%
rename from contrib/nagios-check-tor-authority-cert
rename to contrib/dirauth-tools/nagios-check-tor-authority-cert
diff --git a/contrib/directory-archive/crontab.sample b/contrib/directory-archive/crontab.sample
deleted file mode 100644
index e2821aa938c2d6d3a145a429721bd652e84ce548..0000000000000000000000000000000000000000
--- a/contrib/directory-archive/crontab.sample
+++ /dev/null
@@ -1,3 +0,0 @@
-10 * * * * cd projects/tor-v2dir && ./fetch-all-v3
-40 * * * * cd projects/tor-v2dir && ./fetch-all
-15 3 6 * * cd projects/tor-v2dir && ./sort-into-month-folder > /dev/null && ./tar-them-up last > /dev/null
diff --git a/contrib/directory-archive/fetch-all b/contrib/directory-archive/fetch-all
deleted file mode 100755
index dfa5a1b3e57fe0650f7de6337cccda0cdc905da8..0000000000000000000000000000000000000000
--- a/contrib/directory-archive/fetch-all
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/bin/bash
-
-# Download all current v2 directory status documents, then download
-# the descriptors and extra info documents.
-
-# Copyright (c) 2005, 2006, 2007, 2008 Peter Palfrader
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-TZ=UTC
-export TZ
-
-DIRSERVERS=""
-DIRSERVERS="$DIRSERVERS 86.59.21.38:80"		# tor26
-DIRSERVERS="$DIRSERVERS 128.31.0.34:9031"	# moria1
-DIRSERVERS="$DIRSERVERS 128.31.0.34:9032"	# moria2
-DIRSERVERS="$DIRSERVERS 194.109.206.212:80"	# dizum
-
-DATEDIR=$(date "+%Y/%m/%d")
-TIME=$(date "+%Y%m%d-%H%M%S")
-
-. fetch-all-functions
-
-statuses=""
-for dirserver in $DIRSERVERS; do
-	authorities=$(wget -q -O - http://$dirserver/tor/status/all | egrep '^fingerprint ' | awk '{print $2}')
-	if [ "$authorities" == "" ]; then
-		echo "Did not get a list of authorities from $dirserver, going to next" 2>&1
-		continue
-	fi
-
-	dir="status/$DATEDIR"
-	[ -d "$dir" ] || mkdir -p "$dir"
-
-	authprefix="$dir/$TIME-"
-	for fp in $authorities; do
-		wget -q -O "$authprefix$fp" http://$dirserver/tor/status/fp/"$fp"
-		bzip2 "$authprefix$fp"
-		statuses="$statuses $authprefix$fp.bz2"
-	done
-	if [ "$statuses" == "" ]; then
-		echo "Did not get any statuses from $dirserver, going to next" 2>&1
-		continue
-	else
-		break
-	fi
-done
-
-if [ "$statuses" = "" ]; then
-	echo "No statuses available" 2>&1
-	exit 1
-fi
-
-digests=$( for i in ` bzcat $statuses | awk '$1 == "r" {printf "%s=\n", $4}' | sort -u `; do
-		echo $i | \
-		base64-decode | \
-		perl -e 'undef $/; $a=<>; print unpack("H\*", $a),"\n";';
-	done )
-for digest in $digests; do
-	fetch_digest "$digest" "server-descriptor"
-done
diff --git a/contrib/directory-archive/fetch-all-functions b/contrib/directory-archive/fetch-all-functions
deleted file mode 100644
index a9335bda7b6a1315409a744ec8457c013e876432..0000000000000000000000000000000000000000
--- a/contrib/directory-archive/fetch-all-functions
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/bin/bash
-
-# function used by fetch-all* to download server descriptors and
-# extra info documents
-
-# Copyright (c) 2005, 2006, 2007, 2008 Peter Palfrader
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-
-fetch_digest() {
-	local digest
-	local objecttype
-	local urlpart
-	local pathpart
-	local target
-	local targetdir
-	local dirserver
-	local ei
-
-	digest="$1"
-	objecttype="$2"
-	if [ "$objecttype" = "server-descriptor" ] ; then
-		urlpart="server"
-		pathpart="server-descriptor"
-	elif [ "$objecttype" = "extra-info" ] ; then
-		urlpart="extra"
-		pathpart="extra-info"
-	else
-		echo "Called fetch_digest with illegal objecttype '$objecttype'" >&2
-		exit 1
-	fi
-	target=$( echo $digest | sed -e 's#^\(.\)\(.\)#'"$pathpart"'/\1/\2/\1\2#' )
-	targetdir=$( dirname $target )
-	[ -d "$targetdir" ] || mkdir -p "$targetdir"
-	if ! [ -e "$target" ]; then
-		for dirserver in $DIRSERVERS; do
-			wget -q -O "$target" http://$dirserver/tor/$urlpart/d/"$digest" || rm -f "$target"
-			if [ -s "$target" ]; then
-				if egrep '^opt extra-info-digest ' "$target" > /dev/null; then
-					ei=$( egrep '^opt extra-info-digest ' "$target" | awk '{print $3}' | tr 'A-F' 'a-f' )
-					fetch_digest "$ei" "extra-info"
-				elif egrep '^extra-info-digest ' "$target" > /dev/null; then
-					ei=$( egrep '^extra-info-digest ' "$target" | awk '{print $2}' | tr 'A-F' 'a-f' )
-					fetch_digest "$ei" "extra-info"
-				fi
-				break
-			else
-				rm -f "$target"
-			fi
-		done
-	fi
-	#if ! [ -e "$target" ]; then
-	#	echo "$objecttype $digest" >> failed
-	#fi
-}
-
-if [ -x /usr/bin/base64 ] ; then
-	base64-decode() {
-		/usr/bin/base64 -d
-	}
-else
-	base64-decode() {
-		perl -MMIME::Base64 -e 'print decode_base64(<>)'
-	}
-fi
diff --git a/contrib/directory-archive/fetch-all-v3 b/contrib/directory-archive/fetch-all-v3
deleted file mode 100755
index a4746e02cfa20180dff725adf333e4471947c0a5..0000000000000000000000000000000000000000
--- a/contrib/directory-archive/fetch-all-v3
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/bin/bash
-
-# Download all current v3 directory status votes and the consensus document,
-# then download the descriptors and extra info documents.
-
-# Copyright (c) 2005, 2006, 2007, 2008 Peter Palfrader
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-TZ=UTC
-export TZ
-
-DIRSERVERS=""
-DIRSERVERS="$DIRSERVERS 86.59.21.38:80"		# tor26
-DIRSERVERS="$DIRSERVERS 128.31.0.34:9031"	# moria1
-DIRSERVERS="$DIRSERVERS 216.224.124.114:9030"	# ides
-DIRSERVERS="$DIRSERVERS 80.190.246.100:80"	# gabelmoo
-#DIRSERVERS="$DIRSERVERS 140.247.60.64:80"	# lefkada
-DIRSERVERS="$DIRSERVERS 194.109.206.212:80"	# dizum
-#DIRSERVERS="$DIRSERVERS 128.31.0.34:9032"	# moria2
-DIRSERVERS="$DIRSERVERS 213.73.91.31:80"	# dannenberg
-DIRSERVERS="$DIRSERVERS 208.83.223.34:443"	# urras
-TIME=$(date "+%Y%m%d-%H%M%S")
-
-. fetch-all-functions
-
-consensus=""
-tmpdir="consensus/tmp"
-[ -d "$tmpdir" ] || mkdir -p "$tmpdir"
-for dirserver in $DIRSERVERS; do
-	wget -q -O "$tmpdir/$TIME-consensus" http://$dirserver/tor/status-vote/current/consensus
-	if [ "$?" != 0 ]; then
-		rm -f "$tmpdir/$TIME-consensus"
-		continue
-	fi
-
-	freshconsensus="$tmpdir/$TIME-consensus"
-
-	timestamp=$(awk '$1=="valid-after" {printf "%s-%s", $2, $3}' < "$freshconsensus")
-	datedir=$(awk '$1=="valid-after" {printf "%s", $2}' < "$freshconsensus" | tr '-' '/')
-	dir="consensus/$datedir"
-	[ -d "$dir" ] || mkdir -p "$dir"
-
-
-	consensus="$dir/$timestamp-consensus.bz2"
-	if ! [ -e "$consensus" ]; then
-		# the consensus is new, or at least we don't have it yet
-		bzip2 "$freshconsensus"
-		mv "$freshconsensus.bz2" "$consensus"
-		break
-	fi
-
-	rm -f "$freshconsensus"
-	echo "Consensus from $timestamp (gotten from $dirserver) already exists!" >&2
-	# maybe there is a newer one on a different authority, so try again.
-done
-
-if [ "$consensus" = "" ]; then
-	echo "No consensus available" 2>&1
-	exit 1
-fi
-
-
-votes=$(bzcat $consensus | awk '$1 == "vote-digest" {print $2}')
-for vote in $votes; do
-	for dirserver in $DIRSERVERS; do
-		wget -q -O "$dir/$TIME-vote-$vote" http://$dirserver/tor/status-vote/current/d/$vote
-		if [ "$?" != 0 ]; then
-			rm -f "$dir/$TIME-vote-$vote"
-			continue
-		fi
-		break
-	done
-	if [ -e "$dir/$TIME-vote-$vote" ]; then
-		voteridentity=$(awk '$1=="fingerprint" {print $2}' < "$dir/$TIME-vote-$vote")
-		if [ -e "$dir/$timestamp-vote-$voteridentity-$vote.bz2" ]; then
-			echo "Vote $vote from $voteridentity already exists!" >&2
-			rm -f "$dir/$TIME-vote-$vote"
-			continue;
-		fi
-		mv "$dir/$TIME-vote-$vote"  "$dir/$timestamp-vote-$voteridentity-$vote"
-		bzip2 "$dir/$timestamp-vote-$voteridentity-$vote"
-	else
-		echo "Failed to get vote $vote!" >&2
-	fi
-done
-
-digests=$( for i in ` bzcat $consensus | awk '$1 == "r" {printf "%s=\n", $4}' | sort -u `; do
-		echo $i | \
-		base64-decode | \
-		perl -e 'undef $/; $a=<>; print unpack("H\*", $a),"\n";';
-	done )
-for digest in $digests; do
-	fetch_digest "$digest" "server-descriptor"
-done
diff --git a/contrib/directory-archive/sort-into-month-folder b/contrib/directory-archive/sort-into-month-folder
deleted file mode 100755
index 95033c58df553694705b843f205e7950ee93b3f9..0000000000000000000000000000000000000000
--- a/contrib/directory-archive/sort-into-month-folder
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/perl -w
-
-# Sort dumped consensuses, statuses, descriptors etc into per-month folders.
-
-# Copyright (c) 2006, 2007, 2008 Peter Palfrader
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-use strict;
-use File::Find;
-use File::Basename;
-use File::stat;
-use Time::Local;
-
-
-my $cutofftime;
-
-
-sub wanted() {
-	return unless -f;
-	my $mtime = stat($_)->mtime;
-	return if $mtime >= $cutofftime;
-
-	my (undef,undef,undef,undef,$mon,$year,undef,undef,undef) = gmtime $mtime;
-
-	my $bn = basename $_;
-	my $dn = dirname $_;
-	my @path = split /\//, $dn;
-	$path[0] .= sprintf 's-%4d-%02d', 1900+$year, $mon+1;
-	$dn = join '/', @path;
-
-	if (! -d $dn) {
-		my $p = '.';
-		for my $component (@path) {
-			$p .= '/'.$component;
-			if (! -d $p) {
-				mkdir $p or die ("Cannot mkdir $p: $!\n");
-			};
-		};
-	};
-
-	print "$_ -> $dn/$bn\n";
-	rename $_, $dn.'/'.$bn or die ("Cannot rename $_ to $dn/$bn: $!\n");
-};
-
-my (undef,undef,undef,undef,$mon,$year,undef,undef,undef) = gmtime(time - 5*24*3600);
-$cutofftime = timegm(0,0,0,1,$mon,$year);
-find(	{
-		wanted		=> \&wanted,
-		no_chdir	=> 1
-	},
-	'server-descriptor');
-
-find(	{
-		wanted		=> \&wanted,
-		no_chdir	=> 1
-	},
-	'extra-info');
diff --git a/contrib/directory-archive/tar-them-up b/contrib/directory-archive/tar-them-up
deleted file mode 100755
index 2775ca9ee9f09ab8455d5f716b2ef75c9230cedd..0000000000000000000000000000000000000000
--- a/contrib/directory-archive/tar-them-up
+++ /dev/null
@@ -1,127 +0,0 @@
-#!/bin/sh
-
-# Tar up dumped consensuses, statuses, descriptors etc from per-month folders
-# into per-month tarballs.
-
-# Copyright (c) 2006, 2007, 2008 Peter Palfrader
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-set -e
-set -x
-set -u
-
-usage() {
-	echo "Usage: $0 <year> <month>" >&2
-	echo "       $0 last            (does last month)" >&2
-	exit 1
-}
-
-if [ -z "${1:-}" ]; then
-	usage
-fi
-
-if [ "$1" = "last" ]; then
-	year=`date --date="last month" +'%Y'`
-	month=`date --date="last month" +'%m'`
-elif [ -z "${2:-}" ]; then
-	usage
-else
-	year="$1"
-	month="$2"
-fi
-
-if [ "$year" -lt 2000 ] || [ "$year" -gt 2020 ] ||
-   [ "$month" -lt 1 ] || [ "$month" -gt 12 ] ||
-   [ "`echo -n $month | wc -c`" != 2 ]; then
-	usage
-fi
-
-
-this_year=`date --utc +'%Y'`
-this_month=`date --utc +'%m'`
-
-if [ "`date -d $this_year-$this_month-01 +%s`" -le "`date -d $year-$month-01 +%s`" ]; then
-	echo "Date in the future or current month?" >&2
-	exit 1
-fi
-
-
-
-
-
-for file in \
-	"extra-infos-$year-$month.tar.bz2"		\
-	"server-descriptors-$year-$month.tar.bz2"	\
-	"consensuses-$year-$month.tar.bz2"		\
-	"statuses-$year-$month.tar.bz2"			\
-	; do
-	if [ -e "$file" ]; then
-		echo "$file already exists" >&2
-		exit 1
-	fi
-done
-
-for dir in \
-	"extra-infos-$year-$month"		\
-	"server-descriptors-$year-$month"	\
-	"consensus/$year/$month"		\
-	"status/$year/$month"			\
-	; do
-	if ! [ -d "$dir" ]; then
-		echo "$dir not found" >&2
-		exit 1
-	fi
-done
-
-for dir in \
-	"consensuses-$year-$month"		\
-	"statuses-$year-$month"			\
-	; do
-	if [ -e "$dir" ]; then
-		echo "$dir already exists" >&2
-		exit 1
-	fi
-done
-
-for kind in consensus status; do
-	mv "$kind"/$year/$month "$kind"es-$year-$month
-	find "$kind"es-$year-$month -type f -name '*.bz2' -print0 | xargs -0 bunzip2 -v
-	tar cjvf "$kind"es-$year-$month.tar.bz2 "$kind"es-$year-$month
-	rm -rf "$kind"es-$year-$month
-done
-
-for kind in extra-infos server-descriptors; do
-	tar cjvf "$kind"-$year-$month.tar.bz2 "$kind"-$year-$month
-	rm -rf "$kind"-$year-$month
-done
-
-
-
-[ -d Archive ] || mkdir Archive
-
-for kind in consensus status; do
-	t="$kind"es-$year-$month.tar.bz2
-	! [ -e Archive/"$t" ] && mv "$t" Archive/"$t"
-done
-
-for kind in extra-infos server-descriptors; do
-	t="$kind"-$year-$month.tar.bz2
-	! [ -e Archive/"$t" ] && mv "$t" Archive/"$t"
-done
diff --git a/contrib/rc.subr b/contrib/dist/rc.subr
similarity index 100%
rename from contrib/rc.subr
rename to contrib/dist/rc.subr
diff --git a/contrib/suse/include.am b/contrib/dist/suse/include.am
similarity index 100%
rename from contrib/suse/include.am
rename to contrib/dist/suse/include.am
diff --git a/contrib/suse/tor.sh.in b/contrib/dist/suse/tor.sh.in
similarity index 100%
rename from contrib/suse/tor.sh.in
rename to contrib/dist/suse/tor.sh.in
diff --git a/contrib/tor.sh.in b/contrib/dist/tor.sh.in
similarity index 100%
rename from contrib/tor.sh.in
rename to contrib/dist/tor.sh.in
diff --git a/contrib/torctl.in b/contrib/dist/torctl.in
similarity index 100%
rename from contrib/torctl.in
rename to contrib/dist/torctl.in
diff --git a/contrib/make-signature.sh b/contrib/make-signature.sh
deleted file mode 100755
index 4aba08b7547fa9445d6f269b2e862a882afb5341..0000000000000000000000000000000000000000
--- a/contrib/make-signature.sh
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/sh
-
-set -eu
-
-if test "$1" = "" ; then
-    echo "I need a package as an argument."
-    exit 1
-fi
-
-PACKAGEFILE=$1
-
-if test ! -f "$PACKAGEFILE" ; then
-    echo "$PACKAGEFILE is not a file."
-    exit 1
-fi
-
-DIGESTNAME=sha256
-DIGESTOUTPUT=`gpg --print-md $DIGESTNAME $PACKAGEFILE`
-
-RAWDIGEST=`gpg --print-md $DIGESTNAME $PACKAGEFILE | sed -e 's/^[^ ]*: //' `
-
-# These regexes are a little fragile, but I think they work for us.
-VERSION=`echo $PACKAGEFILE | sed -e 's/^[a-z\-]*//' -e 's/\.[\.a-z]*$//' `
-PACKAGE=`echo $PACKAGEFILE | sed -e 's/-[0-9].*//'`
-SIGFILE_UNSIGNED="$PACKAGE-$VERSION-signature"
-SIGNATUREFILE="$SIGFILE_UNSIGNED.asc"
-
-cat >$SIGFILE_UNSIGNED <<EOF
-This is the signature file for "$PACKAGEFILE",
-which contains version "$VERSION" of "$PACKAGE".
-
-Here's how to check this signature.
-
-1) Make sure that this is really a signature file, and not a forgery,
-   with:
-
-     "gpg --verify $SIGNATUREFILE"
-
-   The key should be one of the keys that signs the Tor release; the
-   official Tor website has more information on those.
-
-   If this step fails, then either you are missing the correct key, or
-   this signature file was not really signed by a Tor packager.
-   Beware!
-
-2) Make sure that the package you wanted is indeed "$PACKAGE", and that
-   its version you wanted is indeed "$VERSION".  If you wanted a
-   different package, or a different version, this signature file is
-   not the right one!
-
-3) Now that you're sure you have the right signature file, make sure
-   that you got the right package.  Check its $DIGESTNAME digest with
-
-     "gpg --print-md $DIGESTNAME $PACKAGEFILE"
-
-   The output should match this, exactly:
-
-$DIGESTOUTPUT
-
-   Make sure that every part of the output matches: don't just check the
-   first few characters.  If the digest does not match, you do not have
-   the right package file.  It could even be a forgery.
-
-Frequently asked questions:
-
-Q: Why not just sign the package file, like you used to do?
-A: GPG signatures authenticate file contents, but not file names.  If
-   somebody gave you a renamed file with a matching renamed signature
-   file, the signature would still be given as "valid".
-
--- 
-FILENAME: $PACKAGEFILE
-PACKAGE: $PACKAGE
-VERSION: $VERSION
-DIGESTALG: $DIGESTNAME
-DIGEST: $RAWDIGEST
-EOF
-
-gpg --clearsign $SIGFILE_UNSIGNED
diff --git a/contrib/mdd.py b/contrib/mdd.py
deleted file mode 100755
index e0b496b8fe2a5788996863e6420c2bbb0c654ffc..0000000000000000000000000000000000000000
--- a/contrib/mdd.py
+++ /dev/null
@@ -1,169 +0,0 @@
-#!/usr/bin/env python2.3
-
-import re, sys
-import textwrap
-
-files = sys.argv[1:]
-funcDeclaredIn = {}
-fileDeclares = {}
-functionCalls = {}
-funcCalledByFile = {}
-funcCalledByFunc = {}
-
-cpp_re = re.compile(r'//.*$')
-c_re = re.compile(r'/[*]+(?:[^*]+|[*]+[^/*])*[*]+/', re.M|re.S)
-
-for fname in files:
-    f = open(fname, 'r')
-    curFunc = "???"
-    functionCalls.setdefault(curFunc,{})
-    lineno = 0
-    body = f.read()
-    body = cpp_re.sub(" ",body)
-    body = c_re.sub(" ",body)
-    #if fname == 'dns.c': print body
-    for line in body.split("\n"):
-        lineno += 1
-        m = re.match(r'^[^\s/].*\s(\w+)\([^;]*$', line)
-        if m:
-            #print line, "->", m.group(1)
-            curFunc = m.group(1)
-            if curFunc[0] == '_': curFunc = curFunc[1:]
-            functionCalls.setdefault(curFunc,{})
-            funcDeclaredIn[m.group(1)] = fname
-            fileDeclares.setdefault(fname, {})[m.group(1)] = 1
-            continue
-        m = re.match(r'^(\w+)\([^;]', line)
-        if m:
-            #print line, "->", m.group(1)
-            curFunc = m.group(1)
-            if curFunc[0] == '_': curFunc = curFunc[1:]
-            functionCalls.setdefault(curFunc,{})
-            funcDeclaredIn[m.group(1)] = fname
-            fileDeclares.setdefault(fname, {})[m.group(1)] = 1
-            continue
-        while line:
-            m = re.search(r'(\w+)\(', line)
-            if not m: break
-            #print fname, line, curFunc, "->", m.group(1)
-            fn = m.group(1)
-            if fn[0] == '_':
-                fn = fn[1:]
-            functionCalls[curFunc][m.group(1)] = 1
-            #if curFunc == "???":
-            #    print ">>!!!!! at %s:%s"%(fname,lineno)
-            funcCalledByFunc.setdefault(m.group(1), {})[curFunc]=1
-            funcCalledByFile.setdefault(m.group(1), {})[fname]=1
-            line = line[m.end():]
-
-    f.close()
-
-fileUsers = {}
-fileUses = {}
-
-for fname in files:
-    print "%s:"%fname
-    users = {}
-    for func in fileDeclares[fname]:
-        cb = funcCalledByFile.get(func,{}).keys()
-        for f in cb: users[f] = 1
-        #print "users[%s] = %s"%(f,users[f])
-    users = users.keys()
-    users.sort()
-    fileUsers[fname] = users
-    for user in users:
-        fileUses.setdefault(user,[]).append(fname)
-        if user == fname: continue
-        print "  from %s:"%user
-        for func in fileDeclares[fname]:
-            if funcCalledByFile.get(func,{}).get(user,0):
-                print "    %s()"%func
-
-def wrap(s, pre):
-    return textwrap.fill(s,
-                         width=77, initial_indent=pre,
-                         subsequent_indent=" "*len(pre))
-
-for fname in files:
-    print
-    print "===== %s"%fname
-    print wrap(" ".join(fileUses[fname]),
-               "        Calls: ")
-    print wrap(" ".join(fileUsers[fname]),
-              "    Called by: ")
-
-print "=============================="
-
-funcnames = functionCalls.keys()
-funcnames.sort()
-
-if 1:
-    for func in funcnames:
-        print "===== %s"%func
-        callers = [c for c in funcCalledByFunc.get(func,{}).keys()
-                   if c != "???"]
-        callers.sort()
-        called = [c for c in functionCalls[func].keys() if c != "???" and
-                  c in funcnames]
-        called.sort()
-        print wrap(" ".join(callers),
-                   "  Called by:")
-        print wrap(" ".join(called),
-                   "      Calls:")
-
-# simple topological sort.
-functionDepth = {}
-while 1:
-    BIG = 1000000
-    any = 0
-    for func in funcnames:
-        if functionDepth.has_key(func):
-            continue
-        called = [c for c in functionCalls[func] if c != func and
-                  functionCalls.has_key(c)]
-        if len(called) == 0:
-            functionDepth[func] = 0
-            #print "Depth(%s)=%s"%(func,0)
-            any = 1
-            continue
-        calledDepths = [ functionDepth.get(c,BIG) for c in called ]
-        if max(calledDepths) < BIG:
-            d = functionDepth[func] = max(calledDepths)+1
-            #print "Depth(%s)=%s"%(func,d)
-            any = 1
-            continue
-    if not any:
-        break
-
-# compute lexical closure.
-cycCalls = {}
-for func in funcnames:
-    if not functionDepth.has_key(func):
-        calls = [ c for c in functionCalls[func] if c != func and
-                  functionCalls.has_key(c) and not functionDepth.has_key(c)]
-        cycCalls[func] = d = {}
-        for c in calls:
-            d[c]=1
-
-cycNames = cycCalls.keys()
-while 1:
-    any = 0
-    for func in cycNames:
-        L = len(cycCalls[func])
-        for called in cycCalls[func].keys():
-            cycCalls[func].update(cycCalls[called])
-        if L != len(cycCalls[func]):
-            any = 1
-    if not any:
-        break
-
-depthList = [ (v,k) for k,v in functionDepth.items() ]
-depthList.sort()
-cycList = [ (len(v),k) for k,v in cycCalls.items() ]
-cycList.sort()
-for depth,name in depthList:
-    print "Depth[%s]=%s"%(name,depth)
-for bredth,name in cycList:
-    print "Width[%s]=%s"%(name,bredth)
-
-print "Sorted %s / %s"%(len(functionDepth),len(funcnames))
diff --git a/contrib/netinst.nsi b/contrib/netinst.nsi
deleted file mode 100644
index 08d950ab04285a297bc64432625969bb94ce5c53..0000000000000000000000000000000000000000
--- a/contrib/netinst.nsi
+++ /dev/null
@@ -1,74 +0,0 @@
-!include "MUI.nsh"
-!include "LogicLib.nsh"
-!include "FileFunc.nsh"
-  
-!define VERSION "0.2.1.13"
-!define INSTALLER "TorNetInstaller.exe"
-!define WEBSITE "https://www.torproject.org/"
-!define LICENSE "LICENSE"
- 
-SetCompressor /SOLID BZIP2
-RequestExecutionLevel user
-OutFile ${INSTALLER}
-InstallDir "$TEMP\TorInstTmp"
-SetOverWrite on
-Name "Tor Network Installer"
-Caption "Tor Network Installer"
-BrandingText "Tor Network Installer"
-CRCCheck on
-XPStyle on
-ShowInstDetails hide
-VIProductVersion "${VERSION}"
-VIAddVersionKey "ProductName" "Tor"
-VIAddVersionKey "Comments" "${WEBSITE}"
-VIAddVersionKey "LegalTrademarks" "Three line BSD"
-VIAddVersionKey "LegalCopyright" "©2004-2011, Roger Dingledine, Nick Mathewson, The Tor Project, Inc."
-VIAddVersionKey "FileDescription" "Tor is an implementation of Onion Routing. You can read more at ${WEBSITE}"
-VIAddVersionKey "FileVersion" "${VERSION}"
-
-!define MUI_ICON "torinst32.ico"
-!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\win.bmp"
-!insertmacro MUI_PAGE_INSTFILES
-!insertmacro MUI_LANGUAGE "English"
-
-Section "Tor" Tor
-	SectionIn RO
-	SetOutPath $INSTDIR
-	Call ExtractPackages
-        Call RunInstallers
-        Call LaunchVidalia
-	Call CleanUpTemp
-SectionEnd
-
-Function ExtractPackages
-	File "license.msi"
-	File "thandy.msi"
-FunctionEnd
-
-Function RunInstallers
-	ExecWait 'msiexec /i "$INSTDIR\license.msi" /qn'
-	ExecWait 'msiexec /i "$INSTDIR\thandy.msi" NOSC=1 /qn'
-	ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update "--repo=$LOCALAPPDATA\Thandy\Tor Updates" /bundleinfo/tor/win32/'
-	ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update "--repo=$LOCALAPPDATA\Thandy\Polipo Updates" /bundleinfo/polipo/win32/'
-	ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update "--repo=$LOCALAPPDATA\Thandy\TorButton Updates" /bundleinfo/torbutton/win32/'
-	ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update "--repo=$LOCALAPPDATA\Thandy\Vidalia Updates" /bundleinfo/vidalia/win32/'
-	ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update --install "--repo=$LOCALAPPDATA\Thandy\Tor Updates" /bundleinfo/tor/win32/'
-	ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update --install "--repo=$LOCALAPPDATA\Thandy\Polipo Updates" /bundleinfo/polipo/win32/'
-	ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update --install "--repo=$LOCALAPPDATA\Thandy\TorButton Updates" /bundleinfo/torbutton/win32/'
-	ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update --install "--repo=$LOCALAPPDATA\Thandy\Vidalia Updates" /bundleinfo/vidalia/win32/'
-        ExpandEnvStrings $0 %COMSPEC%
-        Exec '"$0" /C "$INSTDIR\tbcheck.bat"'
-FunctionEnd
-
-Function LaunchVidalia
-	SetOutPath "$LOCALAPPDATA\Programs\Vidalia"
-	Exec 'vidalia.exe -loglevel info -logfile log.txt'
-FunctionEnd
-
-Function CleanUpTemp
-	ExecWait '"del" "$INSTDIR\license.msi"'
-	ExecWait '"del" "$INSTDIR\thandy.msi"'
-	SetOutPath $TEMP
-	RMDir /r $TEMP\TorInstTmp
-FunctionEnd
-
diff --git a/contrib/linux-tor-prio.sh b/contrib/operator-tools/linux-tor-prio.sh
similarity index 100%
rename from contrib/linux-tor-prio.sh
rename to contrib/operator-tools/linux-tor-prio.sh
diff --git a/contrib/tor-exit-notice.html b/contrib/operator-tools/tor-exit-notice.html
similarity index 100%
rename from contrib/tor-exit-notice.html
rename to contrib/operator-tools/tor-exit-notice.html
diff --git a/contrib/tor.logrotate.in b/contrib/operator-tools/tor.logrotate.in
similarity index 100%
rename from contrib/tor.logrotate.in
rename to contrib/operator-tools/tor.logrotate.in
diff --git a/contrib/check-tor b/contrib/or-tools/check-tor
similarity index 100%
rename from contrib/check-tor
rename to contrib/or-tools/check-tor
diff --git a/contrib/checksocks.pl b/contrib/or-tools/checksocks.pl
similarity index 100%
rename from contrib/checksocks.pl
rename to contrib/or-tools/checksocks.pl
diff --git a/contrib/exitlist b/contrib/or-tools/exitlist
similarity index 100%
rename from contrib/exitlist
rename to contrib/or-tools/exitlist
diff --git a/contrib/package_nsis-weasel.sh b/contrib/package_nsis-weasel.sh
deleted file mode 100755
index 8dd494852704f2035b98c92300a834a6a78ec048..0000000000000000000000000000000000000000
--- a/contrib/package_nsis-weasel.sh
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/bin/sh
-
-set -e
-
-#
-# Script to package a Tor installer on win32.  This script assumes that
-# you have already built Tor, that you are running cygwin, and that your
-# environment is basically exactly the same as Nick's.
-
-if ! [ -d Win32Build ] || ! [ -d contrib ]; then
-	echo "No Win32Build and/or no contrib directory here.  Are we in the right place?" >&2
-	exit 1
-fi
-
-rm -rf win_tmp
-mkdir win_tmp
-mkdir win_tmp/bin
-mkdir win_tmp/contrib
-mkdir win_tmp/doc
-mkdir win_tmp/doc/website
-mkdir win_tmp/doc/design-paper
-mkdir win_tmp/doc/contrib
-mkdir win_tmp/src
-mkdir win_tmp/src/config
-mkdir win_tmp/tmp
-
-cp Win32Build/vc7/Tor/Debug/Tor.exe win_tmp/bin/tor.exe
-cp Win32Build/vc7/tor_resolve/Debug/tor_resolve.exe win_tmp/bin
-cp ../c-windows-system32/libeay32.dll win_tmp/bin
-cp ../c-windows-system32/ssleay32.dll win_tmp/bin
-
-man2html doc/tor.1.in > win_tmp/tmp/tor-reference.html
-man2html doc/tor-resolve.1 > win_tmp/tmp/tor-resolve.html
-
-clean_newlines() {
-    perl -pe 's/^\n$/\r\n/mg; s/([^\r])\n$/\1\r\n/mg;' $1 >$2
-}
-
-clean_localstatedir() {
-    perl -pe 's/^\n$/\r\n/mg; s/([^\r])\n$/\1\r\n/mg; s{\@LOCALSTATEDIR\@/(lib|log)/tor/}{C:\\Documents and Settings\\Application Data\\Tor\\}' $1 >$2
-}
-
-for fn in \
-	doc/HACKING \
-	doc/control-spec.txt \
-	doc/dir-spec.txt \
-	doc/rend-spec.txt \
-	doc/socks-extensions.txt \
-	doc/tor-spec.txt \
-	doc/version-spec.txt \
-	\
-	doc/website/* \
-	; do
-    clean_newlines "$fn" win_tmp/"$fn"
-done
-mmv win_tmp/doc/website/"*.html.*" win_tmp/doc/website/"#1.#2.html"
-
-cp doc/design-paper/tor-design.pdf win_tmp/doc/design-paper/tor-design.pdf
-
-for fn in tor-reference.html tor-resolve.html; do \
-    clean_newlines win_tmp/tmp/$fn win_tmp/doc/$fn
-done
-
-for fn in README AUTHORS ChangeLog LICENSE; do \
-    clean_newlines $fn win_tmp/$fn
-done
-
-clean_localstatedir src/config/torrc.sample.in win_tmp/src/config/torrc.sample
-
-cp contrib/tor.nsi.in win_tmp/contrib/tor.nsi
-(
-	echo '/WEBSITE-FILES-HERE/'
-	echo 'a' # append
-	for fn in win_tmp/doc/website/*; do
-		echo -n 'File "..\doc\website\'
-		echo -n "`basename $fn`"
-		echo '"'
-	done
-	echo "." # end input
-	echo "w" # write
-	echo "q" # quit
-) | ed win_tmp/contrib/tor.nsi
-
-cd win_tmp/contrib
-
-echo "Now run"
-echo '  t:'
-echo '  cd \tor\win_tmp\contrib'
-echo '  c:\programme\nsis\makensis tor.nsi'
-echo '  move tor-*.exe ../../..'
diff --git a/contrib/package_nsis.sh b/contrib/package_nsis.sh
deleted file mode 100644
index 863dfdff9d2127416f0e1746bd7425bd57930ccb..0000000000000000000000000000000000000000
--- a/contrib/package_nsis.sh
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/bin/sh
-#
-# Script to package a Tor installer on win32.  This script assumes that
-# you have already built Tor, that you are running cygwin, and that your
-# environment is basically exactly the same as Nick's.
-
-# This file is obsolete.
-
-rm -rf win_tmp
-mkdir win_tmp
-mkdir win_tmp/bin
-mkdir win_tmp/contrib
-mkdir win_tmp/doc
-mkdir win_tmp/doc/design-paper
-mkdir win_tmp/doc/contrib
-mkdir win_tmp/src
-mkdir win_tmp/src/config
-mkdir win_tmp/tmp
-
-cp Win32Build/vc7/Tor/Debug/Tor.exe win_tmp/bin/tor.exe
-cp Win32Build/vc7/tor_resolve/Debug/tor_resolve.exe win_tmp/bin
-cp c:/windows/system32/libeay32.dll win_tmp/bin
-cp c:/windows/system32/ssleay32.dll win_tmp/bin
-
-man2html doc/tor.1.in > win_tmp/tmp/tor-reference.html
-man2html doc/tor-resolve.1 > win_tmp/tmp/tor-resolve.html
-
-clean_newlines() {
-    perl -pe 's/^\n$/\r\n/mg; s/([^\r])\n$/\1\r\n/mg;' $1 >$2
-}
-
-clean_localstatedir() {
-    perl -pe 's/^\n$/\r\n/mg; s/([^\r])\n$/\1\r\n/mg; s{\@LOCALSTATEDIR\@/(lib|log)/tor/}{C:\\Documents and Settings\\Application Data\\Tor\\}' $1 >$2
-}
-
-for fn in tor-spec.txt HACKING rend-spec.txt control-spec.txt \
-   tor-doc.html tor-doc.css version-spec.txt; do
-    clean_newlines doc/$fn win_tmp/doc/$fn
-done
-
-cp doc/design-paper/tor-design.pdf win_tmp/doc/design-paper/tor-design.pdf
-
-for fn in tor-reference.html tor-resolve.html; do \
-    clean_newlines win_tmp/tmp/$fn win_tmp/doc/$fn
-done
-
-for fn in README AUTHORS ChangeLog LICENSE; do \
-    clean_newlines $fn win_tmp/$fn
-done
-
-clean_localstatedir src/config/torrc.sample.in win_tmp/src/config/torrc.sample
-
-cp contrib/tor.nsi win_tmp/contrib
-
-cd win_tmp/contrib
-makensis tor.nsi
-mv tor-*.exe ../..
diff --git a/contrib/polipo/Makefile.mingw b/contrib/polipo/Makefile.mingw
deleted file mode 100644
index ddb20ec48a73b57ce47c9e3e0f99d36883ae00f6..0000000000000000000000000000000000000000
--- a/contrib/polipo/Makefile.mingw
+++ /dev/null
@@ -1,100 +0,0 @@
-PREFIX = Polipo
-BINDIR = $(PREFIX)\bin
-MANDIR = $(PREFIX)\man
-INFODIR = $(PREFIX)\info
-LOCAL_ROOT = $(PREFIX)
-DISK_CACHE_ROOT = $(PREFIX)\cache
-
-# To compile with Unix CC:
-
-# CDEBUGFLAGS=-O
-
-# To compile with GCC:
-
-# CC = gcc
-# CDEBUGFLAGS = -Os -g -Wall -std=gnu99
-CDEBUGFLAGS = -Os -g -Wall
-# CDEBUGFLAGS = -Os -Wall
-# CDEBUGFLAGS = -g -Wall
-
-# To compile on a pure POSIX system:
-
-# CC = c89
-# CC = c99
-# CDEBUGFLAGS=-O
-
-# To compile with icc 7, you need -restrict.  (Their bug.)
-
-# CC=icc
-# CDEBUGFLAGS = -O -restrict
-
-# On System V (Solaris, HP/UX) you need the following:
-
-# PLATFORM_DEFINES = -DSVR4
-
-# On Solaris, you need the following:
-
-# LDLIBS = -lsocket -lnsl -lresolv
-
-# On mingw, you need
-
- EXE=.exe
- LDLIBS = -lwsock32 -lregex
-
-FILE_DEFINES = -DHAVE_REGEX
-
-# You may optionally also add any of the following to DEFINES:
-#
-#  -DNO_DISK_CACHE to compile out the on-disk cache and local web server;
-#  -DNO_IPv6 to avoid using the RFC 3493 API and stick to stock
-#      Berkeley sockets;
-#  -DHAVE_IPv6 to force the use of the RFC 3493 API on systems other
-#      than GNU/Linux and BSD (let me know if it works);
-#  -DNO_FANCY_RESOLVER to compile out the asynchronous name resolution
-#      code;
-#  -DNO_STANDARD_RESOLVER to compile out the code that falls back to
-#      gethostbyname/getaddrinfo when DNS requests fail;
-#  -DNO_TUNNEL to compile out the code that handles CONNECT requests;
-#  -DNO_SOCKS to compile out the SOCKS gateway code.
-#  -DNO_FORBIDDEN to compile out the all of the forbidden URL code
-#  -DNO_REDIRECTOR to compile out the Squid-style redirector code
-#  -DNO_SYSLOG to compile out logging to syslog
-
-DEFINES = $(FILE_DEFINES) $(PLATFORM_DEFINES)
-
-CFLAGS = $(MD5INCLUDES) $(CDEBUGFLAGS) $(DEFINES) $(EXTRA_DEFINES)
-
-SRCS = util.c event.c io.c chunk.c atom.c object.c log.c diskcache.c main.c \
-       config.c local.c http.c client.c server.c auth.c tunnel.c \
-       http_parse.c parse_time.c dns.c forbidden.c \
-       md5import.c md5.c ftsimport.c fts_compat.c socks.c mingw.c
-
-OBJS = util.o event.o io.o chunk.o atom.o object.o log.o diskcache.o main.o \
-       config.o local.o http.o client.o server.o auth.o tunnel.o \
-       http_parse.o parse_time.o dns.o forbidden.o \
-       md5import.o ftsimport.o socks.o mingw.o
-
-polipo$(EXE): $(OBJS)
-	$(CC) $(CFLAGS) $(LDFLAGS) -o polipo$(EXE) $(OBJS) $(MD5LIBS) $(LDLIBS)
-
-ftsimport.o: ftsimport.c fts_compat.c
-
-md5import.o: md5import.c md5.c
-
-.PHONY: all install install.binary install.man
-
-all: polipo$(EXE) polipo.info html/index.html localindex.html
-
-TAGS: $(SRCS)
-	etags $(SRCS)
-
-.PHONY: clean
-
-clean:
-	-rm -f polipo$(EXE) *.o *~ core TAGS gmon.out
-	-rm -f polipo.cp polipo.fn polipo.log polipo.vr
-	-rm -f polipo.cps polipo.info* polipo.pg polipo.toc polipo.vrs
-	-rm -f polipo.aux polipo.dvi polipo.ky polipo.ps polipo.tp
-	-rm -f polipo.dvi polipo.ps polipo.ps.gz polipo.pdf polipo.html
-	-rm -rf ./html/
-	-rm -f polipo.man.html
diff --git a/contrib/polipo/README b/contrib/polipo/README
deleted file mode 100644
index 1110ca273195b21fde38c5f5054e3dd955af5c78..0000000000000000000000000000000000000000
--- a/contrib/polipo/README
+++ /dev/null
@@ -1,47 +0,0 @@
-Copyright 2007-2008, Andrew Lewman
-Copyright 2009-2011, The Tor Project
-
-----------------
-General Comments
-----------------
-
-These are some hacks for making polipo work and install a package native
-to Windows.
-
-They need some work before they can be committed upstream:
-  - Change the Makefile so it has a specific build such as "make
-    dist-win32"
-  - Configure the options for tor in polipo config, just leave them
-    commented out for easy activation.
-  - Work out better polipo config options for Tor.
-
-As always, I'm happy to accept patches.
-
---------------------------
-Pre-requisites for Windows
---------------------------
-
-Polipo for Win32 requires the mingw gnu regex library and dlls at
-http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=73286&release_id=140957
-
-You'll need to download the -bin and -dev tarballs.  And extract them
-into your MinGW directory.
-
-Instructions for building polipo under mingw32 for Windows:
-1) Copy Makefile.mingw over Makefile.
-2) Run 'make'. 
-
-You should have a polipo.exe in the current directory.
-
--------------------------------------------
-Creating an installation package in Windows
--------------------------------------------
-
-If you want to build an installer using the Nullsoft Installer, install
-the NSI Compiler.  In Windows Explorer, navigate to the directory in
-which you placed polipo-mingw.nsi.  Right click on polipo-mingw.nsi and
-choose Compile NSIS Script.  You'll then create a polipo installer.
-
-The Polipo NSI installer assumes libgnurx-0.dll is in the same directory as polipo.exe.
-You'll need to copy libgnurx-0.dll into "./" in order to make the
-installation package.
diff --git a/contrib/polipo/polipo-mingw.nsi b/contrib/polipo/polipo-mingw.nsi
deleted file mode 100644
index f119675eba6c6758b4ea9cc6e03ccc6ce7cd8003..0000000000000000000000000000000000000000
--- a/contrib/polipo/polipo-mingw.nsi
+++ /dev/null
@@ -1,172 +0,0 @@
-;polipo-mingw.nsi - A basic win32 installer for Polipo
-; Originally written by J Doe.
-; Modified by Andrew Lewman
-; This is licensed under a Modified BSD license.
-;-----------------------------------------
-;
-!include "MUI.nsh"
-
-!define VERSION "1.0.4.0-forbidden-1"
-!define INSTALLER "polipo-${VERSION}-win32.exe"
-!define WEBSITE "http://www.pps.jussieu.fr/~jch/software/polipo/"
-
-!define LICENSE "COPYING"
-;BIN is where it expects to find polipo.exe
-!define BIN "."
-
-SetCompressor lzma
-OutFile ${INSTALLER}
-InstallDir $PROGRAMFILES\Polipo
-SetOverWrite ifnewer
-
-Name "Polipo"
-Caption "Polipo ${VERSION} Setup"
-BrandingText "A Caching Web Proxy"
-CRCCheck on
-XPStyle on
-VIProductVersion "${VERSION}"
-VIAddVersionKey "ProductName" "Polipo: A caching web proxy"
-VIAddVersionKey "Comments" "http://www.pps.jussieu.fr/~jch/software/polipo/"
-VIAddVersionKey "LegalTrademarks" "See COPYING"
-VIAddVersionKey "LegalCopyright" "©2008, Juliusz Chroboczek"
-VIAddVersionKey "FileDescription" "Polipo is a caching web proxy."
-VIAddVersionKey "FileVersion" "${VERSION}"
-
-!define MUI_WELCOMEPAGE_TITLE "Welcome to the Polipo ${VERSION} Setup Wizard"
-!define MUI_WELCOMEPAGE_TEXT "This wizard will guide you through the installation of Polipo ${VERSION}.\r\n\r\nIf you have previously installed Polipo and it is currently running, please exit Polipo first before continuing this installation.\r\n\r\n$_CLICK"
-!define MUI_ABORTWARNING
-!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\win-install.ico"
-!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\win-uninstall.ico"
-!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\win.bmp"
-!define MUI_HEADERIMAGE
-;!define MUI_FINISHPAGE_RUN 
-!define MUI_FINISHPAGE_LINK "Visit the Polipo website for the latest updates."
-!define MUI_FINISHPAGE_LINK_LOCATION ${WEBSITE}
-
-!insertmacro MUI_PAGE_WELCOME
-!insertmacro MUI_PAGE_COMPONENTS
-!insertmacro MUI_PAGE_DIRECTORY
-!insertmacro MUI_PAGE_INSTFILES
-!insertmacro MUI_PAGE_FINISH
-!insertmacro MUI_UNPAGE_WELCOME
-!insertmacro MUI_UNPAGE_CONFIRM
-!insertmacro MUI_UNPAGE_INSTFILES
-!insertmacro MUI_UNPAGE_FINISH
-!insertmacro MUI_LANGUAGE "English"
-
-Var configfile
-Var forbiddenfile
-
-;Sections
-;--------
-
-Section "Polipo" Polipo
-;Files that have to be installed for polipo to run and that the user
-;cannot choose not to install
-   SectionIn RO
-   SetOutPath $INSTDIR
-   File "${BIN}\polipo.exe"
-   File "${BIN}\COPYING"
-   File "${BIN}\CHANGES"
-   File "${BIN}\config.sample"
-   File "${BIN}\forbidden.sample"
-   File "${BIN}\README.Windows"
-   File "${BIN}\libgnurx-0.dll"
-   WriteIniStr "$INSTDIR\Polipo Website.url" "InternetShortcut" "URL" ${WEBSITE}
-
-   StrCpy $configfile "config"
-   StrCpy $forbiddenfile "forbidden"
-   SetOutPath $INSTDIR
-   ;If there's already a polipo config file, ask if they want to
-   ;overwrite it with the new one.
-   IfFileExists "$INSTDIR\config" "" endifconfig
-      MessageBox MB_ICONQUESTION|MB_YESNO "You already have a Polipo config file.$\r$\nDo you want to overwrite it with the default sample config file?" IDNO yesreplace
-      Delete $INSTDIR\config
-      Goto endifconfig
-     yesreplace:
-      StrCpy $configfile ".\config.sample"
-   endifconfig:
-   File /oname=$configfile ".\config.sample"
-   ;If there's already a polipo forbidden file, ask if they want to
-   ;overwrite it with the new one.
-   IfFileExists "$INSTDIR\forbidden" "" endifforbidden
-      MessageBox MB_ICONQUESTION|MB_YESNO "You already have a Polipo forbidden file.$\r$\nDo you want to overwrite it with the default sample forbidden file?" IDNO forbidyesreplace
-      Delete $INSTDIR\forbidden
-      Goto endifforbidden
-     forbidyesreplace:
-      StrCpy $forbiddenfile ".\forbidden.sample"
-   endifforbidden:
-   File /oname=$forbiddenfile ".\forbidden.sample"
-   IfFileExists "$INSTDIR\bin\*.*" "" endifbinroot
-	CreateDirectory "$INSTDIR\bin"
-   endifbinroot:
-   CopyFiles "${BIN}\localindex.html" $INSTDIR\index.html
-   IfFileExists "$INSTDIR\cache\*.*" "" endifcache
-	CreateDirectory "$INSTDIR\cache"
-   endifcache:
-SectionEnd
-
-SubSection /e "Shortcuts" Shortcuts
-
-Section "Start Menu" StartMenu
-   SetOutPath $INSTDIR
-   IfFileExists "$SMPROGRAMS\Polipo\*.*" "" +2
-      RMDir /r "$SMPROGRAMS\Polipo"
-   CreateDirectory "$SMPROGRAMS\Polipo"
-   CreateShortCut "$SMPROGRAMS\Polipo\Polipo.lnk" "$INSTDIR\polipo.exe" "-c config" 
-   CreateShortCut "$SMPROGRAMS\Polipo\Poliporc.lnk" "Notepad.exe" "$INSTDIR\config"
-   CreateShortCut "$SMPROGRAMS\Polipo\Polipo Documentation.lnk" "$INSTDIR\www\index.html"
-   CreateShortCut "$SMPROGRAMS\Polipo\Polipo Website.lnk" "$INSTDIR\Polipo Website.url"
-   CreateShortCut "$SMPROGRAMS\Polipo\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
-SectionEnd
-
-Section "Desktop" Desktop
-   SetOutPath $INSTDIR
-   CreateShortCut "$DESKTOP\Polipo.lnk" "$INSTDIR\polipo.exe" "-c config" 
-SectionEnd
-
-Section /o "Run at startup" Startup
-   SetOutPath $INSTDIR
-   CreateShortCut "$SMSTARTUP\Polipo.lnk" "$INSTDIR\polipo.exe" "-c config -f forbidden" "" "" "" SW_SHOWMINIMIZED
-SectionEnd
-
-SubSectionEnd
-
-Section "Uninstall"
-   Delete "$DESKTOP\Polipo.lnk"
-   Delete "$INSTDIR\polipo.exe"
-   Delete "$INSTDIR\Polipo Website.url"
-   Delete "$INSTDIR\config"
-   Delete "$INSTDIR\config.sample"
-   Delete "$INSTDIR\forbidden.sample"
-   Delete "$INSTDIR\libgnurx-0.dll"
-   Delete "$INSTDIR\COPYING"
-   Delete "$INSTDIR\CHANGES"
-   Delete "$INSTDIR\README.Windows"
-   StrCmp $INSTDIR $INSTDIR +2 ""
-      RMDir /r $INSTDIR
-   Delete "$INSTDIR\Uninstall.exe"
-   RMDir /r "$INSTDIR\Documents"
-   RMDir $INSTDIR
-   RMDir /r "$SMPROGRAMS\Polipo"
-   RMDir /r "$APPDATA\Polipo"
-   Delete "$SMSTARTUP\Polipo.lnk"
-   DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Polipo"
-SectionEnd
-
-Section -End
-    WriteUninstaller "$INSTDIR\Uninstall.exe"
-    ;The registry entries simply add the Polipo uninstaller to the Windows
-    ;uninstall list.
-    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Polipo" "DisplayName" "Polipo (remove only)"
-    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Polipo" "UninstallString" '"$INSTDIR\Uninstall.exe"'
-SectionEnd
-
-!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
-  !insertmacro MUI_DESCRIPTION_TEXT ${Polipo} "The core executable and config files needed for Polipo to run."
-  !insertmacro MUI_DESCRIPTION_TEXT ${ShortCuts} "Shortcuts to easily start Polipo"
-  !insertmacro MUI_DESCRIPTION_TEXT ${StartMenu} "Shortcuts to access Polipo and its documentation from the Start Menu"
-  !insertmacro MUI_DESCRIPTION_TEXT ${Desktop} "A shortcut to start Polipo from the desktop"
-  !insertmacro MUI_DESCRIPTION_TEXT ${Startup} "Launches Polipo automatically at startup in a minimized window"
-!insertmacro MUI_FUNCTION_DESCRIPTION_END
-
diff --git a/contrib/sd b/contrib/sd
deleted file mode 100755
index 232e8accde62dae6eb8388acc891a5d33b6f0200..0000000000000000000000000000000000000000
--- a/contrib/sd
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/bin/bash
-#
-# Copyright (c) 2005, 2006, 2007, 2008 Peter Palfrader <peter@palfrader.org>
-# Copyright (c) 2008, 2009 Jacob Appelbaum <jacob@appelbaum.net>
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-# 
-# This small script fetches information about a server when given a nickname.
-# It currently uses the v2 dir information and not the v3 consensus by default.
-# It requires wget, perl, awk to function properly. This is based on a zsh
-# dotfile from weasel and adapted to be a small bash utility.
-# 
-
-# Feel free to set any authority you desire, we're using weasel's by default
-# You could also try the v3 directory infomation in weasel's dir authority:
-# http://tor.noreply.org/tor/status-vote/current/consensus
-#
-
-# Users can select between the two
-v3authority="http://tor.noreply.org/tor/status-vote/current/consensus";
-v2authority="http://tor.noreply.org:80/tor/status/authority";
-authority=$v2authority;
-
-function usage {
-    echo "Usage: $0 [-2|-3] nodenickname";
-}
-
-if [ -z "$1" ];
-then
-    usage;
-    exit;
-fi
-
-# Are we switching between v2 or v3?
-if [ "$1" == "-2" -o "$1" == "-3" ];
-then
-    if [ "$1" == "-2" -a -n "$2" ]; 
-    then    
-        authority=$v2authority;
-        nickname="$2";
-    elif [ "$1" == "-3" -a -n "$2" ];
-    then
-        authority=$v3authority;
-        nickname="$2";
-    else
-        usage;
-        exit;
-    fi
-else
-    nickname="$1";
-fi
-
-# Fetch it and decode the fingerprint 
-fp=`wget -q -O - $authority | \
-	awk '$1 == "r" && $2 == "'$nickname'" {printf "%s===", $3}' | \
-	perl -MMIME::Base64 -e "print unpack(\"H*\", decode_base64(<>)),\"\n\"";`
-
-# If we don't have a fingerprint, we don't have a match
-if [ "$fp" != "" ];
-then
-	wget -q -O - http://tor.noreply.org:80/tor/server/fp/$fp;
-	exit $?;	
-else
-	echo "It appears the nickname is not currently known by the directory" \
-         "authority."
-	exit 1;
-fi
diff --git a/contrib/tor-ctrl.sh b/contrib/tor-ctrl.sh
deleted file mode 100644
index 58320ced12172831979ebfe44d75773d436158be..0000000000000000000000000000000000000000
--- a/contrib/tor-ctrl.sh
+++ /dev/null
@@ -1,212 +0,0 @@
-#!/bin/bash
-#
-# tor-ctrl is a commandline tool for executing commands on a tor server via
-# the controlport.  In order to get this to work, add "ControlPort 9051" and
-# "CookieAuthentication 1" to your torrc and reload tor.  Or - if you want a
-# fixed password - leave out "CookieAuthentication 1" and use the following
-# line to create the appropriate HashedControlPassword entry for your torrc
-# (you need to change yourpassword, of course):
-#
-# echo "HashedControlPassword $(tor --hash-password yourpassword | tail -n 1)"
-#
-# tor-ctrl will return 0 if it was successful and 1 if not, 2 will be returned
-# if something (telnet, xxd) is missing.  4 will be returned if it executed
-# several commands from a file.
-#
-# For setting the bandwidth for specific times of the day, I suggest calling
-# tor-ctrl via cron, e.g.:
-#
-# 0 22 * * * /path/to/tor-ctrl -c "SETCONF bandwidthrate=1mb"
-# 0 7 * * *  /path/to/tor-ctrl -c "SETCONF bandwidthrate=100kb"
-#
-# This would set the bandwidth to 100kb at 07:00 and to 1mb at 22:00.  You can
-# use notations like 1mb, 1kb or the number of bytes.
-#
-# Many, many other things are possible, see
-#              https://www.torproject.org/svn/trunk/doc/spec/control-spec.txt
-#
-# Copyright (c) 2007 by Stefan Behte
-#
-# tor-ctrl is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# tor-ctrl 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
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with tor-ctrl; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-#
-# Written by Stefan Behte
-#
-# Please send bugs, comments, wishes, thanks and success stories to:
-# Stefan dot Behte at gmx dot net
-#
-# Also have a look at my page:
-# http://ge.mine.nu/
-#
-# 2007-10-03: First version, only changing bandwidth possible.
-# 2007-10-04: Renaming to "tor-ctrl", added a lot of functions, it's now a
-#             general-purpose tool.
-#             Added control_auth_cookie/controlpassword auth, getopts,
-#             program checks, reading from file etc.
-
-VERSION=v1
-TORCTLIP=127.0.0.1
-TORCTLPORT=9051
-TOR_COOKIE="/var/lib/tor/data/control_auth_cookie"
-SLEEP_AFTER_CMD=1
-VERBOSE=0
-
-usage()
-{
-cat <<EOF
-
-tor-ctrl $VERSION by Stefan Behte (http://ge.mine.nu)
-You should have a look at 
-https://www.torproject.org/svn/trunk/doc/spec/control-spec.txt
-
-usage: tor-ctrl [-switch] [variable]
-
-       [-c] [command] = command to execute
-                        notice: always "quote" your command
-
-       [-f] [file]    = file to execute commands from
-                        notice: only one command per line
-
-       [-a] [path]    = path to tor's control_auth_cookie
-                        default: /var/lib/tor/data/control_auth_cookie
-                        notice: do not forget to adjust your torrc
-
-       [-s] [time]    = sleep [var] seconds after each command sent
-                        default: 1 second
-                        notice: for GETCONF, you can use smaller pause times
-                        than for SETCONF; this is due to telnet's behaviour.
-
-       [-p] [pwd]     = Use password [var] instead of tor's control_auth_cookie
-                        default: not used
-                        notice: do not forget to adjust your torrc
-                                
-       [-P] [port]     = Tor ControlPort
-                        default: 9051
-
-       [-v]           = verbose
-                        default: not set
-                        notice: the default output is the return code ;)
-                        You propably want to set -v when running manually
-
-       Examples:      $0 -c "SETCONF bandwidthrate=1mb"
-                      $0 -v -c "GETINFO version"
-                      $0 -v -s 0 -P 9051 -p foobar -c "GETCONF bandwidthrate"
-
-EOF
-exit 2
-}
-
-checkprogs()
-{
-        programs="telnet"
-        if [ "$PASSWORD" = "" ]   
-        then
-                # you only need xxd when using control_auth_cookie
-                programs="$programs xxd"
-        fi
-
-        for p in $programs
-        do
-                which $p &>/dev/null            # are you there?
-                if [ "$?" != "0" ]
-                then
-                        echo "$p is missing."
-                        exit 2
-                fi
-        done
-}
-
-sendcmd()
-{
-        echo "$@"
-        sleep ${SLEEP_AFTER_CMD}
-}
-
-login()
-{
-        if [ "$PASSWORD" = "" ]
-        then
-                sendcmd "AUTHENTICATE $(xxd -c 32 -g 0 ${TOR_COOKIE} | awk '{print $2}')"
-        else
-                sendcmd "AUTHENTICATE \"${PASSWORD}\""
-        fi
-}
-
-cmdpipe()
-{
-        login
-        sendcmd "$@"
-        sendcmd "QUIT"
-}
-
-vecho()
-{
-        if [ $VERBOSE -ge 1 ]
-        then
-                echo "$@"
-        fi
-}
-
-myecho()
-{
-        STR=$(cat)
-        vecho "$STR"
-
-        echo "$STR" | if [ "$(grep -c ^"250 ")" = 3 ]
-        then
-                exit 0
-        else
-                exit 1
-        fi
-}
-
-filepipe()
-{
-        login
-        cat "$1" | while read line
-        do
-                sendcmd "$line"
-        done
-        sendcmd "QUIT"
-}
-
-while getopts ":a:c:s:p:P:f:vh" Option
-do
-        case $Option in
-                a) TOR_COOKIE="${OPTARG}";;
-                c) CMD="${OPTARG}";;
-                s) SLEEP_AFTER_CMD="${OPTARG}";;
-                p) PASSWORD="${OPTARG}";;
-                P) TORCTLPORT="${OPTARG}";;
-                f) FILE="${OPTARG}";;
-                v) VERBOSE=1;;
-                h) usage;;
-                *) usage;;
-        esac
-done
-
-if [ -e "$FILE" ]
-then
-        checkprogs
-        filepipe "$FILE" | telnet $TORCTLIP $TORCTLPORT 2>/dev/null | myecho
-        exit 4
-fi
-
-if [ "$CMD" != "" ]
-then
-        checkprogs
-        cmdpipe $CMD | telnet $TORCTLIP $TORCTLPORT 2>/dev/null | myecho
-else
-        usage
-fi
diff --git a/contrib/tor-stress b/contrib/tor-stress
deleted file mode 100755
index a0c88c2fdd74b8c333d7d2c781abf937232005e3..0000000000000000000000000000000000000000
--- a/contrib/tor-stress
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/perl
-
-#require 'sys/syscall.ph';
-$|=1;
-
-$total = 1;
-$target = "http://www.cnn.com/";
-
-for($i=0;$i<$total;$i++) {
-  print "Starting client $i\n";
-  $pid = fork();
-  if(!$pid) {
-    open(FD,"wget -q -O - $target|");
-    $c = 0;
-    while(<FD>) {
-      $c += length($_);
-    }
-#    $TIMEVAL_T = "LL";
-#    $now = pack($TIMEVAL_T, ());
-#    syscall(&SYS_gettimeofday, $now, 0) != -1 or die "gettimeofday: $!";
-#    @now = unpack($TIMEVAL_T, $now);
-    print "Client $i exiting ($c chars).\n";
-    exit(0);
-  }
-# sleep(1);
-}
-
diff --git a/contrib/torinst32.ico b/contrib/torinst32.ico
deleted file mode 100644
index ccbad9b152a23ddf7a7caabf99d4d8df017e52d6..0000000000000000000000000000000000000000
Binary files a/contrib/torinst32.ico and /dev/null differ
diff --git a/contrib/package_nsis-mingw.sh b/contrib/win32build/package_nsis-mingw.sh
similarity index 100%
rename from contrib/package_nsis-mingw.sh
rename to contrib/win32build/package_nsis-mingw.sh
diff --git a/contrib/tor-mingw.nsi.in b/contrib/win32build/tor-mingw.nsi.in
similarity index 100%
rename from contrib/tor-mingw.nsi.in
rename to contrib/win32build/tor-mingw.nsi.in
diff --git a/contrib/tor.ico b/contrib/win32build/tor.ico
similarity index 100%
rename from contrib/tor.ico
rename to contrib/win32build/tor.ico
diff --git a/contrib/tor.nsi.in b/contrib/win32build/tor.nsi.in
similarity index 100%
rename from contrib/tor.nsi.in
rename to contrib/win32build/tor.nsi.in
diff --git a/contrib/xenobite.ico b/contrib/xenobite.ico
deleted file mode 100644
index 352394eef0ba0bbbe41d4005fa723927ab8ac2dd..0000000000000000000000000000000000000000
Binary files a/contrib/xenobite.ico and /dev/null differ
diff --git a/contrib/checkLogs.pl b/scripts/maint/checkLogs.pl
similarity index 100%
rename from contrib/checkLogs.pl
rename to scripts/maint/checkLogs.pl
diff --git a/contrib/checkOptionDocs.pl b/scripts/maint/checkOptionDocs.pl
similarity index 100%
rename from contrib/checkOptionDocs.pl
rename to scripts/maint/checkOptionDocs.pl
diff --git a/contrib/checkSpace.pl b/scripts/maint/checkSpace.pl
similarity index 100%
rename from contrib/checkSpace.pl
rename to scripts/maint/checkSpace.pl
diff --git a/contrib/findMergedChanges.pl b/scripts/maint/findMergedChanges.pl
similarity index 100%
rename from contrib/findMergedChanges.pl
rename to scripts/maint/findMergedChanges.pl
diff --git a/contrib/format_changelog.py b/scripts/maint/format_changelog.py
similarity index 100%
rename from contrib/format_changelog.py
rename to scripts/maint/format_changelog.py
diff --git a/contrib/redox.py b/scripts/maint/redox.py
similarity index 100%
rename from contrib/redox.py
rename to scripts/maint/redox.py
diff --git a/contrib/updateVersions.pl b/scripts/maint/updateVersions.pl
similarity index 100%
rename from contrib/updateVersions.pl
rename to scripts/maint/updateVersions.pl
diff --git a/contrib/cov-blame b/scripts/test/cov-blame
similarity index 100%
rename from contrib/cov-blame
rename to scripts/test/cov-blame
diff --git a/contrib/cov-diff b/scripts/test/cov-diff
similarity index 100%
rename from contrib/cov-diff
rename to scripts/test/cov-diff
diff --git a/contrib/coverage b/scripts/test/coverage
similarity index 100%
rename from contrib/coverage
rename to scripts/test/coverage
diff --git a/contrib/scan-build.sh b/scripts/test/scan-build.sh
similarity index 100%
rename from contrib/scan-build.sh
rename to scripts/test/scan-build.sh