<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>vendor/BeautifulSoup.py</filename>
    </added>
    <added>
      <filename>vendor/json/__init__.py</filename>
    </added>
    <added>
      <filename>vendor/json/decoder.py</filename>
    </added>
    <added>
      <filename>vendor/json/encoder.py</filename>
    </added>
    <added>
      <filename>vendor/json/scanner.py</filename>
    </added>
    <added>
      <filename>vendor/json/tests/__init__.py</filename>
    </added>
    <added>
      <filename>vendor/json/tests/test_decode.py</filename>
    </added>
    <added>
      <filename>vendor/json/tests/test_default.py</filename>
    </added>
    <added>
      <filename>vendor/json/tests/test_dump.py</filename>
    </added>
    <added>
      <filename>vendor/json/tests/test_encode_basestring_ascii.py</filename>
    </added>
    <added>
      <filename>vendor/json/tests/test_fail.py</filename>
    </added>
    <added>
      <filename>vendor/json/tests/test_float.py</filename>
    </added>
    <added>
      <filename>vendor/json/tests/test_indent.py</filename>
    </added>
    <added>
      <filename>vendor/json/tests/test_pass1.py</filename>
    </added>
    <added>
      <filename>vendor/json/tests/test_pass2.py</filename>
    </added>
    <added>
      <filename>vendor/json/tests/test_pass3.py</filename>
    </added>
    <added>
      <filename>vendor/json/tests/test_recursion.py</filename>
    </added>
    <added>
      <filename>vendor/json/tests/test_scanstring.py</filename>
    </added>
    <added>
      <filename>vendor/json/tests/test_separators.py</filename>
    </added>
    <added>
      <filename>vendor/json/tests/test_speedups.py</filename>
    </added>
    <added>
      <filename>vendor/json/tests/test_unicode.py</filename>
    </added>
    <added>
      <filename>vendor/json/tool.py</filename>
    </added>
    <added>
      <filename>vendor/webpy</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,13 +1,12 @@
 For Debian Etch:
 
     sudo apt-get install python-dev python-setuptools  
-    sudo easy_install simplejson==1.8.1
     sudo apt-get install python-imaging
     sudo apt-get install python-psycopg2
 
 * * *
 
-The version of simplejson in Etch is inadequate.  For Aaron's PCA
+For Aaron's PCA
 script, I installed MDP from the MDP Toolkit from
 &lt;http://downloads.sourceforge.net/mdp-toolkit/MDP-2.2.tar.gz?modtime=1206126105&gt;
 </diff>
      <filename>REQUISITES</filename>
    </modified>
    <modified>
      <diff>@@ -1,10 +1,6 @@
-import time
-import md5
-import urllib, urllib2 
+import time, hashlib, urllib, urllib2, string, json
 from xml.dom import minidom    
 from BeautifulSoup import BeautifulSoup
-import string
-import demjson
 
 import web
 from settings import db, render, session
@@ -20,7 +16,7 @@ def yahooLoginURL(email, url, token=None):
     yurl = 'https://api.login.yahoo.com'
     purl = '%s?appid=%s&amp;appdata=%s&amp;ts=%s' % (url,appid, appdata, ts)
     surl ='%s%s' % (purl, secret)
-    sig = md5.new(surl).hexdigest()
+    sig = hashlib.md5(surl).hexdigest()
     furl = '%s%s&amp;sig=%s' % (yurl, purl, sig)
     if token: furl = '%s&amp;token=%s' % ( furl, token)
     return  furl
@@ -91,7 +87,7 @@ def save_contacts(email, contacts, provider):
 
 class auth_yahoo:
     def get_contacts(self, contacts_json):
-        content = demjson.decode(contacts_json)
+        content = json.loads(contacts_json)
         
         contacts = []
         for c in content.get('contacts'):</diff>
      <filename>contacts.py</filename>
    </modified>
    <modified>
      <diff>@@ -1,9 +1,8 @@
-import os, urllib
-import simplejson
+import os, urllib, json
 
 DEBUG = True
 out_dir = '../data/crawl/mortality/%s.tsv'
-states = simplejson.load(file('load/manual/states.json'))
+states = json.load(file('load/manual/states.json'))
 URL = 'http://wonder.cdc.gov/controller/datarequest/D35'
 # POST data for ordering by 1) Region and 2) Cause of Death, Some State, Saving as File, and (max) 10 minute timeout
 data = 'javascript=on&amp;stage=request&amp;M_1=D35.M1&amp;M_2=D35.M2&amp;M_3=D35.M3&amp;O_vintage=D35&amp;B_1=D35.V9-level2&amp;B_2=D35.V2-level3&amp;B_3=*None*&amp;B_4=*None*&amp;B_5=*None*&amp;O_title=&amp;O_location=D35.V9&amp;finder-stage-D35.V9=codeset&amp;O_V9_fmode=freg&amp;V_D35.V9=&amp;F_D35.V9=%s&amp;I_D35.V9=%s&amp;finder-stage-D35.V10=codeset&amp;O_V10_fmode=freg&amp;V_D35.V10=&amp;F_D35.V10=*All*&amp;I_D35.V10=&amp;O_age=D35.V5&amp;V_D35.V5=*All*&amp;V_D35.V6=00&amp;V_D35.V1=*All*&amp;V_D35.V8=*All*&amp;V_D35.V7=*All*&amp;V_D35.V11=*All*&amp;O_icd=D35.V2&amp;finder-stage-D35.V2=codeset&amp;O_V2_fmode=freg&amp;V_D35.V2=&amp;F_D35.V2=*All*&amp;I_D35.V2=&amp;finder-stage-D35.V4=codeset&amp;O_V4_fmode=freg&amp;V_D35.V4=&amp;F_D35.V4=*All*&amp;I_D35.V4=&amp;V_D35.V12=*All*&amp;V_D35.V13=*All*&amp;O_rate_per=100000&amp;O_aar=aar_none&amp;O_aar_pop=0000&amp;VM_D35.M6_D35.V1=*All*&amp;VM_D35.M6_D35.V7=*All*&amp;VM_D35.M6_D35.V8=*All*&amp;VM_D35.M6_D35.V10=&amp;O_change_action=Export+Results&amp;O_show_totals=true&amp;O_precision=1&amp;O_timeout=600&amp;action=Send'</diff>
      <filename>import/crawl/mortality.py</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
-import urllib, demjson, pickle, os, sys
+import urllib, json, pickle, os, sys
 
 def listify(x):
     if not isinstance(x, list):
@@ -7,7 +7,7 @@ def listify(x):
         return x
 
 def jsonify(d):
-    return demjson.encode(d, compactly=False).encode('utf8')
+    return json.dumps(d, indent=2, sort_keys=True)
 
 def cachejson(funct):
     name = funct.__name__
@@ -19,7 +19,7 @@ def cachejson(funct):
     fh.close()
 
 def uncachejson(name):
-    return demjson.decode(file('%s.json' % name).read())
+    return json.load(file('%s.json' % name))
 
 PVS_API_KEY = file('.pvsapikey.secret').read().strip()
 PVS_URL = 'http://api.votesmart.org/%s?%s&amp;key=%s&amp;o=JSON'
@@ -37,12 +37,8 @@ PVS_EMPTY = [
 
 def pvs(cmd, **attrs):
     u = PVS_URL % (cmd, urllib.urlencode(attrs), PVS_API_KEY)
-    d = urllib.urlopen(u).read()
-    try:
-        return demjson.decode(d)
-    except demjson.JSONDecodeError:
-        print repr(d)
-        raise
+    d = urllib.urlopen(u)
+    return json.load(d)
 
 def pvsexists(d):
     if d.get('error') and d['error']['errorMessage'] in PVS_EMPTY:
@@ -185,7 +181,7 @@ def parsenetstrings(fh):
 
 def parseratings():
     for string in parsenetstrings(file('ratings.json.netstrings')):
-        yield demjson.decode(string)
+        yield json.loads(string)
 
 def getoffices():
     out = {}
@@ -224,10 +220,7 @@ def getnpat():
     cans = sum(uncachejson('candidates').values(), [])
     
     for can in cans:
-        try:
-            d = pvs('Npat.getNpat', candidateId=can['candidateId'])
-        except demjson.JSONDecodeError:
-            continue
+        d = pvs('Npat.getNpat', candidateId=can['candidateId'])
         if d.get('error'):
             if d['error']['errorMessage'] == 'Unknown error': continue            
             print d</diff>
      <filename>import/crawl/pvsapi.py</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 import sys
-import simplejson
+import json
 from urllib2 import urlopen
 from ClientForm import ParseResponse, ControlNotFoundError, AmbiguityError
 from settings import db
@@ -132,7 +132,7 @@ def getformtype(url):
         
 def get_votesmart_contacts(dists):
     d = {}
-    websites = simplejson.load(file(votesmart_websites))
+    websites = json.load(file(votesmart_websites))
     dists = tuple(dists)
     rs = db.select('politician', what='district_id, votesmartid',
                 where='district_id in $dists', vars=locals())
@@ -157,7 +157,7 @@ def get_votesmart_contacts(dists):
 
 def get_manual_contacts(dists):
     d = {}
-    items = simplejson.load(file(manual_websites))
+    items = json.load(file(manual_websites))
     for dist in dists:
         url = items.get(dist, dict(contact=''))['contact']
         if url:
@@ -185,7 +185,7 @@ def main(fname='wyr.json'):
     remaining_dists = list(all_dists - set(d.keys()))
     
     f = file(fname, 'w')
-    simplejson.dump(d, f, indent=2, sort_keys=True)                     
+    json.dump(d, f, indent=2, sort_keys=True)                     
     
 if __name__ == '__main__':
     main()               </diff>
      <filename>import/crawl/wyr.py</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 #!/usr/bin/python
-import glob, web, os, cgitb, simplejson, sys
+import glob, web, os, cgitb, sys
 import tools
 from settings import db
 from parse import almanac</diff>
      <filename>import/load/almanac.py</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,6 @@
 from __future__ import with_statement
 
 import sys
-import simplejson
 import web
 import tools
 from parse import earmarks
@@ -48,8 +47,6 @@ for repid, rep in reps.items():
         if repid in hacks:
             lastname2rep[lastname + ', ' + hacks[repid].lower()] = repid
 
-
-
 def cleanrow(s):
     if isinstance(s, basestring):
         s = s.strip()</diff>
      <filename>import/load/earmarks.py</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,7 @@
 load data from govtrack.us
 &quot;&quot;&quot;
 
-import web, simplejson
+import web
 from parse import govtrack
 import tools
 from settings import db</diff>
      <filename>import/load/govtrack.py</filename>
    </modified>
    <modified>
      <diff>@@ -3,8 +3,7 @@ parse data from govtrack maps
 
 from: data/crawl/govtrack/gis/gmapdata/
 &quot;&quot;&quot;
-import re
-import simplejson
+import re, json
 from settings import db
 
 DISTRICT_TABLE = 'load/manual/districts.json'
@@ -13,7 +12,7 @@ GMAPDATA = '../data/crawl/govtrack/gis/gmapdata'
 r_center = re.compile(r'map\.setCenter\(new GLatLng\(([-0-9.]+), ([-0-9.]+)\), (\d+)\);')
 
 def main():
-    districts = simplejson.load(file(DISTRICT_TABLE))
+    districts = json.load(file(DISTRICT_TABLE))
     for dist in districts.iterkeys():
         try:
             d = file(GMAPDATA + '/%s-marker.js' % dist.replace('-0', '').replace('-', '')).read()</diff>
      <filename>import/load/govtrack_gis.py</filename>
    </modified>
    <modified>
      <diff>@@ -10,7 +10,7 @@ to:   data/parse/politicians/photos.json
 &quot;&quot;&quot;
 
 import os
-import simplejson
+import json
 from settings import db
 
 def govtrack_u(govtrackid):
@@ -37,7 +37,7 @@ def load():
     out = {}
 
     pols = db.select('politician')
-    #simplejson.load(file('../data/load/politicians/govtrack.json'))
+    #json.load(file('../data/load/politicians/govtrack.json'))
 
     for pol in pols:
         options = [</diff>
      <filename>import/load/photos.py</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 &quot;&quot;&quot;
 load district shapes
 &quot;&quot;&quot;
-import simplejson
+import json
 import web
 import tools
 from settings import db
@@ -9,7 +9,7 @@ from parse import shapes
 
 def load():
     for district in shapes.parse():
-        outline = simplejson.dumps({'type': 'MultiPolygon', 'coordinates': district['shapes']})
+        outline = json.dumps({'type': 'MultiPolygon', 'coordinates': district['shapes']})
         district = tools.unfips(district['state_fipscode']) + '-' + district['district']
         db.update('district', where='name=$district', outline=outline, vars=locals())
 </diff>
      <filename>import/load/shapes.py</filename>
    </modified>
    <modified>
      <diff>@@ -3,7 +3,7 @@
 common tools for load scripts
 &quot;&quot;&quot;
 import os, re
-import simplejson
+import json
 import web
 from settings import db
 
@@ -29,14 +29,14 @@ def stemcorpname(name):
 _unfipscache = {}
 def unfips(fipscode):
     if not _unfipscache:
-        states = simplejson.load(file(STATE_TABLE))
+        states = json.load(file(STATE_TABLE))
         for stateid, state in states.iteritems():
             _unfipscache[state['fipscode']] = stateid
         
     return _unfipscache.get(fipscode)
 
 def fixdist(dist):
-    districts = simplejson.load(file(DISTRICT_TABLE))
+    districts = json.load(file(DISTRICT_TABLE))
     if dist.endswith('-01') and dist[:-1] + '0' in districts:
         return dist[:-1] + '0'
     else:
@@ -49,7 +49,7 @@ def districtp(district):
     Return the watchdog ID for the represenative of `district`.
     &quot;&quot;&quot;
     if not _districtcache:
-        reps = simplejson.load(file(POLITICIAN_TABLE))
+        reps = json.load(file(POLITICIAN_TABLE))
         for repid, rep in reps.iteritems():
             if rep['district_id'] in _districtcache:
                 _districtcache[rep['district_id']].append(repid)</diff>
      <filename>import/load/tools.py</filename>
    </modified>
    <modified>
      <diff>@@ -2,12 +2,12 @@
 Load Project Vote Smart data.
 &quot;&quot;&quot;
 
-import simplejson
+import json
 import tools
 from settings import db
 
-cans = simplejson.load(file('../data/crawl/votesmart/candidates.json'))
-bios = simplejson.load(file('../data/crawl/votesmart/bios.json'))
+cans = json.load(file('../data/crawl/votesmart/candidates.json'))
+bios = json.load(file('../data/crawl/votesmart/bios.json'))
 
 def main():
     for dist, canl in cans.iteritems():</diff>
      <filename>import/load/votesmart.py</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
-import simplejson
+import json
 from settings import db
 
-wyr = simplejson.load(file('../data/crawl/votesmart/wyr.json'))
+wyr = json.load(file('../data/crawl/votesmart/wyr.json'))
 
 types = dict(email='E', wyr='W', ima='I', zipauth='Z')
 </diff>
      <filename>import/load/wyr.py</filename>
    </modified>
    <modified>
      <diff>@@ -4,7 +4,7 @@ common tools for parsers
 &quot;&quot;&quot;
 
 import sys
-import simplejson
+import json
 
 def netstring(x):
     &quot;&quot;&quot;
@@ -14,7 +14,7 @@ def netstring(x):
     return str(len(x)) + ':' + x + ','
 
 def jsonify(d):
-    return simplejson.dumps(d, indent=2, sort_keys=True)
+    return json.dumps(d, indent=2, sort_keys=True)
 
 def export(generator):
     for item in generator:
@@ -24,7 +24,7 @@ def unexport(fh):
     n = '0'
     while n:
         n = int(n + ''.join(c for c in iter(lambda: fh.read(1), ':')))
-        yield simplejson.loads(fh.read(n))
+        yield json.loads(fh.read(n))
         assert fh.read(1) == ','
         n = fh.read(1)
 </diff>
      <filename>import/parse/tools.py</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
-import simplejson
+import json
 import web
 import smartersql as sql
 
@@ -227,7 +227,7 @@ class Bill(sql.Table):
     
     @property
     def votes_by_caucus(self):
-        caucuses = simplejson.load(file('import/load/manual/caucuses.json'))
+        caucuses = json.load(file('import/load/manual/caucuses.json'))
         members = sum([x['members'] for x in caucuses], [])
         result = db.select(['position'],
             where=web.sqlors('politician_id=', members) + 
@@ -275,7 +275,7 @@ class Roll(sql.Table):
     
     @property
     def votes_by_caucus(self):
-        caucuses = simplejson.load(file('import/load/manual/caucuses.json'))
+        caucuses = json.load(file('import/load/manual/caucuses.json'))
         members = sum([x['members'] for x in caucuses], [])
         result = db.select(['vote'],
             where=web.sqlors('politician_id=', members) + </diff>
      <filename>schema.py</filename>
    </modified>
    <modified>
      <diff>@@ -9,17 +9,17 @@ $def with (page)
   $:page.get('head')
 &lt;/head&gt;&lt;body&gt;
 &lt;div id=&quot;container\
-$if not page.get('front'): -leaf\
+$if not page.get('front'):-leaf\
 &quot;&gt;
 &lt;!-- header --&gt;
 $if page.get('front'):
     &lt;div id=&quot;logo&quot;&gt;&lt;a href=&quot;/&quot;&gt;&lt;img src=&quot;/static/images/watchdog.big.gif&quot; alt=&quot;Watchdog&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
   &lt;div id=&quot;intro&quot;&gt;
-    $if not page.get('front'): &lt;a href=&quot;/&quot;&gt;&lt;img src=&quot;/static/images/watchdog.small.png&quot; alt=&quot;Watchdog&quot; style=&quot;float: left;&quot; /&gt;&lt;/a&gt;&lt;div style=&quot;float: left; padding-bottom: 10px;&quot;&gt;
+    $if not page.get('front'):&lt;a href=&quot;/&quot;&gt;&lt;img src=&quot;/static/images/watchdog.small.png&quot; alt=&quot;Watchdog&quot; style=&quot;float: left;&quot; /&gt;&lt;/a&gt;&lt;div style=&quot;float: left; padding-bottom: 10px;&quot;&gt;
 	  &lt;a href=&quot;/&quot;&gt;Watchdog.net.&lt;/a&gt;
-	  $if page.get('front'): &lt;br /&gt;
+	  $if page.get('front'):&lt;br /&gt;
 	  $:page.title.strip().
-	  $if not page.get('front'): &lt;/div&gt;
+	  $if not page.get('front'):&lt;/div&gt;
   $if not page.get('front'):
         $if is_logged_in():
             &lt;div style=&quot;float: right; padding-right: 22px; padding-top: 15px;&quot;&gt;        
@@ -33,7 +33,7 @@ $if page.get('front'):
       &lt;/div&gt;
   &lt;/div&gt;
   &lt;div id=&quot;header\
-$if not page.get('front'): -leaf\
+$if not page.get('front'):-leaf\
 &quot;&gt;&lt;/div&gt;
 &lt;!-- /header --&gt;
 &lt;div id=&quot;main&quot;&gt;
@@ -68,7 +68,7 @@ $:page.get('pretext')
 
 $if not page.get('maxi'):
     &lt;div id=&quot;text&quot;\
-    $if page.get('front'): style=&quot;margin-top: -10px;&quot;\
+    $if page.get('front'):  style=&quot;margin-top: -10px;&quot;\
     &gt;
 
 $:page.get('pretitle')
@@ -97,7 +97,7 @@ $else:
 &lt;/div&gt;&lt;!-- /main --&gt;
 
 &lt;div id=&quot;footer\
-$if not page.get('front'): -leaf\
+$if not page.get('front'):-leaf\
 &quot;&gt;
 &lt;div id=&quot;left_footer&quot;&gt;What do you think? &lt;a href=&quot;/about/#feedback&quot;&gt;&lt;strong&gt;Send us your feedback.&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
 &lt;div id=&quot;right_footer&quot;&gt;</diff>
      <filename>templates/base.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,26 +1,21 @@
 $def with (pol)
 
-$var head:
-    &lt;script src=&quot;http://maps.google.com/maps?file=api&amp;amp;v=2&amp;amp;key=ABQIAAAA32O3YO3sztAoMSWYheUtTBQYu38vSyEOJo4J0P8Mwlrd5U_lzhQ2ZoxaOYKY-qh7R36VeBWvCtHU5g&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-    &lt;script src=&quot;http://www.govtrack.us/scripts/gmap-wms.js&quot;&gt;&lt;/script&gt;
-	  &lt;script src=&quot;/static/js/distmap.js&quot;&gt;&lt;/script&gt;
-	  &lt;script type=&quot;text/javascript&quot;&gt;distcenter('googlemap', '$pol.district.name.replace('-0', '').replace('-', '')', [$pol.district.center_lat, $pol.district.center_lng, $pol.district.zoom_level - 2])&lt;/script&gt;
+$var head: &lt;script src=&quot;http://maps.google.com/maps?file=api&amp;amp;v=2&amp;amp;key=ABQIAAAA32O3YO3sztAoMSWYheUtTBQYu38vSyEOJo4J0P8Mwlrd5U_lzhQ2ZoxaOYKY-qh7R36VeBWvCtHU5g&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt; &lt;script src=&quot;http://www.govtrack.us/scripts/gmap-wms.js&quot;&gt;&lt;/script&gt; &lt;script src=&quot;/static/js/distmap.js&quot;&gt;&lt;/script&gt; &lt;script type=&quot;text/javascript&quot;&gt;distcenter('googlemap', '$pol.district.name.replace('-0', '').replace('-', '')', [$pol.district.center_lat, $pol.district.center_lng, $pol.district.zoom_level - 2])&lt;/script&gt;
 
 $var title: $pol.firstname $pol.middlename $pol.lastname
 
 $var sidebar: None
 
-$var pretext:
-    &lt;div id=&quot;sidebarmap&quot; style=&quot;clear: right;&quot;&gt;
-      &lt;div id=&quot;googlemap&quot; class=&quot;sidemap&quot;&gt;&lt;/div&gt;
-      &lt;!--&lt;input type=&quot;text&quot; name=&quot;zip&quot; class=&quot;zipcode&quot; value=&quot;Enter your zip&quot; /&gt;--&gt;
-    &lt;/div&gt;
+$var pretext: &lt;div id=&quot;sidebarmap&quot; style=&quot;clear: right;&quot;&gt;&lt;div id=&quot;googlemap&quot; class=&quot;sidemap&quot;&gt;&lt;/div&gt;&lt;!--&lt;input type=&quot;text&quot; name=&quot;zip&quot; class=&quot;zipcode&quot; value=&quot;Enter your zip&quot; /&gt;--&gt;&lt;/div&gt;
     
 &lt;div class=&quot;rep-info&quot;&gt;
+&lt;table class=&quot;structure&quot;&gt;&lt;tr&gt;
+
 $if pol.photo_path:
-    &lt;a href=&quot;$pol.photo_path&quot;&gt;&lt;img src=&quot;$pol.photo_path&quot; alt=&quot;Headshot&quot; class=&quot;headshot&quot; /&gt;&lt;/a&gt;
+    &lt;td&gt;&lt;a href=&quot;$pol.photo_path&quot;&gt;&lt;img src=&quot;$pol.photo_path&quot; alt=&quot;Headshot&quot; class=&quot;headshot&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
 
-&lt;h2&gt;$pol.firstname $pol.middlename $pol.lastname&lt;/h2&gt;
+&lt;td&gt;
+&lt;h2 style=&quot;padding-top: 0; margin-top: 0&quot;&gt;$pol.firstname $pol.middlename $pol.lastname&lt;/h2&gt;
 
 &lt;p&gt;
   $if pol.nickname: known as &quot;$pol.nickname&quot;&lt;br /&gt;
@@ -35,13 +30,13 @@ $if pol.photo_path:
 
 $if pol.education:
     &lt;p&gt;Education: $pol.education&lt;/p&gt;
-
+&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
 &lt;/div&gt;
 &lt;table class=&quot;structure&quot;&gt;
 &lt;tr&gt;&lt;td width=&quot;50%&quot;&gt;
 &lt;h2 class=&quot;rep&quot;&gt;Money&lt;/h2&gt;
 
-&lt;table class=&quot;structure charted&quot;&gt;
+&lt;table class=&quot;structure charted&quot;&gt;&lt;tbody&gt;
 $if pol.money_raised:
     &lt;tr class=&quot;even&quot;&gt;
       &lt;th&gt;Raised&lt;/th&gt;
@@ -81,11 +76,11 @@ $if pol.money_raised:
     &lt;/tr&gt;
 $else:
     &lt;tr&gt;&lt;th&gt;No information available.&lt;/th&gt;&lt;/tr&gt;
-&lt;/table&gt;
+&lt;/tbody&gt;&lt;/table&gt;
 &lt;/td&gt;&lt;td class=&quot;width: 50%&quot;&gt;
 &lt;h2 class=&quot;rep&quot;&gt;Earmarks&lt;/h2&gt;
 
-&lt;table class=&quot;charted structure&quot;&gt;
+&lt;table class=&quot;charted structure&quot;&gt;&lt;tbody&gt;
   &lt;tr class=&quot;even&quot;&gt;
     &lt;th&gt;Requested&lt;/th&gt;
     &lt;td&gt;$commify(pol.n_earmark_requested)&lt;/td&gt;
@@ -116,11 +111,11 @@ $else:
            class=&quot;sparkline&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
   &lt;/tr&gt;
   &lt;tr&gt;&lt;th colspan=&quot;2&quot;&gt;Data for fiscal year 2008&lt;/th&gt;&lt;/tr&gt;
-&lt;/table&gt;
+&lt;/tbody&gt;&lt;/table&gt;
 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;50%&quot; class=&quot;rule&quot;&gt;
 &lt;h2 class=&quot;rep&quot;&gt;Bills&lt;/h2&gt;
 
-&lt;table class=&quot;charted structure&quot;&gt;
+&lt;table class=&quot;charted structure&quot;&gt;&lt;tbody&gt;
   &lt;tr class=&quot;even&quot;&gt;
     &lt;th&gt;Co-sponsored&lt;/th&gt;
     &lt;td&gt;$commify(pol.n_bills_cosponsored)&lt;/td&gt;
@@ -153,11 +148,11 @@ $else:
            src=&quot;/p/by/n_bills_enacted/distribution.png?point=$pol.n_bills_enacted&quot;
            class=&quot;sparkline&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
   &lt;/tr&gt;
-&lt;/table&gt;
+&lt;/tbody&gt;&lt;/table&gt;
 &lt;/td&gt;&lt;td width=&quot;50%&quot; class=&quot;rule&quot;&gt;
 &lt;h2 class=&quot;rep&quot;&gt;Speeches&lt;/h2&gt;
 
-&lt;table class=&quot;charted structure&quot;&gt;
+&lt;table class=&quot;charted structure&quot;&gt;&lt;tbody&gt;
   &lt;tr class=&quot;even&quot;&gt;
     &lt;th&gt;Spoke&lt;/th&gt;
     &lt;td&gt;&lt;a href=&quot;http://www.govtrack.us/congress/person.xpd?tab=speeches&amp;amp;id=$pol.govtrackid&quot;&gt;$commify(pol.n_speeches) times&lt;/a&gt;&lt;/td&gt;
@@ -173,11 +168,11 @@ $else:
            class=&quot;sparkline&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
   &lt;/tr&gt;
   &lt;tr&gt;&lt;th colspan=&quot;2&quot;&gt;Data for 110th Congress&lt;/th&gt;&lt;/tr&gt;
-&lt;/table&gt;
+&lt;/tbody&gt;&lt;/table&gt;
 &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
 &lt;h2 class=&quot;rep&quot;&gt;Voting Analysis&lt;/h2&gt;
 
-&lt;table class=&quot;charted structure&quot;&gt;
+&lt;table class=&quot;charted structure&quot;&gt;&lt;tbody&gt;
 $if pol.nominate:
     &lt;tr class=&quot;even&quot;&gt;
       &lt;th&gt;Ideology&lt;/th&gt;
@@ -201,12 +196,12 @@ $if pol.predictability:
              src=&quot;/p/by/predictability/distribution.png?point=$pol.predictability&quot;
              class=&quot;sparkline&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
     &lt;/tr&gt;
-&lt;/table&gt;
+&lt;/tbody&gt;&lt;/table&gt;
 
 &lt;h2 class=&quot;rep&quot;&gt;Interest Group Alignment&lt;/h2&gt;
 
 &lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot; class=&quot;interest_group_agreement&quot;&gt;
-&lt;tr&gt;&lt;th&gt;Group&lt;/th&gt;&lt;th&gt;Agreement&lt;/th&gt;&lt;/tr&gt;
+&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Group&lt;/th&gt;&lt;th&gt;Agreement&lt;/th&gt;&lt;/tr&gt;
 $ trclass = &quot;odd&quot;
 $for group in pol.related_groups:
     &lt;tr class=&quot;$trclass&quot;&gt;
@@ -217,7 +212,7 @@ $for group in pol.related_groups:
         $ trclass = &quot;even&quot;
     $else:
         $ trclass = &quot;odd&quot;
-&lt;/table&gt;
+&lt;/tbody&gt;&lt;/table&gt;
 
 &lt;p&gt;&lt;a href=&quot;/p/$pol.id/groups&quot;&gt;More...&lt;/a&gt;&lt;/p&gt;
 </diff>
      <filename>templates/politician.html</filename>
    </modified>
    <modified>
      <diff>@@ -3,7 +3,7 @@ publish Python objects as various API formats
 &quot;&quot;&quot;
 
 import datetime
-import simplejson
+import json
 import web
 
 API_PREFIX = &quot;http://watchdog.net/about/api#&quot;
@@ -29,7 +29,7 @@ def _getitems(obj, listify=True):
     out.sort(lambda x, y: cmp(x[0], y[0]))
     return out
 
-class SmartJSONEncoder(simplejson.JSONEncoder):
+class SmartJSONEncoder(json.JSONEncoder):
     DATE_FORMAT = &quot;%Y-%m-%d&quot;
     TIME_FORMAT = &quot;%H:%M:%S&quot;
     def _default(self, obj):
@@ -44,7 +44,7 @@ class SmartJSONEncoder(simplejson.JSONEncoder):
                 return super(SmartJSONEncoder, self).default(obj)
             except TypeError:
                 try:
-                    return simplejson.dumps(obj)
+                    return json.dumps(obj)
                 except:
                     return obj._uri_
     def default(self, obj):</diff>
      <filename>utils/apipublish.py</filename>
    </modified>
    <modified>
      <diff>@@ -56,7 +56,7 @@ _all_tables = []
 
 class metatracker(type):
     def __init__(self, name, bases, *a, **kw):
-        super(type, self).__init__(name, bases, *a, **kw)
+        type.__init__(self, name, bases, *a, **kw)
         if bases[0] != object:
             _all_tables.append(self)
             self.columns = self._analyze(init=True)</diff>
      <filename>vendor/smartersql.py</filename>
    </modified>
    <modified>
      <diff>@@ -1 +1 @@
-webpy.dev/web
\ No newline at end of file
+webpy/web
\ No newline at end of file</diff>
      <filename>vendor/web</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 &quot;Unit tests for code in webapp.py.&quot;
 import re, time, urllib, pprint, StringIO
-import simplejson
+import json
 import web
 from utils import rdftramp
 import webapp
@@ -36,7 +36,7 @@ def json(path):
     resp = webapp.app.request(path + '.json')
     ok(resp.status[:3], '200')
     ok(resp.headers['Content-Type'], 'application/json')
-    return simplejson.loads(resp.data)
+    return json.loads(resp.data)
 
 #@@ more places should use this
 def html(path):
@@ -97,7 +97,7 @@ def test_state():
     ok(resp.status[:3], '200')
     # Copied and pasted from current output; hope it's right.  See
     # below about perils of writing unit tests afterwards.
-    ok(simplejson.loads(resp.data),
+    ok(json.loads(resp.data),
        [{     'code': 'NM',
           'fipscode': '35',
               'name': 'New Mexico',</diff>
      <filename>webapp_test.py</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>vendor/webpy.dev/.bzr/README</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/branch-format</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/branch/branch-name</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/branch/branch.conf</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/branch/format</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/branch/last-revision</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/branch/tags</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/checkout/conflicts</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/checkout/dirstate</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/checkout/format</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/checkout/merge-hashes</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/format</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/inventory.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/inventory.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/07/117@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46experimental.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/07/117@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46experimental.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/0a/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/0a/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/0f/0@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3a.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/0f/0@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3a.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/10/24@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3aform.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/10/24@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3aform.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/15/test-20071224144004-24ism0ixynr7qv0v-1.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/15/test-20071224144004-24ism0ixynr7qv0v-1.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/1d/webopenid.py-20080423000651-9d5zyrzhe3it6xd1-1.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/1d/webopenid.py-20080423000651-9d5zyrzhe3it6xd1-1.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/1f/90@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46form.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/1f/90@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46form.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/22/template.py-20071014012650-plp9aeiax5xwil8y-3.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/22/template.py-20071014012650-plp9aeiax5xwil8y-3.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/28/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46wsgi.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/28/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46wsgi.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/2e/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46http.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/2e/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46http.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/34/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46db.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/34/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46db.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/35/db.py-20071224144004-24ism0ixynr7qv0v-4.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/35/db.py-20071224144004-24ism0ixynr7qv0v-4.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/37/188@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46application.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/37/188@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46application.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/40/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46cheetah.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/40/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46cheetah.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/44/129@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46setup.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/44/129@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46setup.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/4f/session.py-20080217145726-2jhyrb1v9a0mvii7-1.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/4f/session.py-20080217145726-2jhyrb1v9a0mvii7-1.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/52/117@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46experimental%252%46untwisted.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/52/117@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46experimental%252%46untwisted.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/65/1@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3aweb.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/65/1@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3aweb.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/6c/147@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46wsgiserver%252%46__init__.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/6c/147@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46wsgiserver%252%46__init__.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/6f/webtest.py-20071224144004-24ism0ixynr7qv0v-6.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/6f/webtest.py-20071224144004-24ism0ixynr7qv0v-6.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/70/readme.tests-20071224145504-e0s1zz82e30wt95k-1.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/70/readme.tests-20071224145504-e0s1zz82e30wt95k-1.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/77/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46request.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/77/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46request.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/7f/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/7f/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/94/56@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3a_makedoc.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/94/56@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3a_makedoc.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/9a/tools-20070920031415-h4n2kg3gjilcbcze-1.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/9a/tools-20070920031415-h4n2kg3gjilcbcze-1.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/9d/__init__.py-20071224144004-24ism0ixynr7qv0v-2.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/9d/__init__.py-20071224144004-24ism0ixynr7qv0v-2.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/9e/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46__init__.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/9e/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46__init__.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/9e/contrib-20071014012650-plp9aeiax5xwil8y-1.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/9e/contrib-20071014012650-plp9aeiax5xwil8y-1.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/9f/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46utils.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/9f/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46utils.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/a3/184@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46session.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/a3/184@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46session.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/a4/98@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46debugerror.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/a4/98@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46debugerror.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/b5/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46net.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/b5/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46net.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/bc/28@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atemplate.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/bc/28@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atemplate.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/bc/30@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3amarkdown.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/bc/30@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3amarkdown.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/c5/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46httpserver.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/c5/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46httpserver.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/c6/117@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46experimental%252%46pwt.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/c6/117@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46experimental%252%46pwt.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/cd/87@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46template.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/cd/87@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46template.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/d1/154@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46test.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/d1/154@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46test.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/d8/147@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46wsgiserver.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/d8/147@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46wsgiserver.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/d9/doctests.py-20071224144004-24ism0ixynr7qv0v-5.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/d9/doctests.py-20071224144004-24ism0ixynr7qv0v-5.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/da/alltests.py-20071224144004-24ism0ixynr7qv0v-3.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/da/alltests.py-20071224144004-24ism0ixynr7qv0v-3.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/e2/application.py-20080104061149-fu62x4nc9hbs6ukn-1.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/e2/application.py-20080104061149-fu62x4nc9hbs6ukn-1.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/e6/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46webapi.py.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/e6/75@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46webapi.py.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/f4/147@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46wsgiserver%252%46%4c%49%43%45%4e%53%45.txt.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/f4/147@2c515a54-6b0d-0410-94c8-a23cf037ada6%3a%3atrunk%252%46web%252%46wsgiserver%252%46%4c%49%43%45%4e%53%45.txt.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/f5/__init__.py-20071014012650-plp9aeiax5xwil8y-2.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/knits/f5/__init__.py-20071014012650-plp9aeiax5xwil8y-2.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/revisions.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/revisions.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/signatures.kndx</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/.bzr/repository/signatures.knit</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/README.tests</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/experimental/pwt.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/experimental/untwisted.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/setup.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/test.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/test/__init__.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/test/alltests.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/test/application.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/test/db.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/test/doctests.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/test/session.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/test/webtest.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/tools/_makedoc.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/tools/markdown.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/web/__init__.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/web/application.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/web/cheetah.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/web/contrib/__init__.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/web/contrib/template.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/web/db.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/web/debugerror.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/web/form.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/web/http.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/web/httpserver.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/web/net.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/web/request.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/web/session.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/web/template.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/web/utils.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/web/webapi.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/web/webopenid.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/web/wsgi.py</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/web/wsgiserver/LICENSE.txt</filename>
    </removed>
    <removed>
      <filename>vendor/webpy.dev/web/wsgiserver/__init__.py</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>12bfd8937c68c5ed5fb66a681ebbb9d1020f20ab</id>
    </parent>
  </parents>
  <author>
    <name>Aaron Swartz</name>
    <email>me@aaronsw.com</email>
  </author>
  <url>http://github.com/aaronsw/watchdog/commit/8c5161d6ec9164fd3a6747fd218913a7a5bf3aa2</url>
  <id>8c5161d6ec9164fd3a6747fd218913a7a5bf3aa2</id>
  <committed-date>2008-10-03T07:57:28-07:00</committed-date>
  <authored-date>2008-10-03T07:57:28-07:00</authored-date>
  <message>python2.6; webpy 0.3 fixes</message>
  <tree>f2cb1edb4e0d99b3cf642e98cdbdf75cd4ab21e2</tree>
  <committer>
    <name>Aaron Swartz</name>
    <email>me@aaronsw.com</email>
  </committer>
</commit>
